oscaner/skills/cdd-dev
Claude Code and agent skill by oscaner/skills
- community
Checking that the SKILL.md file is still in the repository.
Independent cdd-dev orchestrator -- Node-anchored flow with digraph as single control-flow source of truth. Determines base via the engine artifact, dispatches the CDD implement / review / fix chain following the engine's next face, and runs the branch final review — the engine's next directive carries the pipeline continuation. Callable standalone; referenced by no other skill.
Install
npx vskill@latest install oscaner/skills/cdd-devSKILL.md
Kairos CDD-Dev
Executes planned tasks through the engine's implement / review / fix chain — its own orchestrator decisions (mode chain, final review) following the engine's next: face, with no installed-engine precondition (npx pulls the engine on demand); on closure that face carries the pipeline continuation.
Invocation discipline — every engine command runs via npx -y @oscaner-skills/cdd-engine@latest <subcommand> as a background dispatch: launch it in the background and await the completion notification — never poll — then read the full output (stdout/stderr). Output filtering is forbidden — no piping to tail/head, no 2>&1 |, no EXIT=$? capture. Dispatch boundary — the obligation runs both ways: a dispatched child carries every verification / build command to completion inside its own turn, never ending that turn to await a background task it launched itself — ending the turn terminates the child, so the awaited notification never arrives and the round dies half-finished while still looking successful; the launching side certifies success by the terminal contract (a clean working tree and the target action actually completed), never by exit code 0. Round rhythm — one review pass per dispatch; a fix round re-enters the review while the route is not done; the implement child commits its own work; ensure the working tree is clean before entering review (dirty → BLOCKED); the orchestrator writes no tree during dispatch. Approval gate — before the first implement / review / fix dispatch of a slug, submit the plan this dispatch implements together with the self-check conclusion that approved it to the author and stop; dispatch only after an explicit approval, and a dispatch without one is a violation — the submitted line declares the plan's authorship plainly: this document was written by the orchestrator in this session. Write authority — the spec's and the plan's creation stays the orchestrator's, written in this session and never handed wholesale to a subagent; the dispatched implement and fix rounds may amend their content face (facts, file lists, steps, acceptance detail, cited line numbers), never their structure face — the plan's Task id set and every task's DependsOn set — which the engine snapshots at dispatch and judges hard on a round-internal change. Round logs — every dispatch child's own output lands in .kairos/cdd/<slug>/logs/<stem>.log, and a failing round's CDD_BLOCKED line on stderr names that path: read the child's output there, never from stdout. Failure face — cross-node failure handling lives in the Failure Modes table below (the single source); node Fail entries keep only local behavior.
Flow Digraph
Node Definitions
determine-base
- Do: Resolve the base branch — inference sources in order: plan
basefield → branch upstream (git rev-parse --abbrev-ref @{u}) → conversation context; if none yields a definitive base, ask the user — do not guess. The base may already be present in the artifact (npx -y @oscaner-skills/cdd-engine@latest base get --plan <path>); skip inference when the artifact is present. - Read: plan document + git upstream + conversation context +
npx -y @oscaner-skills/cdd-engine@latest base get --plan <path> - Exit: base resolved →
set-base - Fail: user refuses to confirm → BLOCKED: base-undecided
set-base
- Do: Persist the base via the engine CLI —
npx -y @oscaner-skills/cdd-engine@latest base set --plan <path> --base <branch> --source <enum>, wheresourceisplan-field|branch-upstream|conversation-context|user-confirmed. The engine is the sole write/read path for the artifact — never hand-write it;setis idempotent, refusals and validation errors are engine-handled. - Read:
npx -y @oscaner-skills/cdd-engine@latest base get --plan <path>(the artifact on stdout) - Exit: artifact written (or already present) →
implement-wave - Fail: engine refusal / validation error → report to user; user decides (no hand-written artifact)
implement-wave
- Do: Dispatch
npx -y @oscaner-skills/cdd-engine@latest implement --tasks <n|n,n,…> --plan <path>— one dispatch wave per iteration; dispatch each wave as the engine returns it, never a hand-picked subset. A pre-flight row readingplan leads ledger by N tasksis a hint, not an error — the plan legitimately runs ahead of the ledger, so dispatch the new wave as usual. A round cut short is recovered from the working tree: look at the working tree first, commit the changes that work, discard the ones that are broken. - Read: the full stdout — its conclusion and the engine's
next:face; a BLOCKED round's reason rides stderr - Exit: dispatch complete →
NEXT-LOOP - Fail: nested CLI exits with no output → BLOCKED: engine-error (report via
kairos:cdd-report(pi:/skill:cdd-report))
NEXT-LOOP
- Do: Run the wave review-fix rhythm through the engine — one review pass per dispatch. Dispatch the wave review (
npx -y @oscaner-skills/cdd-engine@latest review --type wave --tasks <n|n,n,…> --plan <path>); every later hop follows the engine'snext:face — including the branch line, which the engine routes on its own. Fixes dispatch via the fix round — never an in-place edit as a substitute; a BLOCKED/TIMEOUT round's carried reason is reported, never overridden; a soft-cap suggestion is a user decision point — report it, never retry past it. - Read: the full stdout — the review conclusion, the findings handoff path, and the engine's
next:face - Exit: each fix / next-wave pass re-enters this hub while that route keeps the loop alive (the
until next is terminalself-loop); a route that leaves the loop ends this skill's flow - Fail: review exits with no output → BLOCKED: engine-error
Invariants
| # | Invariant | |
|---|---|---|
| I1 | Host Harness Autodetection — the engine resolves the host harness itself; the orchestrator never passes a harness name down to the CLI | |
| I2 | Review Convergence — a review closes by its conclusion (APPROVED / CHANGES_REQUESTED / REVIEW_FIX); the loop advances by the engine's next: face. A mid-backfill or a user adjudication that lands governs over the suggestion (current world state wins). Fixes always dispatch via the fix round; the orchestrator must not edit in place as a substitute; a fix commit makes the next review a new review | |
| I3 | Wave-Chain Completeness — every dispatch wave (a singleton task or a merged wave) goes through the full implement → review → (fix if findings) chain; review is unskippable, and a fix dispatch requires a prior review handoff for that wave | |
| I4 | No Controller Bypass — the orchestrator must not hand-write control-flow bypasses; all task execution / review / fix dispatch go through engine CLI calls, and the engine's next: face decides the order — never orchestrator guesswork | |
| I5 | Mid-Flight Backfill — a user-raised backfill of overall/spec/plan docs surfaced while a dispatch is in flight lands through four ordered steps on the current call's return: (1) land immediately — hot context, no deferral; (2) commit on its own — a standalone change, never mixed with implementation commits; (3) pause the loop until clean — an uncommitted backfill trips the next review's entry gate (dirty → BLOCKED); (4) audit in-band on resume — the next review audits the backfill in-band; a backfill rewriting the current task's own plan/spec text routes through the orchestrator's plan write authority |
Failure Modes
Cross-node failure handling (complements node Fail fields):
| category | handling | |
|---|---|---|
| TIMEOUT | a round that timed out; retry within the handoff's counters cap, then terminal per the output contract | |
| BLOCKED | a round the engine refused to advance (no next: line); report the carried reason to the user and let them decide — never silently override the plan | |
| HARD_ERROR | a completed round with no next: line that is not BLOCKED/TIMEOUT — report the carried reason; re-run the same command to continue | |
| branch blockers persist | implicit fail-open — stop + report; the branch is preserved and the user decides (the branch line carries its own closure through the engine's next face) |
Fail-open vs BLOCKED convention:
- BLOCKED: explicit terminal state; requires user intervention to recover.
- implicit fail-open: node-level failure (not in digraph); flow stops + reports to user.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/kairos/skills/cdd-dev/SKILL.md
Popularity
- Repository stars
- 64
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/oscaner/skills/cdd-dev)