{"_id":"@dondragon2/automo","_rev":"6-7e10fd7034ccafec4c995a1418829b4e","name":"@dondragon2/automo","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@dondragon2/automo","version":"0.1.0","_id":"@dondragon2/automo@0.1.0","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"bin":{"automo":"dist/index.js"},"dist":{"shasum":"759bd9f72cc10d73b846d4de5c0a48ca54353086","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.0.tgz","fileCount":18,"integrity":"sha512-tC+n4mVdynmk8WCJnoiM1abbBKbwEKw4KgBgruW3yRSEh+J414PoDWW8PnpYCGfWM+PyLhJMP7epcrTsCvnqXQ==","signatures":[{"sig":"MEUCIQCdg1qjEDepASkuPK09VBDjKJtyJ/yL8ezffS8TWuy7IQIgVg8ESSSqq9+HeLp1AxUNyuYCrQeFt9bPy4G7t4f63GQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13438933},"type":"module","engines":{"bun":">=1.1.0"},"gitHead":"5538c98b345ad9fedbfb7cecbd6169cc0a0f7714","scripts":{"dev":"bunli dev","build":"bunli build","start":"bun index.ts run","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"_npmVersion":"10.9.4","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.4.3","react":"19","react-dom":"19","@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"bunli":"^0.9.1","@types/bun":"latest","@types/node":"latest","@biomejs/biome":"^2.4.15"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/automo_0.1.0_1778691428910_0.6294744784284516","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dondragon2/automo","version":"0.1.1","_id":"@dondragon2/automo@0.1.1","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"bin":{"automo":"dist/index.js"},"dist":{"shasum":"fbbcd61615919624f21b4f76537bd36ab0865421","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.1.tgz","fileCount":18,"integrity":"sha512-xthZ+dLtYYfq4WuBobuE/D/2b0VhWMIpQZ5Uf3lF2NaA7Xjd1m3vxLFDGPfG4+7z5ds3q/zxpo8v9ah7G+QZ7w==","signatures":[{"sig":"MEQCIH0bw+JnwpmfSzuVm0jh5aCX+6Glv6h/coht3lXQREbwAiAYcn3S4t7A4M/LdpnXrTaoBDjL9+WsTx2UdTkiZDR0qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13438950},"type":"module","engines":{"bun":">=1.1.0"},"gitHead":"5538c98b345ad9fedbfb7cecbd6169cc0a0f7714","scripts":{"dev":"bunli dev","build":"bunli build","start":"bun index.ts run","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"_npmVersion":"10.9.4","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.4.3","react":"19","react-dom":"19","@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"bunli":"^0.9.1","@types/bun":"latest","@types/node":"latest","@biomejs/biome":"^2.4.15"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/automo_0.1.1_1778694294733_0.5433554324220695","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dondragon2/automo","version":"0.1.2","_id":"@dondragon2/automo@0.1.2","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"bin":{"automo":"dist/index.js"},"dist":{"shasum":"494bf03b2540823cc487eece2bdf7aba9733bf5b","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.2.tgz","fileCount":18,"integrity":"sha512-DvO2cZS2NbcWz6BnrhXaN/1EkBYduremEkWlk1WTAXzoccfGGuxJ7p0PvP5PM8tXuNiCjAKgkaGU/MYb7YsYMQ==","signatures":[{"sig":"MEUCIGA+Dvj+2xZ/X9KiLyjUrsQiEtmLd8odnaY57WHlWwNXAiEA0b37J8eXTCGX9KD29qxYGhRFhepAYAf8flMTO8wvooU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13438303},"type":"module","engines":{"bun":">=1.1.0"},"gitHead":"956cac4168a5ced43065c854cc45bdc1e96e6a7e","scripts":{"dev":"bunli dev","build":"bunli build","start":"bun index.ts run","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"_npmVersion":"10.9.4","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.4.3","react":"19","react-dom":"19","@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"bunli":"^0.9.1","@types/bun":"latest","@types/node":"latest","@biomejs/biome":"^2.4.15"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/automo_0.1.2_1778886999023_0.9553964807408415","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dondragon2/automo","version":"0.1.3","_id":"@dondragon2/automo@0.1.3","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"bin":{"automo":"dist/index.js"},"dist":{"shasum":"544f36c47b2a881acea6944596ed15f71cf4468c","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.3.tgz","fileCount":18,"integrity":"sha512-J2HbqKYP5t91vrAO/nTX9Tr6lQXVHlnpAsf6ofy2NfWDdvyMSiHtdY3HbtRzZ+FmIXTAbsQ4W9Yx6n2GHpMZjQ==","signatures":[{"sig":"MEUCIHm8DflOd0b5sB6Xd8FYGK6VGWCYb+AUewalnL6Eor/VAiEA6HDgaS85/Z6hrdAq9AaXgrPGRB8OUdoakZxLvk/0Jsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13439296},"type":"module","engines":{"bun":">=1.1.0"},"gitHead":"956cac4168a5ced43065c854cc45bdc1e96e6a7e","scripts":{"dev":"bunli dev","build":"bunli build","start":"bun index.ts run","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"_npmVersion":"10.9.4","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.4.3","react":"19","react-dom":"19","@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"bunli":"^0.9.1","@types/bun":"latest","@types/node":"latest","@biomejs/biome":"^2.4.15"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/automo_0.1.3_1778887278541_0.9210266474298139","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dondragon2/automo","version":"0.1.4","_id":"@dondragon2/automo@0.1.4","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"bin":{"automo":"dist/index.js"},"dist":{"shasum":"a348460bea2deba1fb5fcac0354ce74506f5b8a4","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.4.tgz","fileCount":18,"integrity":"sha512-qA4iU2M4xeQIGNbeyo8E/9ot3OA+MNQw/sEKMKxxWg+rmerEwMkCn9kxilXvxNqXkiyjuAtSotCqh+rcC6TgxA==","signatures":[{"sig":"MEQCHy/XXBi78UBH5V9rIh9O3axbgtABK3s8xIX4VS+vHmUCIQDC2bkad5GZaDTOt5oJd+Wg8z0hh7MMzudQmdDfwtdGIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13439408},"type":"module","engines":{"bun":">=1.1.0"},"gitHead":"956cac4168a5ced43065c854cc45bdc1e96e6a7e","scripts":{"dev":"bunli dev","build":"bunli build","start":"bun index.ts run","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"_npmVersion":"10.9.4","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.4.3","react":"19","react-dom":"19","@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"bunli":"^0.9.1","@types/bun":"latest","@types/node":"latest","@biomejs/biome":"^2.4.15"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/automo_0.1.4_1778887695368_0.9864521081159823","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dondragon2/automo","version":"0.1.5","description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","type":"module","bin":{"automo":"dist/index.js"},"scripts":{"start":"bun index.ts run","dev":"bunli dev","build":"bunli build","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"engines":{"bun":">=1.1.0"},"devDependencies":{"@biomejs/biome":"^2.4.15","@types/bun":"latest","@types/node":"latest","bunli":"^0.9.1"},"peerDependencies":{"typescript":"^5"},"dependencies":{"@bunli/core":"^0.9.1","@bunli/plugin-completions":"^0.3.5","react":"19","react-dom":"19","zod":"^4.4.3"},"_id":"@dondragon2/automo@0.1.5","gitHead":"956cac4168a5ced43065c854cc45bdc1e96e6a7e","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-NzECrv1XgWCqHyX25tz7rZubCzpwvXMBpo4e0+/SB+Wfg3od15NnoME1ClktcnKEc0BjBabiKye6DPG2T4DsLA==","shasum":"d1c915fefcf3bdf5568ea8352fe2edeeddd1c410","tarball":"https://registry.npmjs.org/@dondragon2/automo/-/automo-0.1.5.tgz","fileCount":18,"unpackedSize":13439433,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDWjPHV6Gdmkg8ID42vykR8k/0kYVHIzqmucGZoUGnkswIgBq2EB2TXTdjSTgFM2jxYAdK7DWHcpcLRQ5e2s2qSDCQ="}]},"_npmUser":{"name":"dondragon2","email":"donald.walters@gmail.com"},"directories":{},"maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/automo_0.1.5_1778954863036_0.28582603232382686"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-13T16:57:08.800Z","modified":"2026-05-16T18:07:43.428Z","0.1.0":"2026-05-13T16:57:09.173Z","0.1.1":"2026-05-13T17:44:55.068Z","0.1.2":"2026-05-15T23:16:39.257Z","0.1.3":"2026-05-15T23:21:18.760Z","0.1.4":"2026-05-15T23:28:15.655Z","0.1.5":"2026-05-16T18:07:43.280Z"},"description":"A plan -> implement (parallel) -> merge loop runner for agentic CLIs (claude-code, codex, opencode, pi).","maintainers":[{"name":"dondragon2","email":"donald.walters@gmail.com"}],"readme":"# automo\n\nA `plan → implement (parallel) → merge` loop for agentic CLIs. Pick your harness (claude-code / codex / opencode / pi), point at three prompt files, and let it grind through your GitHub issues.\n\n## Install\n\n```bash\nnpm install -g @dondragon2/automo\n```\n\nRequires `git` and the [`gh` CLI](https://cli.github.com) to be authenticated.\n\nYou also need at least one supported harness installed and available on your `$PATH`:\n\n| Harness | Install |\n|---|---|\n| `claude-code` | [docs.anthropic.com/claude-code](https://docs.anthropic.com/en/docs/claude-code/getting-started) |\n| `codex` | `npm install -g @openai/codex` |\n| `opencode` | [opencode.ai](https://opencode.ai) |\n| `pi` | [pi.ai/talk](https://pi.ai/talk) |\n\n## Usage\n\nThe simplest invocation — bundled default prompts, repo auto-detected via `gh repo view`:\n\n```bash\nautomo --harness codex --model gpt-5.5\n```\n\nOverride anything you want:\n\n```bash\nautomo \\\n  --harness claude-code \\\n  --model sonnet \\\n  --repo acme/widgets \\\n  --plan ./prompts/plan.md \\\n  --implement ./prompts/implement.md \\\n  --merge ./prompts/merge.md \\\n  --max-iterations 5\n```\n\n### Flags\n\n| Flag | Required | Default | Notes |\n|---|---|---|---|\n| `--harness` | yes | — | `claude-code` \\| `codex` \\| `opencode` \\| `pi` |\n| `--plan` | no | bundled `prompts/plan.md` | Plan prompt. `{{REPO}}` substituted. |\n| `--implement` | no | bundled `prompts/implement.md` | Placeholders: `{{TASK_ID}}`, `{{ISSUE_TITLE}}`, `{{BRANCH}}`, `{{REPO}}` |\n| `--merge` | no | bundled `prompts/merge.md` | Placeholders: `{{BRANCHES}}`, `{{ISSUES}}`, `{{REPO}}` |\n| `--repo` | no | `gh repo view` | GitHub repo as `owner/name` |\n| `--model` | no | per-harness default | Passed via the harness's model flag. For `opencode`, omit this to use your configured opencode/OpenRouter default. |\n| `--max-iterations` | no | `10` | Stops here or when plan returns no issues, whichever first |\n| `--main-branch` | no | `main` | Branch feature branches fork from; target of merges |\n| `--log-dir` | no | `.automo-logs` | Per-phase stdout/stderr logs |\n| `--dry-run` | no | `false` | Print spawn lines; touch no git, run no harness |\n\n## How it works\n\nEach iteration runs three phases:\n\n1. **Plan** — runs once on the main branch. The harness must output a `<plan>{...}</plan>` JSON block listing the issues to work on.\n2. **Implement** — spawns one process per issue, all in parallel. Each job gets its own `git worktree` under `.automo-worktrees/issue-<id>/` on its own branch, so concurrent agents never trample each other. A job is considered complete when its stdout contains `<promise>COMPLETE</promise>`.\n3. **Merge** — checks out main, runs the merge prompt with `{{BRANCHES}}` and `{{ISSUES}}` filled in (completed jobs only), then removes each merged worktree.\n\nLogs land in `--log-dir` as `iter-N-plan.log`, `iter-N-impl-<id>.log`, `iter-N-merge.log`.\n\n## Bundled prompts\n\nThe package ships three default prompts:\n\n- `plan.md` — analyzes open GitHub issues labeled `Automo` and outputs a dependency-aware plan\n- `implement.md` — pulls an issue, works in a red-green-refactor cycle, runs typecheck/tests, commits with `AUTOMO:` prefix\n- `merge.md` — merges branches, resolves conflicts, closes issues\n\nOverride any of them with the corresponding flag if your workflow differs.\n\n## Resume / interruption\n\nWorktrees and branches are reused if they already exist — killing and restarting picks up where it left off. Jobs that didn't emit `<promise>COMPLETE</promise>` are skipped during merge and will reappear in the next plan if still open.\n\n## Dry run\n\n```bash\nautomo --harness claude-code --dry-run\n```\n\nPrints what would happen, fabricates a single fake issue so you can see the loop flow, doesn't touch git or spawn the harness.\n","readmeFilename":"README.md"}