@wjarka/cezarion 0.16.0 → 0.17.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 (907) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +594 -207
  3. package/dist/agent-config/account-identity.d.ts +3 -19
  4. package/dist/agent-config/account-identity.js +8 -5
  5. package/dist/agent-config/account-identity.js.map +1 -1
  6. package/dist/agent-config/catalog.d.ts +3 -14
  7. package/dist/agent-config/catalog.js.map +1 -1
  8. package/dist/agent-config/files.d.ts +2 -6
  9. package/dist/agent-config/files.js +2 -6
  10. package/dist/agent-config/files.js.map +1 -1
  11. package/dist/agent-config/model-settings/types.d.ts +1 -1
  12. package/dist/agent-config/seed.d.ts +11 -3
  13. package/dist/agent-config/seed.js +52 -48
  14. package/dist/agent-config/seed.js.map +1 -1
  15. package/dist/agent-config/service.js +3 -2
  16. package/dist/agent-config/service.js.map +1 -1
  17. package/dist/agent-config/validate.d.ts +1 -4
  18. package/dist/agent-config/validate.js.map +1 -1
  19. package/dist/application-update/helper.d.ts +2 -2
  20. package/dist/application-update/helper.js +7 -12
  21. package/dist/application-update/helper.js.map +1 -1
  22. package/dist/application-update/launcher.d.ts +4 -0
  23. package/dist/application-update/launcher.js +18 -12
  24. package/dist/application-update/launcher.js.map +1 -1
  25. package/dist/application-update/service.d.ts +3 -3
  26. package/dist/application-update/service.js +1 -1
  27. package/dist/application-update/service.js.map +1 -1
  28. package/dist/archive-on-merge-setting.d.ts +15 -0
  29. package/dist/archive-on-merge-setting.js +14 -0
  30. package/dist/archive-on-merge-setting.js.map +1 -0
  31. package/dist/artifacts/cli.d.ts +8 -0
  32. package/dist/artifacts/cli.js +21 -2
  33. package/dist/artifacts/cli.js.map +1 -1
  34. package/dist/artifacts/resolve.js +2 -1
  35. package/dist/artifacts/resolve.js.map +1 -1
  36. package/dist/artifacts/store.js.map +1 -1
  37. package/dist/automations/automation-cli.d.ts +59 -0
  38. package/dist/automations/automation-cli.js +509 -0
  39. package/dist/automations/automation-cli.js.map +1 -0
  40. package/dist/automations/builtin-skill.d.ts +7 -0
  41. package/dist/automations/builtin-skill.js +14 -0
  42. package/dist/automations/builtin-skill.js.map +1 -0
  43. package/dist/automations/github-baseline.d.ts +3 -0
  44. package/dist/automations/github-baseline.js +17 -0
  45. package/dist/automations/github-baseline.js.map +1 -0
  46. package/dist/automations/github-poller.d.ts +23 -4
  47. package/dist/automations/github-poller.js +157 -88
  48. package/dist/automations/github-poller.js.map +1 -1
  49. package/dist/automations/prompts.d.ts +12 -0
  50. package/dist/automations/prompts.js +160 -0
  51. package/dist/automations/prompts.js.map +1 -0
  52. package/dist/automations/schedule-runner.d.ts +43 -24
  53. package/dist/automations/schedule-runner.js +207 -20
  54. package/dist/automations/schedule-runner.js.map +1 -1
  55. package/dist/automations/scheduler.d.ts +10 -2
  56. package/dist/automations/scheduler.js +200 -54
  57. package/dist/automations/scheduler.js.map +1 -1
  58. package/dist/automations/service.d.ts +777 -0
  59. package/dist/automations/service.js +444 -0
  60. package/dist/automations/service.js.map +1 -0
  61. package/dist/automations/store.d.ts +17 -7
  62. package/dist/automations/store.js +88 -17
  63. package/dist/automations/store.js.map +1 -1
  64. package/dist/automations/task-template.d.ts +7 -2
  65. package/dist/automations/task-template.js +93 -44
  66. package/dist/automations/task-template.js.map +1 -1
  67. package/dist/automations/tool-adapter.d.ts +6 -0
  68. package/dist/automations/tool-adapter.js +108 -0
  69. package/dist/automations/tool-adapter.js.map +1 -0
  70. package/dist/automations/types.d.ts +1 -405
  71. package/dist/automations/types.js +1 -218
  72. package/dist/automations/types.js.map +1 -1
  73. package/dist/autosave-cleanup.d.ts +26 -0
  74. package/dist/autosave-cleanup.js +87 -0
  75. package/dist/autosave-cleanup.js.map +1 -0
  76. package/dist/autosave-git.d.ts +3 -0
  77. package/dist/autosave-git.js +67 -35
  78. package/dist/autosave-git.js.map +1 -1
  79. package/dist/autosave-group.d.ts +8 -0
  80. package/dist/autosave-group.js +61 -0
  81. package/dist/autosave-group.js.map +1 -0
  82. package/dist/autosave-holders.d.ts +31 -4
  83. package/dist/autosave-holders.js +92 -7
  84. package/dist/autosave-holders.js.map +1 -1
  85. package/dist/autosave-windows.d.ts +14 -0
  86. package/dist/autosave-windows.js +36 -2
  87. package/dist/autosave-windows.js.map +1 -1
  88. package/dist/ci-wait/client.d.ts +20 -3
  89. package/dist/ci-wait/client.js +40 -44
  90. package/dist/ci-wait/client.js.map +1 -1
  91. package/dist/ci-wait/controller.d.ts +622 -36
  92. package/dist/ci-wait/controller.js +152 -20
  93. package/dist/ci-wait/controller.js.map +1 -1
  94. package/dist/ci-wait/errors.d.ts +19 -0
  95. package/dist/ci-wait/errors.js +180 -2
  96. package/dist/ci-wait/errors.js.map +1 -1
  97. package/dist/ci-wait/github.d.ts +25 -1
  98. package/dist/ci-wait/github.js +76 -9
  99. package/dist/ci-wait/github.js.map +1 -1
  100. package/dist/ci-wait/mcp.d.ts +0 -1
  101. package/dist/ci-wait/mcp.js +0 -2
  102. package/dist/ci-wait/mcp.js.map +1 -1
  103. package/dist/ci-wait/supervisor.d.ts +7 -0
  104. package/dist/ci-wait/supervisor.js +113 -17
  105. package/dist/ci-wait/supervisor.js.map +1 -1
  106. package/dist/ci-wait/tools.d.ts +536 -16
  107. package/dist/ci-wait/tools.js +165 -20
  108. package/dist/ci-wait/tools.js.map +1 -1
  109. package/dist/config.d.ts +3 -17
  110. package/dist/config.js +4 -60
  111. package/dist/config.js.map +1 -1
  112. package/dist/contract/active-provider.d.ts +12 -0
  113. package/dist/contract/agent-profiles.d.ts +2 -10
  114. package/dist/contract/ask-schema.d.ts +22 -4
  115. package/dist/contract/ask.d.ts +6 -4
  116. package/dist/contract/attachments.d.ts +35 -0
  117. package/dist/contract/attention.d.ts +46 -37
  118. package/dist/contract/automation-requests.d.ts +308 -0
  119. package/dist/contract/automation-schedule.d.ts +40 -11
  120. package/dist/contract/automation-storage.d.ts +512 -0
  121. package/dist/contract/automations.d.ts +421 -40
  122. package/dist/contract/ci-wait.d.ts +41 -4
  123. package/dist/contract/config-requests.d.ts +36 -0
  124. package/dist/contract/conversations.d.ts +24 -10
  125. package/dist/contract/defined.d.ts +8 -0
  126. package/dist/contract/delegation.d.ts +312 -8
  127. package/dist/contract/events.d.ts +24 -3
  128. package/dist/contract/github-requests.d.ts +26 -0
  129. package/dist/contract/github.d.ts +60 -27
  130. package/dist/contract/handoff.d.ts +43 -0
  131. package/dist/contract/health.d.ts +2 -2
  132. package/dist/contract/image-path.d.ts +6 -0
  133. package/dist/contract/index.d.ts +31 -0
  134. package/dist/contract/index.js +3756 -1525
  135. package/dist/contract/live-coordination.d.ts +158 -0
  136. package/dist/contract/live-limits.d.ts +8 -0
  137. package/dist/contract/live.d.ts +123 -0
  138. package/dist/contract/pending-ask.d.ts +58 -0
  139. package/dist/contract/permissions.d.ts +54 -0
  140. package/dist/contract/preview.d.ts +33 -0
  141. package/dist/contract/project-limits.d.ts +33 -0
  142. package/dist/contract/projects.d.ts +486 -20
  143. package/dist/contract/provider-requests.d.ts +77 -0
  144. package/dist/contract/query-requests.d.ts +52 -0
  145. package/dist/contract/repo-requests.d.ts +12 -0
  146. package/dist/contract/run-labels.d.ts +8 -0
  147. package/dist/contract/run-limits.d.ts +8 -0
  148. package/dist/contract/run-predicates.d.ts +32 -0
  149. package/dist/contract/run-requests.d.ts +33 -0
  150. package/dist/contract/run-search.d.ts +193 -0
  151. package/dist/contract/runs.d.ts +2232 -1894
  152. package/dist/contract/scheduled-tasks.d.ts +187 -0
  153. package/dist/contract/skills.d.ts +22 -772
  154. package/dist/contract/team-skill-ref.d.ts +10 -0
  155. package/dist/{core → contract}/tool-display.d.ts +4 -10
  156. package/dist/contract/ui-state-requests.d.ts +60 -0
  157. package/dist/contract/version.d.ts +3 -0
  158. package/dist/contract/voice.d.ts +213 -0
  159. package/dist/contract/waits.d.ts +1204 -0
  160. package/dist/contract/workflow-file.d.ts +37 -0
  161. package/dist/contract/workflow-requests.d.ts +7 -0
  162. package/dist/contract/workflows.d.ts +1 -2
  163. package/dist/contract/workspace.d.ts +34 -82
  164. package/dist/contract/zoned-time.d.ts +2 -11
  165. package/dist/core/agent-env.d.ts +4 -16
  166. package/dist/core/agent-env.js +14 -16
  167. package/dist/core/agent-env.js.map +1 -1
  168. package/dist/core/agent-profiles.d.ts +28 -40
  169. package/dist/core/agent-profiles.js +56 -51
  170. package/dist/core/agent-profiles.js.map +1 -1
  171. package/dist/core/agent-runner.d.ts +88 -44
  172. package/dist/core/agent-runner.js +17 -18
  173. package/dist/core/agent-runner.js.map +1 -1
  174. package/dist/core/ask.d.ts +3 -0
  175. package/dist/core/ask.js +12 -0
  176. package/dist/core/ask.js.map +1 -1
  177. package/dist/core/backend-detect.js +16 -2
  178. package/dist/core/backend-detect.js.map +1 -1
  179. package/dist/core/claude-cli-runner.d.ts +23 -4
  180. package/dist/core/claude-cli-runner.js +280 -76
  181. package/dist/core/claude-cli-runner.js.map +1 -1
  182. package/dist/core/claude-model-catalog.d.ts +2 -10
  183. package/dist/core/claude-model-catalog.js +2 -10
  184. package/dist/core/claude-model-catalog.js.map +1 -1
  185. package/dist/core/claude-ui-mapper.d.ts +2 -2
  186. package/dist/core/claude-ui-mapper.js +94 -2
  187. package/dist/core/claude-ui-mapper.js.map +1 -1
  188. package/dist/core/codex-app-server-runner.d.ts +3 -4
  189. package/dist/core/codex-app-server-runner.js +146 -51
  190. package/dist/core/codex-app-server-runner.js.map +1 -1
  191. package/dist/core/codex-app-server-transport.d.ts +4 -3
  192. package/dist/core/codex-app-server-transport.js +11 -7
  193. package/dist/core/codex-app-server-transport.js.map +1 -1
  194. package/dist/core/codex-approvals.d.ts +12 -0
  195. package/dist/core/codex-approvals.js +161 -0
  196. package/dist/core/codex-approvals.js.map +1 -0
  197. package/dist/core/codex-permissions.d.ts +1 -1
  198. package/dist/core/codex-ui-mapper.js +45 -1
  199. package/dist/core/codex-ui-mapper.js.map +1 -1
  200. package/dist/core/cursor-acp-runner.d.ts +1 -1
  201. package/dist/core/cursor-acp-runner.js +39 -15
  202. package/dist/core/cursor-acp-runner.js.map +1 -1
  203. package/dist/core/cursor-cli-flags.d.ts +19 -0
  204. package/dist/core/cursor-cli-flags.js +47 -0
  205. package/dist/core/cursor-cli-flags.js.map +1 -0
  206. package/dist/core/cursor-model-catalog.d.ts +22 -0
  207. package/dist/core/cursor-model-catalog.js +53 -24
  208. package/dist/core/cursor-model-catalog.js.map +1 -1
  209. package/dist/core/cursor-print-capabilities.d.ts +16 -0
  210. package/dist/core/cursor-print-capabilities.js +141 -0
  211. package/dist/core/cursor-print-capabilities.js.map +1 -0
  212. package/dist/core/cursor-print-process.d.ts +31 -0
  213. package/dist/core/cursor-print-process.js +117 -0
  214. package/dist/core/cursor-print-process.js.map +1 -0
  215. package/dist/core/cursor-print-runner.d.ts +31 -0
  216. package/dist/core/cursor-print-runner.js +555 -0
  217. package/dist/core/cursor-print-runner.js.map +1 -0
  218. package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
  219. package/dist/core/cursor-print-tool-catalog.js +91 -0
  220. package/dist/core/cursor-print-tool-catalog.js.map +1 -0
  221. package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
  222. package/dist/core/cursor-print-ui-mapper.js +553 -0
  223. package/dist/core/cursor-print-ui-mapper.js.map +1 -0
  224. package/dist/core/cursor-runner.d.ts +24 -0
  225. package/dist/core/cursor-runner.js +149 -0
  226. package/dist/core/cursor-runner.js.map +1 -0
  227. package/dist/core/cursor-ui-mapper.js +5 -2
  228. package/dist/core/cursor-ui-mapper.js.map +1 -1
  229. package/dist/core/defined.d.ts +1 -0
  230. package/dist/core/defined.js +2 -0
  231. package/dist/core/defined.js.map +1 -0
  232. package/dist/core/hook-items.d.ts +14 -0
  233. package/dist/core/hook-items.js +13 -0
  234. package/dist/core/hook-items.js.map +1 -0
  235. package/dist/core/host-model-catalog.d.ts +2 -9
  236. package/dist/core/host-model-catalog.js +2 -9
  237. package/dist/core/host-model-catalog.js.map +1 -1
  238. package/dist/core/managed-session.js +15 -3
  239. package/dist/core/managed-session.js.map +1 -1
  240. package/dist/core/model-identity.d.ts +4 -21
  241. package/dist/core/model-identity.js.map +1 -1
  242. package/dist/core/model-presets.d.ts +2 -13
  243. package/dist/core/model-presets.js +2 -13
  244. package/dist/core/model-presets.js.map +1 -1
  245. package/dist/core/omp-model-catalog.js.map +1 -1
  246. package/dist/core/omp-runner.d.ts +6 -7
  247. package/dist/core/omp-runner.js +92 -33
  248. package/dist/core/omp-runner.js.map +1 -1
  249. package/dist/core/omp-ui-mapper.js +1 -1
  250. package/dist/core/omp-ui-mapper.js.map +1 -1
  251. package/dist/core/opencode-model-catalog.js.map +1 -1
  252. package/dist/core/opencode-permissions.d.ts +52 -0
  253. package/dist/core/opencode-permissions.js +101 -0
  254. package/dist/core/opencode-permissions.js.map +1 -0
  255. package/dist/core/opencode-server-runner.d.ts +10 -9
  256. package/dist/core/opencode-server-runner.js +286 -28
  257. package/dist/core/opencode-server-runner.js.map +1 -1
  258. package/dist/core/opencode-session-error.d.ts +15 -7
  259. package/dist/core/opencode-session-error.js +25 -9
  260. package/dist/core/opencode-session-error.js.map +1 -1
  261. package/dist/core/opencode-ui-mapper.js +2 -2
  262. package/dist/core/opencode-ui-mapper.js.map +1 -1
  263. package/dist/core/pi-model-catalog.js.map +1 -1
  264. package/dist/core/pi-runner.d.ts +12 -4
  265. package/dist/core/pi-runner.js +171 -63
  266. package/dist/core/pi-runner.js.map +1 -1
  267. package/dist/core/pi-ui-mapper.js +1 -1
  268. package/dist/core/pi-ui-mapper.js.map +1 -1
  269. package/dist/core/process-usage.d.ts +5 -0
  270. package/dist/core/process-usage.js +24 -4
  271. package/dist/core/process-usage.js.map +1 -1
  272. package/dist/core/provider-auth.d.ts +16 -107
  273. package/dist/core/provider-auth.js +16 -132
  274. package/dist/core/provider-auth.js.map +1 -1
  275. package/dist/core/runner-factory.d.ts +4 -1
  276. package/dist/core/runner-factory.js +3 -3
  277. package/dist/core/runner-factory.js.map +1 -1
  278. package/dist/core/runner-runtime.d.ts +22 -0
  279. package/dist/core/runner-runtime.js +66 -5
  280. package/dist/core/runner-runtime.js.map +1 -1
  281. package/dist/core/runner-tool-grants.d.ts +21 -0
  282. package/dist/core/runner-tool-grants.js +64 -0
  283. package/dist/core/runner-tool-grants.js.map +1 -0
  284. package/dist/core/secret-redaction.d.ts +3 -20
  285. package/dist/core/secret-redaction.js +3 -20
  286. package/dist/core/secret-redaction.js.map +1 -1
  287. package/dist/core/session-process.d.ts +22 -2
  288. package/dist/core/session-process.js +170 -12
  289. package/dist/core/session-process.js.map +1 -1
  290. package/dist/core/shell-env.d.ts +2 -15
  291. package/dist/core/shell-env.js +2 -15
  292. package/dist/core/shell-env.js.map +1 -1
  293. package/dist/core/ui-events.d.ts +60 -47
  294. package/dist/core/ui-events.js +0 -23
  295. package/dist/core/ui-events.js.map +1 -1
  296. package/dist/core/usage-limit.js.map +1 -1
  297. package/dist/data-gitignore.js +3 -1
  298. package/dist/data-gitignore.js.map +1 -1
  299. package/dist/delegation/capacity.d.ts +4 -8
  300. package/dist/delegation/capacity.js +4 -8
  301. package/dist/delegation/capacity.js.map +1 -1
  302. package/dist/delegation/cli.js +123 -21
  303. package/dist/delegation/cli.js.map +1 -1
  304. package/dist/delegation/context.d.ts +19 -3
  305. package/dist/delegation/context.js +217 -22
  306. package/dist/delegation/context.js.map +1 -1
  307. package/dist/delegation/conversations.d.ts +4 -3
  308. package/dist/delegation/conversations.js +7 -5
  309. package/dist/delegation/conversations.js.map +1 -1
  310. package/dist/delegation/destroy-observation.d.ts +1 -1
  311. package/dist/delegation/destroy-observation.js.map +1 -1
  312. package/dist/delegation/effort.js.map +1 -1
  313. package/dist/delegation/execution-identity.d.ts +1 -1
  314. package/dist/delegation/execution-identity.js +41 -7
  315. package/dist/delegation/execution-identity.js.map +1 -1
  316. package/dist/delegation/idle-test-app.d.ts +4 -0
  317. package/dist/delegation/idle-test-app.js +174 -0
  318. package/dist/delegation/idle-test-app.js.map +1 -0
  319. package/dist/delegation/input.js.map +1 -1
  320. package/dist/delegation/park-notice.d.ts +42 -0
  321. package/dist/delegation/park-notice.js +71 -0
  322. package/dist/delegation/park-notice.js.map +1 -0
  323. package/dist/delegation/policy.d.ts +2 -0
  324. package/dist/delegation/policy.js +9 -1
  325. package/dist/delegation/policy.js.map +1 -1
  326. package/dist/delegation/process-liveness.d.ts +10 -15
  327. package/dist/delegation/process-liveness.js +11 -35
  328. package/dist/delegation/process-liveness.js.map +1 -1
  329. package/dist/delegation/provision.js +21 -19
  330. package/dist/delegation/provision.js.map +1 -1
  331. package/dist/delegation/questions.d.ts +3 -1
  332. package/dist/delegation/questions.js +10 -5
  333. package/dist/delegation/questions.js.map +1 -1
  334. package/dist/delegation/readiness.d.ts +2 -2
  335. package/dist/delegation/results.d.ts +4 -1
  336. package/dist/delegation/results.js +49 -18
  337. package/dist/delegation/results.js.map +1 -1
  338. package/dist/delegation/retry-backoff.d.ts +8 -0
  339. package/dist/delegation/retry-backoff.js +8 -0
  340. package/dist/delegation/retry-backoff.js.map +1 -1
  341. package/dist/delegation/routes.d.ts +114 -30
  342. package/dist/delegation/routes.js +4 -1
  343. package/dist/delegation/routes.js.map +1 -1
  344. package/dist/delegation/scratch-cleanup.d.ts +4 -5
  345. package/dist/delegation/scratch-cleanup.js +10 -8
  346. package/dist/delegation/scratch-cleanup.js.map +1 -1
  347. package/dist/delegation/service.d.ts +12 -4
  348. package/dist/delegation/service.js +76 -28
  349. package/dist/delegation/service.js.map +1 -1
  350. package/dist/delegation/transport.d.ts +154 -70
  351. package/dist/delegation/wait.d.ts +11 -0
  352. package/dist/delegation/wait.js +24 -0
  353. package/dist/delegation/wait.js.map +1 -1
  354. package/dist/delegation/windows-test-app.d.ts +5 -0
  355. package/dist/delegation/windows-test-app.js +63 -0
  356. package/dist/delegation/windows-test-app.js.map +1 -0
  357. package/dist/delegation/windows-workspace-identity.d.ts +3 -0
  358. package/dist/delegation/windows-workspace-identity.js +22 -0
  359. package/dist/delegation/windows-workspace-identity.js.map +1 -0
  360. package/dist/delegation/workspace.d.ts +5 -10
  361. package/dist/delegation/workspace.js +136 -75
  362. package/dist/delegation/workspace.js.map +1 -1
  363. package/dist/detached-process.d.ts +103 -0
  364. package/dist/detached-process.js +301 -0
  365. package/dist/detached-process.js.map +1 -0
  366. package/dist/discovery/catalog.d.ts +2 -1
  367. package/dist/discovery/catalog.js.map +1 -1
  368. package/dist/discovery/cli.js +3 -1
  369. package/dist/discovery/cli.js.map +1 -1
  370. package/dist/git-diff-base.d.ts +6 -61
  371. package/dist/git-diff-base.js +6 -70
  372. package/dist/git-diff-base.js.map +1 -1
  373. package/dist/git-index-copy.d.ts +4 -0
  374. package/dist/git-index-copy.js +10 -0
  375. package/dist/git-index-copy.js.map +1 -0
  376. package/dist/git-worktree-lock.d.ts +2 -4
  377. package/dist/git-worktree-lock.js +2 -4
  378. package/dist/git-worktree-lock.js.map +1 -1
  379. package/dist/git-worktree-release.d.ts +2 -2
  380. package/dist/git-worktree-release.js.map +1 -1
  381. package/dist/git-worktree.d.ts +47 -76
  382. package/dist/git-worktree.js +240 -94
  383. package/dist/git-worktree.js.map +1 -1
  384. package/dist/handoff.d.ts +51 -41
  385. package/dist/handoff.js +130 -78
  386. package/dist/handoff.js.map +1 -1
  387. package/dist/index.js +60 -39
  388. package/dist/index.js.map +1 -1
  389. package/dist/merge-observations.d.ts +13 -0
  390. package/dist/merge-observations.js +55 -0
  391. package/dist/merge-observations.js.map +1 -0
  392. package/dist/open-url.js +4 -14
  393. package/dist/open-url.js.map +1 -1
  394. package/dist/paths.d.ts +10 -13
  395. package/dist/paths.js +36 -17
  396. package/dist/paths.js.map +1 -1
  397. package/dist/planner.d.ts +2 -1
  398. package/dist/planner.js +9 -6
  399. package/dist/planner.js.map +1 -1
  400. package/dist/preview/agent-address.d.ts +34 -0
  401. package/dist/preview/agent-address.js +51 -0
  402. package/dist/preview/agent-address.js.map +1 -0
  403. package/dist/preview/agent-marker.d.ts +17 -0
  404. package/dist/preview/agent-marker.js +71 -0
  405. package/dist/preview/agent-marker.js.map +1 -0
  406. package/dist/preview/cdp-proxy.d.ts +54 -0
  407. package/dist/preview/cdp-proxy.js +151 -0
  408. package/dist/preview/cdp-proxy.js.map +1 -0
  409. package/dist/preview/cdp.d.ts +39 -3
  410. package/dist/preview/cdp.js +155 -57
  411. package/dist/preview/cdp.js.map +1 -1
  412. package/dist/preview/chromium.d.ts +18 -6
  413. package/dist/preview/chromium.js +112 -25
  414. package/dist/preview/chromium.js.map +1 -1
  415. package/dist/preview/dev-server.d.ts +1 -1
  416. package/dist/preview/dev-server.js +20 -44
  417. package/dist/preview/dev-server.js.map +1 -1
  418. package/dist/preview/host.d.ts +70 -3
  419. package/dist/preview/host.js +314 -28
  420. package/dist/preview/host.js.map +1 -1
  421. package/dist/preview/registration.d.ts +10 -5
  422. package/dist/preview/registration.js +2 -0
  423. package/dist/preview/registration.js.map +1 -1
  424. package/dist/preview/session.d.ts +2 -0
  425. package/dist/preview/session.js +10 -0
  426. package/dist/preview/session.js.map +1 -1
  427. package/dist/process-wait/exit-file.d.ts +29 -0
  428. package/dist/process-wait/exit-file.js +67 -0
  429. package/dist/process-wait/exit-file.js.map +1 -0
  430. package/dist/process-wait/supervisor.d.ts +30 -0
  431. package/dist/process-wait/supervisor.js +71 -0
  432. package/dist/process-wait/supervisor.js.map +1 -0
  433. package/dist/release/snapshot.d.ts +6 -6
  434. package/dist/runs/agent-tmpdir.d.ts +51 -36
  435. package/dist/runs/agent-tmpdir.js +389 -132
  436. package/dist/runs/agent-tmpdir.js.map +1 -1
  437. package/dist/runs/auto-name.d.ts +6 -6
  438. package/dist/runs/auto-name.js +1 -1
  439. package/dist/runs/auto-name.js.map +1 -1
  440. package/dist/runs/client-request.d.ts +3 -3
  441. package/dist/runs/client-request.js +3 -3
  442. package/dist/runs/client-request.js.map +1 -1
  443. package/dist/runs/delegation-state.d.ts +11 -2
  444. package/dist/runs/delegation-state.js.map +1 -1
  445. package/dist/runs/event-history-agent-context.d.ts +14 -0
  446. package/dist/runs/event-history-agent-context.js +105 -0
  447. package/dist/runs/event-history-agent-context.js.map +1 -0
  448. package/dist/runs/event-history-context.d.ts +15 -0
  449. package/dist/runs/event-history-context.js +109 -0
  450. package/dist/runs/event-history-context.js.map +1 -0
  451. package/dist/runs/event-history.d.ts +4 -1
  452. package/dist/runs/event-history.js +29 -130
  453. package/dist/runs/event-history.js.map +1 -1
  454. package/dist/runs/history-stream.d.ts +2 -0
  455. package/dist/runs/history-stream.js +62 -0
  456. package/dist/runs/history-stream.js.map +1 -0
  457. package/dist/runs/legacy-index.d.ts +6 -19
  458. package/dist/runs/legacy-index.js +6 -19
  459. package/dist/runs/legacy-index.js.map +1 -1
  460. package/dist/runs/live-item-snapshots.d.ts +13 -0
  461. package/dist/runs/live-item-snapshots.js +79 -0
  462. package/dist/runs/live-item-snapshots.js.map +1 -0
  463. package/dist/runs/loaded-run-healing.d.ts +3 -0
  464. package/dist/runs/loaded-run-healing.js +17 -0
  465. package/dist/runs/loaded-run-healing.js.map +1 -0
  466. package/dist/runs/outcome-commit.d.ts +98 -0
  467. package/dist/runs/outcome-commit.js +132 -0
  468. package/dist/runs/outcome-commit.js.map +1 -0
  469. package/dist/runs/pull-requests.d.ts +14 -0
  470. package/dist/runs/pull-requests.js +96 -0
  471. package/dist/runs/pull-requests.js.map +1 -0
  472. package/dist/runs/raw-record.d.ts +3 -15
  473. package/dist/runs/raw-record.js +3 -15
  474. package/dist/runs/raw-record.js.map +1 -1
  475. package/dist/runs/retention.d.ts +2 -2
  476. package/dist/runs/retention.js +7 -0
  477. package/dist/runs/retention.js.map +1 -1
  478. package/dist/runs/review-gate.d.ts +1 -1
  479. package/dist/runs/review-gate.js.map +1 -1
  480. package/dist/runs/run-claims.d.ts +2 -9
  481. package/dist/runs/run-claims.js.map +1 -1
  482. package/dist/runs/run-database.d.ts +29 -34
  483. package/dist/runs/run-database.js +124 -46
  484. package/dist/runs/run-database.js.map +1 -1
  485. package/dist/runs/run-index.d.ts +6 -25
  486. package/dist/runs/run-index.js +25 -38
  487. package/dist/runs/run-index.js.map +1 -1
  488. package/dist/runs/run-row.d.ts +5 -34
  489. package/dist/runs/run-row.js +13 -38
  490. package/dist/runs/run-row.js.map +1 -1
  491. package/dist/runs/store.d.ts +1597 -744
  492. package/dist/runs/store.js +1231 -739
  493. package/dist/runs/store.js.map +1 -1
  494. package/dist/runs/task-markers.d.ts +1 -0
  495. package/dist/runs/task-markers.js +5 -1
  496. package/dist/runs/task-markers.js.map +1 -1
  497. package/dist/runs/task-refs.d.ts +3 -3
  498. package/dist/runs/transcript-facts-fold.d.ts +64 -0
  499. package/dist/runs/transcript-facts-fold.js +109 -0
  500. package/dist/runs/transcript-facts-fold.js.map +1 -0
  501. package/dist/runs/transcript-facts-load.d.ts +11 -0
  502. package/dist/runs/transcript-facts-load.js +66 -0
  503. package/dist/runs/transcript-facts-load.js.map +1 -0
  504. package/dist/runs/transcript-facts-queue.d.ts +30 -0
  505. package/dist/runs/transcript-facts-queue.js +227 -0
  506. package/dist/runs/transcript-facts-queue.js.map +1 -0
  507. package/dist/runs/transcript-facts-worker.d.ts +15 -0
  508. package/dist/runs/transcript-facts-worker.js +26 -0
  509. package/dist/runs/transcript-facts-worker.js.map +1 -0
  510. package/dist/runs/transcript-facts.d.ts +13 -51
  511. package/dist/runs/transcript-facts.js +86 -202
  512. package/dist/runs/transcript-facts.js.map +1 -1
  513. package/dist/runs/ui-event-sink.d.ts +5 -30
  514. package/dist/runs/ui-event-sink.js +8 -30
  515. package/dist/runs/ui-event-sink.js.map +1 -1
  516. package/dist/runs/webhook.d.ts +104 -38
  517. package/dist/runs/webhook.js +180 -77
  518. package/dist/runs/webhook.js.map +1 -1
  519. package/dist/server/app-type.d.ts +2 -17
  520. package/dist/server/archive-on-merge.d.ts +35 -0
  521. package/dist/server/archive-on-merge.js +202 -0
  522. package/dist/server/archive-on-merge.js.map +1 -0
  523. package/dist/server/capabilities.d.ts +3 -15
  524. package/dist/server/capabilities.js +6 -19
  525. package/dist/server/capabilities.js.map +1 -1
  526. package/dist/server/checkout-progress.d.ts +10 -0
  527. package/dist/server/checkout-progress.js +27 -0
  528. package/dist/server/checkout-progress.js.map +1 -0
  529. package/dist/server/checkout.d.ts +10 -19
  530. package/dist/server/checkout.js +15 -45
  531. package/dist/server/checkout.js.map +1 -1
  532. package/dist/server/cockpit-ownership.d.ts +2 -0
  533. package/dist/server/cockpit-ownership.js +9 -0
  534. package/dist/server/cockpit-ownership.js.map +1 -1
  535. package/dist/server/cold-repo-handles.d.ts +2 -7
  536. package/dist/server/cold-repo-handles.js +2 -7
  537. package/dist/server/cold-repo-handles.js.map +1 -1
  538. package/dist/server/completion-actions.d.ts +30 -0
  539. package/dist/server/completion-actions.js +204 -0
  540. package/dist/server/completion-actions.js.map +1 -0
  541. package/dist/server/create-project.d.ts +71 -0
  542. package/dist/server/create-project.js +448 -0
  543. package/dist/server/create-project.js.map +1 -0
  544. package/dist/server/forge/github-filters.d.ts +7 -1
  545. package/dist/server/forge/github-filters.js +66 -51
  546. package/dist/server/forge/github-filters.js.map +1 -1
  547. package/dist/server/forge/github-merge-requirements.d.ts +18 -0
  548. package/dist/server/forge/github-merge-requirements.js +137 -0
  549. package/dist/server/forge/github-merge-requirements.js.map +1 -0
  550. package/dist/server/forge/github.d.ts +98 -111
  551. package/dist/server/forge/github.js +625 -306
  552. package/dist/server/forge/github.js.map +1 -1
  553. package/dist/server/forge/types.d.ts +25 -22
  554. package/dist/server/fs-browse.d.ts +3 -28
  555. package/dist/server/fs-browse.js.map +1 -1
  556. package/dist/server/git-changes.d.ts +5 -15
  557. package/dist/server/git-changes.js +3 -50
  558. package/dist/server/git-changes.js.map +1 -1
  559. package/dist/server/git.d.ts +3 -1
  560. package/dist/server/git.js +12 -0
  561. package/dist/server/git.js.map +1 -1
  562. package/dist/server/github.d.ts +1 -1
  563. package/dist/server/github.js +1 -1
  564. package/dist/server/github.js.map +1 -1
  565. package/dist/server/launch-key.d.ts +2 -4
  566. package/dist/server/launch-key.js +2 -4
  567. package/dist/server/launch-key.js.map +1 -1
  568. package/dist/server/live-routes.d.ts +68 -0
  569. package/dist/server/live-routes.js +147 -0
  570. package/dist/server/live-routes.js.map +1 -0
  571. package/dist/server/open-in-app.d.ts +4 -13
  572. package/dist/server/open-in-app.js +5 -41
  573. package/dist/server/open-in-app.js.map +1 -1
  574. package/dist/server/open-in-targets.d.ts +42 -0
  575. package/dist/server/open-in-targets.js +110 -0
  576. package/dist/server/open-in-targets.js.map +1 -0
  577. package/dist/server/open-in-terminal.d.ts +3 -0
  578. package/dist/server/open-in-terminal.js +6 -26
  579. package/dist/server/open-in-terminal.js.map +1 -1
  580. package/dist/server/preview-cdp-socket.d.ts +21 -0
  581. package/dist/server/preview-cdp-socket.js +112 -0
  582. package/dist/server/preview-cdp-socket.js.map +1 -0
  583. package/dist/server/preview-socket.d.ts +11 -11
  584. package/dist/server/preview-socket.js +22 -22
  585. package/dist/server/preview-socket.js.map +1 -1
  586. package/dist/server/preview-sockets.d.ts +14 -0
  587. package/dist/server/preview-sockets.js +18 -0
  588. package/dist/server/preview-sockets.js.map +1 -0
  589. package/dist/server/project-context.d.ts +54 -18
  590. package/dist/server/project-context.js +178 -5
  591. package/dist/server/project-context.js.map +1 -1
  592. package/dist/server/provider-action-gate.d.ts +0 -2
  593. package/dist/server/provider-action-gate.js +0 -21
  594. package/dist/server/provider-action-gate.js.map +1 -1
  595. package/dist/server/provider-auth-runtime.d.ts +3 -18
  596. package/dist/server/provider-auth-runtime.js +3 -18
  597. package/dist/server/provider-auth-runtime.js.map +1 -1
  598. package/dist/server/repo-branches.d.ts +3 -9
  599. package/dist/server/repo-branches.js +6 -22
  600. package/dist/server/repo-branches.js.map +1 -1
  601. package/dist/server/run-event-feed.d.ts +20 -0
  602. package/dist/server/run-event-feed.js +190 -0
  603. package/dist/server/run-event-feed.js.map +1 -0
  604. package/dist/server/server-deps.d.ts +37 -0
  605. package/dist/server/server-deps.js +114 -0
  606. package/dist/server/server-deps.js.map +1 -0
  607. package/dist/server/server.d.ts +14082 -11998
  608. package/dist/server/server.js +785 -1647
  609. package/dist/server/server.js.map +1 -1
  610. package/dist/server/start-run-options.d.ts +82 -0
  611. package/dist/server/start-run-options.js +111 -0
  612. package/dist/server/start-run-options.js.map +1 -0
  613. package/dist/server/validators.d.ts +3 -29
  614. package/dist/server/validators.js +1 -2
  615. package/dist/server/validators.js.map +1 -1
  616. package/dist/server/ws.d.ts +3 -23
  617. package/dist/server/ws.js +3 -23
  618. package/dist/server/ws.js.map +1 -1
  619. package/dist/server-install/engine.d.ts +6 -9
  620. package/dist/server-install/engine.js +2 -9
  621. package/dist/server-install/engine.js.map +1 -1
  622. package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
  623. package/dist/server-install/state.d.ts +2 -4
  624. package/dist/server-install/state.js +2 -4
  625. package/dist/server-install/state.js.map +1 -1
  626. package/dist/server-install/steps.d.ts +2 -5
  627. package/dist/server-install/steps.js +3 -6
  628. package/dist/server-install/steps.js.map +1 -1
  629. package/dist/server-install/types.d.ts +3 -6
  630. package/dist/server-install/types.js +2 -5
  631. package/dist/server-install/types.js.map +1 -1
  632. package/dist/server-install/ui.d.ts +2 -8
  633. package/dist/server-install/ui.js +3 -3
  634. package/dist/server-install/ui.js.map +1 -1
  635. package/dist/session-context.d.ts +64 -0
  636. package/dist/session-context.js +264 -0
  637. package/dist/session-context.js.map +1 -0
  638. package/dist/skills-provision.d.ts +62 -0
  639. package/dist/skills-provision.js +325 -0
  640. package/dist/skills-provision.js.map +1 -0
  641. package/dist/skills-remote.d.ts +29 -27
  642. package/dist/skills-remote.js +236 -100
  643. package/dist/skills-remote.js.map +1 -1
  644. package/dist/skills.d.ts +25 -36
  645. package/dist/skills.js +43 -54
  646. package/dist/skills.js.map +1 -1
  647. package/dist/subcommands.d.ts +11 -0
  648. package/dist/subcommands.js +24 -0
  649. package/dist/subcommands.js.map +1 -0
  650. package/dist/task-cli/cli.js +78 -25
  651. package/dist/task-cli/cli.js.map +1 -1
  652. package/dist/task-cli/discovery.d.ts +4 -2
  653. package/dist/task-cli/discovery.js +14 -13
  654. package/dist/task-cli/discovery.js.map +1 -1
  655. package/dist/task-cli/hint.d.ts +20 -0
  656. package/dist/task-cli/hint.js +14 -0
  657. package/dist/task-cli/hint.js.map +1 -0
  658. package/dist/task-cli/http.d.ts +1 -0
  659. package/dist/task-cli/http.js +3 -1
  660. package/dist/task-cli/http.js.map +1 -1
  661. package/dist/task-cli/projections.d.ts +14 -11
  662. package/dist/task-cli/projections.js +15 -11
  663. package/dist/task-cli/projections.js.map +1 -1
  664. package/dist/task-cli/watch.d.ts +18 -10
  665. package/dist/task-cli/watch.js +128 -20
  666. package/dist/task-cli/watch.js.map +1 -1
  667. package/dist/ui-state.d.ts +17 -3
  668. package/dist/ui-state.js +56 -9
  669. package/dist/ui-state.js.map +1 -1
  670. package/dist/update-check.d.ts +0 -10
  671. package/dist/update-check.js +1 -16
  672. package/dist/update-check.js.map +1 -1
  673. package/dist/voice/decide.d.ts +32 -0
  674. package/dist/voice/decide.js +297 -0
  675. package/dist/voice/decide.js.map +1 -0
  676. package/dist/voice/decision-log.d.ts +52 -0
  677. package/dist/voice/decision-log.js +107 -0
  678. package/dist/voice/decision-log.js.map +1 -0
  679. package/dist/voice/engine.d.ts +119 -0
  680. package/dist/voice/engine.js +60 -0
  681. package/dist/voice/engine.js.map +1 -0
  682. package/dist/voice/fake-engine.d.ts +10 -0
  683. package/dist/voice/fake-engine.js +192 -0
  684. package/dist/voice/fake-engine.js.map +1 -0
  685. package/dist/voice/jev-engine.d.ts +17 -0
  686. package/dist/voice/jev-engine.js +110 -0
  687. package/dist/voice/jev-engine.js.map +1 -0
  688. package/dist/voice/pending-ask.d.ts +17 -0
  689. package/dist/voice/pending-ask.js +50 -0
  690. package/dist/voice/pending-ask.js.map +1 -0
  691. package/dist/voice/routes.d.ts +115 -0
  692. package/dist/voice/routes.js +91 -0
  693. package/dist/voice/routes.js.map +1 -0
  694. package/dist/voice/sentence.d.ts +21 -0
  695. package/dist/voice/sentence.js +61 -0
  696. package/dist/voice/sentence.js.map +1 -0
  697. package/dist/voice/thresholds.d.ts +28 -0
  698. package/dist/voice/thresholds.js +29 -0
  699. package/dist/voice/thresholds.js.map +1 -0
  700. package/dist/webhooks/cli.d.ts +18 -0
  701. package/dist/webhooks/cli.js +145 -0
  702. package/dist/webhooks/cli.js.map +1 -0
  703. package/dist/webhooks/prompt.d.ts +5 -0
  704. package/dist/webhooks/prompt.js +26 -0
  705. package/dist/webhooks/prompt.js.map +1 -0
  706. package/dist/workflows/active-run.d.ts +167 -0
  707. package/dist/workflows/active-run.js +21 -0
  708. package/dist/workflows/active-run.js.map +1 -0
  709. package/dist/workflows/continuation-admission.d.ts +913 -0
  710. package/dist/workflows/continuation-admission.js +265 -0
  711. package/dist/workflows/continuation-admission.js.map +1 -0
  712. package/dist/workflows/execution-account.d.ts +13 -0
  713. package/dist/workflows/execution-account.js +18 -0
  714. package/dist/workflows/execution-account.js.map +1 -0
  715. package/dist/workflows/input-acknowledgement.d.ts +152 -0
  716. package/dist/workflows/input-acknowledgement.js +38 -0
  717. package/dist/workflows/input-acknowledgement.js.map +1 -0
  718. package/dist/workflows/line-order.d.ts +5 -0
  719. package/dist/workflows/line-order.js +25 -0
  720. package/dist/workflows/line-order.js.map +1 -0
  721. package/dist/workflows/outcome-batches.d.ts +20 -0
  722. package/dist/workflows/outcome-batches.js +25 -0
  723. package/dist/workflows/outcome-batches.js.map +1 -0
  724. package/dist/workflows/question-routing.d.ts +8 -0
  725. package/dist/workflows/question-routing.js +18 -0
  726. package/dist/workflows/question-routing.js.map +1 -0
  727. package/dist/workflows/run-scheduling.d.ts +35 -0
  728. package/dist/workflows/run-scheduling.js +61 -0
  729. package/dist/workflows/run-scheduling.js.map +1 -0
  730. package/dist/workflows/run-states.d.ts +190 -0
  731. package/dist/workflows/run-states.js +295 -0
  732. package/dist/workflows/run-states.js.map +1 -0
  733. package/dist/workflows/run.d.ts +1296 -278
  734. package/dist/workflows/run.js +5730 -3265
  735. package/dist/workflows/run.js.map +1 -1
  736. package/dist/workflows/turn-end.d.ts +116 -0
  737. package/dist/workflows/turn-end.js +68 -0
  738. package/dist/workflows/turn-end.js.map +1 -0
  739. package/dist/workflows/types.d.ts +35 -130
  740. package/dist/workflows/types.js +47 -100
  741. package/dist/workflows/types.js.map +1 -1
  742. package/dist/workflows/waits.d.ts +74 -0
  743. package/dist/workflows/waits.js +197 -0
  744. package/dist/workflows/waits.js.map +1 -0
  745. package/dist/workspace/agent-accounts.d.ts +5 -38
  746. package/dist/workspace/agent-accounts.js +14 -40
  747. package/dist/workspace/agent-accounts.js.map +1 -1
  748. package/dist/workspace/agent-profiles.d.ts +40 -16
  749. package/dist/workspace/agent-profiles.js +77 -17
  750. package/dist/workspace/agent-profiles.js.map +1 -1
  751. package/dist/workspace/config.d.ts +48 -49
  752. package/dist/workspace/config.js +68 -72
  753. package/dist/workspace/config.js.map +1 -1
  754. package/dist/workspace/migrations.d.ts +3 -13
  755. package/dist/workspace/migrations.js.map +1 -1
  756. package/dist/workspace/projects-cli.d.ts +1 -1
  757. package/dist/workspace/projects-cli.js.map +1 -1
  758. package/dist/workspace/projects.d.ts +15 -18
  759. package/dist/workspace/projects.js +20 -16
  760. package/dist/workspace/projects.js.map +1 -1
  761. package/dist/workspace/semaphore.d.ts +11 -45
  762. package/dist/workspace/semaphore.js +6 -18
  763. package/dist/workspace/semaphore.js.map +1 -1
  764. package/dist/workspace/ui-state.d.ts +6 -4
  765. package/dist/workspace/ui-state.js +6 -4
  766. package/dist/workspace/ui-state.js.map +1 -1
  767. package/dist/workspace/webhooks.d.ts +40 -0
  768. package/dist/workspace/webhooks.js +146 -0
  769. package/dist/workspace/webhooks.js.map +1 -0
  770. package/dist/worktree-manifest.d.ts +165 -0
  771. package/dist/worktree-manifest.js +530 -0
  772. package/dist/worktree-manifest.js.map +1 -0
  773. package/dist/worktree-setup.js.map +1 -1
  774. package/package.json +6 -5
  775. package/scripts/benchmark-run-store-fixture.ts +7 -3
  776. package/scripts/check-pack.mjs +3 -1
  777. package/scripts/inline-contract.mjs +80 -27
  778. package/scripts/install-as-command.mjs +3 -1
  779. package/scripts/measure-transcript-facts-health.mjs +87 -0
  780. package/scripts/measure-transcript-facts-lag.mjs +68 -0
  781. package/scripts/mock-ci-tool.mjs +49 -6
  782. package/scripts/mock-claude-model-refusal.mjs +42 -0
  783. package/scripts/mock-claude.mjs +833 -591
  784. package/scripts/mock-codex-app-server.mjs +785 -418
  785. package/scripts/mock-cursor-acp.mjs +296 -125
  786. package/scripts/mock-cursor-print.mjs +256 -0
  787. package/scripts/mock-deferred-turn-start.mjs +16 -0
  788. package/scripts/mock-delivery-control.d.mts +23 -0
  789. package/scripts/mock-delivery-control.mjs +80 -0
  790. package/scripts/mock-env-record.mjs +11 -0
  791. package/scripts/mock-failure-control.d.mts +13 -0
  792. package/scripts/mock-failure-control.mjs +68 -0
  793. package/scripts/mock-multi-pr.mjs +7 -0
  794. package/scripts/mock-nudge.mjs +45 -0
  795. package/scripts/mock-omp-rpc.mjs +429 -255
  796. package/scripts/mock-opencode-serve.mjs +972 -557
  797. package/scripts/mock-pi-rpc.mjs +558 -331
  798. package/scripts/mock-runner-crash.mjs +18 -2
  799. package/scripts/mock-session-context.d.mts +5 -0
  800. package/scripts/mock-session-context.mjs +56 -0
  801. package/scripts/mock-silent-tail.mjs +10 -3
  802. package/scripts/pi-default-tools.mjs +22 -0
  803. package/scripts/pi-project-skills.mjs +59 -0
  804. package/scripts/probe-cursor-print.mjs +627 -0
  805. package/scripts/transcript-facts-fixture.mjs +53 -0
  806. package/scripts/voice-replay.ts +50 -0
  807. package/scripts/windows-workspace-identity.cs +208 -0
  808. package/scripts/windows-workspace-identity.ps1 +10 -0
  809. package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
  810. package/web/dist/assets/button-CeupvoKG.js +41 -0
  811. package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
  812. package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
  813. package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
  814. package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
  815. package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
  816. package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
  817. package/web/dist/assets/eye-B8okNWXU.js +1 -0
  818. package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
  819. package/web/dist/assets/github-DwU6ALRK.js +1 -0
  820. package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
  821. package/web/dist/assets/index-BOfE8pyD.js +34 -0
  822. package/web/dist/assets/index-D9HpsmdW.css +1 -0
  823. package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
  824. package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
  825. package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
  826. package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
  827. package/web/dist/assets/popover-D56fhiXj.js +1 -0
  828. package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
  829. package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
  830. package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
  831. package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
  832. package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
  833. package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
  834. package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
  835. package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
  836. package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
  837. package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
  838. package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
  839. package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
  840. package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
  841. package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
  842. package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
  843. package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
  844. package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
  845. package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
  846. package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
  847. package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
  848. package/web/dist/index.html +13 -17
  849. package/web/dist/live-worker.js +4 -0
  850. package/dist/core/tool-display.js +0 -179
  851. package/dist/core/tool-display.js.map +0 -1
  852. package/dist/runs/human-ask-summary.d.ts +0 -9
  853. package/dist/runs/human-ask-summary.js +0 -39
  854. package/dist/runs/human-ask-summary.js.map +0 -1
  855. package/dist/runs/run-search.d.ts +0 -29
  856. package/dist/runs/run-search.js +0 -63
  857. package/dist/runs/run-search.js.map +0 -1
  858. package/dist/skills-banner.d.ts +0 -22
  859. package/dist/skills-banner.js +0 -41
  860. package/dist/skills-banner.js.map +0 -1
  861. package/dist/skills-update.d.ts +0 -88
  862. package/dist/skills-update.js +0 -392
  863. package/dist/skills-update.js.map +0 -1
  864. package/dist/todos.d.ts +0 -48
  865. package/dist/todos.js +0 -201
  866. package/dist/todos.js.map +0 -1
  867. package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
  868. package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
  869. package/web/dist/assets/button-C_rd7CPp.js +0 -43
  870. package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
  871. package/web/dist/assets/diff-DrEARXTV.js +0 -3
  872. package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
  873. package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
  874. package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
  875. package/web/dist/assets/format-DpNe3S0A.js +0 -1
  876. package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
  877. package/web/dist/assets/github-CfV5sqL0.js +0 -1
  878. package/web/dist/assets/index-DgWWlOLy.js +0 -13
  879. package/web/dist/assets/index-fBFnuvxu.css +0 -1
  880. package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
  881. package/web/dist/assets/popover-BohP6WTx.js +0 -1
  882. package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
  883. package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
  884. package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
  885. package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
  886. package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
  887. package/web/dist/assets/run-header-68WHf9wV.js +0 -1
  888. package/web/dist/assets/run-header-8GObNx6F.css +0 -1
  889. package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
  890. package/web/dist/assets/skills-DFBiAuJG.js +0 -1
  891. package/web/dist/assets/skills-DiVIgKeU.js +0 -1
  892. package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
  893. package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
  894. package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
  895. package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
  896. package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
  897. package/web/dist/assets/task-files-D50s-gKW.js +0 -2
  898. package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
  899. package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
  900. package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
  901. package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
  902. package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
  903. package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
  904. package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
  905. package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
  906. package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
  907. package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
package/README.md CHANGED
@@ -1,26 +1,31 @@
1
1
  <div align="center">
2
2
 
3
- # cezar ⚡
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="packages/web/public/cezarion-mark-dark.svg">
5
+ <img src="packages/web/public/cezarion-mark-light.svg" alt="" width="96" height="96">
6
+ </picture>
7
+
8
+ # Cezarion
4
9
 
5
10
  **Parallel coding agents orchestrator** — a local cockpit for running and
6
11
  tracking AI coding-agent tasks in your repo.
7
12
 
8
- Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, pi or OMP
9
- (OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
13
+ Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, Cursor, pi or
14
+ OMP (OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
10
15
  tokens, diffs, in a browser cockpit that runs entirely on your machine.
11
16
  Your CLI logins, your `gh`, your files. No accounts, no database server, no cloud.
12
17
 
13
18
  🔥 **Fire and forget.** Queue a stack of autonomous coding and maintenance
14
- tasks and let them run — cezar orchestrates them across isolated worktrees,
19
+ tasks and let them run — Cezarion orchestrates them across isolated worktrees,
15
20
  in parallel. Flip the **Autonomous** flag
16
21
  and a run never stops to ask; it just finishes. Leave it on a VPS and you get
17
22
  a dev team that's *always on* — a mobile-friendly cockpit you can check from
18
23
  your phone, working your backlog while you're away.
19
24
 
20
- [A look inside](#a-look-inside) · [What cezar does best](#what-cezar-does-best) · [What it solves](#what-it-solves) · [Who it's for](#who-its-for) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Core concepts](#core-concepts) · [Cockpit tour](#cockpit-tour) · [Agent backends](#coding-agent-backends) · [Remote access](#remote-access-host-cezar-on-a-server)
25
+ [A look inside](#a-look-inside) · [What Cezarion does best](#what-cezarion-does-best-) · [What it solves](#what-it-solves) · [Who it's for](#who-its-for) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Core concepts](#core-concepts) · [Cockpit tour](#cockpit-tour) · [Agent backends](#coding-agent-backends) · [Remote access](#remote-access-host-cezarion-on-a-server)
21
26
 
22
27
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
23
- ![Node 24.15+](https://img.shields.io/badge/Node-24.15%2B-339933)
28
+ ![Node 24.21.0+](https://img.shields.io/badge/Node-24.21.0%2B-339933)
24
29
  ![TypeScript 7.x](https://img.shields.io/badge/TypeScript-7.x-3178c6)
25
30
  ![Zero config](https://img.shields.io/badge/config-zero-success)
26
31
  ![Embedded SQLite](https://img.shields.io/badge/database-embedded%20SQLite-success)
@@ -49,7 +54,7 @@ cache entry, so the same command uses the new version on its next launch.
49
54
  Update preparation and recovery state is generated under
50
55
  `~/.cezar/application-updates/` (or `CEZ_HOME`).
51
56
  Pinned npx invocations, source checkouts, npm links, and hosted deployments use
52
- their existing manual update paths. Cezar holds its own installation lock and
57
+ their existing manual update paths. Cezarion holds its own installation lock and
53
58
  npm's npx lock during promotion; a separate manual `npm install` does not honor
54
59
  those locks, so avoid one while an update is preparing or restarting.
55
60
 
@@ -57,34 +62,52 @@ those locks, so avoid one while an update is preparing or restarting.
57
62
 
58
63
  Click any thumbnail for the full-size screenshot.
59
64
 
60
- | Orchestrate parallel agents | Watch a run live | Parallel variants |
61
- |:--:|:--:|:--:|
62
- | [![The Tasks view — parallel runs, a queue with positions, per-run cost and peak memory, and a variants compare card](docs/screenshots/task-view.png)](docs/screenshots/task-view.png) | [![A running task streaming agent text, tool calls and screenshots live](docs/screenshots/live-run.png)](docs/screenshots/live-run.png) | [![Two competing variants of the same task compared side by side — pick the winner](docs/screenshots/variants-compare.png)](docs/screenshots/variants-compare.png) |
63
- | *Run and queue many tasks at once — each in its own worktree — with live status, cost and peak memory per run.* | *Every step, tool call, token and screenshot — streamed as it happens.* | *Run a task ×2/×3 in isolated worktrees, compare the diffs, keep one.* |
64
- | **Workflow builder** | **GitHub, one click away** | **Skills + fire-and-forget** |
65
- | [![The workflow builder — drag skills into an ordered chain of agent steps and shell checks](docs/screenshots/workflow-builder.png)](docs/screenshots/workflow-builder.png) | [![The GitHub tab — hand an open issue to the agent with a workflow and skills](docs/screenshots/github-issues.png)](docs/screenshots/github-issues.png) | [![The task composer — pick a skill playbook and flip the Autonomous flag to run unattended](docs/screenshots/skills-autonomous.png)](docs/screenshots/skills-autonomous.png) |
66
- | *Stitch skills and shell checks into a reusable YAML chain, no code.* | *Open issues and PRs via your `gh` — run the agent straight on an issue.* | *Pick a Markdown skill and flip **Autonomous** — the run never stops to ask, so you can walk away.* |
65
+ | Orchestrate parallel agents | Watch a run live |
66
+ |:--:|:--:|
67
+ | [![The Tasks view with running and queued tasks](docs/screenshots/task-view.png)](docs/screenshots/task-view.png) | [![A running task streaming agent text, tool calls and test output](docs/screenshots/live-run.png)](docs/screenshots/live-run.png) |
68
+ | *Run and queue tasks in isolated worktrees, with live status and resource use.* | *Every step, tool call, token and screenshot streams as it happens.* |
69
+ | **Workflow builder** | **GitHub, one click away** |
70
+ | [![The workflow builder](docs/screenshots/workflow-builder.png)](docs/screenshots/workflow-builder.png) | [![The GitHub tab](docs/screenshots/github-issues.png)](docs/screenshots/github-issues.png) |
71
+ | *Stitch skills and shell checks into a reusable YAML chain.* | *Hand an issue to an agent through your own `gh` login.* |
67
72
 
68
73
  ---
69
74
 
70
- ## What cezar does best 🏆
75
+ ## Generated inbox removed
76
+
77
+ The generated follow-up Inbox is removed in the next breaking minor release, **0.17.0**
78
+ (hearsay-tools/cezarion#1543). There is no deprecation window for this removal.
79
+ Remove `CEZ_FOLLOWUPS` from your launch environment; it no longer enables anything.
80
+ Agents receive no suggestion-generation instructions or usable `CEZ_TODOS_FILE`.
81
+ The todo API routes, `todos` SSE events, `capabilities.followups`, and task-creation
82
+ fields `generateFollowups` and `todoId` are removed. Remove those fields from scripts
83
+ and automation templates. Historical run records remain readable and resumable.
84
+ Upgrades leave `.ai/cezar/todos.json` untouched. If that file exists, export its original
85
+ contents from the project directory with:
86
+ ```bash
87
+ cp .ai/cezar/todos.json ./cezar-followups-export.json
88
+ ```
89
+ Old Inbox URLs show this guidance. Create an ordinary task with **New task**, or use
90
+ an issue-authoring skill to record work in your tracker. Task **Notes**, the rolling
91
+ handoff journal, **Continue**, live follow-up messages, and `cez worker inbox` remain
92
+ available.
93
+ ## What Cezarion does best 🏆
71
94
 
72
95
  Plenty of tools wrap a single coding agent in a nicer window — a "Codex GUI", a
73
- conductor-style app, one-agent front-ends. cezar's bet is different. Three things
96
+ conductor-style app, one-agent front-ends. Cezarion's bet is different. Three things
74
97
  it does better than any of them:
75
98
 
76
99
  - 🪶 **Genuinely zero config.** `npx cezarion` in your repo and you're running —
77
100
  no wizard, no API keys, no env vars, no schema, no database server. It rides the
78
- `claude` / `codex` / `opencode` / `pi` / `omp` logins and the `gh` you already have, and every
101
+ `claude` / `codex` / `opencode` / `agent` (Cursor) / `pi` / `omp` logins and the `gh` you already have, and every
79
102
  missing piece degrades gracefully instead of blocking you.
80
- - 🖥️ **Built for a server (VPS mode).** cezar is made to live on a **VPS, cloud,
103
+ - 🖥️ **Built for a server (VPS mode).** Cezarion is made to live on a **VPS, cloud,
81
104
  or dedicated box** as an always-on janitor for your repo — headless-first, with
82
105
  a mobile-friendly cockpit you drive from anywhere. It's a coding server you can
83
106
  actually watch, not a desktop app bolted onto one machine.
84
- - 🔀 **Parallel + autonomous orchestration.** The real edge: cezar runs **many
107
+ - 🔀 **Parallel + autonomous orchestration.** The real edge: Cezarion runs **many
85
108
  agents at once** in isolated worktrees, **queues** the overflow, and pushes each
86
109
  one **autonomously** through skill playbooks — fire-and-forget. This is exactly
87
- what single-agent GUIs don't do well: they babysit one agent, while cezar
110
+ what single-agent GUIs don't do well: they babysit one agent, while Cezarion
88
111
  orchestrates a whole team and drains your backlog while you're away.
89
112
 
90
113
  ---
@@ -93,41 +116,48 @@ it does better than any of them:
93
116
 
94
117
  Most "AI coding agent" tooling makes you choose between a **terminal** you can't
95
118
  see into once it's running, and a **cloud product** that wants your API key, your
96
- code on their servers, and an account. cezar is the third option: the agents run
119
+ code on their servers, and an account. Cezarion is the third option: the agents run
97
120
  locally under *your* subscription, a cockpit shows you exactly what they're doing,
98
121
  and an orchestrator keeps a whole queue of them moving.
99
122
 
100
123
  - 👀 **No visibility into a running agent.** A headless `claude` run is a black box
101
- until it finishes. cezar streams every step — agent text, each tool call and
124
+ until it finishes. Cezarion streams every step — agent text, each tool call and
102
125
  its result, tokens and cost per step — live, and keeps the full replay.
103
126
  - 🧩 **One agent, one working tree, one thing at a time.** Kick off a second task and
104
- it fights the first over your files. cezar runs each task in its **own git
127
+ it fights the first over your files. Cezarion runs each task in its **own git
105
128
  worktree**, so two (or three) agents work in parallel without stepping on
106
129
  each other — or on the branch you're editing.
107
- - 🗂️ **A backlog that needs babysitting.** Queue a stack of tasks and cezar
130
+ - 🗂️ **A backlog that needs babysitting.** Queue a stack of tasks and Cezarion
108
131
  **orchestrates** them: it runs up to your parallel limit and holds the rest in
109
132
  an ordered queue. Point it at a GitHub issue and it runs straight on that, so
110
- working the tracker down stops being a manual chore. Turn on the opt-in
111
- **Inbox** (`CEZ_FOLLOWUPS=1`) and an agent's leftover follow-ups become the
112
- next tasks too — one click each.
133
+ working the tracker down stops being a manual chore. Create ordinary tasks for
134
+ the work you choose to run next.
113
135
  - 🤖 **"Autonomous" means you still have to sit there.** Flip the **Autonomous**
114
136
  flag and a run never parks to ask — it keeps going until the task is done. Pair
115
137
  it with a **skill** (a Markdown playbook) and you've got fire-and-forget
116
138
  automation: hand off "fix this", "upgrade that", "triage these" and walk away.
117
- - ✅ **The agent finishes and you have to trust it.** cezar ends non-trivial runs at
118
- a **review gate**: inspect the diff, send notes back into the same session, or
119
- push a **draft PR** — never an auto-merge.
139
+ - ✅ **The agent finishes and you have to trust it.** Every task's diff stays on
140
+ its own branch: inspect it, send notes back into the same session, or push a
141
+ **draft PR**. Auto merge is off by default; each task can opt in to merge after Done.
142
+ Turn on the optional **review gate**
143
+ (`CEZ_REVIEW_GATE=1` or Settings → Agents) and a finished run with changes
144
+ waits in `review` for you.
120
145
  - ♻️ **Losing a session when it fails.** Every run records its `claude` session id.
121
146
  Take it over interactively in one click (`claude --resume <id>`), or continue it
122
- in-process from the cockpit.
123
- - 🔀 **Locked into one agent vendor.** Most tools wed you to a single CLI. cezar
124
- drives **Claude Code, Codex and OpenCode (experimental)** through one runner seam — set a
147
+ in-process from the cockpit. After a failure, Continue tells the agent which
148
+ step failed and gives its saved error before your message. Restart recovery
149
+ also explains the restart when replaying a saved message. Background commands
150
+ may have stopped; the agent is told to verify their state before restarting them.
151
+ - 🔀 **Locked into one agent vendor.** Most tools wed you to a single CLI. Cezarion
152
+ drives **Claude Code, Codex, OpenCode, Cursor, pi and OMP** (OpenCode, pi and OMP
153
+ experimental) through one runner seam — set a
125
154
  default, pick a backend per task, or mix them inside one workflow (implement
126
- with one agent, review with another) — and through **OpenCode** you can point
127
- a run at **open-source or local models**, not just the big vendors. See
155
+ with one agent, review with another) — and through **OpenCode**, **pi** or
156
+ **OMP** you can point a run at **open-source or local models**, not just the
157
+ big vendors. See
128
158
  [Agent backends](#coding-agent-backends).
129
159
  - 🖥️ **Close the laptop and the work stops.** A local agent only runs while your
130
- machine is on and awake. Put cezar on a **VPS, cloud box, or dedicated server**
160
+ machine is on and awake. Put Cezarion on a **VPS, cloud box, or dedicated server**
131
161
  and the cockpit becomes the GUI for an **always-on AI coding team** — kick off,
132
162
  watch and steer tasks from your laptop or **phone**, on the train or between
133
163
  meetings, while the agents keep grinding through the backlog back on the server.
@@ -143,7 +173,7 @@ and an orchestrator keeps a whole queue of them moving.
143
173
  handing their code and keys to a SaaS — the agent runs on your subscription,
144
174
  on your machine.
145
175
  - **`claude` CLI power users** who love headless runs but want to *see* them,
146
- compare a few attempts side by side, and review a diff before it lands.
176
+ and review a diff before it lands.
147
177
  - **Anyone with a backlog** who'd rather queue three tasks into isolated worktrees
148
178
  and pick the winners than babysit one terminal.
149
179
  - **Teams with shared conventions** who want their playbooks (skills) pulled from
@@ -153,15 +183,20 @@ and an orchestrator keeps a whole queue of them moving.
153
183
 
154
184
  ## Quick start
155
185
 
156
- **Prerequisites:** Node 24.15+, at least one logged-in agent CLI — the
186
+ **Prerequisites:** Node 24.21.0+, at least one logged-in agent CLI — the
157
187
  [`claude` CLI](https://github.com/anthropics/claude-code) (Pro/Max subscription),
158
- the [`codex` CLI](https://github.com/openai/codex), or
159
- [OpenCode](https://opencode.ai) — and, optionally, `git` and the `gh` CLI.
188
+ the [`codex` CLI](https://github.com/openai/codex),
189
+ [OpenCode](https://opencode.ai), the
190
+ [Cursor CLI](https://cursor.com/docs/cli/installation) (`agent`),
191
+ [pi](https://github.com/badlogic/pi-mono), or
192
+ [OMP](https://github.com/can1357/oh-my-pi) — and, optionally, `git` and the
193
+ `gh` CLI.
160
194
 
161
195
  ```bash
162
196
  cd your-repo
163
197
  npx cezarion # start the cockpit for the current repo
164
198
  # or: npx @wjarka/cezarion
199
+
165
200
  ```
166
201
 
167
202
  The cockpit opens at `http://localhost:4321`. If the requested port is occupied,
@@ -181,7 +216,7 @@ npx cezarion init # scaffold .ai/ceza
181
216
  ```
182
217
 
183
218
  Both the `cezarion` and `cez` commands are installed, so once it's on your PATH you
184
- can run either. No API key is ever used — cezar shells out to whichever agent
219
+ can run either. No API key is ever used — Cezarion shells out to whichever agent
185
220
  CLIs you are already logged into, `claude` by default.
186
221
 
187
222
  > **Contributing?** [Local development](#local-development) shows how to get a
@@ -190,9 +225,9 @@ CLIs you are already logged into, `claude` by default.
190
225
 
191
226
  > **Just kicking the tires?** Set `CEZ_DRY_RUN=1` to run against a bundled mock
192
227
  > instead of the real CLI — the whole cockpit works with no `claude` login, so
193
- > you can explore runs, diffs, variants and the review gate offline.
228
+ > you can explore runs and diffs offline.
194
229
 
195
- ### Nightly builds — help us shape cezar 🌙
230
+ ### Nightly builds — help us shape Cezarion 🌙
196
231
 
197
232
  Every night we publish the trunk to npm, so the features landing in the next
198
233
  release are one command away:
@@ -201,10 +236,10 @@ release are one command away:
201
236
  npx cezarion@nightly # everything merged as of last night
202
237
  ```
203
238
 
204
- **Come build this with us.** cezar is shaped by the people who run it on real
239
+ **Come build this with us.** Cezarion is shaped by the people who run it on real
205
240
  repos: if you try a nightly and something feels wrong — a workflow that stalls, a
206
241
  diff that reads badly, a runner that should exist — [open an
207
- issue](https://github.com/wjarka/cezar/issues) and tell us. That feedback,
242
+ issue](https://github.com/hearsay-tools/cezarion/issues) and tell us. That feedback,
208
243
  early, is worth more than a bug report six weeks after a release, and it is how
209
244
  most of the features here got their final shape.
210
245
 
@@ -212,9 +247,9 @@ most of the features here got their final shape.
212
247
  packaged-CLI e2e — the same gate a release runs) but it is *not* a release: it
213
248
  can be rough, a flag or a screen may change under you, and something occasionally
214
249
  breaks in a way no test caught. Nothing is at risk beyond your patience — every
215
- task runs in its own git worktree and cezar never auto-merges — but if you need a
250
+ task runs in its own git worktree and auto merge is off by default — but if you need a
216
251
  boring day, stay on the stable release. Pin a nightly you liked with its exact
217
- version (`npx cezarion@0.9.2-nightly.20260813.126` — the cockpit prints the
252
+ version (`npx cezarion@<nightly-version>` — the cockpit prints the
218
253
  version it booted, and the date in it tells you how old the build is), and drop
219
254
  back to stable any time with a plain `npx cezarion`.
220
255
 
@@ -238,11 +273,12 @@ resolves to the latest stable release.
238
273
 
239
274
  ## How it works
240
275
 
241
- You describe a task. cezar runs it as a **workflow** — an ordered list of agent
276
+ You describe a task. Cezarion runs it as a **workflow** — an ordered list of agent
242
277
  steps and shell checks — shelling out to your locally installed agent CLI
243
- (Claude Code by default; Codex and OpenCode are drop-in alternatives, per task
244
- or per step). Each task gets its own git worktree; the cockpit streams every
245
- event live and parks the run at a review gate when there's a diff to inspect.
278
+ (Claude Code by default; Codex, OpenCode, Cursor, pi and OMP are drop-in
279
+ alternatives, per task or per step). Each task gets its own git worktree; the
280
+ cockpit streams every event live and leaves the diff on the task's branch for
281
+ you to inspect.
246
282
 
247
283
  ```
248
284
  you type a task
@@ -253,11 +289,12 @@ event live and parks the run at a review gate when there's a diff to inspect.
253
289
  └─────────────┘
254
290
  │
255
291
  ▼
256
- ┌──────────────────────────────┐ ┌───────────────────────────────┐
257
- │ git worktree per task │ │ agent CLI (your login) │
258
- │ (isolated branch, parallel) │◄───►│ claude · codex · opencode · pi│
259
- └──────────────────────────────┘ │ Bash open · no prompts │
260
- │ └───────────────────────────────┘
292
+ ┌──────────────────────────────┐ ┌────────────────────────────────┐
293
+ │ git worktree per task │ │ agent CLI (your login) │
294
+ │ (isolated branch, parallel) │◄───►│ claude · codex · opencode · │
295
+ └──────────────────────────────┘ │ cursor · pi · omp │
296
+ │ │ Bash open · no prompts │
297
+ │ └────────────────────────────────┘
261
298
  │ agent text · tool calls · tool results · tokens · cost
262
299
  ▼
263
300
  ┌─────────────┐ SSE (replay + live) ┌──────────────────────────┐
@@ -266,13 +303,16 @@ event live and parks the run at a review gate when there's a diff to inspect.
266
303
  │ ·Markdown │ │ Skills · Workflows │
267
304
  └─────────────┘ └──────────────────────────┘
268
305
  │
269
- review gate: read the diff →
270
- send notes back · draft PR · finish
306
+ read the diff → send notes back ·
307
+ draft PR · finish
271
308
  ```
272
309
 
273
310
  When a check fails, the workflow can loop back to an earlier step (bounded by
274
- `max`) with the failing output appended to the retried agent's prompt. Nothing
275
- auto-merges: a run with changes rests in `review` until you act on it.
311
+ `max`) with the failing output appended to the retried agent's prompt. By default,
312
+ a finished run's changes stay on its branch until you act on them. A task can opt
313
+ into merging its PR after Done, subject to current-head CI and GitHub rules.
314
+ With the optional review gate on, a run with changes rests in `review` instead
315
+ of `done`.
276
316
 
277
317
  ---
278
318
 
@@ -282,13 +322,14 @@ Three words, no jargon — **task**, **skill**, **chain**:
282
322
 
283
323
  - 📋 **Tasks** are the unit of work. Every task is a **run**: `queued → running →
284
324
  review / done / failed / cancelled`, with a live event log, per-step token and
285
- cost usage, cancel/delete, and — for anything with a diff — a review gate. Attach
325
+ cost usage, cancel/delete, and — for anything with a diff — a reviewable branch. Attach
286
326
  screenshots, PDFs, `.txt` or `.md` files to the task (paperclip, ⌘V or drag-drop;
287
327
  the agent gets each one as a real file on disk), or send follow-up messages into
288
328
  the live session while it works.
289
329
  - 📖 **Skills** are Markdown playbooks. Drop them in `.ai/skills/` or
290
- `.ai/cezar/skills/`, or pull them from a shared **team skills repo** (a bare
291
- git clone cached globally in `~/.cache/cez/`). A workflow step references one by
330
+ `.ai/cezar/skills/`, or pull them from a shared **team skills repo** you name
331
+ in `skillsRepos` (a bare git clone cached globally in `~/.cache/cez/`). There is no
332
+ default team repo, and each team skill has its own on/off switch per project. A workflow step references one by
292
333
  `skill: <name>` and its body becomes the agent's extra system prompt — so you
293
334
  shape *how* the agent reasons without touching code.
294
335
  - 🔗 **Chains (workflows)** stitch steps into a pipeline: agent steps plus shell
@@ -297,9 +338,9 @@ Three words, no jargon — **task**, **skill**, **chain**:
297
338
  AI draft a chain for your task that you review, trim and start. The built-in
298
339
  `quick-task` (one agent step) works with zero setup.
299
340
 
300
- Five moves that make the cockpit worth the browser tab:
341
+ The moves that make the cockpit worth the browser tab:
301
342
 
302
- - 🗃️ **Queue + orchestration.** Start as many tasks as you like: cezar runs up to
343
+ - 🗃️ **Queue + orchestration.** Start as many tasks as you like: Cezarion runs up to
303
344
  `maxParallel` at once across every project (default **2**; a non-git directory
304
345
  always runs one) and
305
346
  holds the rest in a FIFO queue with visible positions (`#1`, `#2`, …). Cancel a
@@ -312,38 +353,44 @@ Five moves that make the cockpit worth the browser tab:
312
353
  is *paused* — freeing its tree so the queue keeps advancing — and resumes on
313
354
  demand. Event logs are append-only NDJSON and streamed rather than re-serialized,
314
355
  and live UI deltas are coalesced so they never hit disk.
315
- - 🪞 **Parallel variants (×2 / ×3).** Run the same task as competing agents in
316
- separate worktrees, then compare their diffs side by side and **pick** one —
317
- the losers are archived and their worktrees cleaned up.
318
356
  - 🧹 **Bounded worktree disk.** Each task runs in its own full checkout, so a busy
319
- cockpit would otherwise grow without limit. cezar keeps only the last
357
+ cockpit would otherwise grow without limit. Cezarion keeps only the last
320
358
  `worktreeRetention` **finished** worktrees on disk (default **10**; `0` =
321
359
  unlimited) and reclaims the rest — directory only, the `cez/<id8>` branch is
322
360
  always kept, so the work stays recoverable. Settings → Resources shows every
323
361
  worktree's disk use with per-row delete and a **Reclaim now** button.
324
- - 🛡️ **Review gate.** A finished run with changes waits in `review`. Read the diff,
325
- type notes that go straight back into the agent's session, or push a
326
- `gh pr create --draft`. You stay the merge button.
362
+ - 🛡️ **You control merging.** Read a finished run's diff, type notes that go
363
+ straight back into the agent's session, or push a `gh pr create --draft`.
364
+ Auto merge is off by default and requires a task to opt in. The **review gate** is optional (`CEZ_REVIEW_GATE=1`, or
365
+ Settings → Agents): with it on, a successful run with changes parks in `review`
366
+ until you accept it. Autonomous runs always skip it.
367
+ - 🗂️ **Every project in one cockpit.** One `cez serve` hosts every repo you
368
+ register; the desktop rail switches between them, and **All tasks** shows every
369
+ project's tasks in one table. See
370
+ [Multiple projects, one cockpit](#multiple-projects-one-cockpit).
371
+ - 👥 **Owned workers (opt-in).** With `CEZ_DELEGATION=1`, a task's agent can spawn
372
+ its own tracked workers — on the same or another runner — message them, and
373
+ collect their diffs; you still review the result. See
374
+ [Owned workers](#owned-workers-opt-in).
327
375
  - 📱 **Runs on your coding server, drives from your pocket.** The cockpit is a
328
- responsive web app streaming over SSE, so the box running cezar can be a
376
+ responsive web app streaming over SSE, so the box running Cezarion can be a
329
377
  **VPS, cloud, or dedicated server** you never sit in front of. Point a browser
330
378
  — laptop or **phone** — at it and run an **always-on coding team** on the move:
331
- start tasks, watch them live, and hit the review gate from anywhere.
379
+ start tasks, watch them live, and review their diffs from anywhere.
332
380
 
333
381
  ---
334
382
 
335
383
  ## Cockpit tour
336
384
 
337
- Eight views, one browser window, all live over Server-Sent Events (seven until you opt into the Inbox):
385
+ Task and project views share one browser window and live updates over Server-Sent Events:
338
386
 
339
387
  | View | What's in it |
340
388
  |---|---|
341
389
  | **Tasks** | Every task with its status, live event stream (agent text · tool calls · tool results · pasted/generated screenshots and file attachments), tokens and cost. Continue, cancel, open in terminal (`claude --resume`), review the diff, or push a draft PR. |
342
390
  | **All tasks** | Every *registered project's* tasks in one table, filtered and grouped by tag, project, status or workflow — see [Grouping connected repositories](#grouping-connected-repositories-tags-and-the-all-tasks-page). Appears once a second project is registered. |
343
- | **Inbox** | **Opt-in** (`CEZ_FOLLOWUPS=1`; hidden by default). Follow-ups an agent left behind (`todos.json`) — one click turns a suggestion into the next task, pre-wired to its suggested skill. Off, agents are never asked to leave follow-ups; each task's own **Notes** handoff journal is unaffected. |
344
391
  | **Git** | Branch, working-tree status, diff vs HEAD, recent commits (click one for its inline patch + GitHub link), and the configurable base branch that worktrees fork from and PRs target. |
345
392
  | **GitHub** | Open issues and PRs of the repo's origin, read through your logged-in `gh`. Hand an issue straight to the agent — pick a workflow and skills, one click runs it. |
346
- | **Skills** | Local skills plus the team skills repo, with a rendered body + prompt preview. Refresh pulls the latest from the remote. |
393
+ | **Skills** | Local skills plus any team skills repos you configured, each team skill with a per-project switch, and a rendered body + prompt preview. Refresh pulls the latest from the remote. |
347
394
  | **Workflows** | Build a chain by drag-ordering skills, save it as portable YAML, import/export, or delete. Built-ins always come back. |
348
395
  | **Settings** | Appearance (dark/light theme, accent, density), agent backends, notifications, and the skills catalog. |
349
396
 
@@ -363,7 +410,7 @@ bypasses the server cache immediately and refreshes the selected thread too.
363
410
  ## Multiple projects, one cockpit
364
411
 
365
412
  One `cez serve` hosts **every repo you work in**, not just the one you started
366
- it in. Each repo cezar boots in registers itself in a per-user registry at
413
+ it in. Each repo Cezarion boots in registers itself in a per-user registry at
367
414
  `~/.cezar/config.json` — the workspace file that also holds the global knobs
368
415
  (the parallel cap, the memory ceiling, the browse root, and the checkout root). Nothing is added to
369
416
  the repo: per-project state stays exactly where it was, in that repo's
@@ -376,7 +423,7 @@ Every view is project-scoped:
376
423
  ```
377
424
 
378
425
  `<projectId>` is a slug derived from the folder name (`my-app`, then `my-app-2`
379
- on a collision), and `/p/default/…` always means the project cezar was started
426
+ on a collision), and `/p/default/…` always means the project Cezarion was started
380
427
  in. The desktop rail selects the project. Its sidebar shows the project header,
381
428
  view tabs and task list, ordered **Needs you → Finished → Working**.
382
429
  Pins stay first within their status section and do not spend the default ten-row
@@ -396,6 +443,12 @@ composer names the project it will run in.
396
443
  **Adding a project** — the **+** button on the desktop rail (or in the mobile
397
444
  navigation drawer):
398
445
 
446
+ - ✨ **New project…** creates a git repository with one empty commit in the checkout
447
+ root and registers it. Optionally — only when you switch it on — it also creates a
448
+ **private** GitHub repository under your account or one of your organizations, empty or
449
+ from a GitHub template. If GitHub setup fails after the repository exists, the local
450
+ project is kept and the dialog shows the command that finishes it. A hosted cockpit
451
+ creates local projects only.
399
452
  - 📂 **Open local folder…** browses from the configured browse root
400
453
  (**Settings → Projects**, default `~/`) in a folder picker and
401
454
  registers the folder you pick.
@@ -410,7 +463,7 @@ navigation drawer):
410
463
 
411
464
  Removing a project (**Settings → Projects**) drops the registry entry only — the
412
465
  repo and its `.ai/cezar/` are never touched, so re-adding it later finds all its
413
- tasks intact. The project cezar is currently serving can't be removed: it
466
+ tasks intact. The project Cezarion is currently serving can't be removed: it
414
467
  re-registers itself at the next start.
415
468
 
416
469
  **From the terminal** — the same registry, no cockpit required (handy over ssh):
@@ -456,9 +509,16 @@ list, detail pane and Hand to agent action stay in the main area. On mobile, the
456
509
  GitHub tab opens the filter screen; selecting a row opens its list.
457
510
 
458
511
  Has a task and No task yet use issue references from this project's non-archived
459
- tasks, excluding references to other repositories. Counts show a `+` when the
460
- underlying list or search reaches its result limit; an unavailable count is not
461
- shown as zero. Views without their own navigation still show tasks in the sidebar.
512
+ tasks, excluding references to other repositories. The list loads 50 rows at a time
513
+ and loads the next page as you scroll toward its end. The tabs and All open show
514
+ GitHub's exact open totals. A preset count shows a `+` while more pages remain
515
+ unloaded, and a search count shows one when the search reaches its result limit;
516
+ an unavailable count is not shown as zero. Filtering by search, label, assignee or
517
+ board narrows the loaded rows; while it is on, the next page loads only when you press
518
+ Load more.
519
+
520
+ The `body` field on `GET /api/v1/github` list rows is deprecated. It is still sent,
521
+ and a later minor removes it; read an item's body from the comments route's `detail`. Views without their own navigation still show tasks in the sidebar.
462
522
 
463
523
  Open an issue to see **Linked tasks (N)** beneath its heading. Each row opens a task
464
524
  in the current project and shows its title, status and date, newest first. Archived
@@ -525,7 +585,7 @@ is that project's own Tasks page, which is a better version of the same answer
525
585
  (live updates, the full column set, the composer). So picking a project *leaves*
526
586
  for it rather than turning the global view into a worse local one.
527
587
 
528
- Nothing else in cezar reads tags, on purpose: a tag is a lens, not a permission,
588
+ Nothing else in Cezarion reads tags, on purpose: a tag is a lens, not a permission,
529
589
  a queue or a routing rule. Removing one changes what you see and nothing else.
530
590
 
531
591
  > The page reads a workspace-wide index capped at the newest 200 tasks per
@@ -534,7 +594,7 @@ a queue or a routing rule. Removing one changes what you see and nothing else.
534
594
  > Tasks page.
535
595
 
536
596
  **Old page URLs keep working.** Every unprefixed page path — `/`, `/tasks/<id>`,
537
- `/settings` — still answers, bound to the project cezar was started in; the
597
+ `/settings` — still answers, bound to the project Cezarion was started in; the
538
598
  cockpit redirects flat paths to their `/p/<boot>/…` twin, so existing bookmarks
539
599
  and bookmarklets need no change. The HTTP API is the exception: it moved to
540
600
  `/api/v1/…` (see the CHANGELOG), so a script that calls it needs the extra
@@ -547,23 +607,70 @@ segment.
547
607
 
548
608
  ---
549
609
 
550
- ## Waiting for PR checks
551
-
552
- An agent can call `cezar_wait_for_ci` with a GitHub PR URL to ask Cezar to watch CI
553
- outside the model. The optional `timeout_seconds` defaults to 1,800 and accepts
554
- 1–7,200. No authored configuration or worker delegation permission is needed.
555
- Registration requires `gh`, access to the repository, and a supported GitHub host;
556
- GitHub Enterprise hosts must already be recognized by the forge/auth configuration.
557
- Tool startup itself makes no GitHub request.
558
-
559
- A successful registration returns a durable receipt and an absolute deadline. The
560
- agent ends its turn to wait, with no marker required. The header keeps the active
561
- run status during registration, then shows Monitoring with **Waiting for CI —
562
- owner/repo#N**, a PR link and the deadline. **CI result ready — waiting for capacity**
563
- means the observation is queued for the agent to resume. Ordinary monitoring keeps
564
- its existing automatic-check schedule when no CI wait is registered.
565
-
566
- Cezar reports passed, failed, cancelled or skipped checks, no checks, changed head,
610
+ ## Waiting for PR checks, merges and timers
611
+
612
+ An agent waits on something outside its turn with `cezar_wait`. With `kind: "pr"` and
613
+ a GitHub PR URL in `pr`, Cezarion watches the PR outside the model: its checks
614
+ (`until: "checks"`, the default) or its merge (`until: "merge"`). The optional
615
+ `timeout_seconds` defaults to 1,800 and accepts 1–7,200. With `kind: "timer"`,
616
+ `seconds` (60–7,200) and an optional `note`, Cezarion wakes the agent at that time and
617
+ hands the note back. No authored configuration or worker delegation permission is
618
+ needed. A PR wait requires `gh`, access to the repository, and a supported GitHub
619
+ host; GitHub Enterprise hosts must already be recognized by the forge/auth
620
+ configuration. Tool startup itself makes no GitHub request. With **Monitoring
621
+ wake-up** turned off in **Settings → Resources**, `cezar_wait` refuses a timer
622
+ (`timers_disabled`); once the automatic-wake budget of 40 is spent, it refuses one
623
+ with `wake_budget_spent`, and a run with nothing else to wait on waits for you. The
624
+ budget is kept on the task, so a cockpit restart keeps it; a message from you or a
625
+ Continue starts it again.
626
+
627
+ A CI wait stays pending while any GitHub Actions workflow run on its captured
628
+ head commit is incomplete, even when a rerun temporarily hides that run's checks.
629
+ It checks again every 30 seconds within the original deadline. Once those runs
630
+ complete, it reads the checks again to decide the result. A result describes what
631
+ GitHub reported; it does not predict workflows that have not appeared yet or grant
632
+ merge approval.
633
+
634
+ A merge wait (`until: "merge"`, hearsay-tools/cezarion#1425) reads the PR's state at
635
+ once and then every 30 seconds within its deadline. It ends as `merged` only when
636
+ GitHub reports the PR merged, with the merge time and merge commit when GitHub gives
637
+ them, and as `closed` when the PR closed without merge. Green checks keep it open,
638
+ and so does a new head commit. A merge wait holds none of the four watcher slots, so
639
+ long merge waits never delay a checks wait. By default both targets also end as
640
+ `conflicting` when the PR has merge conflicts. Set `wake_on_conflict: false` when the
641
+ agent watches a PR it does not own, such as another agent's PR its work depends on:
642
+ it cannot resolve those conflicts. With `until: "checks"`, GitHub often runs no
643
+ workflows on a conflicting PR, so such a wait usually ends as `no_checks` or at its
644
+ deadline. A checks wait and a merge wait on the same PR are two waits.
645
+
646
+ The agent asks you with `cezar_ask`, a card of one to four questions in the ask
647
+ format. A question with two to four options shows them as choices; a question without
648
+ options is open, and the card shows a text box for your answer. The task reads Needs
649
+ you once the turn ends, and your next message answers it. `cezar_wait` takes PR waits,
650
+ worker waits and timers only, and points an agent that asks it for a human wait to `cezar_ask`. A run
651
+ has one question to you at a time, and the agent cannot cancel it once you have seen
652
+ it. The ask-marker card, a native question and `CEZ:MONITORING` with re-checks off
653
+ open the same kind of wait. When the work is
654
+ done and verified, the agent calls `cezar_done` (an optional `summary`), and the task
655
+ finishes at the end of that turn: its open waits are cancelled and the summary is
656
+ written as a note. `cezar_done` refuses while owned workers are live or uncollected,
657
+ a worker question is unanswered, a question to you is still pending, or the step is not
658
+ the workflow's last, and says what to do first. The `CEZ:DONE` line keeps working and finishes the same way. An
659
+ autonomous task does not wait for you until its automatic-wake budget is spent.
660
+
661
+ A run can have several waits open at once, up to 16. Each answer carries the
662
+ wait's id, its absolute deadline and the list of waits still open, and
663
+ `cezar_cancel_wait` closes one by its id. The agent ends its turn to wait, with no
664
+ marker required. The run is then `waiting`, and the pill reads **waiting for CI**,
665
+ **waiting for merge** or **monitoring** rather than Needs you. The header lists every open wait: **Waiting
666
+ for CI — owner/repo#N** or **Waiting for merge — owner/repo#N** with a PR link and the deadline, or **Next automatic check**
667
+ with its time and note. **CI result ready — waiting for capacity** means the
668
+ observation is owed to the agent and its wake turn has not started yet. A run parked
669
+ on CI or a timer keeps its agent slot, a monitoring slot when one is free, so the
670
+ wake usually starts at once. The older `CEZ:MONITORING` line and Claude's
671
+ `ScheduleWakeup` open a timer in the same list.
672
+
673
+ Cezarion reports passed, failed, cancelled or skipped checks, no checks, changed head,
567
674
  timeout or an operational error. It watches the registered commit: a new PR head
568
675
  is reported separately, and the agent decides whether to wait again. The first
569
676
  observation runs immediately. Later check-status and PR-head polls run every 30
@@ -571,9 +678,22 @@ seconds, and no setting changes that interval. Four watchers run concurrently;
571
678
  queued waits retain their original deadline. Results are bounded
572
679
  observations, not merge approval or evidence that every expected workflow appeared.
573
680
  The agent still decides its next action; CI success never completes the task or
574
- accepts review. A human message cancels the current wait, and CI never answers a
575
- pending human question. Controller recovery can replay an observation after an
576
- ambiguous delivery checkpoint, identified by its stable lifecycle input ID.
681
+ accepts review. A wait ends only when its own result arrives, its deadline passes,
682
+ or someone cancels it: the agent with `cezar_cancel_wait`, or Cezarion when the task
683
+ is stopped, finished, cancelled or deleted. A human message wakes the agent without
684
+ closing any wait, and every delivered turn ends with a list of the waits still open.
685
+ CI never answers a pending human question. If the agent's session fails or closes while a
686
+ result is owed, Cezarion retries the delivery after 15 and then 30 seconds; a third
687
+ failure marks the task failed and keeps the result. Continue delivers it, and Stop
688
+ discards it and leaves the task failed.
689
+ Controller recovery can replay an
690
+ observation after an ambiguous delivery checkpoint, identified by its stable
691
+ lifecycle input ID.
692
+
693
+ The deprecated `cezar_wait_for_ci` tool was removed (hearsay-tools/cezarion#1236):
694
+ call `cezar_wait` with `kind: "pr"` instead. `kind: "ci"` itself was replaced by
695
+ `kind: "pr"` (hearsay-tools/cezarion#1425) and is refused with a message that names
696
+ the new spelling.
577
697
 
578
698
  The adapters are bundled for Claude (including `claude-cli`), Codex, OpenCode,
579
699
  Cursor, Pi and OMP. Internal socket/capability environment values are runtime wiring,
@@ -594,7 +714,33 @@ Both commands return JSON. `runners` lists connection status (`connected`, `disc
594
714
 
595
715
  For operators, the command finds the running cockpit for the current checkout; `--repo`, `--url`, and `CEZ_URL` work as they do for `cez task`. A missing cockpit returns an error and never starts a server. Inside a parent delegation session, the same command uses that session's authenticated controller, including headless runs. It rejects `--url` and `--repo` in that context and never falls back to a public cockpit after an authentication failure. Owned workers cannot use the private discovery route.
596
716
 
597
- The catalog describes host default accounts, not every named account or the selections permitted by a task's model locks and workflow pins. Existing `cez task start` and `cez worker spawn` still call their runner flag `--backend`; discovery uses `--runner`.
717
+ The catalog describes host default accounts, not every named account or the selections permitted by a task's model locks and workflow pins.
718
+
719
+ ## Parallel variant removal
720
+
721
+ Parallel variants (×2/×3) are removed in the next breaking minor release (0.17).
722
+ The owner chose immediate removal without a deprecation window
723
+ (hearsay-tools/cezarion#1542). The composer starts one task. `POST /api/v1/runs`
724
+ refuses `variants: 2` or `3` with `400`; it never turns them into one candidate.
725
+ The old `variants: 1` spelling still means an ordinary run.
726
+
727
+ The compare page and its group routes are retired too (hearsay-tools/cezarion#1760).
728
+ Historical `groupId` and `variant` fields remain stored, and old variant runs list as
729
+ ordinary tasks. Old `/compare/:groupId` links, including project-scoped links, open the
730
+ task list. No retirement migration deletes runs, branches or worktrees;
731
+ normal retention and explicit cleanup still apply. Saved multi-candidate drafts and
732
+ automations offer **Use one task** before saving or launching. A saved automation with
733
+ `task.variants > 1` reports an error on launch; edit it to remove that field or set it to `1`.
734
+
735
+ For explicit comparison, ask a task: “Spawn two owned workers from the same committed
736
+ baseline. Try a minimal change and a structural approach. Collect both results and
737
+ compare their diffs. Show me the commits to choose from before integration and cleanup.”
738
+ The parent uses `cez worker spawn`, `collect` and `diff`, reviews the chosen commits,
739
+ integrates them with Git, then uses `cez worker destroy` for verified cleanup. Read
740
+ `diffSnapshot` from an available collection's JSON file rather than applying that file
741
+ as a patch. Collect each worker's latest settled revision before finishing. Owned workers
742
+ keep their ownership, isolation, resource limits and Git cleanup safeguards. There is
743
+ no one-click comparison page, automatic winner selection or automatic loser cleanup.
598
744
 
599
745
  ## Owned workers (opt-in)
600
746
 
@@ -604,8 +750,9 @@ The provisioned command has these forms (the session instructions supply the abs
604
750
 
605
751
  ```sh
606
752
  cez worker spawn --baseline parent-head --request-id <UUID> 'Implement the assigned change'
607
- cez worker spawn --baseline parent-head --request-id <UUID> --backend codex --effort high --context-file ./selected-context.txt 'Review the parser'
753
+ cez worker spawn --baseline parent-head --request-id <UUID> --runner codex --effort high --context-file ./selected-context.txt 'Review the parser'
608
754
  cez worker spawn --baseline parent-head --request-id <UUID> --workflow review 'Review the parser change'
755
+ cez worker list # All own workers, revisions and cleanup resources (fetches pages automatically)
609
756
  cez worker inspect <worker-id>
610
757
  cez worker steer <worker-id> 'Consider this additional constraint'
611
758
  cez worker diff <worker-id>
@@ -627,17 +774,17 @@ cez worker stop <worker-id>
627
774
  cez worker destroy <worker-id>
628
775
  ```
629
776
 
630
- Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, backend, model, effort and workflow when retrying a lost response. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`cez worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
777
+ Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, runner, model, effort and workflow when retrying a lost response. `--runner` and its alias `--backend` count as the same field, so a retry may switch spelling. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`cez worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
631
778
 
632
- An incomplete destroy reports the remaining resources and a reason. Cezar retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `cez worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Cezar leaves ambiguous or replaced resources in place for operator review.
779
+ An incomplete destroy reports the remaining resources and a reason. Cezarion retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `cez worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Cezarion leaves ambiguous or replaced resources in place for operator review.
633
780
 
634
- `--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--backend`, `--model` and `--effort` fill only the steps that leave those fields unset; a step's own `allowedTools`/`bashAllowlist` narrow the parent's grants and never widen them. An unknown name is refused. Agent steps may mix runners: at spawn every agent step is resolved and pinned separately, so an implement-with-codex, review-with-claude chain runs each step under its own runner, account, model, effort and grants. A step's optional `agentProfile` names the account it runs under (an id the registry does not know is refused); same-backend steps otherwise inherit the parent's account and other runners resolve their project/default one. Run-level columns show the first agent step.
781
+ `--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--runner`, `--model` and `--effort` fill only the steps that leave those fields unset; a step's own `allowedTools`/`bashAllowlist` narrow the parent's grants and never widen them. An unknown name is refused. Agent steps may mix runners: at spawn every agent step is resolved and pinned separately, so an implement-with-codex, review-with-claude chain runs each step under its own runner, account, model, effort and grants. A step's optional `agentProfile` names the account it runs under (an id the registry does not know is refused); same-runner steps otherwise inherit the parent's account and other runners resolve their project/default one. Run-level columns show the first agent step.
635
782
 
636
783
  Explicit default-account model pins are checked against a fresh, nonempty host catalog after account/model resolution and before a worker is created. Named accounts retain existing validation because a default-account catalog cannot disprove their model access. A miss returns `invalid_input`, available models with advertised efforts, and other runners listing the requested ID in `modelChoices`. Empty, stale, or unavailable discovery leaves existing selection validation in place. Accepted retries and omitted model defaults are unchanged.
637
784
 
638
- Omitted `--backend` inherits the parent's active backend. Same-backend workers inherit omitted model/account/effort; `--backend <claude|codex|opencode|pi|cursor|omp>` selecting another backend resolves that backend's project/default account and model without forwarding another provider's settings. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-backend and mixed-backend spawn; omitted `--effort` still inherits the parent pin on same-backend spawn and drops it on mixed-backend spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
785
+ Omitted `--runner` inherits the parent's active runner. Same-runner workers inherit omitted model/account/effort; `--runner <claude|codex|opencode|pi|cursor|omp>` selecting another runner resolves that runner's project/default account and model without forwarding another provider's settings. `--backend` is a permanent alias of `--runner`; giving both with different values is refused as `invalid_input`. Worker `inspect` and `collect` still report the selected runner in a field named `backend`. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-runner and mixed-runner spawn; omitted `--effort` still inherits the parent pin on same-runner spawn and drops it on mixed-runner spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
639
786
 
640
- Wait registers immediately. End the parent turn to release scheduler capacity; Cezar resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
787
+ Wait registers immediately. End the parent turn to release scheduler capacity; Cezarion resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
641
788
 
642
789
  Parents and owned workers can converse in both directions; a worker may address only its parent. `send --kind request` opens a reply obligation whose ID is the message ID; `send --kind progress` (or `progress`) does not. Follow-ups clarify an existing request; only an explicit correlated `reply` settles it as replied. Retry a message with the same ID and exact payload, including deadline duration; changed payloads are rejected. Acceptance, provider delivery, reply, and task completion are separate facts, visible in the task transcript and `conversation` JSON.
643
790
 
@@ -647,15 +794,13 @@ Messages reach a live recipient as soon as they are accepted, including mid-turn
647
794
 
648
795
  Sending to a review or terminal participant without `--resume` reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `worker send --resume` (request or progress) to continue its settled done/review/failed worker with that message as the new instruction. No human Continue is needed for this parent-controlled action. A retry with the same payload and ID never creates another continuation; changing a rejected send to use `--resume` requires a new ID. Stopped or destroyed workers need a new worker. Workers cannot resume parents, and conversation never answers a pending human question. Durable IDs deduplicate accepted queue entries and event replay, but a crash between provider acceptance and its durable delivery checkpoint can leave transport delivery ambiguous; this is not an exactly-once execution guarantee.
649
796
 
650
-
651
797
  Collect returns the worker's execution revision, status/outcome, `settled` and `partial` flags, and typed availability for assistant summary, HEAD, bounded diff and artifact descriptors. Missing evidence is explicit; running output is partial. An available `diff.path` points to a **JSON result file** containing `{ result, diffSnapshot }`; its `diffSnapshot` field holds the patch. Read and review that field before applying any changes. The latest collected result is stored under the parent and survives restart. Collection acknowledges observation, not Git integration or successful work. Review desired worker commits and deliberately integrate them into the parent before destroying their worktrees/branches; there is no automatic merge.
652
798
 
653
799
  Parent completion requires collection of every worker's latest settled execution revision. A worker Continue invalidates older readiness. An early completion attempt waits for outstanding workers and wakes the parent to inspect/collect; it does not silently finish on wake. While workers remain live, markerless replies, completion timeouts, and repeated premature completion park the parent as monitoring with the existing capped wakeups. Once workers settle, repeated completion without collecting their results retains attention. Human Finish also refuses unresolved/uncollected workers. If the parent is already under review, Continue the parent first, then Continue its worker. Human questions remain authoritative.
654
800
 
655
801
  Stop requests cancellation; `stopping` does not prove termination. Destroy checkpoints obtainable results, waits up to 30 seconds for proven termination, and removes only verified owned resources. An `incomplete` response lists remaining resources; resolve the cause and retry explicitly. Cleanup order is: collect/integrate desired results, destroy owned resources, explicitly delete child histories through the cockpit/API, then delete parent history. Parent-owned summaries and bounded diff snapshots remain until parent deletion, including after child-history deletion; general artifact bytes are not archived. Branch/path strings and SHAs become historical descriptors after removal, not promises of available Git objects or files. The human cleanup endpoint `POST /api/v1/p/<projectId>/runs/<worker-id>/worker-destroy` stays available when delegation is disabled. The CLI bounds each HTTP request to 45 seconds and rejects endpoint/auth/origin overrides and redirects.
656
802
 
657
- Provisioned sessions prefer cezar workers and suppress verified native delegation entry points through per-run adapter controls: Claude `Agent`/legacy `Task` denies, Codex multi-agent feature overrides, OpenCode session `task` denies, and pi's known `subagent` extension exclusion. See [the backend capability table](AGENT_PROTOCOL.md#governed-delegation-controls-d1) for tested versions and exemptions. Native workers are not tracked by cezar. Pi has no native delegation primitive or universal identifier for arbitrary custom delegation extensions; guidance does not enforce those cases. With delegation disabled or unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its credentials authorize only the parent's own workers through that listener. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot delegate or message peers through cezar. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
658
-
803
+ Provisioned sessions prefer Cezarion workers and suppress verified native delegation entry points through per-run adapter controls: Claude `Agent`, legacy `Task` and `Workflow` denies, Codex multi-agent feature overrides, OpenCode session `task` denies, and pi's known `subagent` extension exclusion. Claude skills and commands with `context: fork` are not blocked: Claude starts their subagent without checking those denies, and no setting turns forking off. See [the backend capability table](AGENT_PROTOCOL.md#governed-delegation-controls-d1) for tested versions and exemptions. Native workers are not tracked by Cezarion. Pi has no native delegation primitive or universal identifier for arbitrary custom delegation extensions; guidance does not enforce those cases. With delegation disabled or unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its credentials authorize only the parent's own workers through that listener. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot delegate or message peers through Cezarion. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
659
804
 
660
805
  ## From the terminal: `cez task`
661
806
 
@@ -665,6 +810,16 @@ branch on, so nothing has to parse prose. It never starts a server: it finds the
665
810
  project registry holds this checkout (ports 4321–4370; a task worktree resolves to its parent
666
811
  project), or you point it at one with `--url` / `CEZ_URL`.
667
812
 
813
+ ```text
814
+ cez task [--url <origin> | --repo <dir>] <operation> …
815
+ ```
816
+
817
+ The shared `--url`, `--repo` and `--help`/`-h` flags also work before the operation;
818
+ `--url` and `--repo` accept both `--flag value` and `--flag=value`. A shared flag repeated
819
+ before the operation or on both sides is a usage error. Operation flags stay after the
820
+ operation. `cez task --help <operation>` shows that operation's help without discovery.
821
+ An explicit `--url` wins over `CEZ_URL`; `--repo` selects the checkout to discover.
822
+
668
823
  ```bash
669
824
  id=$(cez task start --task-file - <<'EOF' | jq -r .id
670
825
  Fix the `cez task` docs. Keep $(example) and "quotes" literal.
@@ -675,7 +830,7 @@ cez task list # currentStepId (ru
675
830
  cez task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
676
831
  cez task send "$id" 'Use the retry helper instead' # delivered live, queued before start
677
832
  cez task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
678
- cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it ends
833
+ cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it needs you or ends
679
834
  ```
680
835
 
681
836
  `list --status` accepts comma-separated values: `queued`, `running`, `waiting`, `review`,
@@ -707,42 +862,60 @@ execution, the agent uses the plain prompt and the run logs a note. CLI starts d
707
862
  the cockpit composer's recent picks or skill-usage ranking.
708
863
  Without either flag, `start` still runs `quick-task`.
709
864
 
865
+ `--runner <claude|codex|opencode|pi|cursor|omp>` picks the runner, as in a workflow step and
866
+ `cez discover --runner`; `--model` and `--effort` pin the rest. `--backend` is a permanent
867
+ alias of `--runner` with no warning. Giving both with different values exits 64.
868
+
869
+ `--archive-when-done` archives the task after **Done**. `--auto-merge-pr` merges its
870
+ PR after **Done** only when current-head CI and GitHub rules pass. It can mark a
871
+ draft PR ready. Both controls are off by default. They also appear as switches in
872
+ the task composer and task details. With both on, Cezarion merges before it archives;
873
+ without a PR, it archives on Done. Pending or blocked completion actions show their
874
+ reason in task details. Use `status <id> --full` to read the saved `archiveWhenDone`,
875
+ `autoMergePr` and `completionAction` fields. Existing task choices can be changed
876
+ through `PATCH /api/v1/p/:projectId/runs/:id` with the matching boolean fields.
877
+
710
878
  `start` is retry-safe: it sends a request id (`--request-id <UUID>` to pick your own), and a
711
- retry with the same id and task answers with the run the first one created (`created: false`)
712
- instead of starting a second. Also: `list`, `stop`, `finish`, `diff [--stat]`, `open`.
879
+ retry with the same id and start options answers with the run the first one created
880
+ (`created: false`) instead of starting a second. Changing a completion control on that
881
+ retry is a payload conflict. Also: `list`, `stop`, `finish`, `diff [--stat]`, `open`.
713
882
  Use `archive <id>` to hide a task from `list`, `unarchive <id>` to restore it, and
714
883
  `list --all` to include archived tasks. `list` never shows owned workers, with or without
715
884
  `--all`: they are steer targets of their parent task. Id-addressed commands (`status`, `wait`,
716
885
  `send`, `log`, `stop`, …) still accept a worker's id. `archive-finished` sweeps finished tasks (not scheduled runs waiting on a usage limit, and not owned workers, which leave with their parent) and prints
717
886
  `{"archived": count, "ids": [...], "pinnedIds": [...]}`. The single-task commands print `{"id": "…", "archived": true|false}`.
718
887
  Exit codes:
719
- `0` ok (`wait`/`start --wait`: the task ended `done`/`review` or stopped for attention), `1` task
888
+ `0` ok (`wait`/`start --wait`/`log --follow`: the task ended `done`/`review` or stopped for attention), `1` task
720
889
  failed/cancelled or a message was not delivered, `2` no cockpit or the cockpit refused (its `error`
721
890
  is passed through), `3` timed out, `64` usage error. `cez task --help` lists every flag.
722
891
 
723
- **When a task needs you.** `status`, `list` and `wait` carry `attention` and `attentionLabel`,
892
+ **When a task needs you.** `status`, `list`, `wait` and the final `log --follow` line carry `attention` and `attentionLabel`,
724
893
  derived by the same function the cockpit's Needs You uses, so the CLI and the cockpit cannot
725
894
  disagree. Read those rather than the raw status:
726
895
 
727
896
  - `attention: waiting` (`attentionLabel` "needs you" / "needs review"), `error` or `permission`
728
- means the task wants a human. A `waiting` task is attention **even when `hasPendingHumanAsk`
729
- is false** — a finished turn parks the task for follow-up without a structured question. Never
730
- clear a task on `hasPendingHumanAsk` alone.
731
- - `attention: running` with `attentionLabel` "monitoring" (`status: running`,
732
- `activity: monitoring`) is neither settled nor attention: the agent is still working on its own
733
- sub-agents or a watched command, whatever its last log line says.
897
+ means the task wants a human. A `waiting` task is attention **even when no question is
898
+ pending** — a finished turn parks the task for follow-up without a structured question —
899
+ unless its top open wait is CI or a timer (below). A pending question shows as `question`
900
+ on `status`, with the agent's Markdown context as `questionContext` when it sent one, and as
901
+ `waitingOn` `{ kind: 'human' }`; never clear a task on its absence alone.
902
+ - `attention: running` with `attentionLabel` "waiting for CI", "waiting for merge" or "monitoring"
903
+ (`status: waiting` with an open PR wait or timer in `waitingOn`) is neither settled nor attention: the agent is
904
+ still working on its own sub-agents or a watched command, whatever its last log line says.
734
905
  - `attention: none` with "waiting on 2 workers" is a task parked on its own workers; it will wake
735
906
  by itself.
736
907
 
737
- `wait` and `start --wait` stop as soon as a task needs you or ends (`--until attention`, the
738
- default); `--until settled` waits for a terminal status only — for `--autonomous` runs, or a bot
739
- that wants an outcome:
908
+ `wait`, `start --wait` and `log --follow` stop as soon as a task needs you or ends
909
+ (`--until attention`, the default); `--until settled` waits for a terminal status only — for
910
+ `--autonomous` runs, or a bot that wants an outcome:
740
911
 
741
912
  ```bash
742
913
  cez task wait "$id" # stops when the task needs you, or ends
743
914
  cez task wait "$id" --until settled # done/review/failed/cancelled only
744
915
  cez task start --task-file task.md --wait # returns as soon as the agent parks
745
916
  cez task start --task-file task.md --wait --autonomous --until settled # runs to completion
917
+ cez task log "$id" --follow # streams until the task needs you, or ends
918
+ cez task log "$id" --follow --until settled # streams until done/review/failed/cancelled
746
919
  ```
747
920
 
748
921
  *Migrating from `--until settled`.* Before 0.16, `wait` and `start --wait` defaulted to
@@ -752,13 +925,24 @@ parked within seconds. The default is now `attention`. A bot that polls for term
752
925
  run in the `wait` output (and the `start --wait` object) now carries `attention` +
753
926
  `attentionLabel`, and the output's top level says which `until` was in force, so a caller can tell
754
927
  "parked for follow-up" (`status: waiting`, `attention: waiting`) from "finished" (`status: done`,
755
- `attention: none`) without knowing cezar's status vocabulary.
756
-
757
- **A bot that lives behind an HTTP endpoint** does not have to poll. Set a **Task webhook** (URL
758
- and an optional Bearer token) in the project's **Settings → General**, and every task that opts
759
- in POSTs `task.status` on each status change, `task.question` when it asks something,
760
- `task.activity` when monitoring starts or ends, and `task.subscribed` when it opts in (at start, or when it is handed off). Each
761
- body carries the same slim projection `cez task status` prints, under `task`. `cez task start`
928
+ `attention: none`) without knowing Cezarion's status vocabulary.
929
+
930
+ *`log --follow` (#931).* `log --follow` used to stop on a terminal status only, so tailing an
931
+ interactive task streamed until `--timeout-seconds` and exited 3 after the agent had parked. It
932
+ now takes the same `--until` with the same `attention` default, judged by the same function as
933
+ `wait`; `--until` without `--follow` is a usage error. Every event is still printed before the
934
+ final line, which is now `{"id", "status", "attention", "attentionLabel", "until", "timedOut"}`. A
935
+ bot that tails to terminal state adds `--until settled`. `log` without `--follow` is unchanged.
936
+
937
+ **A bot that lives behind an HTTP endpoint** does not have to poll. Add a webhook (a name, a
938
+ description, a URL and an optional Bearer token) under **Webhooks** in the project's **Settings →
939
+ General** and turn on **Task notifications**. Every task that opts in then POSTs one delivery to
940
+ each such webhook when it enters a state that webhook selects: **Needs you**, **Failed**,
941
+ **Done** and **Cancelled** by default, plus **Running**, **Waiting for agents**, **Waiting on CI**,
942
+ **Waiting** (a timer) and **Any other wait** when you tick them. A question that puts the task in
943
+ Needs you is `task.question`; every other entry is `task.status`, and the body's `state` names the
944
+ state. `task.subscribed` (when it opts in, at start or on hand-off) and **Send test** always go out.
945
+ Each body carries the same slim projection `cez task status` prints, under `task`. `cez task start`
762
946
  opts in whenever the project has a webhook (`--no-notify` to skip it); the cockpit's New task form
763
947
  has a **Notify webhook** toggle; and a running task's **Hand off** button (or
764
948
  `cez task notify <id> --message '…'`) turns it on later with a note for the bot. `notify` (and
@@ -768,6 +952,99 @@ the webhook only, never to the agent. Delivery is best-effort: 10 s timeout, 3 a
768
952
  failure shows in the thread without touching the task. The token is stored in `~/.cezar` and never
769
953
  sent back to a browser. Under `CEZ_DRY_RUN=1` nothing is sent; the payload is logged in the thread.
770
954
 
955
+ A project can hold several webhooks, each with its own states, and each body names the webhook it
956
+ went to under `webhook`. One failing webhook never delays or stops another.
957
+
958
+ ### Reports from agents: `cez webhook`
959
+
960
+ Turn on **Let agents send reports** for a webhook, and agents in that project can send it a report
961
+ on demand: a friction report to a triage bot instead of a new GitHub issue, for example. Agents see
962
+ each such webhook's name and description in their system prompt, so write the description as
963
+ instructions ("Send friction you hit with tools here instead of filing a GitHub issue"). A webhook
964
+ without that switch cannot be reached this way.
965
+
966
+ ```sh
967
+ cez webhook list # the webhooks open to agents
968
+ cez webhook send 'Friction reports' --message-file report.md --title 'Squeal skipped an edit'
969
+ cez webhook send <name|id> --message 'Short report' [--data '{"severity":"low"}']
970
+ ```
971
+
972
+ The body is `event: "agent.report"` with `webhook`, `title`, the Markdown `message`, your `data`,
973
+ and the reporting task's `runId`, thread `url` and `task` projection. The command prints the
974
+ outcome as JSON and exits 0 delivered, 1 not delivered, 2 refused or no cockpit, 64 usage.
975
+
976
+ ### Automations from a task: `cez automation`
977
+
978
+ `cez automation` creates and manages automations (see `CEZ_AUTOMATIONS=1`) on the cockpit that
979
+ runs the task, so an agent asked to "do X every morning" or "whenever a PR opens" sets up an
980
+ automation instead of a cron job. Like `cez task`, it prints one JSON object per invocation and
981
+ exits 0 ok, 1 check failed, 2 refused or no cockpit, 3 check timed out, 64 usage.
982
+
983
+ ```sh
984
+ cez automation schema # the definition reference (needs no cockpit)
985
+ cez automation add --name 'Weekday triage' --cron '0 7 * * 1-5' --prompt 'Triage new issues'
986
+ cez automation add --name 'Review PRs' --on pull_request.opened --every 5m --label bug --prompt-file p.md
987
+ cez automation add --name 'Agent triage' --on issue.labeled --changed-label needs-agent --prompt 'Triage #{{github.number}}'
988
+ cez automation create --file def.json [--enable] # full JSON form; stdin when no flag is given
989
+ cez automation update <id> --json '{"task":{"prompt":"…"}}'
990
+ cez automation add --name 'Check the rollout' --at 2026-10-29T09:00 --tz Europe/Warsaw --prompt 'Check the rollout'
991
+ cez automation add --name 'Follow up' --in 7d --latest-start 6h --prompt 'Follow up on the migration'
992
+ cez automation check <id> [--execute] · run <id> · list [--archived include|only] · show <id> · enable <id> · pause <id> · cancel <id> · delete <id>
993
+ ```
994
+
995
+ `add` and `create` send the same body and create the automation **paused** unless `--enable` is
996
+ given; `--cron` accepts the four shapes a schedule can take (daily, weekdays, one weekday, every N
997
+ hours) and anything else is a usage error pointing to the JSON form. `update` replaces each key
998
+ it is given, except `task`, which merges key by key (`null` removes one); it restates `enabled`
999
+ and echoes the revision it read, so a concurrent edit in the cockpit is refused (exit 2), never
1000
+ overwritten. Mutating commands print the automation's cockpit page as `url`.
1001
+
1002
+ `add` accepts `--archive-when-done` and `--auto-merge-pr` with the same behavior as
1003
+ `cez task start`. The JSON keys are `task.archiveWhenDone` and `task.autoMergePr`.
1004
+ Both are optional booleans and default to off. The automation editor has the same
1005
+ switches. Editing these choices affects future tasks only; it does not change tasks
1006
+ the automation already launched. Enabling an automation or making its tasks autonomous
1007
+ does not enable either completion control.
1008
+
1009
+ GitHub automations exclude events before enablement by default. Turn on **Include existing items**
1010
+ in the editor, pass `--include-existing` to `add`, or set `"filters": {"includeExisting": true,
1011
+ "lookbackDays": 7, "maxRecords": 25}` in a JSON definition to include older matches within the
1012
+ lookback (1–90 days). Turning this on for an enabled automation reopens that window on its next
1013
+ check. Changing only the lookback preserves the completed cursor; pause and re-enable to
1014
+ reopen the wider history window. Previously processed matches stay deduplicated across edits, pauses and restarts, and
1015
+ per-check limits still apply. Historical scans resume across checks and restarts when capped.
1016
+ GitHub search is limited to 1,000 items per window and label timelines to 100 events per item;
1017
+ reaching either limit reports an error with guidance to narrow the filters or lookback. **Test filter** previews the selected window independently of the
1018
+ execution cursor; it never launches tasks. For label triggers, the window applies to the label
1019
+ event's time, so a newly added label can match an old issue even with history off. Historical
1020
+ label discovery revisits the rolling window because later comments can move issues between pages;
1021
+ receipts prevent those repeated observations from launching duplicate tasks.
1022
+
1023
+ A **one-time schedule** (**Once** in the editor, `--at` or `--in` on `add`, `"schedule":
1024
+ {"type": "once", "at": "2026-10-29T09:00", "timeZone": "Europe/Warsaw"}` in JSON) starts one
1025
+ ordinary task at a wall-clock time in an explicit IANA zone. It is created paused like every
1026
+ automation; **Enable** arms it. When it is due, Cezarion starts the task and moves the schedule to
1027
+ **Archived** with a link to that task; **Run now** does the same at once, so it never runs twice.
1028
+ **Cancel** archives it without a task. An archived schedule cannot change, and the list hides it
1029
+ until you pick the **Archived** filter. Cezarion must be running at the due time. If it was not,
1030
+ the schedule starts on the next boot only within its **Latest start** (no limit by default; 10
1031
+ minutes to 30 days); after that it is marked **Missed** and stays until you edit, cancel or run it.
1032
+ A launch that fails marks it **Failed**, and nothing retries on its own; **Retry** or **Run now**
1033
+ relaunches the same receipt, so one schedule starts at most one task. Agents can create and manage
1034
+ one-time schedules with the `cezar_schedule_task` and `cezar_scheduled_tasks` tools, which exist
1035
+ only with `CEZ_AUTOMATIONS=1` and also create schedules paused unless the user asked for them to run.
1036
+
1037
+ Automation list counters use two windows. **Launched** counts every stored task with that
1038
+ automation's provenance, across definition revisions, including historical variants, completed and
1039
+ archived tasks. Restarting or compacting automation logs and receipts does not change it;
1040
+ deleting a task removes it from the count. **Matches**, **Duplicates** and **Errors** describe
1041
+ only that automation's latest 100 activity-log rows. Recent activity remains a separate log view.
1042
+
1043
+ The address comes from `CEZ_COCKPIT_URL` and `CEZ_PROJECT_ID`, which the cockpit puts in a task's
1044
+ environment. Without them, only an explicit `--url`, `--repo` or `CEZ_URL` looks for a cockpit;
1045
+ otherwise the command exits 2 and never starts a server. With automations off, the cockpit's `409`
1046
+ is relayed verbatim (exit 2).
1047
+
771
1048
  ## Workflow format
772
1049
 
773
1050
  A workflow is a small YAML file in `.ai/cezar/workflows/`:
@@ -782,7 +1059,7 @@ steps:
782
1059
  skill: project-conventions # optional — from .ai/skills or .ai/cezar/skills
783
1060
  # model: opus # optional per-step model override
784
1061
  # effort: high # optional per-step effort: low · medium · high · xhigh · max
785
- # runner: codex # optional per-step backend: claude · codex · opencode · pi
1062
+ # runner: codex # optional per-step backend: claude · codex · opencode · cursor · pi · omp
786
1063
  # timeoutMs: 7200000 # optional agent-step wall-clock cap (2 hours); 0 = no limit
787
1064
  # allowedTools: [Read, Edit, Write, Grep, Glob, Bash]
788
1065
  - id: verify
@@ -825,7 +1102,7 @@ skills: [reproduce, root-cause, implement, self-review]
825
1102
 
826
1103
  ## How it runs agents
827
1104
 
828
- cezar shells out to your locally installed, logged-in agent CLI —
1105
+ Cezarion shells out to your locally installed, logged-in agent CLI —
829
1106
  **your subscription, no API key**. With the default Claude Code backend that
830
1107
  means headless `stream-json` mode, tool access via `--allowedTools`, with
831
1108
  unapproved tools denied without prompting (`--permission-mode dontAsk`) inside
@@ -833,8 +1110,10 @@ the task's worktree — but note the zero-config default list (`Read`, `Edit`,
833
1110
  `Write`, `Grep`, `Glob`, `Bash`) grants unrestricted `Bash` unless a step sets
834
1111
  `bashAllowlist`, so treat a run as having full shell access in its worktree,
835
1112
  not a sandboxed allowlist. Set `CEZ_APPROVAL_GATE=1` to opt into Claude's
836
- interactive approval UI. Codex and OpenCode are driven through their own
837
- native protocols and don't honor `allowedTools` at all — see
1113
+ interactive approval UI. Codex, OpenCode and Cursor are driven through their
1114
+ own native protocols and don't honor `allowedTools` at all; OpenCode's own
1115
+ permission config decides what it asks. pi and OMP map `allowedTools` onto
1116
+ their own tool allowlists — see
838
1117
  [Coding agent backends](#coding-agent-backends) for what each one actually
839
1118
  locks down. Nothing runs on a server you don't own.
840
1119
 
@@ -845,29 +1124,31 @@ Useful environment variables:
845
1124
  | `CEZ_DELEGATION=1` | Enable owned workers and the private loopback listener for this controller. Off by default; works with the cockpit and headless `cez run`. When disabled, terminal cleanup checkpoints skip conversation/wait history reconciliation; explicit recovery and cleanup termination safeguards remain active. Session instructions and credentials are automatic. |
846
1125
  | `CEZ_DELEGATION_URL`, `CEZ_DELEGATION_TOKEN` | Internal generated session values; do not configure or copy them. Tokens rotate on Continue/restart and are revoked when the session/controller closes. |
847
1126
  | `CEZ_URL` | Cockpit origin for `cez task` and operator `cez discover` (e.g. a hosted `CEZ_REMOTE` cockpit). Unset, they find the local cockpit serving this checkout on ports 4321–4370. Parent discovery uses its delegation controller instead. |
1127
+ | `CEZ_COCKPIT_URL`, `CEZ_PROJECT_ID` | Set by the cockpit in every agent's environment once it listens: the bound origin and the run's project. `cez automation` calls that address; a headless `cez run` sets neither. Do not configure them. |
848
1128
  | `CEZ_DRY_RUN=1` | Use bundled mocks for all five agent backends — the cockpit works offline for demos and development. Explicit backend binary overrides still win. |
849
- | `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Cezar skips its credential probes and provider-disable preferences. Existing Cezar presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `~/.cezar/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
1129
+ | `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Cezarion skips its credential probes and provider-disable preferences. Existing Cezarion presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `~/.cezar/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
850
1130
  | `CEZ_APPROVAL_GATE=1` | Opt into Claude's interactive approval UI; by default, unapproved tools are denied without interrupting the run. Ignored when `CEZ_CLAUDE_PERMISSION_MODE` is a recognized value (`dontAsk`, `acceptEdits`, or `bypass`). |
851
1131
  | `CEZ_CLAUDE_PERMISSION_MODE` | Claude agent-run permission flag: `dontAsk` (default), `acceptEdits`, or `bypass`. `bypass` passes `--dangerously-skip-permissions` and omits `--permission-mode`. Unset or unknown keeps today's `dontAsk` / `CEZ_APPROVAL_GATE` path. Provider verification commands are never given this flag. |
852
1132
  | `CEZ_CLAUDE_SETTING_SOURCES` | When set, Claude agent runs also pass `--setting-sources <value>` (e.g. `user,project,local`). Unset or empty omits the flag. Provider verification is never given this flag. |
853
- | `CEZ_FOLLOWUPS=1` | Turn on the global follow-up **Inbox**: agents are asked to leave follow-ups in `todos.json` when they finish, and the Inbox view appears. Off by default — each task's own **Notes** handoff journal runs either way. |
854
- | `CEZ_AUTOMATIONS=1` | Turn on **automations** (GitHub polls and schedules): the Automations view appears and cezar runs each enabled automation while it is open, launching an ordinary task per match or per occurrence. A schedule (daily, weekdays, weekly, every N hours, in the server's time zone) needs no GitHub remote; a GitHub automation polls on its interval. Off by default, and only the exact value `1` enables it — without it nothing polls or fires, the automations endpoints answer `409`, and the nav item is absent. Read at boot, so restart after changing it; definitions, receipts and high-watermarks are retained, so unsetting it and restarting restores the feature without migration or data loss. |
855
- | `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. cezar first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Cezar-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
1133
+ | `CEZ_ARCHIVE_ON_MERGE=1` | Archive settled task families after all associated pull requests merge. Off by default; only `1` enables this environment default. Saved project settings override global Tasks settings, which override the environment. Runs in the background while the cockpit is open, including unopened projects, without starting agents. Unarchive preserves restored tasks until a later merge. |
1134
+ | `CEZ_AUTOMATIONS=1` | Turn on **automations** (GitHub polls and schedules): the Automations view appears and Cezarion runs each enabled automation while it is open, launching an ordinary task per match or per occurrence. A schedule (daily, weekdays, weekly, every N hours, in the server's time zone, or once at a set time in a named zone) needs no GitHub remote; a GitHub automation polls on its interval. Off by default, and only the exact value `1` enables it — without it nothing polls or fires, the automations endpoints answer `409`, and the nav item is absent. Read at boot, so restart after changing it; definitions, receipts and high-watermarks are retained, so unsetting it and restarting restores the feature without migration or data loss. |
1135
+ | `CEZ_VOICE=1` | Turn on **voice mode** (experimental): the ⌘K palette understands a sentence such as “open the next finished task” or “answer yes”, and the server asks Jev (TypeSafe) to turn it into one action that the cockpit shows and runs. Needs `TYPESAFE_API_KEY` (read by the server only; `CEZ_DRY_RUN=1` uses a fake engine instead). Off by default, and only the exact value `1` enables it — without it the voice endpoints answer `409` and the palette is unchanged. Read at boot, so restart after changing it. |
1136
+ | `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. Cezarion first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Cezarion-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Each agent session also gets `CEZ_PREVIEW_CDP_URL`, a cockpit address through which it drives the same browser (`agent-browser --cdp "$CEZ_PREVIEW_CDP_URL" --pin-tab …`) while you watch; Chromium itself opens no debug port. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
856
1137
  | `CEZ_PREVIEW_NO_SANDBOX=1` | Launch the preview's Chromium with `--no-sandbox`. Off by default and never added automatically, not even for root or in a container; use it only where Chromium's sandbox cannot start, and only for pages you trust. Only the exact value `1` applies. Read at boot. |
857
- | `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. |
1138
+ | `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. The turn-end / run-finalize flushes and the timer commit only while HEAD is the task's own `cez/<id8>` branch; on a branch the agent checked out they leave the work uncommitted, and the closing flush says so in the handoff's cezar records block, not its Progress log (hearsay-tools/cezarion#1004, hearsay-tools/cezarion#1809). A turn-end / run-finalize commit is reported there too, with its `git reset --soft` fold-back command, and the timer's commits share one line per run of consecutive periodic commits (count, first and latest sha), with no cockpit note. The pre-PR flush is unchanged. |
858
1139
  | `CEZ_CLAUDE_BIN=/path/to/claude` | Override which `claude` binary is used. |
859
1140
  | `CEZ_CODEX_BIN=/path/to/codex` | Override which `codex` binary is used. |
860
1141
  | `CEZ_OPENCODE_BIN=/path/to/opencode` | Override which `opencode` binary is used. |
861
1142
  | `CEZ_PI_BIN=/path/to/pi` | Override which `pi` binary is used. |
862
1143
  | `CEZ_OMP_BIN=/path/to/omp` | Override which `omp` (Oh My Pi) binary is used. |
863
1144
  | `CEZ_CURSOR_BIN=/path/to/agent` | Override the Cursor CLI (`agent`) executable. |
864
- | `CLAUDE_CONFIG_DIR`, `CODEX_HOME` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder cezar discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
1145
+ | `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `PI_CODING_AGENT_DIR`, `OMP_PROFILE` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder (for omp, the profile) Cezarion discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
865
1146
  | `CEZ_BROWSE_ROOT=~/` | Default root for **Add project → Open local folder…**. The picker cannot navigate above it; a saved workspace value overrides the environment default and must name an existing folder. |
866
- | `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub**. Saved workspace settings override it, and missing directories are created recursively. |
867
- | `CEZ_SKILLS_AUTO_UPDATE=0` | Disable automatic checks and updates for upstream-CLI-tracked Open Mercato skill installations. On by default; a saved global Skills setting overrides this environment default. Checks are delayed, bounded, cached, and non-blocking. |
1147
+ | `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub** and **New project**. Saved workspace settings override it, and missing directories are created recursively. |
1148
+ | `CEZ_PROJECT_WARMUP=0` | Prepare each registered project only when it is first opened. By default the cockpit prepares every other registered project in the background once it listens, one at a time, most recently opened first: the run store opens and interrupted runs resume, so the first click on a project does not wait. A project another live cockpit serves is skipped. |
868
1149
  | `CEZ_AUTONOMOUS_DEFAULT=0` | Seed the New Task Autonomous default (`0` or `1`). Without a seed, skills default on and workflows off; a saved global Resources setting overrides it. |
869
1150
  | `CEZ_WORKTREE_DEFAULT=1` | Seed the New Task Worktree default (`0` or `1`). Without a seed, eligible runs default on; a saved global Resources setting overrides it. |
870
- | `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Cezar’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
1151
+ | `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Cezarion’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
871
1152
  | `CEZ_SINGLE_PROJECT=1` | Opt into a launch-project-only cockpit: only the exact value `1` enables it. Project add, edit, checkout, folder browsing, and removal are refused and only the launch project is shown. Off by default; stored registry rows are retained, so unsetting it and restarting restores the full multi-project workspace without migration or data loss. |
872
1153
  | `CEZ_HIDE_TOKEN_USAGE=1` | Hide raw input/output token counts throughout the browser cockpit while leaving backend-reported cost visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
873
1154
  | `CEZ_HIDE_COST=1` | Hide backend-reported monetary cost throughout the browser cockpit while leaving raw input/output token counts visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
@@ -875,12 +1156,11 @@ Useful environment variables:
875
1156
  | `GITHUB_TOKEN` | Fallback for GitHub reads/PRs when `gh` isn't authenticated. |
876
1157
  | `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `CEZ_*`), not your full environment — use this to add a var an agent needs. A dev server live preview starts gets the same env without the backend's auth and `GITHUB_TOKEN`, plus these names. |
877
1158
  | `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents, and dev servers live preview starts, the full host environment (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
878
- | `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/tmp/<task-id>`, created and write-probed before the agent spawns, kept across session close, Continue, and restart while the task is live, and reaped at terminal completion or history deletion (hearsay-tools/cezarion#515) — and kept short enough for unix-socket paths: a checkout so deep that `.ai/cezar/tmp/<task-id>` would cross the kernel's socket-path limit resolves it to a `cez-agent-…` directory under the system temp dir instead (hearsay-tools/cezarion#387), with its location recorded so host temp-environment changes cannot move live scratch. So concurrent tasks stop sharing one directory and a task refuses to start rather than run against a temp directory that silently swallows its shell output (see Troubleshooting below). Only an exact `0` disables it, and it disables the whole thing — the pre-spawn check included, so this stays an escape hatch you can actually take. |
1159
+ | `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/t/<task-id8>` (`.ai/cezar/tmp/<task-id>` before hearsay-tools/cezarion#1022), created and write-probed before the agent spawns, kept across session close, Continue, and restart while the task is live, and reaped at terminal completion or history deletion (hearsay-tools/cezarion#515) — and kept short enough for unix-socket paths: a checkout so deep that `.ai/cezar/t/<task-id8>` would leave no room under the kernel's socket-path limit for Chromium's singleton socket resolves it to a `cez-agent-…` directory under the system temp dir instead (hearsay-tools/cezarion#387), with its location recorded so host temp-environment changes cannot move live scratch. So concurrent tasks stop sharing one directory and a task refuses to start rather than run against a temp directory that silently swallows its shell output (see Troubleshooting below). Only an exact `0` disables it, and it disables the whole thing — the pre-spawn check included, so this stays an escape hatch you can actually take. |
879
1160
  | `CEZ_REDACT_SECRETS=0` | Disable scrubbing of credential values/token shapes from the on-disk state (the NDJSON transcript and the free-text fields of the run records in `runs.db`). On by default; leave it on. Controller-generated delegation tokens are always scrubbed. Best-effort defense-in-depth, not a guarantee: it catches known token shapes and the values of your own secret-named env vars, so a credential in neither category can still get through. |
880
1161
  | `CEZ_TITLE_UPDATES=0` | Turn off the live task-title refresh (namer re-runs on each turn end). The Settings → Agents toggle overrides this default. |
881
1162
  | `CEZ_AUTONAME=0` | Disable ALL LLM task naming (creation + live) — titles stay heuristic (`437: /om-auto-review-pr`). Under `CEZ_DRY_RUN=1` naming is already off unless forced with `CEZ_AUTONAME=1`. |
882
1163
  | `CEZ_REVIEW_GATE=1` | Turn ON the optional diff-first review gate (open-mercato/cezar#489): a successful, non-autonomous run with changes parks at `review` (Accept / Send back / Draft PR) instead of finishing. Off by default — changed runs settle to `done` with the diff left in the worktree. Only `1` enables. The Settings → Agents toggle overrides this; autonomous runs always skip it. |
883
- | `CEZ_NO_BANNER=1` | Skip the `open-mercato/skills` banner on `cez serve` startup. (The cockpit no longer shows a banner — its skills now live on the Skills page's Manage panel — so this env var is the terminal banner's only switch.) |
884
1164
  | `VITE_CEZ_API_BASE=http://localhost:4321` | **Build time only**, and only when the cockpit bundle is deployed apart from the service it talks to. Empty (the default) means "the origin that served this page", which is right for both normal cases: the CLI serves the bundle itself, and `npm run dev` proxies `/api` to the local service. A deployment that must be configured without a rebuild can put `<meta name="cez-api-base" content="…">` in the served HTML instead, which wins over this. |
885
1165
  | `VITE_CEZ_E2E=1` | **Build time only.** The cockpit e2e suite sets this when it builds the bundle it drives. It pins `useNow` and every `refetchInterval` so a wait cannot span a 30s tick or a 4s poll. Leave unset for production. |
886
1166
 
@@ -904,8 +1184,8 @@ df -i "${TMPDIR:-/tmp}" # a tmpfs can exhaust inodes long before
904
1184
  Under quota the file is *created* and the write then fails, so the backend reads
905
1185
  back a zero-byte capture file and hands the agent an empty result.
906
1186
 
907
- **Fix.** Since open-mercato/cezar#785 cezar gives each task its own `TMPDIR` under
908
- `.ai/cezar/tmp/<task-id>` and write-probes it before spawning, so a broken temp
1187
+ **Fix.** Since open-mercato/cezar#785 Cezarion gives each task its own `TMPDIR` under
1188
+ `.ai/cezar/t/<task-id8>` and write-probes it before spawning, so a broken temp
909
1189
  directory fails the task with `agent temp directory is not writable: …` on the
910
1190
  task thread instead of corrupting its work. If you see that error, free space on
911
1191
  the disk holding the repo. `CEZ_AGENT_TMPDIR=0` turns the whole mechanism off —
@@ -922,69 +1202,86 @@ with `TMPDIR=/tmp` set by hand, the same commands succeed. Tools like `tsx` bind
922
1202
  `<tmpdir>/tsx-<uid>/<pid>.pipe`), and the kernel caps a socket path at 104–108
923
1203
  bytes — a temp directory near that length leaves no room for the name.
924
1204
 
925
- **Fix.** Since hearsay-tools/cezarion#387 cezar keeps each task's temp directory at most 78 bytes. A
926
- checkout deep enough to push `.ai/cezar/tmp/<task-id>` past that limit gets a
927
- short `cez-agent-…` directory under the system temp directory instead — still
928
- per-task, still write-probed before the agent spawns, still reaped when the run
929
- ends. Checkouts whose path already fits keep the repo-local directory.
1205
+ **Fix.** Since hearsay-tools/cezarion#387 Cezarion keeps each task's temp directory short
1206
+ enough for these sockets: at most 58 bytes since hearsay-tools/cezarion#1022, which
1207
+ leaves room for Chromium's `<tmpdir>/org.chromium.Chromium.XXXXXX/SingletonSocket`
1208
+ on macOS's 104-byte limit. The repo-local directory is `.ai/cezar/t/<task-id8>`
1209
+ (the first 8 characters of the task id), short enough for ordinary checkouts such
1210
+ as `/home/<user>/projects/<repo>`. A checkout deep enough to push it past the limit
1211
+ gets a short `cez-agent-…` directory under the system temp directory instead —
1212
+ still per-task, still write-probed before the agent spawns, still reaped when the
1213
+ run ends.
930
1214
  `CEZ_AGENT_TMPDIR=0` reverts the whole mechanism to the host `TMPDIR`.
931
1215
 
932
1216
  ---
933
1217
 
934
1218
  ## Coding agent backends
935
1219
 
936
- cezar is not married to one vendor. Every agent step runs through a single
1220
+ Cezarion is not married to one vendor. Every agent step runs through a single
937
1221
  `AgentRunner` seam with six built-in backends:
938
1222
 
939
- | Backend | CLI | How cezar drives it | Tool access |
1223
+ | Backend | CLI | How Cezarion drives it | Tool access |
940
1224
  |---|---|---|---|
941
1225
  | **Claude Code** (default) | [`claude`](https://github.com/anthropics/claude-code) | Headless `stream-json` mode. | Per-tool `--allowedTools` (`bashAllowlist` scopes `Bash`); `dontAsk` denies unapproved tools without prompting (`CEZ_APPROVAL_GATE=1` → `acceptEdits` + approval UI; `CEZ_CLAUDE_PERMISSION_MODE=bypass` → `--dangerously-skip-permissions`). |
942
1226
  | **Codex** | [`codex`](https://github.com/openai/codex) | `codex app-server` — JSON-RPC over stdio, the same transport the Codex IDE extensions use. | Ignores `allowedTools`; inherits managed permissions and Codex approval defaults. Confirmed unmanaged sessions use `danger-full-access`. `CEZ_CODEX_NETWORK=0` requires network restriction: unmanaged sessions use network-blocked `workspace-write`; managed filesystem rules remain intact, and an unconfirmed network restriction stops before any turn. If requirements discovery is unavailable, Codex permission defaults apply. |
943
- | **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely; every permission is auto-approved. |
944
- | **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) | Persistent ACP over stdio. | Uses `--force` and approves ACP allow-once requests; Cursor’s native deny rules still apply. Per-run `allowedTools` and `bashAllowlist` are unsupported. |
945
- | **pi** _(experimental)_ | [`pi`](https://github.com/badlogic/pi-mono) | Persistent `--mode rpc` over JSONL; models are picked with the `provider/model` convention. | Maps `allowedTools` onto pi's `--tools` allowlist; default sessions also pass harness extras (`Subagent`, `SubagentSupervisor`, `SubagentWait`) through `--tools`, and an explicit `allowedTools` still restricts. A configured `bashAllowlist` disables Bash because pi cannot express command-prefix rules. |
1227
+ | **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely; OpenCode's own permission config governs. Cezarion answers OpenCode's built-in asks (outside-worktree reads, `.env` reads, the repeated-call guard) once, unless your config has a rule for that permission. Any other ask shows a permission card in the cockpit, and the run waits for your answer. |
1228
+ | **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) | Qualified builds use resumable `--print --output-format stream-json` turns; other builds and legacy sessions use ACP. | Print mode admits marketplace plugins, including user and team plugins, and narrows known native delegation tools for governed runs. Per-run `allowedTools` and `bashAllowlist` are unsupported. |
1229
+ | **pi** _(experimental)_ | [`pi`](https://github.com/badlogic/pi-mono) | Persistent `--mode rpc` over JSONL; models are picked with the `provider/model` convention. | Maps `allowedTools` onto pi tool names. The default list, which adds the harness extras `Subagent`, `SubagentSupervisor` and `SubagentWait`, sends no allowlist: `--no-builtin-tools` plus a bundled extension that activates those built-ins, so MCP servers (`direct`, `codemode` and `deferred` exposure) and other pi extensions' tools stay callable. The six base tools alone, the list a worker inherits from a Claude parent, take the same path. A narrowed `allowedTools`, or one that names any tool outside that default set (an `mcp__` tool, `WebFetch` or a custom tool), uses pi's `--tools` allowlist, so a step that grants named tools reaches only those; a list that maps to nothing becomes `--no-tools` (or only the Cezarion tools). A configured `bashAllowlist` disables Bash because pi cannot express command-prefix rules. |
946
1230
  | **OMP** _(experimental)_ | [`omp`](https://github.com/can1357/oh-my-pi) | Persistent `--mode rpc` over JSONL (Oh My Pi, a pi fork); models use the `provider/model` convention and are discovered from `omp models --json`. | Maps `allowedTools` onto OMP's `--tools` allowlist (`[]` becomes `--no-tools`); default sessions also pass `todo`, `lsp`, `ast_edit`, `task` and `wait`. A configured `bashAllowlist` disables `bash` because OMP cannot express command-prefix rules. |
947
1231
 
948
1232
  > ⚠️ **OpenCode, pi and OMP support are experimental.** These runners work but are less
949
- > battle-tested than the Claude Code and Codex backends, and OpenCode auto-approves
950
- > every permission (it ignores `allowedTools`). Treat them as previews and expect
951
- > rough edges.
1233
+ > battle-tested than the Claude Code and Codex backends, and OpenCode ignores
1234
+ > `allowedTools` (its own permission config governs what it asks). Treat them as
1235
+ > previews and expect rough edges.
952
1236
 
953
- On startup cezar probes which CLIs are installed and the cockpit only offers
1237
+ On startup Cezarion probes which CLIs are installed and the cockpit only offers
954
1238
  the backends it found — install any one of the six and you're operational.
955
1239
 
956
1240
  ### Cursor CLI
957
1241
 
958
1242
  Install [Cursor CLI](https://cursor.com/docs/cli/installation) and run `agent login`,
959
- or set `CURSOR_API_KEY`. Cezar discovers `agent` on PATH; `CEZ_CURSOR_BIN` overrides
960
- its location. Select **Cursor** in the runner picker to use a persistent ACP session.
1243
+ or set `CURSOR_API_KEY`. Cezarion discovers `agent` on PATH; `CEZ_CURSOR_BIN` overrides
1244
+ its location. Select **Cursor** in the runner picker. On build
1245
+ `2026.10.01-e373342` or newer, new sessions use print mode so marketplace plugins
1246
+ are available. Cezarion checks `agent --version` and the native tool catalog before
1247
+ the first turn; `agent --version` is also the quick way to check your installation.
1248
+ Cezarion starts the CLI with `--disable-auto-update`, so a task never updates it;
1249
+ update it yourself with `agent update`. Older builds, and a build missing a core
1250
+ tool, use ACP, which may not see marketplace plugins. Existing ACP
1251
+ sessions continue on ACP so their conversation history is preserved.
961
1252
  A missing CLI leaves the other backends available. `CEZ_DRY_RUN=1` uses the mock.
962
- Cursor ACP currently provides no token-usage telemetry; Cezar leaves usage unavailable
963
- instead of estimating it. Cezar negotiates Cursor’s parameterized model picker and
964
- shows only the effort levels the selected model advertises. The runner applies
965
- `effort` or `reasoning` through ACP session config options before prompting;
966
- unsupported explicit values fail instead of silently using a default. Initial models
967
- are pinned with `--model`; opaque parameterized IDs and legacy model discovery
968
- remain compatibility paths for older CLIs.
1253
+ Cursor questions from a plugin may be automatically skipped by print mode. Cezarion's
1254
+ own `CEZ:ASK` questions remain answerable in the cockpit; plugins that require
1255
+ native questions may not work fully. Project-local Claude plugin settings may
1256
+ not disable a user or team marketplace copy. A previously confirmed Cursor
1257
+ session ID can also lose history inside Cursor without an error; Cezarion resumes
1258
+ the recorded ID and checks that Cursor returns the same ID.
1259
+ Cursor provides no qualified token-usage telemetry; Cezarion leaves usage unavailable
1260
+ instead of estimating it. Cezarion discovers Cursor's canonical model IDs and advertised
1261
+ effort levels through its read-only ACP catalog. Print mode accepts those IDs and
1262
+ applies effort using a complete native parameter selection passed with `--model`,
1263
+ retaining the account catalog's defaults for other parameters. Advertised legacy
1264
+ print variants remain supported. ACP sessions apply `effort` or `reasoning` through
1265
+ session config options before prompting; an unsupported explicit effort fails
1266
+ instead of silently choosing another level.
969
1267
 
970
1268
  Settings → Agent config exposes Cursor’s global `cli-config.json`, project
971
1269
  `.cursor/cli.json` permissions, `.cursor/mcp.json`, and shared `AGENTS.md`.
972
1270
  [Cursor’s configuration reference](https://cursor.com/docs/cli/reference/configuration)
973
1271
  documents `CURSOR_CONFIG_DIR` and the Linux/BSD `XDG_CONFIG_HOME/cursor` override.
974
- These select configuration; Cezar does not offer alternate Cursor account profiles
1272
+ These select configuration; Cezarion does not offer alternate Cursor account profiles
975
1273
  because a complete credential-and-session home override has not been verified.
976
1274
 
977
-
978
1275
  ### OMP (Oh My Pi)
979
1276
 
980
1277
  Install [OMP](https://github.com/can1357/oh-my-pi) (`curl -fsSL https://omp.sh/install | sh`
981
- installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`. Cezar discovers `omp` on PATH;
1278
+ installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`. Cezarion discovers `omp` on PATH;
982
1279
  `CEZ_OMP_BIN` overrides its location. `omp` is a separate backend from `pi`: a host with
983
1280
  both binaries keeps both, and `CEZ_PI_BIN` never selects OMP. Select **OMP** in the runner
984
1281
  picker to use a persistent `--mode rpc` session. A missing CLI leaves the other backends
985
1282
  available and shows OMP as unavailable. `CEZ_DRY_RUN=1` uses the mock.
986
1283
 
987
- Agents ask questions through cezar's `CEZ:ASK` marker, and OMP's own sub-agents appear in the
1284
+ Agents ask questions through Cezarion's `CEZ:ASK` marker, and OMP's own sub-agents appear in the
988
1285
  Agents drawer. Settings → Agent config exposes OMP's `config.yml`, `mcp.json` and
989
1286
  `AGENTS.md` files. Named OMP profiles and accounts are not supported yet.
990
1287
 
@@ -1016,15 +1313,15 @@ steps:
1016
1313
  onFail: { retry: implement, max: 2 }
1017
1314
  ```
1018
1315
 
1019
- Parallel variants (×2/×3) of one task share that task's backend — mixing
1020
- happens per task and per step, not inside a variant group.
1316
+ Owned workers can compare approaches in separate worktrees. Each worker has its own
1317
+ runner and model selection; see [Owned workers](#owned-workers-opt-in).
1021
1318
 
1022
1319
  **Models come from your own machine.** For Claude, Codex, OpenCode, and Pi, the model picker
1023
- is not a list cezar ships — it asks the installed CLI what it can actually run
1320
+ is not a list Cezarion ships — it asks the installed CLI what it can actually run
1024
1321
  (Claude stream-json `list_models`, `codex app-server`'s `model/list`,
1025
1322
  `opencode models`, and `pi --list-models`), caches the answer in
1026
1323
  memory for five minutes, and shows it. A model your provider rolled out
1027
- yesterday is selectable without a cezar release, and one it retired stops being
1324
+ yesterday is selectable without a Cezarion release, and one it retired stops being
1028
1325
  offered. Claude discovery starts no model turn and uses safe mode with no session
1029
1326
  persistence. It has a 15-second deadline and a 200-model cap, with child cleanup
1030
1327
  on every outcome. Unsupported or unavailable Claude CLIs fall back to the
@@ -1040,9 +1337,9 @@ can slot in the same way.
1040
1337
 
1041
1338
  ---
1042
1339
 
1043
- ## Remote access (host cezar on a server)
1340
+ ## Remote access (host Cezarion on a server)
1044
1341
 
1045
- cezar runs on `localhost` by default. To reach the cockpit from another machine —
1342
+ Cezarion runs on `localhost` by default. To reach the cockpit from another machine —
1046
1343
  a shared team box, a VPS, your phone — put an **authenticated public front** in
1047
1344
  front of it. The built-in installer does this interactively, per **platform
1048
1345
  strategy**, and never escalates silently: every privileged command is printed
@@ -1054,6 +1351,7 @@ npx cezarion server-deploy --platform ubuntu-vps # roll out a new version (
1054
1351
  npx cezarion server-uninstall --platform ubuntu-vps # reverse it
1055
1352
 
1056
1353
  # host a SECOND cockpit for another domain on the same box (ubuntu-vps):
1354
+
1057
1355
  npx cezarion server-install --platform ubuntu-vps --domain shop.example.com
1058
1356
  ```
1059
1357
 
@@ -1062,7 +1360,7 @@ On `ubuntu-vps` a single host can run several independent cockpits — add
1062
1360
  new domain never resumes or clobbers the first install.
1063
1361
 
1064
1362
  **Already running a reverse proxy?** If Dokploy, Coolify, Caddy or your own
1065
- nginx already owns `:80/:443`, cezar's would fight it for the ports. Install the
1363
+ nginx already owns `:80/:443`, Cezarion's would fight it for the ports. Install the
1066
1364
  service only and let your proxy front it:
1067
1365
 
1068
1366
  ```bash
@@ -1072,13 +1370,13 @@ npx cezarion server-install --platform ubuntu-vps \
1072
1370
 
1073
1371
  `--bind-host` is only needed when the proxy runs in a **container** (Traefik
1074
1372
  can't reach the host's loopback); a host-installed proxy uses the `127.0.0.1`
1075
- default. In this mode **your proxy must enforce authentication** — cezar has
1373
+ default. In this mode **your proxy must enforce authentication** — Cezarion has
1076
1374
  none of its own. [Details →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy)
1077
1375
 
1078
1376
  | Provider | `--platform` | Public front | Guide |
1079
1377
  |----------|--------------|--------------|-------|
1080
1378
  | Ubuntu / Debian VPS | `ubuntu-vps` | nginx + Let's Encrypt HTTPS, htpasswd login, systemd | [Step-by-step →](docs/server-install/ubuntu-vps.md) |
1081
- | Ubuntu + existing proxy | `ubuntu-vps --external-proxy` | your Dokploy/Traefik/Caddy front; cezar ships the service only | [Step-by-step →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy) |
1379
+ | Ubuntu + existing proxy | `ubuntu-vps --external-proxy` | your Dokploy/Traefik/Caddy front; Cezarion ships the service only | [Step-by-step →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy) |
1082
1380
  | macOS + ngrok | `macosx-ngrok` | ngrok tunnel + `--basic-auth`, launchd | [Step-by-step →](docs/server-install/macosx-ngrok.md) |
1083
1381
 
1084
1382
  See the **[Remote access overview](docs/server-install/README.md)** for how it
@@ -1098,7 +1396,7 @@ For a deliverable outside the project, an agent must explicitly publish a snapsh
1098
1396
  cez artifact publish /tmp/decision.md
1099
1397
  ```
1100
1398
 
1101
- Cezar supplies the bundled command and task context to agent sessions automatically
1399
+ Cezarion supplies the bundled command and task context to agent sessions automatically
1102
1400
  (`CEZ_TASK_ID` and `CEZ_ARTIFACTS_DIR`; do not configure these yourself). The command
1103
1401
  returns JSON with a Markdown link for the agent to share. When the owning project
1104
1402
  is registered, the link keeps that project when copied or opened from another
@@ -1122,7 +1420,7 @@ never blocks startup):
1122
1420
 
1123
1421
  ```jsonc
1124
1422
  {
1125
- "skillsRepos": [{ "repo": "open-mercato/skills", "ref": "main" }], // team skills; [] disables
1423
+ "skillsRepos": [], // team skills; none by default. Example: [{ "repo": "open-mercato/skills", "ref": "main" }]
1126
1424
  // Team-skill repos are code-trusted: a skill body becomes an agent system prompt.
1127
1425
  // Only owner/name, https/ssh URLs, or local paths (`/abs`, `./rel`, `~/dir`,
1128
1426
  // `C:\dir`) are accepted — no ext::/fd:: transport helpers. Write a relative
@@ -1130,7 +1428,7 @@ never blocks startup):
1130
1428
  // the source against a moving branch head — cezar verifies it resolves to
1131
1429
  // exactly that commit, and reports it as `team.commit`.
1132
1430
  "worktreeRetention": 10, // keep the last N finished worktrees on disk; 0 = unlimited (branch always kept)
1133
- "defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "pi"
1431
+ "defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "cursor" · "pi" · "omp"
1134
1432
  "modelsLocked": true, // optional: native per-runner model is fixed/read-only; runner stays selectable
1135
1433
  "plannerModel": "sonnet", // model the "Plan first" button uses to draft chains
1136
1434
  "baseBranch": "develop", // branch worktrees fork from + PRs target (also settable in the Git tab)
@@ -1155,12 +1453,34 @@ root — live once in `~/.cezar/config.json`, alongside the
1155
1453
  [project registry](#multiple-projects-one-cockpit), and are edited from
1156
1454
  **Settings → Resources** and **Settings → Projects**. A `maxParallel` left over
1157
1455
  in a repo's `.ai/cezar/config.json` is imported into the workspace file the
1158
- first time cezar boots there, and ignored afterwards.
1456
+ first time Cezarion boots there, and ignored afterwards.
1457
+
1458
+ ### Session-start context
1459
+
1460
+ Every session Cezarion launches — a fresh step, a retry, **Continue**, recovery, an owned
1461
+ worker — opens with the run's whole handoff file, so the agent has its notes without a tool
1462
+ call. Add your own context, such as a vision document, with an optional
1463
+ `.ai/cezar/context.yaml`:
1464
+
1465
+ ```yaml
1466
+ version: 1
1467
+ rules:
1468
+ - id: project-vision
1469
+ on: session_start
1470
+ target: both # parent · worker · both
1471
+ template: |
1472
+ Project vision:
1473
+ {{file:docs/vision.md}}
1474
+ ```
1475
+
1476
+ The whole prefix is capped at 64 KiB, blocks that do not fit are skipped whole, and each launch
1477
+ logs which blocks it applied or skipped. See [docs/context-injection.md](docs/context-injection.md)
1478
+ for the variables, the limits and the error handling.
1159
1479
 
1160
1480
  ### Preparing new worktrees
1161
1481
 
1162
1482
  Every task and worker runs in a fresh worktree, and a fresh worktree has nothing installed. Give
1163
- the project a `worktreeSetup` and cezar runs those commands in each new worktree before the
1483
+ the project a `worktreeSetup` and Cezarion runs those commands in each new worktree before the
1164
1484
  agent's first turn, so the agent (and anything that runs beside it, such as a test watcher)
1165
1485
  starts in a ready tree:
1166
1486
 
@@ -1173,7 +1493,7 @@ starts in a ready tree:
1173
1493
  ```
1174
1494
 
1175
1495
  Or edit it in **Settings → Worktrees → Prepare new worktrees**, one command per line. Only a
1176
- cockpit on the machine running cezar can change it: a hosted cockpit (`CEZ_REMOTE=1`) shows it
1496
+ cockpit on the machine running Cezarion can change it: a hosted cockpit (`CEZ_REMOTE=1`) shows it
1177
1497
  read-only, because these are commands the host runs.
1178
1498
 
1179
1499
  - **When it runs.** In every new task worktree and every worker worktree, and again when Continue
@@ -1187,8 +1507,7 @@ read-only, because these are commands the host runs.
1187
1507
  file under `HOME`). It also gets `CEZ_PROJECT_ROOT` (the main checkout, for copying untracked
1188
1508
  files like `.env`) and `CEZ_TASK_ID`.
1189
1509
  - **What you see.** The task thread shows a "Ran `<command>`" card per command with its output
1190
- (the last 20 KB) and a line with the outcome and duration, which also goes into the handoff
1191
- file.
1510
+ (the last 20 KB) and a line with the outcome and duration.
1192
1511
  - **What the agent sees.** Its first message says what ran, so it doesn't repeat the install.
1193
1512
  If a command fails or times out, the agent still starts and its first message names the
1194
1513
  command, the exit code and the end of the output, so it can fix the cause or work around it.
@@ -1209,9 +1528,9 @@ Without the key nothing runs, exactly as before. Examples:
1209
1528
 
1210
1529
  ### Editing the agents' own config (Settings → Agent config)
1211
1530
 
1212
- cezar picks *which* agent runs; **Settings → Agent config** lets you edit *how* it
1213
- behaves — the raw config files Claude, Codex and OpenCode read for settings,
1214
- MCP, and memory. In the multi-project cockpit the section is project-scoped:
1531
+ Cezarion picks *which* agent runs; **Settings → Agent config** lets you edit *how* it
1532
+ behaves — the raw config files Claude, Codex, OpenCode, Cursor, pi and OMP read
1533
+ for settings, MCP, and memory. In the multi-project cockpit the section is project-scoped:
1215
1534
  repo-relative files resolve from the selected project's root, while user-scope
1216
1535
  files continue to resolve from the agent's home.
1217
1536
 
@@ -1227,17 +1546,26 @@ hosted cockpit (`CEZ_REMOTE=1`) is read-only and never serves home-file contents
1227
1546
  End-to-end, from a fresh clone to a global `cez` command you can run in **any**
1228
1547
  repo on your machine — no npm publish required.
1229
1548
 
1230
- **1. Prerequisites** — Node 24.15+ and `git` (plus at least one logged-in agent CLI,
1549
+ **1. Prerequisites** — Node 24.21.0+ and `git` (plus at least one logged-in agent CLI,
1231
1550
  as in [Quick start](#quick-start)).
1232
1551
 
1233
1552
  **2. Clone & install**
1234
1553
 
1235
1554
  ```bash
1236
- git clone https://github.com/wjarka/cezar.git
1237
- cd cezar
1238
- npm install
1555
+ git clone https://github.com/hearsay-tools/cezarion.git
1556
+ cd cezarion
1557
+ npm install --global pnpm@12.11.2
1558
+ pnpm install --frozen-lockfile
1239
1559
  ```
1240
1560
 
1561
+ Dependency installation uses pnpm 12.11.2 (pinned in `packageManager`) and
1562
+ `pnpm-lock.yaml`. Use pnpm for dependency changes; keep npm for the existing
1563
+ build/test scripts. Workspace dependencies are linked locally and esbuild's
1564
+ install hook is approved in `pnpm-workspace.yaml`. The store uses hardlinks when
1565
+ the checkout and store share a filesystem. Publishing and end-user installation
1566
+ continue to use npm. For this repository's Worktrees setup, use
1567
+ `pnpm install --frozen-lockfile` after the checked-out base branch contains the migration.
1568
+
1241
1569
  **3. Build** — compiles the api-client and the server (`tsc → packages/cezar/dist/`) and the cockpit
1242
1570
  (`vite build → packages/cezar/web/dist/`), then runs the pack gate:
1243
1571
 
@@ -1251,6 +1579,7 @@ your PATH pointing at *this checkout*:
1251
1579
  ```bash
1252
1580
  npm run install-as-command # live link (default) — see the change loop below
1253
1581
  # or: npm run install-as-command:global # self-contained snapshot copy
1582
+
1254
1583
  ```
1255
1584
 
1256
1585
  Now `cd` into any other repo and run it:
@@ -1298,6 +1627,7 @@ npm run typecheck # refresh server declarations, then check all four workspac
1298
1627
  npm run typecheck:web # refresh server declarations, then check web sources
1299
1628
  npm test # vitest — server + cockpit unit suites
1300
1629
  npm run test:changed # iteration only: tests related to branch + working-tree changes
1630
+ pnpm metrics <file> # function complexity; add --test <test-file> for coverage and CRAP
1301
1631
  npm run test:unit # node:test — fast core-module tests
1302
1632
  npm run test:package # pack/install and exercise the built CLI
1303
1633
  npm run test:e2e # real-browser cockpit suite (agent-browser)
@@ -1308,6 +1638,63 @@ The four-lane local browser run needs roughly 8 GiB of RAM at peak. It keeps CI'
1308
1638
  serial-per-shard policy unchanged. See [cockpit E2E testing](packages/web/e2e/README.md#full-local-suite-in-four-lanes)
1309
1639
  for lane isolation, logs, and cleanup.
1310
1640
 
1641
+ Calculate metrics for one JavaScript or TypeScript file, or select a function:
1642
+
1643
+ ```bash
1644
+ pnpm metrics packages/contract/src/attention.ts
1645
+ pnpm metrics packages/contract/src/attention.ts --function deriveAttention
1646
+ pnpm --silent metrics packages/contract/src/attention.ts --line 150 --json
1647
+ pnpm metrics packages/contract/src/attention.ts --function deriveAttention --test packages/contract/src/attention.test.ts
1648
+ pnpm metrics packages/contract/src/attention.ts --coverage coverage/coverage-final.json
1649
+ ```
1650
+
1651
+ Complexity follows ESLint's classic convention, including short-circuit operators,
1652
+ optional chaining, default parameters and each non-default switch case. Functions,
1653
+ methods and arrow functions have separate scores. Module and class initialization
1654
+ are excluded. Use `Class.method` or `--line` when a name is ambiguous.
1655
+
1656
+ CRAP is `C² × (1 − coverage)³ + C`, using executable line coverage within each
1657
+ function body. This is the line-coverage variant; the original proposal used
1658
+ basis-path coverage. An empty function uses its call counter. Missing coverage
1659
+ shows `unavailable`, or `null` for CRAP in JSON. It never assumes zero coverage.
1660
+ The command discovers `coverage/coverage-final.json` from the source directory
1661
+ up to the checkout root, then the current directory. An explicit `--coverage`
1662
+ selects an Istanbul JSON report. Reports older than the source leave CRAP unavailable;
1663
+ reports must describe the current source, so regenerate them after source changes.
1664
+
1665
+ Repeat `--test` to collect coverage from several Vitest test files. This runs only
1666
+ the supplied tests in the unit projects, with two workers and a ten-minute limit.
1667
+ Coverage files are temporary and are removed after the calculation. A failed test
1668
+ run exits nonzero and produces no scores. Without `--test`, no tests run. Test logs
1669
+ go to stderr, so `--json` stdout contains only the report. This tool belongs to the
1670
+ checkout and is available after the normal dependency installation. Use
1671
+ `pnpm --silent metrics ... --json` to also suppress pnpm's command banner.
1672
+
1673
+ The tool is bundled in the [check-code-quality skill](.ai/skills/check-code-quality/SKILL.md).
1674
+ Ask an agent to measure a file, function or module for a scoped stats report.
1675
+ That path uses available coverage and reports missing CRAP without starting the
1676
+ PR process. Ask explicitly for fresh coverage when needed.
1677
+
1678
+ The skill's pre-PR path selects changed functions, fixes small problems, and files larger
1679
+ inherited refactors as `code-quality-improvement` issues. The scan report defines
1680
+ the limits: CRAP 30 and complexity 20. Scores equal to a limit pass. Copy the
1681
+ whole skill directory to use the tool in another repository.
1682
+
1683
+ Run the complete pre-PR measurement with the bundled command:
1684
+
1685
+ ```bash
1686
+ node .ai/skills/check-code-quality/scripts/check.mjs --base origin/main \
1687
+ --runner node --test scripts/metrics.test.mjs --test scripts/changed-functions.test.mjs \
1688
+ --test scripts/quality-check.test.mjs --node-import scripts/test-git-env.mjs \
1689
+ --output .ai/analysis/code-quality.md
1690
+ ```
1691
+
1692
+ Select relevant tests for the changes. For Vitest, use `--runner vitest` and
1693
+ `--project` where needed. The command collects coverage once for all changed
1694
+ functions and writes Markdown plus JSON. Exit codes distinguish a pass (0),
1695
+ exceeded limits (1), and incomplete measurement (2). See the skill for how to
1696
+ resolve findings before opening a PR.
1697
+
1311
1698
  For iteration, run affected test files or `npm run test:changed` (inspect with
1312
1699
  `-- --plan`; override the local main comparison with `-- --base=<ref>`).
1313
1700
  The changed-test command includes staged, unstaged and untracked changes and
@@ -1317,12 +1704,12 @@ for targeted browser commands and the final-gate/evidence-reuse policy.
1317
1704
 
1318
1705
  Both `npm run typecheck:web` and
1319
1706
  `npm run typecheck -w @open-mercato/cezar-web` rebuild server declarations from
1320
- the current checkout before checking web sources. Run `npm ci` in each new
1707
+ the current checkout before checking web sources. Run `pnpm install --frozen-lockfile` in each new
1321
1708
  worktree first. The full `npm run typecheck` starts with the web check, so it
1322
1709
  prepares declarations once before checking the remaining workspaces. Calling
1323
1710
  `tsc --noEmit` directly skips this preparation and can consume stale declarations.
1324
1711
 
1325
- CI runs two duration-balanced Vitest shards alongside the build and package checks.
1712
+ CI runs three duration-balanced Vitest shards alongside the build and package checks.
1326
1713
  See [CI verification](docs/sdlc/ci.md) for the job graph and local commands.
1327
1714
 
1328
1715
  The stack is deliberately small: **TypeScript** (strict, ESM), **Hono** + SSE for
@@ -1335,4 +1722,4 @@ Every module is meant to be read in one sitting.
1335
1722
 
1336
1723
  ## License
1337
1724
 
1338
- **MIT** © Patryk Lewczuk — full text in [LICENSE](LICENSE).
1725
+ **MIT** © Patryk Lewczuk (original cezar) and Wiktor Jarka (Cezarion) — full text in [LICENSE](LICENSE).