Build
π octo β portable AI-agent workflow plugin: plan β build β review-until-clean, a lessons engine that absorbs every bug it sees, an autonomous studio mode, and Mission Control. Every bug leaves a scar; octo remembers. Works with Claude Code and any Agent Skills harness.
npx -y skills add eduardkumskyi/octo --skill buildAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Autonomous task mode: plan with an up-front assumption gate, implement with tests in parallel where file-disjoint, run targeted tests until green (max 5 cycles), review until clean (max 3 iterations), full-suite gate per project weight, then offer a PR. One command, no mid-run questions after the gate.
SKILL.md
11.1 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
Progress Contract
OCTO_ROOT = ${CLAUDE_PLUGIN_ROOT} when set; otherwise two directories above this skill's base directory (skills/<name>/ sits at <plugin-root>/skills/<name>/). Resolve once at start.
Register these steps as a native task list at the start of Step 1, before any exploration. Report progress as "N steps remaining, size class S/M/L" β never wall-clock ETAs.
Register steps in the native task list named π <n>/<total> β <step name>; update each to in_progress/completed as you go β the checklist is the user's primary progress view.
Steps: (1) read-context, (2) plan-gate, (3) implement, (4) test-fix-loop, (5) review, (6) final-gate.
State-write gate: a step has not STARTED until its state.json overwrite and
events.jsonl entry are written. Write state FIRST, then do the step's work β never the
reverse. A growing "updated Xm ago" on the task checklist means you are violating this contract.
Arguments
<task description>β what to build. Required; if omitted, ask once then proceed.
Workflow
Step 1 β Read context and initialize run state
Read the host project's CLAUDE.md. If absent or missing a needed section:
- State what is missing explicitly.
- Offer to scaffold a minimal
CLAUDE.mdand wait for the user's answer. - Detect conventions from repo artifacts (
pyproject.toml,Makefile,package.json, CI config). Label every inferred convention[DETECTED].
If .claude/octo/run/state.json already exists with updated less than 15 minutes old,
another run may be active in this project β raise this at the Step-2 gate as a RISKY item
and get explicit confirmation before overwriting.
Initialize run state:
- Overwrite
.claude/octo/run/state.json:{"mode": "build", "mission": "<task>", "phase": "read-context", "step": 1, "updated": "<ISO>"}. - Append to
.claude/octo/run/events.jsonl:{"ts": "<ISO>", "type": "start", "mode": "build", "mission": "<task>"}.
Create the native task list for this session (all six steps). This is the single source of truth for human-visible progress.
Step 2 β Plan and assumption gate β STOP
Run the /octo:plan workflow (parallel exploration, architect agent, plan file saved to
.claude/plans/). Do not duplicate plan internals here; /octo:plan owns them.
This is the last user contact for this run. Scan ## Assumptions for any item marked
RISKY where the consequence is also hard to reverse (schema migrations, public API removals,
irreversible data transforms). If any such item exists, surface each as a clear question and
wait for answers before saving the plan.
After the gate clears: the run is unattended. Any new ambiguity discovered later is resolved
by choosing the most reversible option and recording it in the plan's ## Assumptions β
never silently, and never by asking the user again.
Append to .claude/octo/run/events.jsonl:
{"ts": "<ISO>", "type": "step", "phase": "plan-gate", "activity": "gate cleared"}.
Step 3 β Implement with tests
First action of this step: overwrite state.json with phase set to "implementing" and
the dispatched lanes β do this before any implementation work begins.
Unattended rule: any new ambiguity β choose the most reversible option and append it as [SAFE]/[RISKY] to the plan's ## Assumptions β never silently, never by asking.
This step is fully unattended β no user checkpoints between tasks (that is /octo:implement's job; /octo:build skips its Step 7 checkpoint intentionally).
For each plan task, dispatch one implementer subagent paired with one test-engineer subagent. File-disjoint tasks run in parallel β dispatch all lanes for a batch in one message (fan-out cap: 10 lanes). Tasks whose affected files overlap with an in-progress batch are deferred until that batch completes.
Note: unlike /octo:implement (N implementers, then one test-engineer for the batch), build pairs an implementer and test-engineer per task β pairs run concurrently and cannot see sibling tasks' changes; the Step 4 test run is where cross-task breakage surfaces.
Pass each subagent: the plan, its specific task, the affected files, and any relevant lessons
from .claude/octo/lessons/*.md.
Failure rule: if a lane errors or reports a RISKY blocker, retry it once with a narrowed scope. After one retry, record the failure in the batch summary and continue remaining lanes β no silent truncation.
At dispatch time, write each lane to .claude/octo/run/state.json (agent, task, started=now).
After each completed batch, dispatch one reviewer agent check (single dispatch,
spec-compliance lens only): does the diff match exactly what the batch's plan tasks demanded β
nothing missing, nothing extra? Missing or extra changes must be fixed before the next batch
begins (unattended rule applies β choose the most reversible fix and record it as an
Assumption). Clear and rewrite lanes in .claude/octo/run/state.json and append to
.claude/octo/run/events.jsonl:
{"ts": "<ISO>", "type": "batch", "tasks": ["<task-id>", ...], "status": "done|partial"}.
Step 4 β Targeted test loop (max 5 cycles)
Unattended rule: any new ambiguity β choose the most reversible option and append it as [SAFE]/[RISKY] to the plan's ## Assumptions β never silently, never by asking.
Run targeted tests for all changed files using /octo:test's selection logic: explicit rules in
CLAUDE.md β mirrored paths β same-name matches β import heuristics, in that order. Always
print the selection and rationale before each run. When the project's test command supports
isolated invocation, targeted-test runs for independent (non-overlapping) test scopes MUST be
dispatched concurrently in a single message β skip this if the test framework shares state
(e.g. a single shared test DB).
If tests fail, dispatch the implementer agent to fix failures and re-run. Repeat for at
most 5 cycles total. If tests are still red after cycle 5: stop immediately, report every
failure with name, assertion, and diagnosis β never claim done over red. Run
bash "$OCTO_ROOT/scripts/notify.sh" "octo build" "blocked: tests red after 5 cycles", write final
.claude/octo/run/state.json, append
{"ts": "<ISO>", "type": "blocked", "reason": "tests red after 5 cycles"}
to .claude/octo/run/events.jsonl, and exit.
On success, append to .claude/octo/run/events.jsonl:
{"ts": "<ISO>", "type": "step", "phase": "test-fix-loop", "activity": "green"}.
Step 5 β Review
Unattended rule: any new ambiguity β choose the most reversible option and append it as [SAFE]/[RISKY] to the plan's ## Assumptions β never silently, never by asking.
Run the /octo:review loop; invoke it with the explicit paths of all files the plan's tasks touched (from the plan's per-task file lists); if Step 3 committed work along the way, use --branch instead so committed changes are included. The review skill's own 3-iteration cap applies; do not re-implement it here.
After each review pass, append one event per confirmed finding:
{"ts":"<ISO>","type":"finding","iteration":<k>,"severity":"<sev>","summary":"<one line>"}.
(studio inherits this via composition β add no duplicate text there.)
If review exits at cap with residual confirmed findings: HIGH/CRITICAL residuals β treat as
blocked (run bash "$OCTO_ROOT/scripts/notify.sh" "octo build" "blocked: unresolved HIGH/CRITICAL findings",
write .claude/octo/run/state.json, append
{"type": "blocked", "reason": "unresolved HIGH/CRITICAL findings"}
event to .claude/octo/run/events.jsonl, stop and report β never proceed over unresolved
HIGH/CRITICAL). LOW/MEDIUM residuals β proceed to Step 6 and list them prominently in the
final report.
Append to .claude/octo/run/events.jsonl:
{"ts": "<ISO>", "type": "step", "phase": "review", "activity": "review complete"}.
Step 6 β Final gate and hand-off
Unattended rule: any new ambiguity β choose the most reversible option and append it as [SAFE]/[RISKY] to the plan's ## Assumptions β never silently, never by asking.
Run the full test suite plus lint. Exception: if CLAUDE.md declares weight: heavy, run
targeted tests only and state that explicitly β the gate is never silently skipped.
On gate failure: run bash "$OCTO_ROOT/scripts/notify.sh" "octo build" "blocked: final gate failed",
write final .claude/octo/run/state.json, append
{"ts": "<ISO>", "type": "blocked", "reason": "final gate failed"}
to .claude/octo/run/events.jsonl, report all failures, and exit.
On gate success:
- Run
bash "$OCTO_ROOT/scripts/notify.sh" "octo build" "done: <mission>". - Produce the final report as a markdown table (columns: Step | Result) listing every step outcome. If the Assumptions list or residual findings are long, write the full detail to
.claude/octo/reports/YYYY-MM-DD-build-<slug>.mdand share the path in chat; in chat show only the table, a count of assumptions, and a count of residual findings. - Update
.claude/octo/brain.md: append any durable findings from this run β new modules discovered, moved responsibilities, conventions verified, gotchas encountered. Brain sections: Architecture / Where things live / Conventions / Danger zones / Key flows. Cap ~150 lines, merge don't duplicate; create the file if absent. - End the chat output with a Try it block produced from verifier evidence: the exact command(s) the user can run to see the result working, plus the verifier's observed output (oneβtwo lines). No delivery without a try-it.
- Offer to run
/octo:prβ do not auto-create the PR.
Append to .claude/octo/run/events.jsonl:
{"ts": "<ISO>", "type": "complete", "mission": "<task>"}.
Shared Conventions
- Commits: conventional format
type(scope): brief descriptionβ no AI attribution, noCo-Authored-Bylines of any kind. - Never push directly to protected branches (protected branches β see the octo guard's list).
- Never use
--no-verifyor force-push. - Parallel-first: dispatches that do not consume each other's output MUST go in a single message. Dispatching sequentially what could run concurrently is a defect, not a style choice. Cap β10 concurrent lanes; more work than lanes β batch waves.
- On failure at any step:
bash "$OCTO_ROOT/scripts/notify.sh" "octo build" "blocked: <reason>", overwrite.claude/octo/run/state.jsonwith the final phase, append{"ts": "<ISO>", "type": "blocked", "reason": "<reason>"}to.claude/octo/run/events.jsonl, and report. - Reader-first output: lead with the outcome in one sentence; keep the visible reply short and dev-readable β only what changes the reader's next action. Full detail (complete reports, evidence, logs) goes to a file under
.claude/octo/reports/YYYY-MM-DD-<skill>-<slug>.mdwith the path given in chat β never dumped into the conversation.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.