Skip to content
Agentmart
Submit a tool

convert-spec

Convert an existing design/spec file into a SpecForge spec in the store.

Skill by NitinJ

IndexedMIT★ 5
Write a review

Chalk Labs

Need help deploying convert-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.

Book a call

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-convert-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.

We use your email only for this newsletter. Privacy

About

Convert an existing design/spec file into a SpecForge spec in the store. Use when the user asks to "convert <file> to a spec", "import this design doc", or "turn this markdown/HTML into a SpecForge spec". Handles two cases: an existing SpecForge-style .html is ingested as-is; a .md or freeform design doc is re-authored into a full house-style HTML spec. Attaches the result to this session and lints before finishing.

Use cases: documents, design, frontend

No 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/convert-spec

Tools it pre-approves 6

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Read,
  • Write,
  • Edit,
  • Bash,
  • Glob,
  • Grep

What's inside

Skill name
convert-spec
Description
Convert an existing design/spec file into a SpecForge spec in the store. Use when the user asks to "convert <file> to a spec", "import this design doc", or "turn this markdown/HTML into a SpecForge spec". Handles two cases: an existing SpecForge-style .html is ingested as-is; a .md or freeform design doc is re-authored into a full house-style HTML spec. Attaches the result to this session and lints before finishing.
License
MIT
Allowed tools
Read,, Write,, Edit,, Bash,, Glob,, Grep
Instructions
140 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves some shell commands

Agent Skills spec issues

  • files: referenced but missing: references/spec-language.md

Files (1)

  • SKILL.md

SKILL.md (first lines)

# convert-spec

Bring an existing file into the SpecForge store. `${CLAUDE_PLUGIN_ROOT}` below
denotes the installed plugin directory. Claude and Pi export it; Codex provides
the exact value in SpecForge SessionStart context. Substitute it in every path
and shell command.

## 1. Inspect the source

- The user names a file (`$ARGUMENTS`). Read it and decide:
  - **Already a SpecForge-style HTML spec** (has the section ids / theme contract /
    structured plan) → ingest as-is (step 2A).
  - **A `.md`** → convert with `import-md`, then edit the result (step 2B). Do not
    hand-author a markdown source: the CLI does the mechanical part faithfully and
    reports what it could not read, which is a better starting point than a blank
    scaffold and your reading of the file.
  - **A freeform `.html` design doc** → author it into a scaffolded spec by hand
    (step 2C). There is no deterministic path for arbitrary HTML.
- **Infer the spec type** from the source — `research` (a findings report),
  `design` (a design doc, no plan), `design-impl` (design + a plan), or `impl` (a
  build plan). When the source is none of those, use `general`: the scaffold plus
  a TL;DR, sections taken from the source's own headings. Pass it as `--type`
  below. A converted document keeps its own shape, so `general` is the right
  answer more often here than when authoring from scratch.

## 2A. Ingest an existing HTML spec

```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" import "<file>" --title "<title>" --type <type> --model <your model id>
```

Prints `{ id, htmlPath, url, status, type, language }` — the file is copied into
the store, attached to this session, daemon ensured. **Apply `language` to
anything you write into this spec**, on the terms in 2B. Lint `htmlPath`
(step 3). If lint fails
because it isn't house-style, fall back to **2C** and author into the `htmlPath`
you already have; 2C says so too, and running `create` there would leave this
spec behind and attach a second one. Not 2B: that path runs a markdown parser,
and handing it HTML would mechanically reconvert the document instead of shaping
it.

## 2B. Convert a `.md` — deterministic pass first, then edit

**A markdown source is converted by the CLI, not by hand.** It reads the file,
maps its headings onto sections, rebuilds any plan into the `data-sf-*` markup,
inlines the images that sit beside it, and produces a lint-passing spec:

```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" import-md "<file>" --model <your model id> [--title "<title>"] [--type <type>]
```

`--model` is your own model id; the harness is detected. It credits you as the
converted spec's author, the same way `create` does.

It prints `{ id, htmlPath, url, type, status, language, report }`. **Then edit
`htmlPath`** — the deterministic pass gives you a valid document to improve,
never a blank scaffold to fill.

**`language` is the writing contract in force, and it is the whole of it.** Not a
note added to a contract you read somewhere else: it already contains SpecForge's
own rules, unless this store's owner edited or removed them. Follow what it says and nothing it does not,
and apply it to everything you write while improving the converted document.
Do not go looking for `references/spec-language.md` to supplement it: a rule the owner deleted is deleted.
They edit this in the Configuration pane, under Language.

Read the `report` before you touch anything; it is the list of what needs you:

- **`unsupported`** — constructs the parser could not read (setext headings,
  footnotes, reference links), each with its line number. The content is in the
  spec as plain text; convert it to house markup by hand.
- **`assetsDropped`** — images that were not inlined, with the reason (missing,
  too large, outside the source directory). Say so when you hand off.
- **`lint`** — `PASS` normally. If it is `FAIL`, `lintFailures` names the checks.
- **`sections`** — how many the source produced.

Type: omit `--type` and the import is a **`general`** spec, which imposes no
section set — usually right, because a converted document keeps its own shape.
Pass `--type` only when the source really is a design / research / impl doc.

Then improve the result:

- Read the house rules: `${CLAUDE_PLUGIN_ROOT}/templates/house-rules.md`, and the
  language contract, which is the `language` field above rather than a file.
  This is where an original's essay voice leaks through: convert the content, not
  the register.
- Map the source onto the type's sections exactly as the `create-spec` skill
  describes (design / research / design-impl / impl) — adapt sections to the
  content; keep stable unique ids, the theme, and the floating TOC in sync. For
  impl types build `impl-plan` as Stages → Tasks (`data-sf-stage`/`data-sf-task`/
  `data-sf-status`, one stage = one PR, each task a `verify:` note) mirrored into
  `task-tracker`, and leave the Runtime stubs. Preserve the author's intent; don't
  invent scope.
- Keep every `<section id="…">`, the theme CSS, and the floating `<nav class="toc">`
  (update TOC links to match the sections you keep).

For a spec `general` no longer fits (the source turned out to be a design with a
build plan), rescaffold with `create --type <type>` and move the content across;
do not grow a plan inside a general spec and call it typed.

## 2C. Author a freeform HTML doc into a spec

Arbitrary HTML has no deterministic path: it carries someone else's structure and
styling, and there is nothing to map it onto mechanically. It gets authored.

**Arriving from 2A** (an HTML spec that turned out not to be house-style): you
already have an `htmlPath` in the store, attached to this session. **Author into
that file.** Do not run `create` — it would make a second spec and leave the
malformed one attached, so a later edit or handoff could pick up either. The
`language` 2A printed still applies: this is the authoring pass it was for.

**Arriving from step 1** with a freeform HTML doc and no spec yet, scaffold one:

```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" create --title "<title>" --type "<type>" --model <your model id>
```

It prints `{ id, htmlPath, url, type, language }`. **Author into `htmlPath`**,
following the same house rules, section mapping and language contract as 2B
above, and applying `language` on the same terms.

From NitinJ/specforge, MIT.

Signals

Stars
5
Forks
0
Open issues
1
Last commit (this folder)
Sep 18, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from NitinJ

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 convert-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.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying convert-spec?

CallGet help
Cite this page

convert-spec skill. Agent Mart. https://agentmart.dev/skills/nitinj-convert-spec (last updated 2026-10-24)