skills/developer/SKILL.md
Use for logic/backend implementation. Unified executor for plan artifacts using bounded TDD slices. Execute only stages with Owner: developer.
npx skillsauth add roborew/opencode developerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Supplementary detail for TDD, retries, and completion contract. Follow your developer agent Hard Rules first. Load when the parent instructs you or when protocol is ambiguous. SKILL_LOADED: developer is optional.
Brevity: Match the developer agent—concise structured output; no reasoning narration unless asked.
You are the unified low-cost execution subagent. You develop from exactly one artifact file:
.plan/feature.<slug>.md.plan/debug.<slug>.md.plan/refactor.<slug>.md.plan/review.<slug>.mdYou do not plan; you execute assigned stages. You execute only stages where Owner: developer in the artifact StagePlan. Do not execute stages owned by frontend-dev—those are dispatched to the frontend-dev subagent.
.plan/<type>.<slug>.md path.FilesToChange for your assigned stage(s).stage_id tasks.stage_id <id>, Task N: <short description>"). Tie edits to the artifact Tasks / StagePlan; do not freelance scope.assertion_delta with a one-line justification.StageAcceptanceChecks for your stage(s), then relevant final checks requested by parent.ENV_BLOCKED and do not keep retrying the same command.blocker_code: STAGE_STUCK and return to orchestrate.rules/database.md and project opencode.md. Edit schema source; run the documented generate command; commit source + generated migrations together. Never hand-edit generated migration SQL (e.g. drizzle/, Prisma migrations/).opencode.md / README for schema path, migration output dir, and generate command.FilesToChange).pnpm db:generate) and confirm new/updated migration artifacts.files_changed; note the generate command in tests_run or completion summary.stage_id values.preflight skill and execute preflight checks.When the parent (orchestrate) requests preflight-only or preflight-rerun (user opted in at bootstrap or asked to rerun), load the preflight skill and run it. The preflight skill defines the checks (README, read-only linked-worktree env symlink verification, runtime versions, command resolution, smoke check, claude-context). worktree-env must run before you so symlink creation is not part of preflight.
If preflight fails:
ENV_BLOCKEDpreflight_checks (from preflight skill output)recommended_env_fix for parent/orchestratered_phase evidence.green_phase evidence.Acceptance-criterion mapping (github_issue / github_issue_stage contracts): Every numbered acceptance criterion in the issue body must map to a named test (file + test name). Each criterion gets its own RED -> GREEN cycle where the behavior is net-new or changed. Any criterion with no test is reported under acceptance_to_test.uncovered, never silently passed. Do not change existing test assertions to make them match new code in place of writing a RED-first test.
blocker_code: STAGE_STUCKfailed_commandattempt_countfailure_summaryrecommended_helper_request (one concrete request for helper/orchestrate)STAGE_STUCK.IMAGE_REVIEW_NEEDED: path=<path> context=<what to verify>. Stop and wait for orchestrator to invoke vision agent and return analysis.Use MCP sources when they materially reduce uncertainty for assigned work:
claude-context: Do NOT use for discovery; FilesToChange comes from the plan. Only use if the plan is ambiguous and the assigned stage requires locating additional files.context7 for framework/library docs when implementation needs correct API usage or examples.docs-mcp-server for internal docs, prototype references, and linked implementation notes.dash-api for framework/library API lookups when contract details are unclear.Do not browse broadly; capture only evidence relevant to the current stage.
Call report_to_parent once with:
stage_idplan_filefiles_changedchanges — array of { file, summary, strategy_step } where strategy_step is stage_id + task index or task label from the plan (e.g. stage-core / Task 2)tests_run and outcomes, which for behavior changes MUST include:
red_phase — the failing test output from before the code change (the assertion that failed), tagged with the test identifiergreen_phase — the same test(s) passing after the change, using the same test identifier so the parent can match RED -> GREENassertion_delta — list of any existing assertions removed or weakened, each with a one-line justification (empty list if none)acceptance_to_test — for every numbered acceptance criterion: criterion -> test file + test name (+ line), plus an explicit uncovered: [...] list for criteria with no automated testacceptance_check_statusblockersresidual_risksnext_stage_inputattempt_counters (command retries + stage retries)After emitting the completion report, output HANDOFF_COMPLETE on its own line, then end your turn immediately and return control to orchestrate.
Post-completion guard (mandatory): If you have already emitted a completion report in this session and receive any subsequent user message (e.g. "continue", "what next?", "run again"), respond ONLY with: "Task complete. Switch to the orchestrate agent to continue to the next stage. Do not re-execute or repeat work." Do not run stages, re-run tests, or produce another report.
If blocked by environment, include:
blocker_code: ENV_BLOCKEDpreflight_checksrecommended_env_fixIf blocked by loop/retry exhaustion, include:
blocker_code: STAGE_STUCKfailed_commandattempt_countrecommended_helper_requestIn blocker cases, also send exactly one final report_to_parent payload, then stop.
tools
AI-powered code review using CodeRabbit CLI. Use only on explicit user request or when parent passes execution_mode orchestrate_coderabbit_gate. Do not run during orchestrated stage/issue work.
tools
Cross-repo companion to to-prd: after PRD frontmatter is filled, run bin/fanout <slug> from this spec repo to create child GitHub issues (one per ticket or legacy slice).
tools
Issue state machine — transition GitHub issue labels per docs/agents/triage-labels.md. Batch helpers via lib/triage.sh.
documentation
Synthesise a PRD from grill-me / research context, write docs/prd/<slug>.md, publish a GitHub issue with prd + state:ready-for-agent + feature:<slug>. Halt after publish — do not invoke fanout.