migrate-mmw
Migrate mark-my-words data files from the old flat .things/ layout to the per-plugin directory structure. Moves voice profiles and renames the blog working directory.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
This skill handles data file relocation only. Config migration (config.yml -> config.json + preferences.json) is handled by /things:setup-things. Run /things:setup-things first if config.json doesn't exist yet.
<load-config>
<action>Resolve the user's home directory.</action>
<command language="bash" output="home" tool="Bash">echo $HOME</command>
<constraint>Never pass `~` to the Read tool.</constraint>
<read path="<home>/.things/config.json" output="config" />
<if condition="config-missing">Tell the user: "Run `/things:setup-things` first to initialize your .things directory." Then stop.</if>
</load-config>
<action>Check for old data.</action>
<command language="bash" tool="Bash">ls -d <home>/.things/voices 2>/dev/null; ls -d <home>/.mark-my-words-workdir 2>/dev/null</command>
<if condition="no-old-data-found">Tell the user: "No old mark-my-words data found to migrate. Your data is already in the new location or hasn't been created yet." Then stop.</if>
<action>Inventory old data.</action>
<command language="bash" tool="Bash">echo "voices: $(ls <home>/.things/voices/*.md 2>/dev/null | wc -l | tr -d ' ') files"; echo "workdir: $([ -d <home>/.mark-my-words-workdir ] && echo 'yes' || echo 'no')"</command>
<output-format>
mark-my-words migration plan:
Data moves:
- `~/.things/voices/` (<n> files) -> `~/.things/mark-my-words/voices/`
Renames:
- `~/.mark-my-words-workdir` -> `~/.mark-my-words` (if present)
</output-format>
<if condition="dry-run-flag">Show the plan and stop. Do not move any files.</if>
<ask-user-question>
<question>Proceed with mark-my-words data migration?</question>
<option>Yes -- move files now</option>
<option>No -- cancel</option>
</ask-user-question>
<command language="bash" tool="Bash">mkdir -p <home>/.things/mark-my-words/voices</command>
<constraint>Use `mv` (not `cp`) to avoid duplicates. Skip items that don't exist.</constraint>
<command language="bash" tool="Bash">mv <home>/.things/voices/* <home>/.things/mark-my-words/voices/ 2>/dev/null || true</command>
<if condition="old-workdir-exists">
<command language="bash" tool="Bash">mv <home>/.mark-my-words-workdir <home>/.mark-my-words</command>
<if condition="preferences-exist">
<action>Read `<home>/.things/mark-my-words/preferences.json` and update `workdir` to `<home>/.mark-my-words` using Edit.</action>
</if>
</if>
<action>Scan for stray copies in common locations.</action>
<command language="bash" tool="Bash">ls -d <home>/Documents/.mark-my-words-workdir <home>/Documents/personal/.mark-my-words-workdir 2>/dev/null</command>
<if condition="stray-copies-found">
<output>
Warning: Found additional `.mark-my-words-workdir` copies:
- `<path>`
These may have uncommitted changes. Review and remove them manually if no longer needed.
</output>
</if>
<command language="bash" tool="Bash">rmdir <home>/.things/voices 2>/dev/null || true</command>
<constraint>Only `rmdir` (not `rm -rf`) -- this safely fails if the directory isn't empty.</constraint>
<command language="bash" tool="Bash">echo "voices: $(ls <home>/.things/mark-my-words/voices/*.md 2>/dev/null | wc -l | tr -d ' ') files"; echo "workdir: $([ -d <home>/.mark-my-words ] && echo '<home>/.mark-my-words' || echo 'not found')"</command>
<git-workflow>
<action>Read git workflow from `<home>/.things/config.json`.</action>
<if condition="workflow-auto">
<command language="bash" tool="Bash">git -C <home>/.things add -A && git -C <home>/.things commit -m "migrate: mark-my-words data to per-plugin directory" && git -C <home>/.things push</command>
</if>
<if condition="workflow-ask">
<ask-user-question>
<question>Commit migrated files to .things repo?</question>
<option>Yes -- commit and push</option>
<option>Commit only -- commit without pushing</option>
<option>No -- I'll handle git myself</option>
</ask-user-question>
</if>
<if condition="workflow-manual">Tell the user their files have been moved and they can commit when ready.</if>
</git-workflow>
<completion-message>
mark-my-words data migration complete!
- <n> voice profiles -> `~/.things/mark-my-words/voices/`
- Blog working directory: `~/.mark-my-words`
Your data is now in the per-plugin directory structure. Use `/new-post-mmw` to write a post.
</completion-message>
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!