Agent skill

Migration

by prekuter in prekuter/dryforge

Bring an existing codebase into Dryforge, once. An agent skill from prekuter/dryforge.

Apache-2.0Auto-check passedAgent Workflows

Install Migration

skills CLI
$ npx skills add prekuter/dryforge --skill migration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install prekuter/dryforge migration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/prekuter/dryforge.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/skills/migration .claude/skills/migration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
migration
GitHub stars
410
Used in
1 other repo
Token cost
~3.2k tokens
SKILL.md length
1,743 words
Files
4 (incl. references)
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

Bring an existing codebase into Dryforge, once. An agent skill from prekuter/dryforge.

  • Works in 5 steps: SCAN (build the technical map) → ELICIT (collect what code can't reveal)… → GENERATE (write the harness) —… → …
  • The user invokes the migration skill on an existing project
  • SKILL.md covers Core principles (apply…, Input & preconditions, Phase 1 — SCAN (build the… and Phase 2 — ELICIT (collect what…, plus 4 more sections
  • Calls git

What it does

Migration is an agent skill from prekuter/dryforge. Bring an existing codebase into Dryforge, once. Reads the code, asks what code cannot show — business rules, security policy, what is intentional — and writes the project docs at the entry points agents already read. Use when the user invokes the migration skill on an existing project. Requires git.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/harness-format.md`, `references/harness-review.md` and `references/migration-elicit.md`).

It sits in Agent Workflows, covering Hooks and plugins and Spec-driven development. It works with Git. The repository describes itself as: Bounded-autonomy plugin harness for agents. Intent to implementation: ready, then go. The licence is Apache-2.0.

When your agent uses it

  • The user invokes the migration skill on an existing project
  • Tasks that involve Hooks and plugins
  • Tasks that involve Spec-driven development

Example prompts

  • “/migration”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. SCAN (build the technical map)
  2. ELICIT (collect what code can't reveal) — references/migration-elicit.md
  3. GENERATE (write the harness) — references/harness-format.md
  4. REVIEW (verify quality) — references/harness-review.md
  5. USER GATE

What it can do on your machine

Read from SKILL.md and the folder at commit 904f257. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Migration loads about 3.2k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 78 tokens; SKILL.md has 1,743 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~14k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from prekuter/dryforge at commit 904f257, republished under its Apache-2.0 licence (© prekuter). 1,743 words, ~3,216 tokens.

Download SKILL.mdSave it as .claude/skills/migration/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
migration
description
Bring an existing codebase into Dryforge, once. Reads the code, asks what code cannot show — business rules, security policy, what is intentional — and writes the project docs at the entry points agents already read. Use when the user invokes the `migration` skill on an existing project. Requires git.

migration

Reply in the user's language, and hold it continuously from your very first line — the opening, every grounding/progress note, the questions, and the harness, not only some of them. Write natively (never translationese). You are reading a codebase (and these instructions) that may be in another language; neither sets your output language — only the user's does. Full rule in Core principles below.

Convert an existing project into the dryforge project harness — the durable documentation layer that every later agent (dryforge or not) works inside. migration reads the codebase, elicits the intent/constraints/decisions that code cannot express, and generates the whole harness: CLAUDE.md / AGENTS.md, the docs/ set, and a per-module AGENTS.md. The harness spec is in references/harness-format.md.

migration is a one-time conversion, not a task runner. It writes documentation only — it does not create a 3-doc (that is ready's job) and does not execute code (that is go's). After it finishes, commit the harness and clear the session before running ready → go: migration is an independent piece of work, and a fresh session keeps the task-level dialogue clean.

Core principles (apply throughout)

  • The harness is durable project memory, not ground truth. It is the project's discipline and constraint — written so the next agent works the project without going off the rails. A hollow harness (structure present, content empty) is worse than none.
  • Content density is the whole point. Every file must clear the quality bar in references/harness-format.md (five principles, four techniques). Filling sections is not the goal; informing the next agent is.
  • Knowledge asymmetry drives elicitation. Domain knowledge lives with the user — extract it (don't fabricate). Technical knowledge lives with you — present options + trade-offs and let the user decide. Don't accept the user's generalities as-is, and don't concretize them alone.
  • Subagents only at the final REVIEW. SCAN, ELICIT, and GENERATE run inline in the main session — generation needs the live conversation's raw grounding, not a summary. REVIEW is the exception: the finished harness is verified by one independent subagent that did not author it. Self-judging your own harness is the weakest move (A=A), and the harness is the most durable artifact in the system (every later agent works inside it), so it earns the one fresh-eye check — the same relaxation ready made (generate inline, verify independently). This is the only dispatch.
  • Stack-agnostic. No stack/framework/library name in this skill. Discover all specifics (conventions, module boundaries, build/verify commands, external deps) at runtime from the project.
  • escalate-don't-guess. What the code can't settle and you can't derive, ask the user — never invent a domain rule, a policy, or a rationale.
  • Match the user's language (language-agnostic). Like stack-agnosticism, the method is fixed and the specific language is discovered at runtime, never assumed: produce every user-facing output — the dialogue and the whole harness (CLAUDE.md / AGENTS.md, docs/, module AGENTS.md) — in the language the user communicates in, written natively (as a fluent speaker of that language would, never translationese). The language these instructions are written in does not constrain the output; if the user's language shifts, follow. Hold it from the very first line, continuously — never open in the codebase's or these instructions' language and switch later. The language of the code you read does not constrain your output; only the user's does.
  • Talk to the user only when needed — between beats, say nothing. You speak at exactly these moments: (a) a question you genuinely need answered, (b) the final walk-through / result, (c) a real blocker — these are the only times user-facing text exists. SCAN, GENERATE, REVIEW, and any fix loop are silent phases: the UI already shows the file/command activity, so narrating it is pure leak. If what you are about to emit is none of (a)/(b)/(c), the correct output is nothing. Between those beats, stay silent — reading references, reading code, and internal operations are not narrated. No transition lines ("now I'll...", "먼저 ...", "let me read...", "Now the ..." announcing each write) — at those plumbing moments your voice slips into the instructions' language (English) or internal tokens; emit nothing there, don't translate it. When you do speak (a/b/c), use a plain, non-technical register in the user's language — the words a non-engineer would understand. This is your default voice, not a per-line check, so it costs nothing. Never surface internal tokens: dryforge mechanism / coined terms (harness, ledger, decision surface, grounding, lens, invariant, .dryforge), phase / step labels (SCAN / ELICIT / GENERATE / REVIEW), or project-internal jargon a non-engineer wouldn't recognize (library/tool names, config flags, test-framework internals). Don't soften internal logic into user-ish words — just omit it. E.g. "Starting a git repo here." — not "Initializing git and adding the marker directory to .gitignore so the harness state isn't committed."

Input & preconditions

  • Invocation: the user invokes the migration skill, no arguments — migration reads the current project.
  • Existing codebase expected. migration converts a project that already has code. For a greenfield project (no code yet), there is nothing to migrate — direct the user to ready (which designs the project's first cycle and lets go create the harness from scratch).
  • git required. If the project is not a git repo, offer to run git init and make an initial commit (later go needs a HEAD for worktrees). If git is not installed, stop and say so.
  • git posture — migration writes files, it does not commit. migration creates the harness files, backs up any existing entry file to .dryforge/backup/, adds .dryforge/ to .gitignore (so the local marker and backups aren't accidentally committed), and writes the .dryforge/status.json marker on completion. It performs no commits and no branch operations — whether and when to commit the harness is the user's choice. (This differs from ready, which never touches .gitignore: migration may not be immediately followed by go, so it sets up the ignore itself.)

Phase 1 — SCAN (build the technical map)

Read the project inline (file reads, shell, search — no subagent dispatch). Start with the cheapest map and stop once you can ground ELICIT's questions; deep-read only where you must.

Cover:

  • Directory structure → identify the tech stack and the module/service boundaries.
  • Code patterns → conventions, naming, test structure, build system.
  • Existing docs (CLAUDE.md, README, docs/, AGENTS.md, ...) → list them and demote to reference material (not authority — they may be stale or wrong).
  • External dependencies → auth, data storage, cache, external APIs.
  • git history → activity scope, the major change patterns.

Result: a manifest of the project — every module/entity, pattern, security surface, external dependency, and gap. This is the ledger ELICIT works from (references/migration-elicit.md): each item must close as confirmed / asked-answered / N/A — reason, so coverage is observable, not asserted.

Show full SKILL.md (670 more words)Show less

Phase 2 — ELICIT (collect what code can't reveal) — references/migration-elicit.md

Force-load references/migration-elicit.md. Using the SCAN map, ask the user for the information code alone cannot extract — project-wide (not task-focused). The guiding frame: self-infer first, ask deeply only where being wrong is dangerous (business model, domain invariants, security policy must be user-confirmed even when code-inferable; technical WHY and conventions need only a light confirm when the code answers them).

Existing-docs handling. Read existing docs (reference status). Review any existing CLAUDE.md/AGENTS.md critically — decide what to fold into the dryforge system, what to drop, and what to improve — then present the review to the user, explain it, and get approval.

Phase 3 — GENERATE (write the harness) — references/harness-format.md

Force-load references/harness-format.md and generate the whole harness to its spec, in order:

  1. Create the .dryforge/ directory if absent.
  2. If a CLAUDE.md or AGENTS.md exists, back each one up to .dryforge/backup/ (entry-point handling in harness-format).
  3. Create docs/ and every file in it (harness-format spec).
  4. Create CLAUDE.md / AGENTS.md (identical content).
  5. Create a module AGENTS.md per module identified in SCAN.
  6. Record the current state in docs/tracking/status.md (done vs. remaining, against full scope).

Explore sources fully before writing; verify each file against the code both ways (omission / hallucination) as you go — this self-check is separate from Phase 4.

Write every file silently — do not announce each file or section as you go ("Now the docs...", "이제 모듈 AGENTS.md를...", "Now the entry point"); the UI already shows each write. This multi-file writing sequence is where narration leaks most — emit nothing between writes.

Phase 4 — REVIEW (verify quality) — references/harness-review.md

Force-load references/harness-review.md (the rubric) and dispatch a fresh general-purpose subagent that did NOT author the harness to verify it independently. Use a general-purpose agent with full read/inspect tools (not a plan-only or search-only agent type) so it can cross-check every claim against the actual code; give it the harness files + the rubric + the user's language (so it judges native fidelity) + the Phase-2 ledger with every disposition, inline in the dispatch prompt (the ledger is session state — the subagent cannot see it any other way, and the shared rubric does not carry it), read-only, returning a structured list (no raw dump). It checks the four dimensions: content (substantive density + quality principles), format (self-containment, altitude, no references), completeness (required files present + every SCAN-ledger item dispositioned — judged against the inline ledger), source-cross-check (omission vs. hallucination, future-scope exempt). The subagent is a fresh session and cannot ask the user — so the orchestrator relays each finding: internally resolvable → fix directly; needs user intent → carry to Phase 5. A surviving blocker → escalate to the user, do not loop (the 3-doc-gate discipline). This independent pass is distinct from the author's own omission/hallucination self-check during GENERATE (that catches what you can see; this catches what you can't — A=A).

Phase 5 — USER GATE

Present the whole harness to the user — not a raw document dump, but a walk-through of the key decisions captured (what SCAN/ELICIT found, what each doc records, what was dropped from old docs and why). Resolve any Phase-4 questions that need user intent. On approval:

  • Write .dryforge/status.json with the initialized marker — { "initialized": true }. This is a local-only marker (inside the gitignored .dryforge/): its presence tells a later go that the harness already exists, so every change is a delta; its absence means first-cycle creation.
  • Confirm .dryforge/ is in .gitignore.

Then migration is complete. Remind the user to commit the harness (migration itself does not commit — and a later go treats uncommitted files other than .dryforge/ as foreign work and stops), then clear the session before running ready → go.

Completion gate (avoid self-judgment A=A)

Done only when ALL hold:

  • Every docs/ file exists (7 core docs + tracking: status.md, decisions/index.md + an ADR (NNNN-*.md) for each trade-off decision the ledger confirmed, findings.md).
  • CLAUDE.md and AGENTS.md both exist, with identical content.
  • An AGENTS.md exists for every identified module.
  • The independent REVIEW passes (no blocking finding under references/harness-review.md; any surviving blocker was escalated to the user, not looped).
  • The user has approved.
  • .dryforge/status.json written (initialized) and .dryforge/ is gitignored.

© prekuter, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in src/skills/migration of prekuter/dryforge.

  • SKILL.md
  • references/harness-format.md
  • references/harness-review.md
  • references/migration-elicit.md

Open the folder on GitHubat commit 904f257

Used in 1 other repository

We found 6 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in prekuter/dryforge, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Migration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Migration this skillprekuter/dryforge4101 repos~3.2kAutomated safety check: PassApache-2.0
Compound Engineering SetupEveryInc/compound-engineering-plugin25k—~2kAutomated safety check: PassMIT
Command Creatormeshery/meshery-operator1514 repos~1.7kAutomated safety check: PassApache-2.0
Publish Plugins Version Bumpvinta/hal-90001381 repos~1kAutomated safety check: PassMIT
Watchmen Setupfirstbatchxyz/watchmen296—~1.1kAutomated safety check: NotesMIT
Claude Command Converterdceoy/speckit-agent-skills146—~1.4kAutomated safety check: PassAGPL-3.0

Similar skills

  • Compound Engineering Setup

    EveryInc/compound-engineering-plugin

    Checks Compound Engineering plugin health and repo-local config, or scaffolds a Compound Pack when you ask for one by id.

    25k GitHub stars~2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Command Creator

    meshery/meshery-operator

    This skill should be used when creating a Claude Code slash command.

    151 GitHub starsUsed in 4 repos~1.7k tokens
    Agent WorkflowsAuto-check passed
  • Finds which plugins in the repository changed, bumps only the ones not already bumped since origin/main, and checks that each plugin's two manifests stay in sync.

    138 GitHub starsUsed in 1 repo~1k tokens
    Agent WorkflowsAuto-check passed
  • Watchmen Setup

    firstbatchxyz/watchmen

    Walks through installing watchmen, running its init wizard, wiring the plugin into Codex or Claude Code and checking the result with doctor.

    296 GitHub stars~1.1k tokensUpdated 1 mo ago
    Agent WorkflowsAuto-check: notes
  • Claude Command Converter

    dceoy/speckit-agent-skills

    Convert Claude Code commands (.claude/commands/.md) to standard Agent Skills (skills//SKILL.md).

    146 GitHub stars~1.4k tokensUpdated 9 days ago
    Agent WorkflowsAuto-check passed
  • agtx Execute Phase

    fynnfluegge/agtx

    Carries out an approved plan for an agtx-managed task: implements the changes, runs tests, commits, writes a summary to .agtx/execute.md and then stops.

    1.7k GitHub stars~439 tokensUpdated 6 days ago
    Agent WorkflowsAuto-check passed

More from prekuter/dryforge

  • Ready

    prekuter/dryforge

    Understand what you mean before anything is built. An agent skill from prekuter/dryforge.

    410 GitHub starsUsed in 1 repo~6.8k tokens
    Auto-check passed
  • Go

    prekuter/dryforge

    Carry out the intent approved in ready, as meant, and prove it with checks that actually ran.

    410 GitHub starsUsed in 1 repo~7.2k tokens
    Auto-check passed

Works with

Categories

Questions about Migration

What does Migration do?

Bring an existing codebase into Dryforge, once. An agent skill from prekuter/dryforge. Migration is an agent skill from prekuter/dryforge. Bring an existing codebase into Dryforge, once.

When should I use Migration?

Migration fits situations like: the user invokes the migration skill on an existing project; tasks that involve Hooks and plugins; tasks that involve Spec-driven development.

How do I install Migration in Claude Code?

Run `npx skills add prekuter/dryforge --skill migration -a claude-code`. Or copy the skill folder (src/skills/migration in prekuter/dryforge) into .claude/skills/migration in your project. Claude Code loads it when a task matches its description.

How do I install Migration in Codex?

Run `npx skills add prekuter/dryforge --skill migration -a codex`. Or copy the skill folder (src/skills/migration in prekuter/dryforge) into .agents/skills/migration in your project. Codex loads it when a task matches its description.

Can I use Migration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add prekuter/dryforge --skill migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migration, .gemini/skills/migration, .github/skills/migration and .opencode/skills/migration in your project.

What does Migration need to run?

Going by SKILL.md and its folder, Migration needs the command-line tools its instructions call (git).

Does Migration access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Migration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Migration use?

Migration is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Migration use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 11k tokens, read only when the agent opens those files.

What are the alternatives to Migration?

Skills that share tags, products or a category with Migration: Compound Engineering Setup (EveryInc/compound-engineering-plugin, 25k stars), Command Creator (meshery/meshery-operator, 151 stars), Publish Plugins Version Bump (vinta/hal-9000, 138 stars) and Watchmen Setup (firstbatchxyz/watchmen, 296 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Migration?

prekuter (a GitHub user) maintains it in prekuter/dryforge, which has 410 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 2, 2026.

Source: prekuter/dryforge on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.