review-spec
Process a submitted batch of human comments on a spec in the store: reply to each thread inline and amend the spec accordingly.
Skill by NitinJ
Chalk Labs
Need help deploying review-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-review-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
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/review-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
review-spec- Description
- Process a submitted batch of human comments on a spec in the store: reply to each thread inline and amend the spec accordingly. Usually auto-invoked when the owning session's Stop/UserPromptSubmit hook surfaces a pending batch; can also be run manually. Replies are append-only; only the human resolves threads.
- License
- MIT
- Allowed tools
- Read,, Write,, Edit,, Bash,, Glob,, Grep
- Instructions
- 369 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)
# review-spec
Process one or more **pending review batches** for specs in the global store:
reply inline to each comment thread and amend the spec per the comments. The
browser updates live (the spec file change triggers an SSE reload).
`${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 in the
store at `~/.specforge/specs/<id>/spec.html`; you address them by spec **id**
(the hook message lists each batch's `specId` + `batchId`).
## 1. Load the threads + the spec path
For a batch's spec id:
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" comments <id>
```
The payload is **batch-scoped**: only the threads named in the spec's pending
batches, plus the language contract. Resolved history and discussion threads are
excluded — exactly the threads this skill says to leave alone. The rare flow
that genuinely wants every thread (exporting a comment history, auditing)
passes `--all`.
**A batch is not every thread on the spec.** Only threads where a human wrote
`@agent` are submitted; the rest are discussion between people and are not yours
to answer. Work the `threadIds` on the pending batch, and leave the others alone
even when you can see them and have an opinion.
Threads can carry **several people**. Each comment has an `author` (a display
name) and a `kind` of `human` or `agent`. Reply to the thread, not to one person,
and never assume the person who opened it is the one who added the mention.
It prints `{ specId, htmlPath, language, threads, pending }`. `htmlPath` is the
spec file to edit; each thread has `anchor.block` (`{ index, tag, text }` —
`text` is the commented block's normalized text) and the human comment(s).
**`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. It applies to
everything you write here: replies, amendments, and asides alike, because a
register that changed between the spec body and the drafts written into it would
read as two authors. Follow what it says and nothing it does not.
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.
## 1a. Read the batch's `origin` — it decides what you may do
Every pending batch carries `origin`, and it is the first thing to look at:
| `origin` | Who submitted | What you may do |
|---|---|---|
| `daemon` | The **owner**, from their own loopback page | Reply **and** amend the spec. The flow below, unchanged. |
| `share` | A **reviewer**, through a shared link or project | **Reply only.** Do not edit the spec. |
**On a `share` batch, `Edit` is not among your permitted actions.** Not on
`htmlPath`, not on any file in the store. You answer the question, and that is
the whole job. A reviewer holds a link, which says nothing about whose spec it
is; the owner decides what the document says.
That is not a limitation to apologise for in your reply, and not something to
mention at all unless asked. Answer the question on its merits. If the reviewer
proposed a change you think is right, say what you think and stop — do not
promise an edit, and do not say you are "unable" to make one.
**How a reviewer's suggestion becomes an edit:** the owner adds their own
`@agent` comment to the thread from their loopback page. That produces a
`daemon` batch carrying the *whole thread* — the reviewer's original, the
discussion, and the owner's instruction — and on that batch you amend the
document, reading everything as context and executing the owner's comment.
Nothing is lost by waiting, and nothing needs a queue: the thread is the queue.
A batch with no `origin` field predates it and is the owner's.
## 2. Get the spec MAP (don't read the whole file)
```
node "${CLAUDE_PLUGIN_ROOT}/lib/spec-nav-cli.mjs" map --spec "<htmlPath>"
```
This gives the whole shape (sections, plan, line ranges, token sizes) in a few
hundred tokens — most of the raw HTML is boilerplate. Pull only the sections you
touch.
## 3. Mark the batch in-progress, then process each thread
Before amending, signal you're actively on it — the browser's action button flips
from "Picked up comments" to "Working on comments":
```
node "${CLAUDE_PLUGIN_ROOT}/lib/specforge-cli.mjs" batch-working <id> <batchId>
```
Then, for each thread **listed in the batch** (not every thread on the spec).
**On a `share` batch, skip steps 1 to 3 entirely** — locating, cross-referencing
and amending are all edit work — and go straight to step 4, the reply:
1. **Locate** the commented block: grep a distinctive phrase from
`anchor.block.text`, then open just that section (it reports the exact line
range):
```
node "${CLAUDE_PLUGIN_ROOT}/lib/spec-nav-cli.mjs" grep "<phrase>" --spec "<htmlPath>"
node "${CLAUDE_PLUGIN_ROOT}/lib/spec-nav-cli.mjs" section <id> --spec "<htmlPath>"
```
2. **Find coupled sections before editing** — `xrefs <id>` and `grep "<old
term>"` to find every place a changed term/number appears; open and edit those
too.
3. **Amend** `htmlPath` with the Edit tool. **Preserve every `<section id="…">`
and its id**; keep the theme CSS and the floating TOC (the review layer owns
theme + width). After changing a term/number, re-run `grep "<old term>"` and
expect **zero hits**. Re-run the lint if you changed structure:
`node "${CLAUDE_PLUGIN_ROOT}/lib/lint-spec.mjs" "<htmlPath>" --project "${CLAUDE_PLUGIN_ROOT}"`.
Prose you add is held to the same language contract as the original, which is
the `language` from step 1 and not the file on disk. Read it there; no summary
of it appears here, because a summary would go on stating a rule this store'sFrom 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
migrate-spec
NitinJ
Move one existing spec onto the SpecForge component library.
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.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 18, 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
migrate-spec
NitinJ
Move one existing spec onto the SpecForge component library.
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
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 review-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
review-spec skill. Agent Mart. https://agentmart.dev/skills/nitinj-review-spec (last updated 2026-10-24)