Get the FREE Ultimate OpenClaw Setup Guide →

migrate-idat

Scanned
npx machina-cli add skill brennacodes/brenna-plugs/migrate-idat --openclaw
Files (1)
SKILL.md
6.5 KB
<purpose> Migrate i-did-a-thing data files from the old flat `~/.things/` layout to the per-plugin `~/.things/i-did-a-thing/` directory structure. This moves logs, arsenal files, resumes, and index files.

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. </purpose>

<steps> <step id="check-prerequisites" number="1"> <description>Check Prerequisites</description>
<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>

  <action>Check for old data in flat locations.</action>
  <command language="bash" tool="Bash">ls -d <home>/.things/logs <home>/.things/arsenal <home>/.things/resumes 2>/dev/null

ls <home>/.things/index.json <home>/.things/tags.json 2>/dev/null</command>

  <if condition="no-old-data-found">
    Tell the user: "No old i-did-a-thing data found to migrate. Your data is already in the new location or hasn't been created yet." Then stop.
    <exit />
  </if>
</load-config>
</step> <step id="show-plan" number="2"> <description>Show Migration Plan</description>
<action>Count files in each old location and present the plan.</action>
<command language="bash" tool="Bash">echo "logs: $(ls <home>/.things/logs/*.md 2>/dev/null | wc -l | tr -d ' ') files"

echo "arsenal: $(ls <home>/.things/arsenal/.md 2>/dev/null | wc -l | tr -d ' ') files" echo "resumes: $(ls <home>/.things/resumes/.md 2>/dev/null | wc -l | tr -d ' ') files" echo "index.json: $([ -f <home>/.things/index.json ] && echo 'yes' || echo 'no')" echo "tags.json: $([ -f <home>/.things/tags.json ] && echo 'yes' || echo 'no')"</command>

<output>
i-did-a-thing migration plan:

- `~/.things/logs/` (<n> files) -> `~/.things/i-did-a-thing/logs/`
- `~/.things/arsenal/` (<n> files) -> `~/.things/i-did-a-thing/arsenal/`
- `~/.things/resumes/` (<n> files) -> `~/.things/i-did-a-thing/resumes/`
- `~/.things/index.json` -> `~/.things/i-did-a-thing/index.json`
- `~/.things/tags.json` -> `~/.things/i-did-a-thing/tags.json`
</output>

<if condition="dry-run-flag">Show the plan and stop. Do not move any files.<exit /></if>

<ask-user-question>
  <question>Proceed with i-did-a-thing data migration?</question>
  <option>Yes -- move files now</option>
  <option>No -- cancel</option>
</ask-user-question>
</step> <step id="create-directories" number="3"> <description>Create Target Directories</description>
<command language="bash" tool="Bash">mkdir -p <home>/.things/i-did-a-thing/logs

mkdir -p <home>/.things/i-did-a-thing/arsenal mkdir -p <home>/.things/i-did-a-thing/resumes</command> </step>

<step id="move-data" number="4"> <description>Move Data Files</description>
<constraint>Use `mv` (not `cp`) to avoid duplicates. Skip items that don't exist.</constraint>

<command language="bash" tool="Bash">mv <home>/.things/logs/* <home>/.things/i-did-a-thing/logs/ 2>/dev/null || true

mv <home>/.things/arsenal/* <home>/.things/i-did-a-thing/arsenal/ 2>/dev/null || true mv <home>/.things/resumes/* <home>/.things/i-did-a-thing/resumes/ 2>/dev/null || true mv <home>/.things/index.json <home>/.things/i-did-a-thing/index.json 2>/dev/null || true mv <home>/.things/tags.json <home>/.things/i-did-a-thing/tags.json 2>/dev/null || true</command> </step>

<step id="cleanup" number="5"> <description>Clean Up Empty Old Directories</description>
<command language="bash" tool="Bash">rmdir <home>/.things/logs 2>/dev/null || true

rmdir <home>/.things/arsenal 2>/dev/null || true rmdir <home>/.things/resumes 2>/dev/null || true</command>

<constraint>Only `rmdir` (not `rm -rf`) -- this safely fails if directories aren't empty.</constraint>
</step> <step id="verify" number="6"> <description>Verify Migration</description>
<action>Count files in new locations.</action>
<command language="bash" tool="Bash">echo "logs: $(ls <home>/.things/i-did-a-thing/logs/*.md 2>/dev/null | wc -l | tr -d ' ') files"

echo "arsenal: $(ls <home>/.things/i-did-a-thing/arsenal/.md 2>/dev/null | wc -l | tr -d ' ') files" echo "resumes: $(ls <home>/.things/i-did-a-thing/resumes/.md 2>/dev/null | wc -l | tr -d ' ') files" echo "index.json: $([ -f <home>/.things/i-did-a-thing/index.json ] && echo 'yes' || echo 'no')" echo "tags.json: $([ -f <home>/.things/i-did-a-thing/tags.json ] && echo 'yes' || echo 'no')"</command> </step>

<step id="git-workflow" number="7"> <description>Handle Git</description>
<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: i-did-a-thing 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>
</step> <step id="confirm" number="8"> <description>Confirm</description>
<completion-message>
i-did-a-thing data migration complete!

- <n> log files -> `~/.things/i-did-a-thing/logs/`
- <n> arsenal files -> `~/.things/i-did-a-thing/arsenal/`
- <n> resume files -> `~/.things/i-did-a-thing/resumes/`
- index.json and tags.json moved

Your data is now in the per-plugin directory structure. Use `/thing-i-did` to log new experiences.
</completion-message>
</step> </steps>

Source

git clone https://github.com/brennacodes/brenna-plugs/blob/main/plugins/i-did-a-thing/skills/migrate-idat/SKILL.mdView on GitHub

Overview

This skill relocates i-did-a-thing data from the old flat ~/.things layout to the per-plugin structure at ~/.things/i-did-a-thing/. It moves logs, arsenal files, resumes, and the index.json and tags.json files. Data relocation is the scope; config migration is handled by /things:setup-things.

How This Skill Works

The tool first validates prerequisites by checking for an existing config.json and prompts to run /things:setup-things if missing. It then creates the destination directories, counts files in the old locations to present a plan, and uses mv to relocate items, skipping non-existent files and avoiding duplicates.

When to Use It

  • Migrating i-did-a-thing data from the old ~/.things layout to the new per-plugin directory structure.
  • Setting up a fresh plugin directory structure for i-did-a-thing during a upgrade or reinstall.
  • Previewing the migration impact with a dry-run before moving any files.
  • Handling partial data when some old data exists but not everything (logs, arsenal, resumes, index.json, or tags.json).
  • Verifying post-migration that index.json and tags.json have been relocated to the new path.

Quick Start

  1. Step 1: Check prerequisites and confirm old data is present at ~/.things (logs, arsenal, resumes, index.json, tags.json).
  2. Step 2: Create target directories for i-did-a-thing under ~/.things/i-did-a-thing/logs, ~/.things/i-did-a-thing/arsenal, and ~/.things/i-did-a-thing/resumes.
  3. Step 3: Move data with mv commands (or run the skill to perform the move); consider a dry-run first to preview results.

Best Practices

  • Run a dry-run first to preview file counts and plan results.
  • Ensure /things:setup-things has been run if config.json is missing.
  • Back up the ~/.things directory before performing relocation.
  • Use mv (not cp) to avoid duplicates and only move existing items.
  • After migration, verify that the new ~/.things/i-did-a-thing/ structure contains logs, arsenal, resumes, index.json, and tags.json.

Example Use Cases

  • A developer updates Brenna-Plugs and wants to move legacy i-did-a-thing data into a plugin-scoped folder.
  • An admin migrates a user’s data from a flat home directory to the per-plugin directory during onboarding.
  • A workstation migration where multiple users’ i-did-a-thing data are relocated to new plugin directories.
  • Automating deployment scripts to relocate i-did-a-thing data as part of a plugin upgrade.
  • Audit run to confirm that index.json and tags.json have been moved to the new path.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers