migrate-spec
Move one existing spec onto the SpecForge component library.
Skill by NitinJ
Chalk Labs
Need help deploying migrate-spec?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/nitinj-migrate-spec
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, design, frontend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Nov 1, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/migrate-spec
Tools it pre-approves 4
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Read,Write,Bash,Grep
What's inside
- Skill name
migrate-spec- Description
- Move one existing spec onto the SpecForge component library. Use when the user asks to "migrate <spec> to the component library", "put this spec on the new components", or "adopt the design system in <spec>". Runs the deterministic renames in code, reads the callouts that carry no type and assigns one to each, and leaves a migration report in the spec's store directory.
- License
- MIT
- Allowed tools
- Read,, Write,, Bash,, Grep
- Instructions
- 113 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves some shell commands
Files (1)
- SKILL.md
SKILL.md (first lines)
# migrate-spec
Migration is never automatic (design D5). It runs on one spec, because a person
asked for that spec.
`${CLAUDE_PLUGIN_ROOT}` below denotes the installed plugin directory. Claude and
Pi export it; Codex provides the exact value in SpecForge SessionStart context.
Substitute that value in every path and shell command. Specs live at
`~/.specforge/specs/<id>/spec.html`; you address them by **id**.
**Never paste what the user typed into a command.** A store id is 10 hex
characters. If what you were given is anything else, look the spec up first and
use the id that reports:
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" listall
```
The CLI refuses an id outside `[A-Za-z0-9_-]`, but that check runs after the
shell has already parsed the line, so it is the second guard and not the first.
Two passes. The codemod is code, because a class rename is mechanical. Choosing
between `warning`, `assumption` and `risk` for a block requires reading it, and
that is your pass.
## 1. See what the codemod would do
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" components migrate <id> --dry
```
Writes nothing. `codemod` lists the deterministic renames with counts;
`assignments` shows what the classifier would fall back to if you did nothing;
`conflicts` names any class the spec's own stylesheet redefines under a library
name, which is the one case where migrating changes how the spec looks.
**Stop and tell the user if `conflicts` is non-empty.** The spec's own rule wins
over the library's, so the block will render in the old style under a new name.
That is theirs to decide, not yours.
## 2. Read the blocks that need a type
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" components migrate <id> --plan
```
Returns `{ id, blocks: [{ index, key, source, text }] }` — every callout the
codemod could not type. `source` is the legacy variant: `warn`, `good`, `bad`, or
`""` for a bare callout. `key` is a hash of the block's source and text, and is
how you name a block in step 3: it follows the block if the spec is edited
between the plan and the apply, and an assignment whose key matches nothing stops
the run rather than landing on the wrong block. If that happens, the spec moved
under you: re-run `--plan` and read the blocks again.
Assign a type to each from its text. Stay within the source's group: the tone is
part of what the original said, and moving a block from `good` to `risk` reverses
a claim its author made.
| Source | What the text says | Assign |
|---|---|---|
| `warn` | names a trigger and a consequence | `risk` |
| `warn` | states a belief that is not verified, or what would falsify it | `assumption` |
| `warn` | states a limit, with a unit or a source | `constraint` |
| `warn` | none of the above | `warning` |
| `""` | names a choice and an alternative | `decision` |
| `""` | gives a concrete instance of a rule stated nearby | `example` |
| `""` | none of the above | `note` |
| `good` | recommends an action the reader may take or skip | `tip` |
| `good` | none of the above | `success` |
| `bad` | departs from a stated rule or principle | `deviation` |
| `bad` | none of the above | `danger` |
The defaults are the weakest claim in each group on purpose. When the text does
not decide it, take the default rather than guessing: an understatement is
recoverable and the report names it for a later pass.
## 3. Apply
Write your decisions as `{ "assignments": { "<key>": "<type>", ... } }`, keyed by
the `key` from the plan, and apply them:
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" components migrate <id> --assign /tmp/<id>-assign.json
```
Anything you leave out takes the classifier's default, so the spec is never left
half on each vocabulary. The run stamps the component block, sets
`data-sf-components`, and writes `migration.json` into the spec's directory
recording every rename and every assignment with `by: "agent"` or
`by: "classifier"`.
## 4. Check it
```
node "${CLAUDE_PLUGIN_ROOT}/lib/lint-spec.mjs" ~/.specforge/specs/<id>/spec.html
```
Expect no untyped notices and no tone class used as a type. **Classes outside the
library are expected and are not yours to remove**: a class only this spec uses
is not drift, and deleting it changes how the spec renders. The same goes for the
CSS behind it, which the migration leaves in place.
Open the spec in the browser and look at it. The renames change which stylesheet
paints each block, so a visual check is the only thing that catches a spec whose
own rules were doing more than they appeared to.
## 5. Report
Say what was renamed, how many blocks you typed and on what evidence, and name
anything you took a default on. If `conflicts` was non-empty, say which classes
and what the user should look at.From NitinJ/specforge, MIT.
More from NitinJ/specforge
- 0.579score
generate-template
NitinJ
Write a spec template from a prompt.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
export
NitinJ
Export a spec from the store to Google Docs.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
list-specs
NitinJ
List SpecForge specs — either every spec in the store (mode "all") or just the specs attached to this session (mode "mine").
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
tune-templates
NitinJ
Optimize the SpecForge spec templates from the review-comment history.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
write-review
NitinJ
Review a SpecForge spec as a reviewer agent, and file the review as a child spec of the spec being reviewed.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
export-md
NitinJ
Export a spec from the store as a GitHub-flavoured markdown file, plus a sidecar directory holding its diagrams.
SkillBFreshness: B★ 5Claude Code +9 - 0.575score
create-spec
NitinJ
Author a new house-style spec into the SpecForge store.
SkillBFreshness: B★ 5Claude Code +9 - 0.575score
convert-spec
NitinJ
Convert an existing design/spec file into a SpecForge spec in the store.
SkillBFreshness: B★ 5Claude Code +9 - 0.575score
review-spec
NitinJ
Process a submitted batch of human comments on a spec in the store: reply to each thread inline and amend the spec accordingly.
SkillBFreshness: B★ 5Claude Code +9 - 0.574score
start-specforge
NitinJ
Start or reuse the local SpecForge daemon and return its browser index URL.
SkillBFreshness: B★ 5Claude Code +9
Signals
- Stars
- 5
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Sep 8, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/NitinJ/specforge
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from NitinJ
- 0.579score
generate-template
NitinJ
Write a spec template from a prompt.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
export
NitinJ
Export a spec from the store to Google Docs.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
list-specs
NitinJ
List SpecForge specs — either every spec in the store (mode "all") or just the specs attached to this session (mode "mine").
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
tune-templates
NitinJ
Optimize the SpecForge spec templates from the review-comment history.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
write-review
NitinJ
Review a SpecForge spec as a reviewer agent, and file the review as a child spec of the spec being reviewed.
SkillBFreshness: B★ 5Claude Code +9 - 0.579score
export-md
NitinJ
Export a spec from the store as a GitHub-flavoured markdown file, plus a sidecar directory holding its diagrams.
SkillBFreshness: B★ 5Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get migrate-spec running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
migrate-spec skill. Agent Mart. https://agentmart.dev/skills/nitinj-migrate-spec (last updated 2026-10-24)