{"_id":"@autosk/feature-dev-cc","_rev":"3-80d179d93d0ab5b07596b7ea3e762f04","name":"@autosk/feature-dev-cc","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@autosk/feature-dev-cc","version":"0.1.0","keywords":["autosk","autosk-extension","autosk-workflow"],"author":{"name":"wierdbytes"},"license":"MIT","_id":"@autosk/feature-dev-cc@0.1.0","maintainers":[{"name":"wierdbytes","email":"wb@xff.pw"}],"homepage":"https://github.com/wierdbytes/autosk#readme","bugs":{"url":"https://github.com/wierdbytes/autosk/issues"},"dist":{"shasum":"4bc03632f85099c82ef1065d714444170dc5284f","tarball":"https://registry.npmjs.org/@autosk/feature-dev-cc/-/feature-dev-cc-0.1.0.tgz","fileCount":9,"integrity":"sha512-C9gAYl1ZdS0EO0BuG8Mk9G629wYBnzWAWM0tHhg0kXwdL9TSpGb4DgwxMNh8Sj7nEBB/FBZz/0tBhrxVwZD+mQ==","signatures":[{"sig":"MEYCIQCGrWhOZ7ftkHnMWeBWSA1yJ9pr32rBp0wBJK4tRGhacgIhAL3ePSsjdk0+MdHVJbnxXDsA6i8d6zwHjDiy415JUrKy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21116},"type":"module","types":"./index.ts","autosk":{"extensions":["./index.ts"]},"exports":{".":"./index.ts"},"gitHead":"505c70bc48c36b4ecdfc022f9aedb85e7b66653f","scripts":{"typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"wierdbytes","email":"wb@xff.pw"},"repository":{"url":"git+https://github.com/wierdbytes/autosk.git","type":"git","directory":"daemon/extensions/feature-dev-cc"},"_npmVersion":"11.9.0","description":"feature-dev-cc (dev → review → docs → validator → accept) wired to @autosk/claude-agent roles and worktree isolation — use your Claude Code","directories":{},"_nodeVersion":"25.6.1","dependencies":{"@autosk/sdk":"^0.1.0","@autosk/worktree":"^0.1.0","@autosk/claude-agent":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/feature-dev-cc_0.1.0_1781824175644_0.5821321672385458","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@autosk/feature-dev-cc","version":"0.1.1","keywords":["autosk","autosk-extension","autosk-workflow"],"author":{"name":"wierdbytes"},"license":"MIT","_id":"@autosk/feature-dev-cc@0.1.1","maintainers":[{"name":"wierdbytes","email":"wb@xff.pw"}],"homepage":"https://github.com/wierdbytes/autosk#readme","bugs":{"url":"https://github.com/wierdbytes/autosk/issues"},"dist":{"shasum":"aa44f16afe91e5382a1dccca10191be016aa7034","tarball":"https://registry.npmjs.org/@autosk/feature-dev-cc/-/feature-dev-cc-0.1.1.tgz","fileCount":9,"integrity":"sha512-hHNmsFxxXeenjyk/eFJ3s+MM/ocakIJVNx9d6AoewA15DyJ4x77fItnh4mayXI3naTfcAkJ1bmDWs3JoyBDBeg==","signatures":[{"sig":"MEYCIQCO4075MoTtTw55qrWPiJBolc9yakTVd9uZxeQjQhYmIAIhAOp+9jyTbj/m2fW0GD+0x1SQL5dxlZCQ1P16g2b9HjRK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22871},"type":"module","types":"./index.ts","autosk":{"extensions":["./index.ts"]},"exports":{".":"./index.ts"},"gitHead":"6e4189216039fd42317f92d84106b7415ac1e9dd","scripts":{"typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"wierdbytes","email":"wb@xff.pw"},"repository":{"url":"git+https://github.com/wierdbytes/autosk.git","type":"git","directory":"daemon/extensions/feature-dev-cc"},"_npmVersion":"11.9.0","description":"feature-dev-cc (dev → review → docs → validator → accept) wired to @autosk/claude-agent roles and an @autosk/sandbox worktree + cleanup step — use your Claude Code","directories":{},"_nodeVersion":"25.6.1","dependencies":{"@autosk/sdk":"^0.1.0","@autosk/sandbox":"^0.1.0","@autosk/claude-agent":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/feature-dev-cc_0.1.1_1782167556086_0.8895444570708506","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@autosk/feature-dev-cc","version":"0.1.2","description":"feature-dev-cc (dev → review → docs → validator → accept) wired to @autosk/claude-agent roles and an @autosk/sandbox worktree + cleanup step — use your Claude Code","license":"MIT","author":{"name":"wierdbytes"},"homepage":"https://github.com/wierdbytes/autosk#readme","repository":{"type":"git","url":"git+https://github.com/wierdbytes/autosk.git","directory":"daemon/extensions/feature-dev-cc"},"bugs":{"url":"https://github.com/wierdbytes/autosk/issues"},"keywords":["autosk","autosk-extension","autosk-workflow"],"type":"module","publishConfig":{"access":"public"},"exports":{".":"./index.ts"},"types":"./index.ts","autosk":{"extensions":["./index.ts"]},"dependencies":{"@autosk/claude-agent":"^0.1.0","@autosk/sandbox":"^0.1.0","@autosk/sdk":"^0.1.0"},"scripts":{"typecheck":"tsc --noEmit -p tsconfig.json"},"gitHead":"1e94bfc5ca5d57efb3690e1bcd6e4775dcdf87f6","_id":"@autosk/feature-dev-cc@0.1.2","_nodeVersion":"25.6.1","_npmVersion":"11.9.0","dist":{"integrity":"sha512-+tCjbEGn6EVgMuTIC88GRx+tiWCiejFjRPpuDCAdCktYZDrqQ7QzE6D+XNRVfzUOYx+de0ngn3jGo4Hz5spjFA==","shasum":"4241178d768ac25612ef12f73fac5ba89bb92fff","tarball":"https://registry.npmjs.org/@autosk/feature-dev-cc/-/feature-dev-cc-0.1.2.tgz","fileCount":9,"unpackedSize":23564,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAo87WieRoe71BGbxBvDzJkhDQx6UUk5uVBOSTPuYQ0OAiBMkQWOVwYGD04ZKl3PTVgtvY2MJ+yPk5qy8F6QhVtrqg=="}]},"_npmUser":{"name":"wierdbytes","email":"wb@xff.pw"},"directories":{},"maintainers":[{"name":"wierdbytes","email":"wb@xff.pw"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/feature-dev-cc_0.1.2_1782170159668_0.9494673513980612"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T23:09:35.450Z","modified":"2026-06-22T23:15:59.927Z","0.1.0":"2026-06-18T23:09:35.795Z","0.1.1":"2026-06-22T22:32:36.234Z","0.1.2":"2026-06-22T23:15:59.802Z"},"bugs":{"url":"https://github.com/wierdbytes/autosk/issues"},"author":{"name":"wierdbytes"},"license":"MIT","homepage":"https://github.com/wierdbytes/autosk#readme","keywords":["autosk","autosk-extension","autosk-workflow"],"repository":{"type":"git","url":"git+https://github.com/wierdbytes/autosk.git","directory":"daemon/extensions/feature-dev-cc"},"description":"feature-dev-cc (dev → review → docs → validator → accept) wired to @autosk/claude-agent roles and an @autosk/sandbox worktree + cleanup step — use your Claude Code","maintainers":[{"name":"wierdbytes","email":"wb@xff.pw"}],"readme":"# @autosk/feature-dev-cc\n\nThe **Claude Code twin** of [`@autosk/feature-dev`](../feature-dev/README.md): the\nsame full feature-development cycle, but every agent step is an inline\n[`@autosk/claude-agent`](../claude-agent/README.md) role (driving `claude -p`\nheadless stream-json) instead of an [`@autosk/pi-agent`](../pi-agent/README.md)\nrole. Each agent runs its harness in a per-task [`@autosk/sandbox`](../sandbox/README.md),\nand teardown is a normal `cleanup` step. This package registers the\n`feature-dev-cc` workflow (a `worktreeSandbox()` — claude on the host, in the\nworktree).\n\n> A Claude **`dockerSandbox`** variant is deferred; the thin operator image\n> already lives at [`../claude-agent/docker/`](../claude-agent/docker/README.md)\n> for when it lands. (The pi cycle's docker variant ships today as\n> [`@autosk/feature-dev-docker`](../feature-dev-docker/README.md).)\n\n## The workflow\n\n```text\ndev ──▶ review ──▶ docs ──▶ validator ──▶ accept (human) ──▶ cleanup ──▶ done\n ▲        │                    │\n └────────┘────────────────────┘   (review→dev and validator→dev bounce-backs)\n```\n\n| Step        | Kind                            | Notes                                                        |\n| ----------- | ------------------------------- | ------------------------------------------------------------ |\n| `dev`       | `claudeAgent` (name `dev`)      | first step; implements the task                              |\n| `review`    | `claudeAgent` (name `review`)   | thorough code review (`effort: \"xhigh\"`); bounces back to `dev` |\n| `docs`      | `claudeAgent` (name `docs`)     | documentation pass (leaves `CHANGELOG.md` to `validator`)    |\n| `validator` | `claudeAgent` (name `validator`)| independent item-by-item verification; on success runs release hygiene (CHANGELOG `[Unreleased]` + a clean, committed worktree) before `accept`; bounces back to `dev` |\n| `accept`    | `statusStep(\"human\")`           | the engine parks here for a human's final acceptance         |\n| `cleanup`   | `sandboxCleanupStep(sandbox)`   | removes the worktree (branch preserved), then transits to `done` |\n\nEach agent step is an inline `@autosk/claude-agent` value: the **step key is the\nagent name** (`dev`/`review`/`docs`/`validator`), and registering the workflow\nregisters those agents — there is no separate agent registration.\n\n- **Sandbox:** `worktreeSandbox()` — each task runs in its own git worktree, torn\n  down by the `cleanup` step (route terminals through it so a task never leaks\n  its worktree now that `done`/`cancel` are a raw flip).\n- **Permissions:** every agent step runs with `dangerouslySkipPermissions: true`\n  (`--dangerously-skip-permissions`) — the run is unattended (a headless\n  permission prompt would abort the turn) and isolated in its per-task worktree\n  sandbox, so the worktree is the safety boundary.\n- **Visit cap:** `onTransit` rejects a bounce-back into `dev` once the task has\n  already entered `dev` `DEV_VISIT_CAP` (5) times — the 6th `dev` entry is\n  rejected (via `ctx.visits(\"dev\")`), so a task that keeps failing review/\n  validation parks for a human instead of looping forever. The count is the\n  persistent `metadata.step_visits.dev` the engine maintains; reset it with\n  `autosk metadata unset <id> step_visits` to let a parked task bounce through\n  `dev` again.\n\nThe role prompts live under [`prompts/`](./prompts) as `.md` files; the workflow\nreads each one and seeds it into the corresponding Claude agent as its\n`firstMessage`. They are adapted from `feature-dev`'s prompts for the Claude MCP\ntool surface — each prompt instructs the model to use the `comment` tool and to\ncall the `transit` tool exactly once (the model sees these as\n`mcp__autosk__comment` / `mcp__autosk__transit`).\n\n## Requirements\n\nBecause the agent steps are `@autosk/claude-agent`, the same runtime\nrequirements apply (see that package's README):\n\n- **`claude`** (the Claude Code CLI) on `PATH`, or `$AUTOSK_CLAUDE_BIN`, already\n  authenticated (the headless run is unattended).\n- **No `autosk` in the run environment** — the `task` / `comment` / `transit`\n  tools are served by the per-session host-side HTTP MCP server (`type:\"http\"` +\n  a bearer), so neither the CLI nor a mounted daemon socket is needed.\n- A **git repo** at the project root (the per-task worktree).\n\n## Install — local checkout (for testing)\n\n`feature-dev-cc` is **not** part of the first-run bootstrap (unlike\n`feature-dev`). Add it explicitly. Because it depends on `@autosk/claude-agent`\n(which is not yet bootstrapped either), the most reliable way to test it is to\ninstall this directory **in place** from the repo checkout, where its\n`@autosk/*` deps resolve through the Bun workspace:\n\n```bash\n# from anywhere — point autosk at this directory (loaded in place, never copied)\nautosk ext add /ABS/PATH/TO/autosk/daemon/extensions/feature-dev-cc\n\n# or scope it to the current project only\nautosk ext add -l /ABS/PATH/TO/autosk/daemon/extensions/feature-dev-cc\n\n# the registry is built once per daemon start, so restart / reopen the project:\nautosk workflow list            # feature-dev-cc should appear\nautosk enroll <task-id> --workflow feature-dev-cc\n# or create + enroll in one shot:\nautosk create \"Fix the flaky test\" --workflow feature-dev-cc\n```\n\nExtensions are loaded once when a project is first opened and cached for the\ndaemon's lifetime — a freshly-added extension is picked up only on the **next\ndaemon start / first project open**, so restart the daemon (or reopen the\nproject) after `ext add`. If the workflow does not show up, check\n`autosk project diagnostics` for a load error (e.g. an unresolved\n`@autosk/claude-agent`).\n\n## Configuration\n\nThis package exposes no per-step config knobs of its own — the agent behaviour\nis configured on the inline [`@autosk/claude-agent`](../claude-agent/README.md)\nstep values (model, effort, permission posture, extra args, …) inside\n`featureDevCcWorkflow()`. To customise, copy this extension into\n`~/.autosk/extensions/` (or your project's `.autosk/extensions/`) and edit the\n`claudeAgent({...})` / `featureDevCcWorkflow({...})` calls; your copy then\noverrides this one by name.\n\n## Exports\n\n- default export — the extension factory (registers the workflow, whose steps\n  carry the four inline Claude agents).\n- `featureDevCcWorkflow(options?)` → `WorkflowDefinition` (a factory; tests inject\n  a custom `sandbox`, and a future docker sibling can reuse it under a distinct\n  `name`).\n- `DEV_VISIT_CAP` — the `dev` re-entry cap constant.\n","readmeFilename":"README.md"}