Skip to content

Agent / automation surface

Front door for agents and scripts. Humans can stay on Daily ops; agents should install skills once, prefer --json, and treat verify/reconcile as the claim-done path (Lifecycle & DoD).

Install skills

nw skills install                 # ~/.claude/skills (symlink)
nw skills list
nw skills install --dest ~/.cursor/skills

Getting started Path C: Getting started.

Skill → CLI map

Skill Primary CLI Stage
/nw-orient nw --help, nw hub --json, nw next --json Cold start
/nw-capture nw idea "…" Park a one-liner
/nw-seed nw idea + summary / log Distill a chat → idea
/nw-related nw ideas --query … --json Search before capture/promote
/nw-explore nw idea show\|summary\|questions\|log Enrich — no promote
/nw-new-work nw spec new --from-idea, accept, ledger Explored idea → accepted spec
/nw-generate nw spec generate Accepted internal SPEC → org tasks
/nw-rework supersede / seed-children Bad design or unfinished epic
/nw-export nw spec export Outbox portable → target repo
/nw-implement-spec (in target repo) portable AC + tests Build exported work
/nw-verify nw spec verify (+ ledger / pull-status) Post-hoc Definition of Done
/nw-sheet-sync nw sheet plan\|record --json Optional sheet triage
/nw-conduct Monitor on nw queue events --follow --for conductor; nw queue conduct-status\|resume, nw mailbox send Long-lived conductor woken by queue events
/nw-steward Monitor on nw mailbox follow --to steward:<P>; nw mailbox send Project steward answering the conductor

Capability stub: Skills.

JSON schema catalog

Every machine-readable command prints a top-level "schema" string. Prefer that over scraping tables. Shapes below are illustrative — fields evolve; trust the live payload.

Schema id Command Shape (sketch)
nw.hub.v1 nw hub --json {schema, ideas[], internal[], outbound[], stale_ideas, …}
nw.ideas.v1 nw ideas --json {schema, ideas:[{id,state,heading,next,…}]}
nw.ideas.search.v1 nw ideas --query … --json {schema, query, ideas:[…]}
nw.next.v1 nw next --json {schema, ideas:[{id,state,next,…}]}
nw.idea.v1 nw idea show ID --json {schema, id, state, summary, questions, log,…}
nw.tasks.v1 nw tasks --json {schema, tasks:[{id,state,heading,…}]}
nw.projects.v1 nw projects --json {schema, projects:[{name,outbound,research,…}]}
nw.projects.add.v1 nw projects add … --json plan payload before mutating config
nw.spec.verify.v1 nw spec verify … --json verify report (AC / tests / ledger drift)
nw.spec.review.v1 nw spec review … --json {schema, spec_id, verdict: approve\|revise\|split, spec_sha256, reviewed_at, model, cost_usd, findings[], suggested_splits[]} (SPEC-0188)
nw.spec.review.show.v1 nw spec review SPEC-ID --show --json {schema, spec_id, spec_path, current_sha, matches_current, review, admission:{ok,kind,message}, profile, stored} (SPEC-0242)
nw.spec.reviews.v1 nw spec reviews --json {schema, reviews:[{spec_id, verdict, size, tone, counts, reviewed_at, spec_sha256, matches_current, model, cost_usd}]} (SPEC-0242)
nw.campaigns.v1 nw campaign list --json {schema, campaigns:[{id,spec_id,state,loops,cost_usd,…}]}
nw.campaign.v1 nw campaign show ID --json campaign state + last_events (SPEC-0171)
nw.campaign.log.v1 nw campaign log ID --json {schema, campaign, events:[{seq,ts,type,by,…}]}
nw.campaign.gate.v1 nw queue gates ID --json {schema, campaign, gate_seq, ok, results:[{name,required,ok,exit_code,timed_out,duration_s,log,tail}]} (SPEC-0173)
nw.queue.v1 nw queue list --json {schema, lease:{held,pid,heartbeat_age_s,ttl_s,stale}, slots:{total,busy}, items:[{campaign,spec_id,project,state,priority,loops,cost_usd,cap_usd,park,worktree,branch,backlog?}]}; queued items carry backlog:{position,priority,ready,blocked_by[]} (SPEC-0176, SPEC-0180)
nw.queue.backlog.v1 nw queue backlog --json {schema, items:[{campaign,spec_id,priority,position,ready,blocked_by[],age_s}]} in admission order (SPEC-0180)
nw.queue.prioritize.v1 nw queue prioritize ID N --json [--yes] {schema, campaign, state, from, to, written} (dry-run unless --yes)
nw.queue.add.v1 nw queue add SPEC --json [--yes] {schema, campaign, spec_id, project, profile, base, worktree, branch, …, written} (dry-run unless --yes)
nw.queue.tick.v1 nw queue tick --json / nw queue run --json-lines {schema, steps:[{campaign,from,to,action,run_id,cost_usd,reason}], admitted, idle}
nw.queue.park.v1 / nw.queue.resume.v1 / nw.queue.abandon.v1 nw queue park|resume|abandon ID --json [--yes] plan fields + written
nw.event.v1 nw queue events --follow --for READER (one per line) {schema, id, ts, type, campaign, spec_id, project, by, data:{…}} — parks, merges, failed runs, watchdog signals (backlog_blocked_long, state_stuck, ready_not_admitted), the periodic conductor_ping digest (SPEC-0212), mail (SPEC-0181)
nw.events.v1 nw queue events [--since ID] [--tail N] {schema, events:[nw.event.v1…]}
nw.conduct.status.v1 nw queue conduct-status --json {schema, lease, slots, conductor_pid, counts, parked[], active[], unanswered_mail[], recent_events[]} (SPEC-0182)
nw.message.v1 nw mailbox follow --to ADDR (one per line) / nw mailbox send --json {schema, id, seq, ts, from, to, kind, campaign, re, text, needs_reply} (SPEC-0183)
nw.mailbox.list.v1 nw mailbox list --to ADDR --json {schema, to, messages:[nw.message.v1…]}

Example (hub triage):

nw hub --json | jq '{schema, idea_count:(.ideas|length), stale:.stale_ideas}'
{
  "schema": "nw.hub.v1",
  "ideas": [{"id": "IDEA-001", "state": "INCUBATE", "next": "nw idea summary …"}],
  "internal": [],
  "outbound": [],
  "stale_ideas": 0
}

hub --json capture

Recipes

Triage what’s open

nw next --json
nw hub --json
nw ideas --query "outbound" --json

Enrich without promoting

nw idea show IDEA-NNN --json
nw idea summary IDEA-NNN --set "…"
nw idea questions IDEA-NNN --add "…"
nw idea log IDEA-NNN --note "…"
# skill: /nw-explore — stop before nw spec new

Promote → build (internal)

nw spec new --from-idea IDEA-NNN          # then author + status: accepted
nw spec generate SPEC-NNNN
nw idea clock-in IDEA-NNN
# …implement…
nw idea clock-out IDEA-NNN
nw spec verify SPEC-NNNN
# skill chain: /nw-new-work → /nw-generate → /nw-verify

Outbound (pointer)

Export and close-the-loop are mandatory ops — see Outbound and /nw-export → /nw-implement-spec → /nw-verify (pull-status / sweep → idea SHIPPED).

Guardrails

  • Empty Summary → explore, don’t promote.
  • accepted means funded WIP, not a draft guess.
  • Merged PR ≠ done; run verify / reconcile.
  • Never paste live user org corpora into tickets; use --json slices.