@the-open-engine/zeroshot 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/CHANGELOG.md +539 -0
  2. package/LICENSE +21 -0
  3. package/README.md +508 -0
  4. package/cli/commands/inspect-render.js +135 -0
  5. package/cli/commands/inspect.js +294 -0
  6. package/cli/commands/providers.js +149 -0
  7. package/cli/index.js +5431 -0
  8. package/cli/lib/first-run.js +211 -0
  9. package/cli/lib/update-checker.js +281 -0
  10. package/cli/message-formatter-utils.js +75 -0
  11. package/cli/message-formatters-normal.js +275 -0
  12. package/cli/message-formatters-watch.js +185 -0
  13. package/cluster-templates/base-templates/debug-workflow.json +422 -0
  14. package/cluster-templates/base-templates/full-workflow.json +727 -0
  15. package/cluster-templates/base-templates/heavy-validation.json +272 -0
  16. package/cluster-templates/base-templates/quick-validation.json +285 -0
  17. package/cluster-templates/base-templates/single-worker.json +71 -0
  18. package/cluster-templates/base-templates/worker-validator.json +230 -0
  19. package/cluster-templates/conductor-bootstrap.json +130 -0
  20. package/docker/zeroshot-cluster/Dockerfile +153 -0
  21. package/docker/zeroshot-cluster/pre-baked-deps.json +28 -0
  22. package/lib/agent-cli-provider/adapters/claude-parser.d.ts +3 -0
  23. package/lib/agent-cli-provider/adapters/claude-parser.d.ts.map +1 -0
  24. package/lib/agent-cli-provider/adapters/claude-parser.js +122 -0
  25. package/lib/agent-cli-provider/adapters/claude-parser.js.map +1 -0
  26. package/lib/agent-cli-provider/adapters/claude-recovery.d.ts +15 -0
  27. package/lib/agent-cli-provider/adapters/claude-recovery.d.ts.map +1 -0
  28. package/lib/agent-cli-provider/adapters/claude-recovery.js +165 -0
  29. package/lib/agent-cli-provider/adapters/claude-recovery.js.map +1 -0
  30. package/lib/agent-cli-provider/adapters/claude.d.ts +3 -0
  31. package/lib/agent-cli-provider/adapters/claude.d.ts.map +1 -0
  32. package/lib/agent-cli-provider/adapters/claude.js +181 -0
  33. package/lib/agent-cli-provider/adapters/claude.js.map +1 -0
  34. package/lib/agent-cli-provider/adapters/codex-parser.d.ts +3 -0
  35. package/lib/agent-cli-provider/adapters/codex-parser.d.ts.map +1 -0
  36. package/lib/agent-cli-provider/adapters/codex-parser.js +192 -0
  37. package/lib/agent-cli-provider/adapters/codex-parser.js.map +1 -0
  38. package/lib/agent-cli-provider/adapters/codex.d.ts +3 -0
  39. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -0
  40. package/lib/agent-cli-provider/adapters/codex.js +151 -0
  41. package/lib/agent-cli-provider/adapters/codex.js.map +1 -0
  42. package/lib/agent-cli-provider/adapters/common.d.ts +28 -0
  43. package/lib/agent-cli-provider/adapters/common.d.ts.map +1 -0
  44. package/lib/agent-cli-provider/adapters/common.js +71 -0
  45. package/lib/agent-cli-provider/adapters/common.js.map +1 -0
  46. package/lib/agent-cli-provider/adapters/gemini.d.ts +3 -0
  47. package/lib/agent-cli-provider/adapters/gemini.d.ts.map +1 -0
  48. package/lib/agent-cli-provider/adapters/gemini.js +176 -0
  49. package/lib/agent-cli-provider/adapters/gemini.js.map +1 -0
  50. package/lib/agent-cli-provider/adapters/index.d.ts +9 -0
  51. package/lib/agent-cli-provider/adapters/index.d.ts.map +1 -0
  52. package/lib/agent-cli-provider/adapters/index.js +95 -0
  53. package/lib/agent-cli-provider/adapters/index.js.map +1 -0
  54. package/lib/agent-cli-provider/adapters/opencode.d.ts +3 -0
  55. package/lib/agent-cli-provider/adapters/opencode.d.ts.map +1 -0
  56. package/lib/agent-cli-provider/adapters/opencode.js +228 -0
  57. package/lib/agent-cli-provider/adapters/opencode.js.map +1 -0
  58. package/lib/agent-cli-provider/contract-actions.d.ts +5 -0
  59. package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -0
  60. package/lib/agent-cli-provider/contract-actions.js +140 -0
  61. package/lib/agent-cli-provider/contract-actions.js.map +1 -0
  62. package/lib/agent-cli-provider/contract-env.d.ts +11 -0
  63. package/lib/agent-cli-provider/contract-env.d.ts.map +1 -0
  64. package/lib/agent-cli-provider/contract-env.js +113 -0
  65. package/lib/agent-cli-provider/contract-env.js.map +1 -0
  66. package/lib/agent-cli-provider/contract-envelope.d.ts +49 -0
  67. package/lib/agent-cli-provider/contract-envelope.d.ts.map +1 -0
  68. package/lib/agent-cli-provider/contract-envelope.js +52 -0
  69. package/lib/agent-cli-provider/contract-envelope.js.map +1 -0
  70. package/lib/agent-cli-provider/contract-errors.d.ts +22 -0
  71. package/lib/agent-cli-provider/contract-errors.d.ts.map +1 -0
  72. package/lib/agent-cli-provider/contract-errors.js +71 -0
  73. package/lib/agent-cli-provider/contract-errors.js.map +1 -0
  74. package/lib/agent-cli-provider/contract-fallback.d.ts +7 -0
  75. package/lib/agent-cli-provider/contract-fallback.d.ts.map +1 -0
  76. package/lib/agent-cli-provider/contract-fallback.js +102 -0
  77. package/lib/agent-cli-provider/contract-fallback.js.map +1 -0
  78. package/lib/agent-cli-provider/contract-invoke.d.ts +5 -0
  79. package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -0
  80. package/lib/agent-cli-provider/contract-invoke.js +89 -0
  81. package/lib/agent-cli-provider/contract-invoke.js.map +1 -0
  82. package/lib/agent-cli-provider/contract-options.d.ts +3 -0
  83. package/lib/agent-cli-provider/contract-options.d.ts.map +1 -0
  84. package/lib/agent-cli-provider/contract-options.js +140 -0
  85. package/lib/agent-cli-provider/contract-options.js.map +1 -0
  86. package/lib/agent-cli-provider/contract-parse.d.ts +15 -0
  87. package/lib/agent-cli-provider/contract-parse.d.ts.map +1 -0
  88. package/lib/agent-cli-provider/contract-parse.js +81 -0
  89. package/lib/agent-cli-provider/contract-parse.js.map +1 -0
  90. package/lib/agent-cli-provider/contract-support.d.ts +18 -0
  91. package/lib/agent-cli-provider/contract-support.d.ts.map +1 -0
  92. package/lib/agent-cli-provider/contract-support.js +154 -0
  93. package/lib/agent-cli-provider/contract-support.js.map +1 -0
  94. package/lib/agent-cli-provider/contract.d.ts +13 -0
  95. package/lib/agent-cli-provider/contract.d.ts.map +1 -0
  96. package/lib/agent-cli-provider/contract.js +30 -0
  97. package/lib/agent-cli-provider/contract.js.map +1 -0
  98. package/lib/agent-cli-provider/env-safety.d.ts +11 -0
  99. package/lib/agent-cli-provider/env-safety.d.ts.map +1 -0
  100. package/lib/agent-cli-provider/env-safety.js +83 -0
  101. package/lib/agent-cli-provider/env-safety.js.map +1 -0
  102. package/lib/agent-cli-provider/errors.d.ts +5 -0
  103. package/lib/agent-cli-provider/errors.d.ts.map +1 -0
  104. package/lib/agent-cli-provider/errors.js +115 -0
  105. package/lib/agent-cli-provider/errors.js.map +1 -0
  106. package/lib/agent-cli-provider/executable.d.ts +3 -0
  107. package/lib/agent-cli-provider/executable.d.ts.map +1 -0
  108. package/lib/agent-cli-provider/executable.js +24 -0
  109. package/lib/agent-cli-provider/executable.js.map +1 -0
  110. package/lib/agent-cli-provider/index.d.ts +8 -0
  111. package/lib/agent-cli-provider/index.d.ts.map +1 -0
  112. package/lib/agent-cli-provider/index.js +31 -0
  113. package/lib/agent-cli-provider/index.js.map +1 -0
  114. package/lib/agent-cli-provider/invoke-evidence.d.ts +4 -0
  115. package/lib/agent-cli-provider/invoke-evidence.d.ts.map +1 -0
  116. package/lib/agent-cli-provider/invoke-evidence.js +17 -0
  117. package/lib/agent-cli-provider/invoke-evidence.js.map +1 -0
  118. package/lib/agent-cli-provider/json.d.ts +16 -0
  119. package/lib/agent-cli-provider/json.d.ts.map +1 -0
  120. package/lib/agent-cli-provider/json.js +110 -0
  121. package/lib/agent-cli-provider/json.js.map +1 -0
  122. package/lib/agent-cli-provider/log-prefix.d.ts +2 -0
  123. package/lib/agent-cli-provider/log-prefix.d.ts.map +1 -0
  124. package/lib/agent-cli-provider/log-prefix.js +22 -0
  125. package/lib/agent-cli-provider/log-prefix.js.map +1 -0
  126. package/lib/agent-cli-provider/process-runner.d.ts +17 -0
  127. package/lib/agent-cli-provider/process-runner.d.ts.map +1 -0
  128. package/lib/agent-cli-provider/process-runner.js +89 -0
  129. package/lib/agent-cli-provider/process-runner.js.map +1 -0
  130. package/lib/agent-cli-provider/redaction.d.ts +9 -0
  131. package/lib/agent-cli-provider/redaction.d.ts.map +1 -0
  132. package/lib/agent-cli-provider/redaction.js +227 -0
  133. package/lib/agent-cli-provider/redaction.js.map +1 -0
  134. package/lib/agent-cli-provider/schema.d.ts +5 -0
  135. package/lib/agent-cli-provider/schema.d.ts.map +1 -0
  136. package/lib/agent-cli-provider/schema.js +136 -0
  137. package/lib/agent-cli-provider/schema.js.map +1 -0
  138. package/lib/agent-cli-provider/single-agent-runtime.d.ts +15 -0
  139. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -0
  140. package/lib/agent-cli-provider/single-agent-runtime.js +228 -0
  141. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -0
  142. package/lib/agent-cli-provider/types.d.ts +194 -0
  143. package/lib/agent-cli-provider/types.d.ts.map +1 -0
  144. package/lib/agent-cli-provider/types.js +12 -0
  145. package/lib/agent-cli-provider/types.js.map +1 -0
  146. package/lib/completion.js +174 -0
  147. package/lib/detached-startup.js +220 -0
  148. package/lib/docker-config.js +220 -0
  149. package/lib/git-remote-utils.js +165 -0
  150. package/lib/id-detector.js +55 -0
  151. package/lib/provider-defaults.js +62 -0
  152. package/lib/provider-detection.js +59 -0
  153. package/lib/provider-names.js +57 -0
  154. package/lib/repo-settings.js +69 -0
  155. package/lib/settings/claude-auth.js +78 -0
  156. package/lib/settings.js +542 -0
  157. package/lib/start-cluster.js +321 -0
  158. package/lib/stream-json-parser.js +67 -0
  159. package/package.json +162 -0
  160. package/scripts/fix-node-pty-permissions.js +75 -0
  161. package/scripts/record-demo.sh +279 -0
  162. package/scripts/setup-merge-queue.sh +170 -0
  163. package/scripts/test-install.sh +40 -0
  164. package/scripts/validate-templates.js +107 -0
  165. package/src/agent/agent-config.js +266 -0
  166. package/src/agent/agent-context-builder.js +189 -0
  167. package/src/agent/agent-context-sections.js +338 -0
  168. package/src/agent/agent-context-sources.js +147 -0
  169. package/src/agent/agent-hook-executor.js +721 -0
  170. package/src/agent/agent-input-injector.js +141 -0
  171. package/src/agent/agent-lifecycle.js +982 -0
  172. package/src/agent/agent-quality-gate-schema.js +93 -0
  173. package/src/agent/agent-quality-gates-context.js +51 -0
  174. package/src/agent/agent-stuck-detector.js +256 -0
  175. package/src/agent/agent-task-executor.js +2028 -0
  176. package/src/agent/agent-trigger-evaluator.js +67 -0
  177. package/src/agent/context-metrics.js +160 -0
  178. package/src/agent/context-pack-builder.js +367 -0
  179. package/src/agent/context-replay-policy.js +51 -0
  180. package/src/agent/guidance-queue.js +77 -0
  181. package/src/agent/output-extraction.js +367 -0
  182. package/src/agent/output-reformatter.js +175 -0
  183. package/src/agent/pr-verification.js +653 -0
  184. package/src/agent/rate-limit-backoff.js +82 -0
  185. package/src/agent/schema-utils.js +146 -0
  186. package/src/agent/validation-platform.js +35 -0
  187. package/src/agent-cli-provider/adapters/claude-parser.ts +133 -0
  188. package/src/agent-cli-provider/adapters/claude-recovery.ts +203 -0
  189. package/src/agent-cli-provider/adapters/claude.ts +247 -0
  190. package/src/agent-cli-provider/adapters/codex-parser.ts +211 -0
  191. package/src/agent-cli-provider/adapters/codex.ts +217 -0
  192. package/src/agent-cli-provider/adapters/common.ts +124 -0
  193. package/src/agent-cli-provider/adapters/gemini.ts +243 -0
  194. package/src/agent-cli-provider/adapters/index.ts +126 -0
  195. package/src/agent-cli-provider/adapters/opencode.ts +286 -0
  196. package/src/agent-cli-provider/contract-actions.ts +150 -0
  197. package/src/agent-cli-provider/contract-env.ts +111 -0
  198. package/src/agent-cli-provider/contract-envelope.ts +110 -0
  199. package/src/agent-cli-provider/contract-errors.ts +66 -0
  200. package/src/agent-cli-provider/contract-fallback.ts +121 -0
  201. package/src/agent-cli-provider/contract-invoke.ts +104 -0
  202. package/src/agent-cli-provider/contract-options.ts +173 -0
  203. package/src/agent-cli-provider/contract-parse.ts +94 -0
  204. package/src/agent-cli-provider/contract-support.ts +167 -0
  205. package/src/agent-cli-provider/contract.ts +56 -0
  206. package/src/agent-cli-provider/env-safety.ts +82 -0
  207. package/src/agent-cli-provider/errors.ts +122 -0
  208. package/src/agent-cli-provider/executable.ts +24 -0
  209. package/src/agent-cli-provider/index.ts +83 -0
  210. package/src/agent-cli-provider/invoke-evidence.ts +18 -0
  211. package/src/agent-cli-provider/json.ts +114 -0
  212. package/src/agent-cli-provider/log-prefix.ts +20 -0
  213. package/src/agent-cli-provider/process-runner.ts +145 -0
  214. package/src/agent-cli-provider/redaction.ts +282 -0
  215. package/src/agent-cli-provider/schema.ts +115 -0
  216. package/src/agent-cli-provider/single-agent-runtime.ts +311 -0
  217. package/src/agent-cli-provider/types.ts +237 -0
  218. package/src/agent-wrapper.js +615 -0
  219. package/src/agents/git-pusher-template.js +705 -0
  220. package/src/attach/attach-client.js +438 -0
  221. package/src/attach/attach-server.js +543 -0
  222. package/src/attach/index.js +37 -0
  223. package/src/attach/protocol.js +220 -0
  224. package/src/attach/ring-buffer.js +121 -0
  225. package/src/attach/send-input.js +88 -0
  226. package/src/attach/socket-discovery.js +267 -0
  227. package/src/claude-task-runner.js +661 -0
  228. package/src/config-router.js +89 -0
  229. package/src/config-validator.js +2202 -0
  230. package/src/copy-worker.js +43 -0
  231. package/src/guidance-topics.js +10 -0
  232. package/src/input-helpers.js +65 -0
  233. package/src/isolation-manager.js +1734 -0
  234. package/src/issue-providers/README.md +305 -0
  235. package/src/issue-providers/azure-devops-provider.js +307 -0
  236. package/src/issue-providers/base-provider.js +232 -0
  237. package/src/issue-providers/github-provider.js +210 -0
  238. package/src/issue-providers/gitlab-provider.js +262 -0
  239. package/src/issue-providers/index.js +196 -0
  240. package/src/issue-providers/jira-provider.js +260 -0
  241. package/src/ledger.js +692 -0
  242. package/src/lib/gc.js +232 -0
  243. package/src/lib/safe-exec.js +88 -0
  244. package/src/logic-engine.js +201 -0
  245. package/src/message-buffer.js +81 -0
  246. package/src/message-bus-bridge.js +144 -0
  247. package/src/message-bus.js +256 -0
  248. package/src/name-generator.js +232 -0
  249. package/src/orchestrator.js +3924 -0
  250. package/src/preflight.js +712 -0
  251. package/src/process-metrics.js +608 -0
  252. package/src/providers/anthropic/index.js +3 -0
  253. package/src/providers/base-provider.js +355 -0
  254. package/src/providers/capabilities.js +60 -0
  255. package/src/providers/google/index.js +3 -0
  256. package/src/providers/index.js +293 -0
  257. package/src/providers/openai/index.js +3 -0
  258. package/src/providers/opencode/index.js +3 -0
  259. package/src/quality-gates.js +143 -0
  260. package/src/schemas/sub-cluster.js +208 -0
  261. package/src/state-snapshot.js +398 -0
  262. package/src/state-snapshotter.js +142 -0
  263. package/src/status-footer.js +1026 -0
  264. package/src/sub-cluster-wrapper.js +693 -0
  265. package/src/task-runner.js +30 -0
  266. package/src/template-resolver.js +425 -0
  267. package/src/template-validation/index.js +338 -0
  268. package/src/template-validation/simulate-consensus-gates.js +324 -0
  269. package/src/template-validation/simulate-random-topology.js +541 -0
  270. package/src/template-validation/simulate-two-stage-validation.js +270 -0
  271. package/src/worktree-claude-config.js +135 -0
  272. package/src/worktree-tooling-env.js +150 -0
  273. package/task-lib/attachable-watcher.js +381 -0
  274. package/task-lib/commands/clean.js +50 -0
  275. package/task-lib/commands/episodes.js +105 -0
  276. package/task-lib/commands/get-log-path.js +23 -0
  277. package/task-lib/commands/kill.js +32 -0
  278. package/task-lib/commands/list.js +105 -0
  279. package/task-lib/commands/logs.js +439 -0
  280. package/task-lib/commands/resume.js +42 -0
  281. package/task-lib/commands/run.js +57 -0
  282. package/task-lib/commands/schedule.js +105 -0
  283. package/task-lib/commands/scheduler-cmd.js +96 -0
  284. package/task-lib/commands/schedules.js +148 -0
  285. package/task-lib/commands/status.js +44 -0
  286. package/task-lib/commands/unschedule.js +16 -0
  287. package/task-lib/completion.js +9 -0
  288. package/task-lib/config.js +11 -0
  289. package/task-lib/name-generator.js +230 -0
  290. package/task-lib/package.json +3 -0
  291. package/task-lib/provider-helper-runtime.js +29 -0
  292. package/task-lib/runner.js +190 -0
  293. package/task-lib/scheduler.js +252 -0
  294. package/task-lib/store.js +529 -0
  295. package/task-lib/watcher.js +305 -0
package/README.md ADDED
@@ -0,0 +1,508 @@
1
+ # zeroshot CLI
2
+
3
+ > **🎉 New in v5.4:** Now supports **OpenCode** CLI! Use Claude, Codex, Gemini, or OpenCode as your AI provider. Also supports **GitHub, GitLab, Jira, and Azure DevOps** as issue backends. See [Providers](#providers) and [Multi-Platform Issue Support](#multi-platform-issue-support).
4
+
5
+ <!-- install-placeholder -->
6
+ <p align="center">
7
+ <code>npm install -g @the-open-engine/zeroshot</code>
8
+ </p>
9
+
10
+ <p align="center">
11
+ <img src="./docs/assets/zeroshot-demo.gif" alt="Demo" width="700">
12
+ <br>
13
+ <em>Demo (100x speed, 90-minute run, 5 iterations to approval)</em>
14
+ </p>
15
+
16
+ [![CI](https://github.com/the-open-engine/zeroshot/actions/workflows/ci.yml/badge.svg)](https://github.com/the-open-engine/zeroshot/actions/workflows/ci.yml)
17
+ [![npm version](https://img.shields.io/npm/v/@the-open-engine/zeroshot.svg)](https://www.npmjs.com/package/@the-open-engine/zeroshot)
18
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
19
+ [![Node 18+](https://img.shields.io/badge/node-18%2B-brightgreen.svg)](https://nodejs.org/)
20
+ ![Platform: Linux | macOS](https://img.shields.io/badge/platform-Linux%20%7C%20macOS-blue.svg)
21
+
22
+ <!-- discord-placeholder -->
23
+
24
+ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.gg/PdZ3UEXB)
25
+
26
+ Zeroshot is an open-source AI coding agent orchestration CLI that runs multi-agent workflows to autonomously implement, review, test, and verify code changes.
27
+
28
+ It runs a **planner**, an **implementer**, and independent **validators** in isolated environments, looping until changes are **verified** or **rejected** with actionable, reproducible failures.
29
+
30
+ Built for tasks where correctness matters more than speed.
31
+
32
+ ## How It Works
33
+
34
+ - Plan: translate a task into concrete acceptance criteria
35
+ - Implement: make changes in an isolated workspace (local, worktree, or Docker)
36
+ - Validate: run automated checks with independent validators
37
+ - Iterate: repeat until verified, or return actionable failures
38
+ - Resume: crash-safe state persisted for recovery
39
+
40
+ ## Quick Start
41
+
42
+ ```bash
43
+ zeroshot run 123 # GitHub issue number
44
+ zeroshot run feature.md # Markdown file
45
+ zeroshot run "Add dark mode" # Inline text
46
+ ```
47
+
48
+ Or describe a complex task inline:
49
+
50
+ ```bash
51
+ zeroshot run "Add optimistic locking with automatic retry: when updating a user,
52
+ retry with exponential backoff up to 3 times, merge non-conflicting field changes,
53
+ and surface conflicts with details. Handle the ABA problem where version goes A->B->A."
54
+ ```
55
+
56
+ ## Why Not Just Use a Single AI Agent?
57
+
58
+ | Approach | Writes Code | Runs Tests | Blind Validation | Iterates Until Verified |
59
+ | -------------------------- | ----------- | ---------- | ---------------- | ----------------------- |
60
+ | Chat-based assistant | ✅ | ⚠️ | ❌ | ❌ |
61
+ | Single coding agent | ✅ | ⚠️ | ❌ | ⚠️ |
62
+ | **Zeroshot (multi-agent)** | ✅ | ✅ | ✅ | ✅ |
63
+
64
+ ## Use Cases
65
+
66
+ - Autonomous AI code refactoring
67
+ - AI-powered pull request automation
68
+ - Automated bug fixing with validation
69
+ - Multi-agent code generation for software engineering
70
+ - Agentic coding workflows with blind validation
71
+
72
+ ## Who Is This For?
73
+
74
+ - Senior engineers who care about correctness and reproducibility
75
+ - Teams automating PR workflows and code review gates
76
+ - Infra/platform teams standardizing agentic workflows
77
+ - Open-source maintainers working through issue backlogs
78
+ - AI power users who want verification, not vibes
79
+
80
+ ## Install and Requirements
81
+
82
+ **Platforms**: Linux, macOS. Windows (native/WSL) is deferred while we harden reliability and multi-provider correctness.
83
+
84
+ ```bash
85
+ npm install -g @the-open-engine/zeroshot
86
+ ```
87
+
88
+ **Requires**: Node 18+, at least one provider CLI (Claude Code, Codex, Gemini, Opencode).
89
+
90
+ ```bash
91
+ # Install one or more providers
92
+ npm i -g @anthropic-ai/claude-code
93
+ npm i -g @openai/codex
94
+ npm i -g @google/gemini-cli
95
+ # Opencode: see https://opencode.ai
96
+
97
+ # Authenticate with the provider CLI
98
+ claude login # Claude
99
+ codex login # Codex
100
+ gemini auth login # Gemini
101
+ opencode auth login # Opencode
102
+
103
+ # GitHub auth (for issue numbers)
104
+ gh auth login
105
+ ```
106
+
107
+ ## Providers
108
+
109
+ Zeroshot shells out to provider CLIs. Pick a default and override per run:
110
+
111
+ ```bash
112
+ zeroshot providers
113
+ zeroshot providers set-default codex
114
+ zeroshot run 123 --provider gemini
115
+ ```
116
+
117
+ See `docs/providers.md` for setup, model levels, and Docker mounts.
118
+ See `docs/provider-cli-helper.md` for the strict TypeScript provider helper,
119
+ the `zeroshot-agent-provider` JSON executable contract, and the boundary with
120
+ Orchestra.
121
+
122
+ ## Why Multiple Agents?
123
+
124
+ Single-agent sessions degrade. Context gets buried under thousands of tokens. The model optimizes for "done" over "correct."
125
+
126
+ Zeroshot fixes this with isolated agents that check each other's work. Validators can't lie about code they didn't write. Fail the check? Fix and retry until it actually works.
127
+
128
+ ## What Makes It Different
129
+
130
+ - **Blind validation** - Validators never see the worker's context or code history
131
+ - **Repeatable workflows** - Task complexity determines agent count and model selection
132
+ - **Accept/reject loop** - Rejections include actionable findings, not vague complaints
133
+ - **Crash recovery** - All state persisted to SQLite; resume anytime
134
+ - **Isolation modes** - None, git worktree, or Docker container
135
+ - **Cost control** - Model ceilings prevent runaway API spend
136
+
137
+ ## Required Handoff Quality Gates
138
+
139
+ Zeroshot owns a tool-neutral handoff contract for `--pr` and `--ship` flows. It does not know which tool produced a gate. Repos configure required gates, validators publish matching `qualityGates` evidence, and the git-pusher trigger refuses to wake until every configured gate has fresh passing evidence after `IMPLEMENTATION_READY`.
140
+
141
+ Gate config can come from run options or repo settings:
142
+
143
+ ```json
144
+ {
145
+ "ship": {
146
+ "requiredQualityGates": [
147
+ {
148
+ "id": "repo-quality",
149
+ "scope": "repo",
150
+ "description": "Repository quality gate",
151
+ "command": "repo-quality --changed --json"
152
+ }
153
+ ]
154
+ }
155
+ }
156
+ ```
157
+
158
+ The `id` and optional `scope` are generic. A repo may bind `repo-quality` to any local quality command, a CI status command, or another quality command outside Zeroshot. Validators receive the configured gate list and must publish entries with `status`, `completedAt` or `timestamp`, and `evidence.command`, `evidence.exitCode`, and string `evidence.output`. Failing or unavailable commands mean `approved: false` with gate status `FAIL` or `UNAVAILABLE`.
159
+
160
+ The pusher fails closed before commit, push, PR creation, or merge when a configured gate is missing, failing, unavailable, stale, older than `IMPLEMENTATION_READY`, or lacks usable evidence. If no `requiredQualityGates` are configured, Zeroshot preserves its existing validator consensus behavior.
161
+
162
+ ## When to Use Zeroshot
163
+
164
+ Zeroshot performs best when tasks have clear acceptance criteria.
165
+
166
+ | Scenario | Use | Why |
167
+ | ----------------------------------------------- | --- | ------------------------- |
168
+ | Add rate limiting (sliding window, per-IP, 429) | Yes | Clear requirements |
169
+ | Refactor auth to JWT | Yes | Defined end state |
170
+ | Fix login bug | Yes | Success is measurable |
171
+ | Fix 2410 lint violations | Yes | Clear completion criteria |
172
+ | Make the app faster | No | Needs exploration first |
173
+ | Improve the codebase | No | No acceptance criteria |
174
+ | Figure out flaky tests | No | Exploratory |
175
+
176
+ Rule of thumb: if you cannot describe what "done" means, validators cannot verify it.
177
+
178
+ ## Command Overview
179
+
180
+ ```bash
181
+ # Run
182
+ zeroshot run 123 # GitHub issue
183
+ zeroshot run feature.md # Markdown file
184
+ zeroshot run "Add dark mode" # Inline text
185
+
186
+ # Isolation
187
+ zeroshot run 123 --worktree # git worktree
188
+ zeroshot run 123 --docker # container
189
+
190
+ # Automation (--ship implies --pr implies --worktree)
191
+ zeroshot run 123 --pr # worktree + create PR
192
+ zeroshot run 123 --ship # PR + auto-merge on approval
193
+
194
+ # Background mode
195
+ zeroshot run 123 -d
196
+ zeroshot run 123 --ship -d
197
+
198
+ # Control
199
+ zeroshot list
200
+ zeroshot status <id>
201
+ zeroshot logs <id> -f
202
+ zeroshot resume <id>
203
+ zeroshot stop <id>
204
+ zeroshot kill <id>
205
+
206
+ # Providers
207
+ zeroshot providers
208
+ zeroshot providers set-default codex
209
+
210
+ # Agent library
211
+ zeroshot agents list
212
+ zeroshot agents show <name>
213
+
214
+ # Maintenance
215
+ zeroshot clean
216
+ zeroshot purge
217
+ ```
218
+
219
+ ## Multi-Platform Issue Support
220
+
221
+ Zeroshot works with **GitHub, GitLab, Jira, and Azure DevOps**. Just paste the issue URL or key.
222
+ When working in a git repository, zeroshot automatically detects the issue provider from your git remote URL. No configuration needed!
223
+
224
+ ```bash
225
+ # GitHub
226
+ zeroshot run 123
227
+ zeroshot run https://github.com/org/repo/issues/123
228
+
229
+ # GitLab (cloud and self-hosted)
230
+ zeroshot run https://gitlab.com/org/repo/-/issues/456
231
+ zeroshot run https://gitlab.mycompany.com/org/repo/-/issues/789
232
+
233
+ # Jira
234
+ zeroshot run PROJ-789
235
+ zeroshot run https://company.atlassian.net/browse/PROJ-789
236
+
237
+ # Azure DevOps
238
+ zeroshot run https://dev.azure.com/org/project/_workitems/edit/999
239
+ ```
240
+
241
+ **Requires**: CLI tools ([`gh`](https://cli.github.com/), [`glab`](https://gitlab.com/gitlab-org/cli), [`jira`](https://github.com/go-jira/jira), or [`az`](https://docs.microsoft.com/cli/azure/)) for the platform you use. See [issue-providers README](src/issue-providers/README.md) for setup and self-hosted instances.
242
+
243
+ **Important for `--pr` mode**: Run zeroshot from the target repository directory. PRs are created on the git remote of your current directory. If you run from a different repo, zeroshot will warn you and skip the "Closes #X" reference (the PR is still created, but won't auto-close the issue).
244
+
245
+ ## Architecture
246
+
247
+ Zeroshot is a message-driven coordination layer with smart defaults.
248
+
249
+ - The conductor classifies tasks by complexity and type.
250
+ - A workflow template selects agents and validators.
251
+ - Agents publish results to a SQLite ledger.
252
+ - Validators approve or reject with specific findings.
253
+ - Rejections route back to the worker for fixes.
254
+
255
+ ```
256
+ ┌─────────────────┐
257
+ │ TASK │
258
+ └────────┬────────┘
259
+
260
+
261
+ ┌────────────────────────────────────────────┐
262
+ │ CONDUCTOR │
263
+ │ Complexity × TaskType → Workflow │
264
+ └────────────────────────┬───────────────────┘
265
+
266
+ ┌─────────────────────────────┼─────────────────────────────┐
267
+ │ │ │
268
+ ▼ ▼ ▼
269
+ ┌───────────┐ ┌───────────┐ ┌───────────┐
270
+ │ TRIVIAL │ │ SIMPLE │ │ STANDARD+ │
271
+ │ 1 agent │──────────▶ │ worker │ │ planner │
272
+ │ (level1) │ COMPLETE │ + 1 valid.│ │ + worker │
273
+ │ no valid. │ └─────┬─────┘ │ + 3-5 val.│
274
+ └───────────┘ │ └─────┬─────┘
275
+ ▼ │
276
+ ┌─────────────┐ ▼
277
+ ┌──▶│ WORKER │ ┌─────────────┐
278
+ │ └──────┬──────┘ │ PLANNER │
279
+ │ │ └──────┬──────┘
280
+ │ ▼ │
281
+ │ ┌─────────────────────┐ ▼
282
+ │ │ ✓ validator │ ┌─────────────┐
283
+ │ │ (generic check) │ ┌──▶│ WORKER │
284
+ │ └──────────┬──────────┘ │ └──────┬──────┘
285
+ │ REJECT │ ALL OK │ │
286
+ └──────────────┘ │ │ ▼
287
+ │ │ ┌──────────────────────┐
288
+ │ │ │ ✓ requirements │
289
+ │ │ │ ✓ code (STANDARD+) │
290
+ │ │ │ ✓ security (CRIT) │
291
+ │ │ │ ✓ tester (CRIT) │
292
+ │ │ │ ✓ adversarial │
293
+ │ │ │ (real execution) │
294
+ │ │ └──────────┬───────────┘
295
+ │ │ REJECT │ ALL OK
296
+ │ └──────────────┘ │
297
+ ▼ ▼
298
+ ┌─────────────────────────────────────────────────────────────────────────────┐
299
+ │ COMPLETE │
300
+ └─────────────────────────────────────────────────────────────────────────────┘
301
+ ```
302
+
303
+ ### Complexity Model
304
+
305
+ | Task | Complexity | Agents | Validators |
306
+ | ---------------------- | ---------- | ------ | ------------------------------------------------- |
307
+ | Fix typo in README | TRIVIAL | 1 | None |
308
+ | Add dark mode toggle | SIMPLE | 2 | Generic validator |
309
+ | Refactor auth system | STANDARD | 4 | Requirements, code |
310
+ | Implement payment flow | CRITICAL | 7 | Requirements, code, security, tester, adversarial |
311
+
312
+ ### Model Selection by Complexity
313
+
314
+ | Complexity | Planner | Worker | Validators |
315
+ | ---------- | ------- | ------ | ---------- |
316
+ | TRIVIAL | - | level1 | - |
317
+ | SIMPLE | - | level2 | 1 (level2) |
318
+ | STANDARD | level2 | level2 | 2 (level2) |
319
+ | CRITICAL | level3 | level2 | 5 (level2) |
320
+
321
+ Levels map to provider-specific models. Configure with `zeroshot providers setup <provider>` or
322
+ `settings.providerSettings`. (Legacy `maxModel` applies to Claude only.)
323
+
324
+ <details>
325
+ <summary><strong>Custom Workflows (Framework Mode)</strong></summary>
326
+
327
+ Zeroshot is message-driven, so you can define any agent topology.
328
+
329
+ - Expert panels: parallel specialists -> aggregator -> decision
330
+ - Staged gates: sequential validators, each with veto power
331
+ - Hierarchical: supervisor dynamically spawns workers
332
+ - Dynamic: conductor adds agents mid-execution
333
+
334
+ **Coordination primitives:**
335
+
336
+ - Message bus (pub/sub topics)
337
+ - Triggers (wake agents on conditions)
338
+ - Ledger (SQLite, crash recovery)
339
+ - Dynamic spawning (CLUSTER_OPERATIONS)
340
+
341
+ #### Creating Custom Clusters with a Provider CLI
342
+
343
+ Start your provider CLI and describe your cluster:
344
+
345
+ ```
346
+ Create a zeroshot cluster config for security-critical features:
347
+
348
+ 1. Implementation agent (level2) implements the feature
349
+ 2. FOUR parallel validators:
350
+ - Security validator: OWASP checks, SQL injection, XSS, CSRF
351
+ - Performance validator: No N+1 queries, proper indexing
352
+ - Privacy validator: GDPR compliance, data minimization
353
+ - Code reviewer: General code quality
354
+
355
+ 3. ALL validators must approve before merge
356
+ 4. If ANY validator rejects, implementation agent fixes and resubmits
357
+ 5. Use level3 for security validator (highest stakes)
358
+
359
+ Look at cluster-templates/base-templates/full-workflow.json
360
+ and create a similar cluster. Save to cluster-templates/security-review.json
361
+ ```
362
+
363
+ Built-in validation checks for missing triggers, deadlocks, and invalid type wiring before running.
364
+
365
+ See [CLAUDE.md](./CLAUDE.md) for the cluster schema and examples.
366
+
367
+ </details>
368
+
369
+ ## Crash Recovery
370
+
371
+ All state is persisted in the SQLite ledger. You can resume at any time:
372
+
373
+ ```bash
374
+ zeroshot resume cluster-bold-panther
375
+ ```
376
+
377
+ ## Isolation Modes
378
+
379
+ ### Git Worktree (Default for --pr/--ship)
380
+
381
+ ```bash
382
+ zeroshot run 123 --worktree
383
+ ```
384
+
385
+ Lightweight isolation using git worktree. Creates a separate working directory with its own branch. Auto-enabled with `--pr` and `--ship`.
386
+
387
+ ### Docker Container
388
+
389
+ ```bash
390
+ zeroshot run 123 --docker
391
+ ```
392
+
393
+ Full isolation in a fresh container. Your workspace stays untouched. Useful for risky experiments or parallel runs.
394
+
395
+ ### When to Use Which
396
+
397
+ | Scenario | Recommended |
398
+ | ------------------------------------ | ---------------------- |
399
+ | Quick task, review changes yourself | No isolation (default) |
400
+ | PR workflow, code review | `--worktree` or `--pr` |
401
+ | Risky experiment, might break things | `--docker` |
402
+ | Running multiple tasks in parallel | `--docker` |
403
+ | Full automation, no review needed | `--ship` |
404
+
405
+ **Default behavior:** Agents modify files only; they do not commit or push unless using an isolation mode that explicitly allows it.
406
+
407
+ <details>
408
+ <summary><strong>Docker Credential Mounts</strong></summary>
409
+
410
+ When using `--docker`, zeroshot mounts credential directories so agents can access provider CLIs and tools like AWS, Azure, and kubectl.
411
+
412
+ **Default mounts**: `gh`, `git`, `ssh` (GitHub CLI, git config, SSH keys)
413
+
414
+ **Available presets**: `gh`, `git`, `ssh`, `aws`, `azure`, `kube`, `terraform`, `gcloud`, `claude`, `codex`, `gemini`
415
+
416
+ ```bash
417
+ # Configure via settings (persistent)
418
+ zeroshot settings set dockerMounts '["gh", "git", "ssh", "aws", "azure"]'
419
+
420
+ # View current config
421
+ zeroshot settings get dockerMounts
422
+
423
+ # Per-run override
424
+ zeroshot run 123 --docker --mount ~/.aws:/root/.aws:ro
425
+
426
+ # Provider credentials
427
+ zeroshot run 123 --docker --mount ~/.config/codex:/home/node/.config/codex:ro
428
+ zeroshot run 123 --docker --mount ~/.config/gemini:/home/node/.config/gemini:ro
429
+
430
+ # Disable all mounts
431
+ zeroshot run 123 --docker --no-mounts
432
+
433
+ # CI: env var override
434
+ ZEROSHOT_DOCKER_MOUNTS='["aws","azure"]' zeroshot run 123 --docker
435
+ ```
436
+
437
+ See `docs/providers.md` for provider CLI setup and mount details.
438
+
439
+ **Custom mounts** (mix presets with explicit paths):
440
+
441
+ ```bash
442
+ zeroshot settings set dockerMounts '[
443
+ "gh",
444
+ "git",
445
+ {"host": "~/.myconfig", "container": "$HOME/.myconfig", "readonly": true}
446
+ ]'
447
+ ```
448
+
449
+ **Container home**: Presets use `$HOME` placeholder. Default: `/root`. Override with:
450
+
451
+ ```bash
452
+ zeroshot settings set dockerContainerHome '/home/node'
453
+ # Or per-run:
454
+ zeroshot run 123 --docker --container-home /home/node
455
+ ```
456
+
457
+ **Env var passthrough**: Presets auto-pass related env vars (for example, `aws` -> `AWS_REGION`, `AWS_PROFILE`). Add custom:
458
+
459
+ ```bash
460
+ zeroshot settings set dockerEnvPassthrough '["MY_API_KEY", "TF_VAR_*"]'
461
+ ```
462
+
463
+ </details>
464
+
465
+ ## Resources
466
+
467
+ - [CLAUDE.md](./CLAUDE.md) - Architecture, cluster config schema, agent primitives
468
+ - `docs/providers.md` - Provider setup, model levels, and Docker mounts
469
+ - `docs/context-management.md` - Context selection, context packs, and state snapshots
470
+ - [Discord](https://discord.gg/PdZ3UEXB) - Support and community
471
+ - `zeroshot export <id>` - Export conversation to markdown
472
+ - `sqlite3 ~/.zeroshot/*.db` - Direct ledger access for debugging
473
+
474
+ <details>
475
+ <summary><strong>Troubleshooting</strong></summary>
476
+
477
+ | Issue | Fix |
478
+ | ----------------------------- | ----------------------------------------------------------------------------------------- |
479
+ | `claude: command not found` | `npm i -g @anthropic-ai/claude-code && claude auth login` |
480
+ | `codex: command not found` | `npm i -g @openai/codex && codex login` |
481
+ | `gemini: command not found` | `npm i -g @google/gemini-cli && gemini auth login` |
482
+ | `gh: command not found` | [Install GitHub CLI](https://cli.github.com/) |
483
+ | `--docker` fails | Docker must be running: `docker ps` to verify |
484
+ | Cluster stuck | `zeroshot resume <id>` to continue |
485
+ | Agent keeps failing | Check `zeroshot logs <id>` for actual error |
486
+ | `zeroshot: command not found` | `npm install -g @the-open-engine/zeroshot` |
487
+ | Agents misbehave | `/analyze-cluster-postmortem <id>` in Claude Code (creates issue if fix is generalizable) |
488
+
489
+ </details>
490
+
491
+ ## Contributing
492
+
493
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
494
+
495
+ Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) before participating.
496
+
497
+ For security issues, see [SECURITY.md](SECURITY.md).
498
+
499
+ ## TUI
500
+
501
+ The TUI is not included in this release. Use `zeroshot logs -f`, `zeroshot logs -w`,
502
+ `zeroshot list`, and `zeroshot status <id>` for monitoring.
503
+
504
+ ---
505
+
506
+ MIT - [Covibes](https://github.com/the-open-engine)
507
+
508
+ Built on [Claude Code](https://claude.com/product/claude-code) by Anthropic.
@@ -0,0 +1,135 @@
1
+ const chalk = require('chalk');
2
+
3
+ function printProcessHeader(label, processInfo, indent) {
4
+ if (!processInfo) {
5
+ console.log(`${indent}${chalk.dim(label)}: N/A`);
6
+ return false;
7
+ }
8
+
9
+ if (!processInfo.metrics?.exists) {
10
+ console.log(`${indent}${chalk.dim(label)}: PID ${processInfo.pid} not running`);
11
+ return false;
12
+ }
13
+
14
+ console.log(
15
+ `${indent}${chalk.dim(label)}: PID ${processInfo.pid} · activity ${processInfo.activity}`
16
+ );
17
+ return true;
18
+ }
19
+
20
+ function printProcessResources(metrics, indent) {
21
+ console.log(
22
+ `${indent} state=${metrics.state} cpu=${metrics.cpuPercent}% mem=${metrics.memoryMB}MB threads=${metrics.threads} children=${metrics.childCount}`
23
+ );
24
+ }
25
+
26
+ function printProcessNetwork(metrics, indent) {
27
+ const established = metrics.network?.established || 0;
28
+ if (established === 0 && !metrics.network?.hasActivity) {
29
+ return;
30
+ }
31
+
32
+ console.log(
33
+ `${indent} net=${established} conn sendQ=${metrics.network.sendQueueBytes} recvQ=${metrics.network.recvQueueBytes} activity=${metrics.network.hasActivity ? 'yes' : 'no'}`
34
+ );
35
+ }
36
+
37
+ function printProcessHealth(processInfo, indent) {
38
+ if (!processInfo.health?.analysis) {
39
+ return;
40
+ }
41
+
42
+ console.log(`${indent} health=${processInfo.health.analysis}`);
43
+ }
44
+
45
+ function printWarnings(warnings, indent = '') {
46
+ if (!warnings || warnings.length === 0) {
47
+ return;
48
+ }
49
+
50
+ for (const warning of warnings) {
51
+ console.log(`${indent}${chalk.yellow(`warning: ${warning}`)}`);
52
+ }
53
+ }
54
+
55
+ function printProcessSection(label, processInfo, indent = '') {
56
+ if (!printProcessHeader(label, processInfo, indent)) {
57
+ return;
58
+ }
59
+
60
+ const { metrics } = processInfo;
61
+ printProcessResources(metrics, indent);
62
+ printProcessNetwork(metrics, indent);
63
+ printProcessHealth(processInfo, indent);
64
+ }
65
+
66
+ function printTaskSection(task, indent = '') {
67
+ if (!task) {
68
+ return;
69
+ }
70
+
71
+ console.log(
72
+ `${indent}${chalk.dim('Task')}: ${task.id} · ${task.status} · updated ${task.updatedAgeHuman} ago`
73
+ );
74
+ console.log(
75
+ `${indent} pid=${task.pid || 'N/A'} exit=${task.exitCode ?? 'N/A'} attachable=${task.attachable ? 'yes' : 'no'}`
76
+ );
77
+ console.log(
78
+ `${indent} log=${task.logFile || 'N/A'} (${task.logFileExists ? 'present' : 'missing'})`
79
+ );
80
+ if (task.socketPath) {
81
+ console.log(
82
+ `${indent} socket=${task.socketPath} (${task.socketPathExists ? 'present' : 'missing'})`
83
+ );
84
+ }
85
+ printWarnings(task.warnings, `${indent} `);
86
+ }
87
+
88
+ function printAgentSection(agent) {
89
+ const modelLabel = agent.model ? ` [${agent.model}]` : '';
90
+ console.log(` - ${agent.id} (${agent.role})${modelLabel}`);
91
+ console.log(
92
+ ` state=${agent.state} iteration=${agent.iteration} runningTask=${agent.currentTask ? 'yes' : 'no'}`
93
+ );
94
+ if (agent.currentTaskId) {
95
+ console.log(` taskId=${agent.currentTaskId}`);
96
+ }
97
+ printProcessSection('process', agent.process, ' ');
98
+ printTaskSection(agent.task, ' ');
99
+ printWarnings(agent.warnings, ' ');
100
+ }
101
+
102
+ function printClusterInspectionHuman(inspection) {
103
+ console.log(`\nCluster Inspect: ${inspection.id}`);
104
+ console.log(`State: ${inspection.cluster.state}`);
105
+ console.log(`PID: ${inspection.cluster.pid || 'N/A'}`);
106
+ console.log(`Created: ${new Date(inspection.cluster.createdAt).toLocaleString()}`);
107
+ console.log(`Messages: ${inspection.cluster.messageCount}`);
108
+ console.log(`Sample: ${inspection.sampleMs}ms`);
109
+
110
+ console.log('\nCluster Process:');
111
+ printProcessSection('process', inspection.process, ' ');
112
+
113
+ console.log('\nAgents:');
114
+ for (const agent of inspection.agents) {
115
+ printAgentSection(agent);
116
+ }
117
+ console.log('');
118
+ }
119
+
120
+ function printTaskInspectionHuman(inspection) {
121
+ console.log(`\nTask Inspect: ${inspection.id}`);
122
+ console.log(`Sample: ${inspection.sampleMs}ms`);
123
+ printTaskSection(inspection.task);
124
+ console.log('');
125
+ printProcessSection('Process', inspection.process);
126
+ console.log('');
127
+ }
128
+
129
+ module.exports = {
130
+ printClusterInspectionHuman,
131
+ printProcessSection,
132
+ printTaskInspectionHuman,
133
+ printTaskSection,
134
+ printWarnings,
135
+ };