Dev-only worker: implements its chunk in its own worktree, runs local gates, commits, reports, stops — no PR, no CI, no ticket; pushes only on the brief's word. Triggers: "/we:develop", "implement only", "dev worker", or an /we:orchestrate dispatch.
Install
npx skillscat add weside-ai/claude-code-plugin/develop Install via the SkillsCat registry.
/we:develop
Implement the chunk, run the local gates, commit, report, stop. The Lead's brief outranks every
default below; it never outranks a stop. Your final message is the report the Lead receives.
Contract, finish sequence and report fields:${CLAUDE_PLUGIN_ROOT}/references/worker-dispatch.md § Dev-only worker contract, § Finish sequence,
§ Report.
1. Locate the plan
- A path argument is the plan. A key means
docs/plans/<KEY>-story.md. No argument: ask the Lead
or, invoked by a human, the human. --phases N,Mlimits the chunk to those### Phaseblocks; absent means all phases.- Invoked without a brief, run
${CLAUDE_PLUGIN_ROOT}/skills/story/references/plan-format.md§ The refined scan
and stop on a failed item. A briefed worker skips it; the Lead ran it. - An unanswered
## Open Forkstops you. When the brief or the plan already carries the answer,
build on it and name it in the report. - With a ticket key, read the ticket with its comments (
${CLAUDE_PLUGIN_ROOT}/references/ticketing.md).
A clarifying comment: build the newest statement and name the conflict. A comment that changes
scope after the plan was approved: stop and hand it back as a question.
2. Worktree and branch
- Dispatched with
isolation: "worktree": you are already in your own worktree. Rename itsworktree-…branch to the brief's branch (git branch -m <type>/<KEY>-<slug>) before the first
commit. Dispatched withcwd=<path>: work there on the branch it has. - A brief naming a base branch:
git merge <base>first; your chunk builds on it. - Run the bootstrap the brief names (repo source:
.weside/orchestrate.md) and check its result
before the first gate; a missing venv or database surfaces later as an unrelated error. - Invoked by a human outside a worktree:
EnterWorktree(name="<type>/<KEY>-<slug>"), then the same
rename and bootstrap.
3. Implement
Read the plan completely, then implement its phases in order, inline. A file listed under both
your phases and a phase outside your --phases scope is a shared seam: name it in the report. Per
phase:
- Tests per the brief's test discipline; brief silent →
test_disciplinein.weside/config.json
(tdd: failing test first at each seam ·tests-after, the default: tests after the code, same
change ·off: no new tests unless the plan asks). No implementation-coupled or tautological
tests; mock only at system boundaries. - A new field flows end to end, not only into the model.
- Regenerate and commit the generated artifacts the brief lists. Leave gate baselines to the Lead.
- Commit the phase by path:
<KEY>: phase <N> — <what>with theCo-Authored-By:trailer of the
model running you.
A refactor chunk's last step deletes the characterization tests that a test on the new seam now
asserts; the report's retired: field names each one and the test that replaces it.
4. Local gates
Run the commands yourself; they are deterministic. Scope and exceptions are in the contract:
affected tests only, service-bound tests skipped and listed, the named integration suite for a
critical chunk. A gate failure: fix, commit, re-run. The same gate red three times: stop.
5. Finish, when the brief makes you the last writer
Run the finish sequence (the deterministic gates over the branch, code-review at high through the Skill tool only for
money, auth, tenant isolation or a migration, the ordered verification, the deviations from the plan recorded in it, the
affected gates again) and commit after each step. The brief says "not yours": skip it and say so. Invoked by a human: run it.
6. Report
A critical chunk gets its code-review at high (worker-dispatch.md § Dev-only worker contract) unless
step 5 just ran it; any other chunk gets no LLM review. Push only when the brief says Push: yes (git push -u origin <branch> && git ls-remote --heads origin <branch>; an empty answer is a blocker). Then end with the § Report fields as your final
message, one line per AC with its evidence. Stopping early is a report too: what you
completed, why you stopped, blockers: <reason>.