Code Coder
Central execution worker for ad-hoc diffs (and C2 under ns-autonomous). Not front door — host picks entry per ../../ns-harness/references/code-skill-routing.md.
Workflow mode (mandatory)
Fixed workflow, not loose checklist. Steps in order; handoffs = named skills or harness bridges (coder-agent / reviewer-agent per ../../ns-harness/references/subagent-dispatch.md). No platform Task personas or improvised review.
Canonical review gate: ../ns-reviewer/references/review-gate-workflow.md — steps 7–9 ad-hoc / C2 only. Review only via reviewer-agent then ns-reviewer (MUST bridge when available; else direct); max 3 rounds; Approved = score 10 only. Score 9 = Rejected (Lift + mandatory re-review). No success without Approved or blocked. After Approved: Living specs (8) if match, then Final report (9).
Exception — SDD handoff mode: caller run-implementation / execution-handoff.md (or dispatch says SDD task mode): skip review gate + living specs. Parent owns review at version closure. See When invoked under execution-handoff.
Routing (read first)
| Signal | Redirect |
|---|---|
GitLab ISSUE_URL detected |
Stop — ns-execution-gitlab-issue |
| Multi-day / version / SDD scope | ns-spec-driven |
| Obscure bug, root cause unclear | ns-investigator |
| Ad-hoc diff ready | reviewer-agent then ns-reviewer (review loop below) |
Entry priority 5 (default). Harness table: ../../ns-harness/references/code-skill-routing.md. Trigger phrases: references/entry-triggers.md.
When to use (entry)
- Bug fixes / hotfixes outside planned version
- Isolated component, hook, service, or utility
- Small refactors (≤ 1 file or tight group)
- Scripts, migrations, seeds outside version lifecycle
- "Just implement this" without
execution-handoff.md
When invoked as C2 (engine mode)
ns-autonomous dispatches as work-unit subagent in existing worktree: unit scope only. Do not re-route to ns-execution-gitlab-issue on ISSUE_URL in code/comments — context, not routing. Escalate destructive doubts to caller (A), not GitLab skills. No living-spec consolidator as C2 — version closure/caller owns. Complete ad-hoc Review loop unless caller says SDD handoff / defer review.
When invoked under execution-handoff (SDD task mode)
Parent run-implementation (classic SDD) or dispatch SDD handoff / execution-handoff:
- Scope: classic = one batch (same-layer consecutive
pending, prefer 4–7, hard max 7; size 1 = single task) perreferences/run-implementation.md. Partitioned slice = that slice's tasks. Parent owns handoff file updates. - Read each task card (header through Validation criteria); open
Detailed descriptionon demand (ambiguity orblocked) —../ns-spec-driven/references/task-schema.md. - Implement + unit/integration only. No E2E.
- Forbidden:
reviewer-agent/ns-reviewer, living-spec consolidator,Code Review:verdict line. - Before report complete: public-export grep (Pre-review). Still no reviewer.
- Report to parent per task: files changed, tests run, blockers, tokens (split or
~N),Layout SSoT: {path} read | none registered. Parent marks rows. Version closure (steps 4–6):references/run-implementation-closure.md— not the per-batch file. Session boot: cold start this agent = full boot persession-boot.md; same agent continuing = no full re-read unlessagents.local.md/ harness rules changed.
Session boot
See ../../ns-harness/references/session-boot.md. Complete Session boot (blocking) before any other step — cold start only; mid-session skip if already booted and files unchanged. Never tool-Read AGENTS.md.
After session-boot steps 1–6:
- Load all
.nextstage-harness/rules/*.mdmarked always-applicable in harnessmanifest.json, plus layer rules for target layer. - Load agent-requested rules when
manifest.jsondescriptionmatches task scope (persistence, auth, tenancy, build). No manifest: scanrules/*.md; read files whose scope matches. - Unread mandatory rules = incomplete boot. Do not pick stack default to fill gap.
- Stack signals: detected stack implies expected sibling rule —
../../ns-harness/references/architecture-rules/stack-signals.md. Rule present: load. Absent: ask or markneeds-clarification— never assume framework default.
Session inputs
| Variable | Required |
|---|---|
{task_description} |
Yes |
{target_layer} |
Infer when possible: frontend, backend, infra, tests, fullstack |
Scope isolation
Operate only inside the repo + harness docs.
Boot (mandatory)
Session boot (../../ns-harness/references/session-boot.md) — one rule for ad-hoc, C2, SDD handoff:
| Agent state | Action |
|---|---|
| Cold start (this agent/subagent just started) | Full Session boot (steps 1–6). Bridge may have done local + architecture/project rules — finish layer rules + context |
| Same agent continuing; steps 1–6 done; files unchanged | Do not re-read rule corpus |
agents.local.md or harness rules changed since last boot |
Re-boot |
Then:
- Obey
AGENTS.mdorders (already in context) — no invented paths git statusandgit diff- Read target files before writing
Success: AGENTS.md orders + project rules + task scope. Invented paths or SDD artifacts (except handoff updates when parent owns them) = failure.
Implementation rules
- Constitution over card: card prescribes persistence/API/gate/pattern rules forbid — implement rules path; annotate
card deviation: {card} -> {rules}in## Execution notes. Large/ambiguous deviation:blocked. - Grounding check before diff: card names class/command absent from repo and rules — stop and report. Do not implement.
- Persistence source: persistence path from
architecture-rules.md+ mandatory project rules (Session boot). Forbidden to assume ORM or upsert default when rules silent — ask orblocked. - Rules + code same turn: rule request + code delivers diff same turn, not harness text only.
- Diff-first — only required lines; no unrelated formatting
- Prefer editing existing files over new files
- Large change gate: >1 file simultaneously, >20 lines in one file, or public contract change: one-line plan, wait for approval
- No commits unless human explicitly asks — when committing, see
../../ns-harness/references/agent-git-identity.md - No SDD version artifacts — no
task-NNN.md,requirements.md,execution-handoff.md, ordocs/versions/writes. Conditional living-spec updates underdocs/specs/vians-living-specallowed (see Living specs). - No gratuitous comments unless requested
- Tests per
AGENTS.mdDocker + testing; container/commands inarchitecture-rules.md - Under
execution-handoff.md/run-implementation: unit/integration only — no E2E (human at version end); no review gate (parent Step 5)
Complement delegation
spec-driven / gitlab presets install complements via depends (check .agents/skills/ once per session). Delegate — do not duplicate their workflows inline.
| Signal | Skill | When |
|---|---|---|
Frontend UI without Layout SSoT registered for screen being built (reference-sources.md role: ui-layout, or card cites *-visual.md) |
ns-frontend-design |
Before large UI diff (step 4–5) or when task is primarily visual |
| Layout SSoT registered for screen being built | (none — read SSoT) | Open cited guide/prototype before diff; match registered pattern + project UI approach; do not invoke ns-frontend-design anti-slop |
| Security headers, CSP/CORS, dep CVE sweep, a11y/Web Interface Guidelines audit | ns-best-practices |
On explicit request, or after frontend work before review when hygiene was in scope |
README / docs/ guides (not code comments) |
ns-docs-writer |
On explicit request or version/doc closure — not every ad-hoc fix |
MR/SOLID review stays ns-reviewer only. Missing complement: continue with harness rules; recommend install once per session (../ns-spec-driven/references/skill-integrations.md).
Per-task cycle
SDD handoff mode: one dispatch may cover a batch; still stop after step 6; report per task to parent; skip 7–9.
- Understand task
- Load rules — obey
AGENTS.mdalready booted; Session boot again only if cold start this agent or files changed - Explore (grep/head large fixtures — no full test dumps)
- Identify minimal diff
- Apply (or plan if large-change gate)
- Run tests if in scope + public-export grep (Pre-review)
- Review loop — MUST
reviewer-agentwhen available (elsens-reviewer);../ns-reviewer/references/review-gate-workflow.md - Living specs (conditional) — see below
- Final report — mandatory fields; never skip verdict or round count
Pre-review (before step 7; also before SDD report complete)
- Tests covering changed files per
AGENTS.mdand../../ns-harness/references/docker-and-testing.md. - Diff removes exports/constants/env flags/public symbols: search remaining call sites; resolve before review.
- List new or newly exported public names (
return { },module.exports,export,public/public static, window/global attach). - Grep each: no caller outside defining module — keep private/unexported. Continue (ad-hoc: review; SDD: report parent). Forbidden reviewer in SDD handoff.
- Internal/private/nested helpers: keep.
Review loop (mandatory ad-hoc / C2; skip SDD handoff)
After step 6, run ../ns-reviewer/references/review-gate-workflow.md before done — except SDD handoff (return to parent; no review).
- MUST invoke
reviewer-agentwhen available (elsens-reviewer) on working-tree diff (git diff) — reviewer bridge/skill begins Session boot at cold start then reviewer workflow; noISSUE_URL, no version-closure path. Ad-hoc diff only. - Max 3 rounds.
Approved= score 10 only (review-gate-workflow.md).- Pass:
Approved(score = 10, zero Criticals) → step 8. - Lift:
Rejectedand score = 9, rounds left: in-scope fix toward 10, tests if in scope, mandatory re-review. - Fail: Criticals or score ≤ 8, rounds left: same as Lift (fix + tests + re-review).
reviewer-agent/ns-reviewerread-only — this skill applies fixes. MUSTreviewer-agentwhen available; elsens-reviewer. - Stop:
Blockedor 3 rounds exhausted → report blocked. List unresolved Criticals and/or last score. No success. Skip step 8.
- Pass:
- Fixes within original task scope. Critical (or score-blocking Warning) needs changes outside scope (public contract, cross-product, multi-day): stop, escalate per Stop conditions.
- Suggestions (P2) alone do not block when
Approved. Score 9 still Lift even if only P2.
Living specs (step 8, conditional)
Only after Code Review: Approved (not as C2). Invoke ns-living-spec ad-hoc when all true:
docs/specs/exists- Diff behavioral (API, schema, UX, or domain behavior) — skip cosmetic / rename-only / pure refactor
- Skill available (installed via
depends)
Pass: mode ad-hoc, {task_description}, approved git diff. Read consolidator SKILL.md, follow it. No invent {version_san} or write under docs/versions/.
Skip (note reason in final report) when any condition fails, review not Approved, or consolidator reports skipped.
Final report (step 9)
No success language until gate passes or blocked (review-gate-workflow.md). SDD handoff: report implement status to parent; no Code Review: line — version closure owns verdict.
Every ad-hoc / C2 closure response must include:
| Field | Value |
|---|---|
| Active skill | ns-coder |
| Reviewer skill | ns-reviewer (via reviewer-agent when dispatched) |
| Review round | Last round executed: 1, 2, or 3 |
| Score | Last overall score from reviewer |
| Verdict | Exact line: Code Review: {Approved|Rejected|Blocked} |
| Living specs | updated | skipped: {reason} | n/a (blocked/rejected) |
| Layout SSoT | {path} read | none registered |
Then: what changed, follow-ups, blocked Criticals if applicable.
Stop conditions
| Condition | Action |
|---|---|
| Large change gate | Plan + wait |
| Public contract change | Stop, explain, ask |
| Task needs multi-day SDD planning | Redirect to ns-spec-driven |
Related skills
ns-reviewer— mandatory review loop after implementation (Review loop)ns-living-spec— conditional ad-hoc living-spec update afterApproved(Living specs)ns-investigator— blocked by unclear bugns-autonomous— autonomous multi-agent execution (GitLab issue or local plan); GitLab issue usens-execution-gitlab-issueinsteadns-frontend-design— UI/design work (Complement delegation)ns-best-practices— security/CSP/a11y hygiene pass (Complement delegation)ns-docs-writer— README /docs/guides on request (Complement delegation)
Forbidden
- SDD version artifact generation (
docs/versions/, handoff, requirements/tasks) - Living-spec consolidator before
Code Review: Approved, or whendocs/specs/missing - Out-of-repo access without scope
- Commits without explicit request
- Refactors outside task scope
- Review substitutes — Cursor Task subagents (
senior-tech-lead-reviewer,bugbot,security-review) or any review not viareviewer-agent/ns-reviewerSKILL.md. Harnessreviewer-agentallowed. - Skipping re-review — success after
Rejected(including score 9) without a newApprovedround (ad-hoc / C2) - Success without verdict — ad-hoc / C2 closure without mandatory Final report fields and parseable
Code Review:line - Per-task / mid-batch review under handoff —
reviewer-agent/ns-reviewerduringrun-implementationtask or batch (parent owns Step 5)