Initial commit
This commit is contained in:
484
skills/move-content/SKILL.md
Normal file
484
skills/move-content/SKILL.md
Normal file
@@ -0,0 +1,484 @@
|
||||
---
|
||||
name: move-content
|
||||
description: Move or rename files in knowledge base with directory governance. Use when user wants to move, relocate, or rename content. Reads RULE.md of both source and target directories.
|
||||
---
|
||||
|
||||
# Move Content Skill
|
||||
|
||||
Generic file move/rename Skill that respects both source and target RULE.md requirements.
|
||||
|
||||
## When to use this Skill
|
||||
|
||||
- User says "move", "relocate", "transfer", "rename"
|
||||
- User requests reorganization
|
||||
- User wants to reclassify content to different directory
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. Identify Source File
|
||||
|
||||
**If user provides file path**:
|
||||
- Verify file exists
|
||||
- Confirm file identity
|
||||
|
||||
**If user provides topic/title only**:
|
||||
- Search for file using Grep or Glob
|
||||
- Pattern: `**/*keyword*.md`
|
||||
- If multiple matches: present list, ask user to choose
|
||||
- If no matches: report not found
|
||||
|
||||
**Search strategies**:
|
||||
1. Filename match: `find . -name "*keyword*"`
|
||||
2. Content match: `grep -r "keyword" .`
|
||||
3. README.md index: Search README.md files for references
|
||||
|
||||
### 2. Determine Target Location
|
||||
|
||||
**If user specifies target**:
|
||||
- Parse target path
|
||||
- Verify target directory exists (or offer to create)
|
||||
- Confirm target path with user
|
||||
|
||||
**If user doesn't specify target**:
|
||||
- Analyze content (read source file)
|
||||
- Scan available directories
|
||||
- Read RULE.md files to understand purposes
|
||||
- Recommend target directory based on content
|
||||
- Ask user for confirmation or alternative
|
||||
|
||||
**Recommendation logic** (similar to add-content):
|
||||
1. Analyze file content
|
||||
2. Read RULE.md of potential target directories
|
||||
3. Match content to directory purposes
|
||||
4. Rank by suitability
|
||||
5. Present top recommendation
|
||||
|
||||
### 3. Read Both RULE.md Files
|
||||
|
||||
**Read source directory RULE.md**:
|
||||
1. Check if moving out is allowed
|
||||
2. Check if any special handling required (e.g., "notify when file moved")
|
||||
3. Understand current file format
|
||||
|
||||
**Read target directory RULE.md**:
|
||||
1. Check if moving in is allowed
|
||||
2. Check file format requirements
|
||||
3. Check naming conventions
|
||||
4. Check if transformation needed
|
||||
5. Understand target directory structure
|
||||
|
||||
**Compare requirements**:
|
||||
- Source format vs target format
|
||||
- Source naming vs target naming
|
||||
- Compatibility check
|
||||
|
||||
### 4. Check Compatibility
|
||||
|
||||
**Format compatibility**:
|
||||
- Both use markdown → Compatible
|
||||
- Source has frontmatter, target doesn't require → Compatible (but may want to remove)
|
||||
- Source plain, target requires frontmatter → Needs transformation
|
||||
- Different metadata requirements → Needs update
|
||||
|
||||
**Naming compatibility**:
|
||||
- Source: `topic-name.md`
|
||||
- Target requires: `YYYY-MM-DD-topic-name.md`
|
||||
- → Needs rename during move
|
||||
|
||||
**Structure compatibility**:
|
||||
- Source is single file
|
||||
- Target requires directory structure (file + metadata)
|
||||
- → Needs structure creation
|
||||
|
||||
**Identify required transformations**:
|
||||
1. Rename (filename format change)
|
||||
2. Format conversion (add/remove frontmatter)
|
||||
3. Structure change (file → directory with multiple files)
|
||||
4. Content adaptation (modify to fit target requirements)
|
||||
|
||||
### 5. User Confirmation
|
||||
|
||||
**Present move summary**:
|
||||
```
|
||||
📦 Move confirmation
|
||||
|
||||
Source: [source path]
|
||||
Target: [target path]
|
||||
|
||||
Compatibility check:
|
||||
✅ Format: Compatible (or ⚠️ Needs transformation)
|
||||
✅ Naming: Compatible (or ⚠️ Will rename to: [new name])
|
||||
✅ Structure: Compatible (or ⚠️ Will restructure)
|
||||
|
||||
RULE.md policies:
|
||||
- Source: [policy summary]
|
||||
- Target: [policy summary]
|
||||
|
||||
Transformations needed:
|
||||
- [List of changes required]
|
||||
|
||||
Cross-references:
|
||||
- [X] files reference this content
|
||||
|
||||
Proceed with move?
|
||||
- Yes (execute move with transformations)
|
||||
- No (cancel)
|
||||
- Show me what will change
|
||||
```
|
||||
|
||||
**If transformations needed**:
|
||||
- Explain each transformation clearly
|
||||
- Show before/after examples
|
||||
- Get explicit confirmation
|
||||
|
||||
### 6. Execute Move
|
||||
|
||||
**Basic move** (no transformation needed):
|
||||
```bash
|
||||
mv [source path] [target path]
|
||||
```
|
||||
|
||||
**Move with rename**:
|
||||
```bash
|
||||
mv [source path] [target directory]/[new filename]
|
||||
```
|
||||
|
||||
**Move with transformation**:
|
||||
1. Read source file
|
||||
2. Apply transformations:
|
||||
- Add/remove/modify frontmatter
|
||||
- Adjust content format
|
||||
- Update internal references
|
||||
3. Write to target location with new format
|
||||
4. Verify target file created successfully
|
||||
5. Delete source file (only after target verified)
|
||||
|
||||
**Move with restructure**:
|
||||
1. Create target directory structure
|
||||
2. Split/reorganize content per target RULE.md
|
||||
3. Create all required files in target
|
||||
4. Verify all files created successfully
|
||||
5. Delete source file/directory
|
||||
|
||||
**Preserve metadata** (when possible):
|
||||
- Modification timestamps
|
||||
- Creation date (in frontmatter if present)
|
||||
- Author information
|
||||
- Tags and categories
|
||||
|
||||
### 7. Update Cross-References
|
||||
|
||||
**Find references to moved file**:
|
||||
```bash
|
||||
grep -r "[old path]" .
|
||||
grep -r "[old filename]" .
|
||||
```
|
||||
|
||||
**Update strategies**:
|
||||
- **Relative paths**: Update to new relative path
|
||||
- **Absolute paths**: Update to new absolute path
|
||||
- **Title references**: No change needed if file title unchanged
|
||||
|
||||
**Offer to update**:
|
||||
```
|
||||
Found references in:
|
||||
- [file1.md] (line 45)
|
||||
- [file2.md] (line 12, 89)
|
||||
|
||||
Would you like me to update these references?
|
||||
- Yes, update all
|
||||
- Yes, but let me review each
|
||||
- No, I'll update manually
|
||||
```
|
||||
|
||||
**Execute reference updates**:
|
||||
- Use Edit tool to update each file
|
||||
- Change old path to new path
|
||||
- Verify updates successful
|
||||
- Report which files were updated
|
||||
|
||||
### 8. Governance Update
|
||||
|
||||
**Update source directory README.md**:
|
||||
1. Read source README.md
|
||||
2. Remove entry for moved file
|
||||
3. Add to "Recent Changes": "Moved filename.md to [target]"
|
||||
4. Update "Last updated" timestamp
|
||||
5. Save source README.md
|
||||
|
||||
**Update target directory README.md**:
|
||||
1. Read target README.md
|
||||
2. Add entry for moved file (with description)
|
||||
3. Add to "Recent Changes": "Added filename.md from [source]"
|
||||
4. Update "Last updated" timestamp
|
||||
5. Save target README.md
|
||||
|
||||
**Update parent README.md files if needed**:
|
||||
- If directories changed significance
|
||||
- If directory now empty/no longer empty
|
||||
|
||||
**Verify updates**:
|
||||
- Both README.md files valid markdown
|
||||
- Entry removed from source, added to target
|
||||
- Timestamps current
|
||||
|
||||
### 9. Report to User
|
||||
|
||||
**Confirm move complete**:
|
||||
```
|
||||
✅ File moved successfully
|
||||
|
||||
From: [old path]
|
||||
To: [new path]
|
||||
|
||||
Transformations applied:
|
||||
- [List of changes]
|
||||
|
||||
Cross-references updated:
|
||||
- [X] files updated
|
||||
- [List of files]
|
||||
|
||||
README.md updated:
|
||||
- [source directory]/README.md (removed entry)
|
||||
- [target directory]/README.md (added entry)
|
||||
|
||||
Note: [Any important notes, e.g., "Format changed to match target requirements"]
|
||||
```
|
||||
|
||||
## Special Cases
|
||||
|
||||
### Rename in Same Directory
|
||||
|
||||
If user only wants to rename (not move):
|
||||
```
|
||||
User: "Rename transformer-draft to transformer-architecture"
|
||||
```
|
||||
|
||||
**Process**:
|
||||
1. Identify source file
|
||||
2. Check RULE.md for naming conventions
|
||||
3. Verify new name follows conventions
|
||||
4. Execute rename: `mv old-name.md new-name.md`
|
||||
5. Update references to this file
|
||||
6. Update README.md (change entry name)
|
||||
7. Report rename complete
|
||||
|
||||
### Move Entire Directory
|
||||
|
||||
If user wants to move entire directory:
|
||||
```
|
||||
User: "Move the AI research folder to Projects"
|
||||
```
|
||||
|
||||
**Process**:
|
||||
1. Identify source directory
|
||||
2. Read source and target RULE.md
|
||||
3. Check all files in directory for compatibility
|
||||
4. Identify all external references
|
||||
5. Present comprehensive summary
|
||||
6. Request confirmation
|
||||
7. Execute directory move: `mv [source dir] [target dir]/`
|
||||
8. Update all cross-references
|
||||
9. Update README.md in both locations
|
||||
10. Update parent README.md files
|
||||
|
||||
### Incompatible Format Requires Manual Intervention
|
||||
|
||||
If automatic transformation not possible:
|
||||
```
|
||||
Source: Complex structured data
|
||||
Target: Requires specific format that can't be auto-converted
|
||||
```
|
||||
|
||||
**Process**:
|
||||
1. Detect incompatibility
|
||||
2. Warn user: "Automatic conversion not possible"
|
||||
3. Explain what manual changes needed
|
||||
4. Offer: "I can move the file, but you'll need to manually reformat"
|
||||
5. Or: "I can create target structure and copy content, but you'll need to reorganize"
|
||||
6. User decides next steps
|
||||
|
||||
### Move with Merging
|
||||
|
||||
If target already has file with same name:
|
||||
```
|
||||
User: "Move note.md to Research/"
|
||||
Research/note.md already exists
|
||||
```
|
||||
|
||||
**Process**:
|
||||
1. Detect name conflict
|
||||
2. Read both files
|
||||
3. Options:
|
||||
- Rename: "note-2.md" or "note-YYYYMMDD.md"
|
||||
- Merge: Combine contents (if compatible)
|
||||
- Replace: Overwrite existing (with backup)
|
||||
4. Present options to user
|
||||
5. Execute chosen strategy
|
||||
|
||||
### Preserve Directory Structure
|
||||
|
||||
If moving subdirectory that has its own structure:
|
||||
```
|
||||
Moving: Research/AI/transformers/
|
||||
Target: Projects/AIResearch/
|
||||
```
|
||||
|
||||
**Process**:
|
||||
1. Check if should preserve subdirectory structure
|
||||
2. Option A: `Projects/AIResearch/transformers/` (preserve)
|
||||
3. Option B: `Projects/AIResearch/` (flatten)
|
||||
4. Ask user preference
|
||||
5. Execute accordingly
|
||||
6. Update all README.md in hierarchy
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Source File Not Found
|
||||
```
|
||||
User: "Move transformer note to Projects"
|
||||
→ Search for file
|
||||
→ No matches
|
||||
→ Report: "I couldn't find transformer note to move"
|
||||
```
|
||||
|
||||
### Target Directory Doesn't Exist
|
||||
```
|
||||
User: "Move file.md to NewCategory/"
|
||||
NewCategory/ doesn't exist
|
||||
→ Ask: "NewCategory doesn't exist. Create it?"
|
||||
→ If yes: create directory, create RULE.md/README.md, then move
|
||||
→ If no: cancel
|
||||
```
|
||||
|
||||
### RULE.md Forbids Moving Out
|
||||
```
|
||||
Source RULE.md: "Files cannot be moved out of this directory"
|
||||
→ Warn: "Source RULE.md forbids moving files out"
|
||||
→ Ask: "Override this rule?"
|
||||
→ If yes: proceed with warning note
|
||||
→ If no: cancel
|
||||
```
|
||||
|
||||
### RULE.md Forbids Moving In
|
||||
```
|
||||
Target RULE.md: "Only specific file types allowed"
|
||||
Source file doesn't match
|
||||
→ Warn: "Target RULE.md restrictions prevent this move"
|
||||
→ Explain restrictions
|
||||
→ Suggest: "Convert file format first or choose different target"
|
||||
```
|
||||
|
||||
### Transformation Fails
|
||||
```
|
||||
Attempting to add required frontmatter
|
||||
Transformation fails (invalid YAML, etc.)
|
||||
→ Report error
|
||||
→ Keep source file intact
|
||||
→ Don't create partial target
|
||||
→ Suggest manual review
|
||||
```
|
||||
|
||||
### Cross-Reference Update Fails
|
||||
```
|
||||
Move successful but can't update all references
|
||||
Some files locked, permission denied, etc.
|
||||
→ Report: "Move complete, but couldn't update all references"
|
||||
→ List files that need manual update
|
||||
→ Provide old and new paths for manual fixing
|
||||
```
|
||||
|
||||
## Integration with Governance
|
||||
|
||||
This Skill automatically invokes the governance protocol:
|
||||
|
||||
**Before move**:
|
||||
- Read both source and target RULE.md
|
||||
- Validate move is allowed
|
||||
- Check compatibility
|
||||
|
||||
**During move**:
|
||||
- Apply required transformations
|
||||
- Preserve important metadata
|
||||
- Execute safely (verify target before deleting source)
|
||||
|
||||
**After move**:
|
||||
- Update both source and target README.md
|
||||
- Update cross-references
|
||||
- Verify complete
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: Simple Move
|
||||
|
||||
**User**: "Move transformer-draft from Research/AI to Projects/"
|
||||
|
||||
**Skill workflow**:
|
||||
1. Finds `Research/AI/transformer-draft.md`
|
||||
2. Reads Research/AI/RULE.md → Moves allowed
|
||||
3. Reads Projects/RULE.md → Files named `project-name.md`, requires frontmatter
|
||||
4. Detects: needs frontmatter addition
|
||||
5. Confirms: "Move to Projects/, will add required frontmatter"
|
||||
6. User confirms
|
||||
7. Reads source file
|
||||
8. Adds frontmatter with title, date, status
|
||||
9. Writes to `Projects/transformer-draft.md`
|
||||
10. Updates cross-references (found 2)
|
||||
11. Updates both README.md files
|
||||
12. Reports: "✅ Moved with frontmatter added"
|
||||
|
||||
### Example 2: Move with Rename
|
||||
|
||||
**User**: "Move the old transformer note to ReadLater"
|
||||
|
||||
**Skill workflow**:
|
||||
1. Finds `Research/transformer-old.md`
|
||||
2. Reads Research/RULE.md and ReadLater/RULE.md
|
||||
3. ReadLater requires: `Articles/YYYY/MM/YYYY-MM-DD_title/article.md`
|
||||
4. Detects: needs complete restructure
|
||||
5. Warns: "Target requires directory structure, not single file"
|
||||
6. Shows transformation: `transformer-old.md` → `Articles/2025/10/2025-10-28_transformer-old/article.md`
|
||||
7. User confirms
|
||||
8. Creates directory structure
|
||||
9. Moves and renames file
|
||||
10. Creates metadata.yaml (as ReadLater requires)
|
||||
11. Updates README.md files
|
||||
12. Reports: "✅ Moved and restructured per ReadLater requirements"
|
||||
|
||||
### Example 3: Directory Move
|
||||
|
||||
**User**: "Move the old-research folder to Archive"
|
||||
|
||||
**Skill workflow**:
|
||||
1. Finds `Research/old-research/` (15 files)
|
||||
2. Reads Research/RULE.md and Archive/RULE.md
|
||||
3. Checks all 15 files for external references → Found 3 references
|
||||
4. Confirms: "Move old-research/ (15 files) to Archive/? 3 external references found"
|
||||
5. User confirms
|
||||
6. Executes: `mv Research/old-research/ Archive/`
|
||||
7. Updates 3 files with broken references
|
||||
8. Updates README.md:
|
||||
- Research/README.md (removes subdirectory)
|
||||
- Archive/README.md (adds subdirectory)
|
||||
9. Reports: "✅ Moved 15 files, updated 3 references"
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Check both RULE.md files** - Source and target may have different rules
|
||||
2. **Verify compatibility** - Ensure file can fit in target format
|
||||
3. **Transform carefully** - Preserve content integrity during format changes
|
||||
4. **Update cross-references** - Prevent broken links
|
||||
5. **Update both README.md** - Source (remove) and target (add)
|
||||
6. **Verify before deleting source** - Ensure target created successfully
|
||||
7. **Report transformations clearly** - User should know what changed
|
||||
8. **Handle errors gracefully** - Don't leave partial state
|
||||
|
||||
## Notes
|
||||
|
||||
- This Skill works with any directory structure by reading RULE.md
|
||||
- Respects both source and target governance rules
|
||||
- Handles format transformations automatically when possible
|
||||
- Updates cross-references to prevent broken knowledge base
|
||||
- Maintains README.md indexes in both locations
|
||||
- Works in parallel with CLAUDE.md subagents
|
||||
- Can rename, move, and restructure all in one operation
|
||||
Reference in New Issue
Block a user