git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/manage-files" ~/.claude/skills/majiayu000-claude-skill-registry-data-manage-files && rm -rf "$T"
data/manage-files/SKILL.mdManage Files Skill
Generic file operations for plan directories. Provides basic CRUD operations for any file within a plan directory.
What This Skill Provides
- Generic file read/write/remove operations
- Directory listing and creation
- File existence checking
- Plan directory create-or-reference (atomic check/create)
- No content validation (caller provides complete content)
When to Activate This Skill
Activate this skill when:
- Reading or writing arbitrary files in a plan directory
- Creating subdirectories within a plan
- Listing plan contents
- Checking if files exist
Note: For typed plan documents (
request.md, solution_outline.md), use pm-workflow:manage-plan-documents instead. For domain-specific files (config.toon, references.toon, status.toon), use the dedicated manage-* skills.
Storage Location
Files are stored in plan directories:
.plan/plans/{plan_id}/ request.md solution_outline.md config.toon references.toon status.toon tasks/
Operations
Script:
pm-workflow:manage-files:manage-files
read
Read file content from a plan directory.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files read \ --plan-id {plan_id} \ --file notes.md
Output: Raw file content (no wrapping)
write
Write content to a file in a plan directory.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files write \ --plan-id {plan_id} \ --file request.md \ --content "# Request Title Task description with multiline content. ## Section More content here..."
Parameters:
(required): Plan identifier--plan-id
(required): Relative file path within plan directory--file
: Content to write (mutually exclusive with--content
)--stdin
: Read content from stdin instead of--stdin--content
Note: The
--content parameter supports multiline content. Do NOT use --stdin with shell heredocs or cat commands.
Output: Prints "Created: {path}" to stderr, exit code 0 on success
remove
Remove a file from a plan directory.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files remove \ --plan-id {plan_id} \ --file old-file.md
Output: Confirmation message to stderr, exit code 0 on success
list
List files in a plan directory.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files list \ --plan-id {plan_id} \ [--dir subdir]
Output: Simple file listing, one per line
exists
Check if a file exists.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files exists \ --plan-id {plan_id} \ --file config.toon
Output: Exit code 0 if exists, 1 if not
mkdir
Create a subdirectory in a plan directory.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files mkdir \ --plan-id {plan_id} \ --dir requirements
Output: Confirmation message to stderr, exit code 0 on success
create-or-reference
Create a plan directory if it doesn't exist, or reference an existing one. This is an atomic operation that replaces the two-step pattern of listing plans and checking for conflicts.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files create-or-reference \ --plan-id {plan_id}
Output (TOON format):
When plan is newly created:
status: success plan_id: my-feature action: created path: /path/to/.plan/plans/my-feature
When plan already exists:
status: success plan_id: my-feature action: exists path: /path/to/.plan/plans/my-feature current_phase: refine domain: java
Use case: Called by plan-init to atomically check/create plan directories.
delete-plan
Delete an entire plan directory. Used when user selects "Replace" for an existing plan during plan-init.
python3 .plan/execute-script.py pm-workflow:manage-files:manage-files delete-plan \ --plan-id {plan_id}
Output (TOON format):
On success:
status: success plan_id: my-feature action: deleted path: /path/to/.plan/plans/my-feature files_removed: 5
On error (plan not found):
status: error plan_id: my-feature error: plan_not_found message: Plan directory does not exist: /path/to/.plan/plans/my-feature
Use case: Called by plan-init when user selects "Replace" to delete existing plan before creating new one. See
pm-workflow:phase-1-init/standards/plan-overwrite.md for the full workflow.
Scripts
| Script | Purpose | Usage |
|---|---|---|
| All file operations via subcommands | |
Key Design Principles
- plan_id only - Never pass full paths, script resolves base via
base_path() - Relative file paths -
accepts relative paths within plan dir (e.g.,--file
)requirements/REQ-001.toon - Generic file operations - Not domain-specific (no parse-plan, write-config)
- Plain output -
returns raw content; mutations return minimal statusread - No validation - Caller provides complete content; no content validation
Validation Rules
| Check | Validation |
|---|---|
| plan_id format | kebab-case, no special chars |
| file path | No , no absolute paths |
| directory | Must exist (unless mkdir) |
| content | Non-empty for write |
Error Handling
status: error plan_id: my-feature file: nonexistent.md error: file_not_found message: File does not exist suggestions[2]: - Check file name spelling - Use list subcommand to see available files
Integration Points
With Domain Skills
Domain-specific skills (manage-config, manage-references, manage-lifecycle) may use this skill for basic file operations, or import shared libraries directly.
With Orchestration Skills
Plan orchestration skills (plan-init, solution-outline, task-plan, plan-execute) use this skill for generic file I/O.
Relationship to Domain Skills
| Skill | Manages | Use manage-files for |
|---|---|---|
| manage-config | config.toon | N/A (use manage-config) |
| manage-references | references.toon | N/A (use manage-references) |
| manage-lifecycle | status.toon | N/A (use manage-lifecycle) |
| manage-plan-documents | request.md | N/A (use manage-plan-documents) |
| manage-solution-outline | solution_outline.md | N/A (use manage-solution-outline) |
| manage-tasks | tasks/*.toon | N/A (use manage-tasks) |
| manage-files | any other file | Generic read/write/list |