Skip to content
Agentmart
Submit a tool

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

IndexedMIT★ 5
Write a review

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.

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

We use your email only for this newsletter. Privacy

About

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.

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/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's

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

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

Need help deploying review-spec?

CallGet help
Cite this page

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