Skip to content
AI & Agents
Skill

/Migrate

Intakes external content (notes, CLAUDE.md, Cursor rules, Obsidian/Notion/Apple Notes exports), classifies chunks against the LifeOS taxonomy, and commits with provenance after confidence-tiered approval. USE WHEN /migrate, migrate content, import from other LifeOS, bring in old

From plugin
lifeos
20k97 skills13 agents34 commands

Claude Code

$ npx -y skills add danielmiessler/lifeos --skill Migrate --agent claude-code

SKILL.md

Migrate.SKILL.md
name: Migrate
evals:
  manual:
    reason: "content classification and destination selection require review against the source material and the receiving taxonomy"
    falsifier: "the reviewer finds a migrated item is misclassified, loses required provenance, or enters an unauthorized destination"
metadata:
  short-description: "Import notes, exports, or AI instructions into LifeOS taxonomy with provenance and reviewed routing. Excludes single edits and conversational interviews."
version: 1.0.16
description: Intakes external content (notes, CLAUDE.md, Cursor rules, Obsidian/Notion/Apple Notes exports), classifies chunks against the LifeOS taxonomy, and commits with provenance after confidence-tiered approval. USE WHEN /migrate, migrate content, import from other LifeOS, bring in old notes, import Cursor rules, import CLAUDE.md, bulk import, Obsidian/Notion/Apple Notes import. NOT FOR single-file edits, conversational interviews, identity edits.

Migrate — external-content intake and classification

**Contents:** Ideal State · Anti-criteria · Inputs · Tool contract · Output format · Gotchas · Examples · References · Data & Config

Migrate intakes external content, classifies each chunk against the LifeOS taxonomy, and commits it to the right destination with provenance. New LifeOS users usually arrive with years of notes (a CLAUDE.md, a markdown vault, journal dumps, rules from another tool) that map onto no LifeOS structure, and sorting hundreds of chunks by hand never gets done. Migrate proposes a destination for every chunk with a confidence score: high-confidence chunks auto-approve, medium ones ask for confirmation, low ones get a walk-through. Unlike `/interview`, which asks questions to fill gaps, `/migrate` already has the content and only classifies and routes it.

Ideal State

  • Every committed chunk lands in a LifeOS destination that fits it and carries provenance: an HTML comment naming source file, section and timestamp.
  • The principal sees the whole routing proposal (chunks per target, average confidence, UNCLEAR and under-40% counts) before anything is written, and picks how to approve it.
  • Each chunk under 60% confidence is approved one at a time, each UNCLEAR chunk is routed by the principal's own call, and each chunk under 40% is walked through with them first (a conversational rule; the tool does not enforce the 40% line).
  • Every AI collaboration rule reaches a constitutional surface (a CLAUDE.md operational rule, a hook, a `settings.json` permission, or the relevant skill's Gotchas), and every knowledge chunk becomes a new typed note with source metadata.
  • The run closes with what was committed per target, what is still UNCLEAR, and whether `/interview` should fill what the migration left sparse.

Anti-criteria

Each of these is refused in code by `LIFEOS/TOOLS/MigrateApprove.ts`; the parenthesis names the mechanism. `MigrateApprove.test.ts` covers the threshold, UNCLEAR, protected-target and duplicate refusals.

  • A chunk lands in PRINCIPAL_IDENTITY.md or under IDEAL_STATE/ without the principal's yes on that exact chunk. Identity is load-bearing, and IDEAL_STATE is fully private and curated, so each dimension is the principal's call. (Refused unless the single-item command carries `--confirm-protected <id>`; every bulk command rejects that flag.)
  • A chunk under 60% confidence, or an UNCLEAR chunk, is committed by a bulk command. (`--approve-all` takes only chunks at or above `BULK_MIN_CONFIDENCE` and leaves the rest pending; UNCLEAR is refused until `--modify` retargets it.)
  • A rule chunk is written to the harness `memory/feedback_*.md` directory. Every feedback memo is a missed system patch (`LIFEOS/RULES/SelfHealing.md` § Self-Healing Infrastructure, the "Override of harness auto-memory" paragraph), so rule chunks are walked through one by one to a constitutional surface. (A `memory/feedback` target is refused until `--modify` retargets it.)
  • A chunk is committed to a target that already holds its text. (Text is compared lowercased with whitespace collapsed against the target file or knowledge dir; a match is reported and left pending, and `--reject <id>` drops it.)

Inputs

MigrateScan classifies into a routing table; MigrateApprove commits per the user's chosen path.

Sources supported in V1

  • **Files:** `.md`, `.markdown`, `.txt` (single file or directory recursion)
  • **Stdin:** piped content or pasted directly
  • **Other LifeOS installs:** point at their `USER/TELOS/` or `MEMORY/KNOWLEDGE/` directories
  • **Agent-harness rule files:** `CLAUDE.md`, `.cursorrules`, OpenAI Custom Instructions export
  • **Exports:** Obsidian vaults (markdown), Notion exports (markdown), Apple Notes exports (.txt), raw journal dumps

Collect the source path from the user; pasted content goes in through `--stdin`.

Tool contract

Run the scanner:

bun ~/.claude/LIFEOS/TOOLS/MigrateScan.ts --source <path>
# or
echo "$CONTENT" | bun ~/.claude/LIFEOS/TOOLS/MigrateScan.ts --stdin
# preview the routing without writing the approval queue
bun ~/.claude/LIFEOS/TOOLS/MigrateScan.ts --source <path> --dry-run

Scanner output includes total chunks found, the proposed routing table (how many chunks per target), average classification confidence, the count of UNCLEAR chunks, and the count of low-confidence (<40%) chunks.

Then approve along the path the user picks:

**Fast path** (they say "approve all trusted"):

bun ~/.claude/LIFEOS/TOOLS/MigrateApprove.ts --approve-all

Commits pending chunks at ≥60% confidence. The tool itself skips, reports, and leaves pending: anything under 60%, UNCLEAR, any PRINCIPAL_IDENTITY.md or IDEAL_STATE/ target, and any chunk whose text already appears in its target. Then walk through what it skipped conversationally.

**Category path** (they say "approve goals and wisdom, skip knowledge"; the tool refuses a protected target here and skips duplicates):

bun ~/.claude/LIFEOS/TOOLS/MigrateApprove.ts --approv
Read more
@danielmiessler
Ships withlifeos

⛰️ LifeOS — The universal AI Harness designed to move you from Current to Ideal state in both life and work.

20k97 skills13 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
19.7k
Star history of danielmiessler/lifeos on GitHub, a chart by star-history.com

Other skills on lifeos.

AnnualReports

AnnualReports

Aggregate several hundred cybersecurity annual reports from CrowdStrike, Mandiant, IBM, Verizon, Microsoft, CISA, OWASP, Wiz,…

ApertureOscillation

ApertureOscillation

3-pass scope oscillation that holds a question constant while shifting zoom — narrow/tactical, wide/strategic, then synthesis —…

Aphorisms

Aphorisms

Curated aphorism collection with CRUD: content-based matching, themed search, thinker research, and usage tracking to avoid…

ArXiv

ArXiv

Search and retrieve arXiv academic papers by topic, category, or paper ID — with AlphaXiv-enriched AI-generated overviews. Uses…

Art

Art

Static visual content in 20+ formats (diagrams, infographics, comics, icons, wallpaper) via Nano Banana Pro by default, Nano…

ArtDirection

ArtDirection

Directs visual quality across images, films, slides, and site captures through a direction council, two vendors' vision judgments…

More skills from other plugins.

1password

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

openclaw11d393k
@openclaw@openclawInstall Skill

Questions about Migrate.

Which coding agents can use Migrate?
Migrate installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.