@bastani/atomic 0.9.18-alpha.4 → 0.9.18-alpha.6

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 (409) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/README.md +3 -3
  3. package/dist/builtin/intercom/CHANGELOG.md +41 -0
  4. package/dist/builtin/intercom/README.md +18 -3
  5. package/dist/builtin/intercom/broker/broker.ts +670 -127
  6. package/dist/builtin/intercom/broker/client.ts +149 -35
  7. package/dist/builtin/intercom/broker/delivered-message-cache.ts +497 -37
  8. package/dist/builtin/intercom/broker/framing.ts +4 -2
  9. package/dist/builtin/intercom/broker/paths.ts +10 -0
  10. package/dist/builtin/intercom/broker/pending-send-registry.ts +1 -2
  11. package/dist/builtin/intercom/broker/send-handler.ts +311 -52
  12. package/dist/builtin/intercom/broker/send-signature.ts +4 -2
  13. package/dist/builtin/intercom/broker/socket-writes.ts +103 -0
  14. package/dist/builtin/intercom/broker/spawn.ts +9 -4
  15. package/dist/builtin/intercom/index.bundle.mjs +1419 -213
  16. package/dist/builtin/intercom/package.json +2 -2
  17. package/dist/builtin/intercom/recoverable-disconnect.ts +52 -0
  18. package/dist/builtin/intercom/retry-policy.ts +8 -0
  19. package/dist/builtin/intercom/skills/intercom/SKILL.md +17 -9
  20. package/dist/builtin/intercom/types.ts +25 -8
  21. package/dist/builtin/intercom/workflow-stage-path-matching.ts +90 -0
  22. package/dist/builtin/intercom/workflow-stage-target.ts +57 -0
  23. package/dist/builtin/mcp/index.bundle.mjs +427 -126
  24. package/dist/builtin/mcp/package.json +2 -2
  25. package/dist/builtin/subagents/CHANGELOG.md +19 -0
  26. package/dist/builtin/subagents/README.md +3 -3
  27. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  28. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  29. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  30. package/dist/builtin/subagents/agents/codebase-online-researcher.md +11 -11
  31. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  32. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  33. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  34. package/dist/builtin/subagents/agents/debugger.md +3 -3
  35. package/dist/builtin/subagents/agents/worker.md +2 -2
  36. package/dist/builtin/subagents/package.json +3 -3
  37. package/dist/builtin/subagents/skills/qlty/SKILL.md +29 -101
  38. package/dist/builtin/subagents/skills/qlty/references/manual-configuration.md +52 -0
  39. package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
  40. package/dist/builtin/subagents/src/extension/index.bundle.mjs +49 -132
  41. package/dist/builtin/web-access/package.json +2 -2
  42. package/dist/builtin/workflows/CHANGELOG.md +44 -0
  43. package/dist/builtin/workflows/README.md +7 -7
  44. package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
  45. package/dist/builtin/workflows/builtin/{chunk-szz1ajz9.js → chunk-42s7sw0b.js} +9 -2
  46. package/dist/builtin/workflows/builtin/{chunk-2dqb5s2q.js → chunk-79fjkcvh.js} +1 -1
  47. package/dist/builtin/workflows/builtin/{chunk-n58a7v26.js → chunk-b0v2xab1.js} +181 -10
  48. package/dist/builtin/workflows/builtin/{chunk-fghhy2a5.js → chunk-ed4jfn5t.js} +23 -5
  49. package/dist/builtin/workflows/builtin/{chunk-h3r2vkzc.js → chunk-hqpe2cyx.js} +60 -21
  50. package/dist/builtin/workflows/builtin/{chunk-hzzn6adg.js → chunk-k3w87x8y.js} +1 -1
  51. package/dist/builtin/workflows/builtin/{chunk-82ha8p41.js → chunk-n8h4yyew.js} +1 -1
  52. package/dist/builtin/workflows/builtin/{chunk-qwzvgxnq.js → chunk-reqr3sr3.js} +1 -1
  53. package/dist/builtin/workflows/builtin/{chunk-c53y8bdh.js → chunk-wgccch41.js} +1 -1
  54. package/dist/builtin/workflows/builtin/{chunk-0x6e303p.js → chunk-zbekjqew.js} +20 -7
  55. package/dist/builtin/workflows/builtin/{chunk-29wrp38a.js → chunk-ze5x3d1r.js} +1 -1
  56. package/dist/builtin/workflows/builtin/classify-and-act.js +2 -2
  57. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +2 -2
  58. package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
  59. package/dist/builtin/workflows/builtin/goal.js +3 -3
  60. package/dist/builtin/workflows/builtin/index.js +11 -11
  61. package/dist/builtin/workflows/builtin/loop-until-done.js +2 -2
  62. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  63. package/dist/builtin/workflows/builtin/ralph.js +3 -3
  64. package/dist/builtin/workflows/builtin/steering-context.js +1 -1
  65. package/dist/builtin/workflows/builtin/tournament.js +2 -2
  66. package/dist/builtin/workflows/package.json +2 -2
  67. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +39 -52
  68. package/dist/builtin/workflows/skills/prompt-engineer/references/advanced_patterns.md +9 -37
  69. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5.md +49 -0
  70. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5_1.md +57 -0
  71. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_4_8.md +57 -0
  72. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_5.md +47 -0
  73. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_sonnet_5.md +57 -0
  74. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_5.md +60 -0
  75. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_6.md +58 -0
  76. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_astra.md +58 -0
  77. package/dist/builtin/workflows/skills/prompt-engineer/references/quality_improvement.md +18 -4
  78. package/dist/builtin/workflows/src/extension/index.bundle.mjs +3194 -737
  79. package/dist/builtin/workflows/src/index.js +899 -436
  80. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +0 -10
  81. package/dist/cli/list-models.d.ts.map +1 -1
  82. package/dist/cli/list-models.js +4 -0
  83. package/dist/cli/list-models.js.map +1 -1
  84. package/dist/client/index.d.ts +1 -2
  85. package/dist/client/index.d.ts.map +1 -1
  86. package/dist/client/index.js +1 -2
  87. package/dist/client/index.js.map +1 -1
  88. package/dist/config.d.ts +0 -9
  89. package/dist/config.d.ts.map +1 -1
  90. package/dist/config.js +0 -45
  91. package/dist/config.js.map +1 -1
  92. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  93. package/dist/core/agent-session-compaction.js +8 -6
  94. package/dist/core/agent-session-compaction.js.map +1 -1
  95. package/dist/core/agent-session-methods.d.ts +1 -0
  96. package/dist/core/agent-session-methods.d.ts.map +1 -1
  97. package/dist/core/agent-session-methods.js.map +1 -1
  98. package/dist/core/agent-session-models.d.ts.map +1 -1
  99. package/dist/core/agent-session-models.js +3 -4
  100. package/dist/core/agent-session-models.js.map +1 -1
  101. package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
  102. package/dist/core/agent-session-queue-pause.js +6 -0
  103. package/dist/core/agent-session-queue-pause.js.map +1 -1
  104. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  105. package/dist/core/agent-session-runtime.js +15 -7
  106. package/dist/core/agent-session-runtime.js.map +1 -1
  107. package/dist/core/agent-session-tool-hooks.js +1 -1
  108. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  109. package/dist/core/agent-session-tree.d.ts.map +1 -1
  110. package/dist/core/agent-session-tree.js +8 -0
  111. package/dist/core/agent-session-tree.js.map +1 -1
  112. package/dist/core/agent-session.d.ts +2 -0
  113. package/dist/core/agent-session.d.ts.map +1 -1
  114. package/dist/core/agent-session.js +2 -0
  115. package/dist/core/agent-session.js.map +1 -1
  116. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  117. package/dist/core/anthropic-thinking-guard.js +71 -5
  118. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  119. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  120. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  121. package/dist/core/compaction/branch-summarization.js +4 -4
  122. package/dist/core/compaction/branch-summarization.js.map +1 -1
  123. package/dist/core/extensions/api-types.d.ts +8 -2
  124. package/dist/core/extensions/api-types.d.ts.map +1 -1
  125. package/dist/core/extensions/api-types.js.map +1 -1
  126. package/dist/core/extensions/context-types.d.ts +12 -0
  127. package/dist/core/extensions/context-types.d.ts.map +1 -1
  128. package/dist/core/extensions/context-types.js.map +1 -1
  129. package/dist/core/extensions/provider-types.d.ts +2 -2
  130. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  131. package/dist/core/extensions/provider-types.js.map +1 -1
  132. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  133. package/dist/core/extensions/runner-shortcuts.js +0 -1
  134. package/dist/core/extensions/runner-shortcuts.js.map +1 -1
  135. package/dist/core/fast-model-routing-transport.d.ts +12 -0
  136. package/dist/core/fast-model-routing-transport.d.ts.map +1 -0
  137. package/dist/core/{codex-fast-mode-transport.js → fast-model-routing-transport.js} +29 -29
  138. package/dist/core/fast-model-routing-transport.js.map +1 -0
  139. package/dist/core/fast-model-routing.d.ts +57 -0
  140. package/dist/core/fast-model-routing.d.ts.map +1 -0
  141. package/dist/core/fast-model-routing.js +201 -0
  142. package/dist/core/fast-model-routing.js.map +1 -0
  143. package/dist/core/fast-model-variants.d.ts +98 -0
  144. package/dist/core/fast-model-variants.d.ts.map +1 -0
  145. package/dist/core/fast-model-variants.js +148 -0
  146. package/dist/core/fast-model-variants.js.map +1 -0
  147. package/dist/core/http-dispatcher.d.ts.map +1 -1
  148. package/dist/core/http-dispatcher.js +4 -2
  149. package/dist/core/http-dispatcher.js.map +1 -1
  150. package/dist/core/keybindings.d.ts +0 -10
  151. package/dist/core/keybindings.d.ts.map +1 -1
  152. package/dist/core/keybindings.js +0 -8
  153. package/dist/core/keybindings.js.map +1 -1
  154. package/dist/core/messages.d.ts +1 -1
  155. package/dist/core/messages.d.ts.map +1 -1
  156. package/dist/core/messages.js.map +1 -1
  157. package/dist/core/model-config.d.ts +24 -4
  158. package/dist/core/model-config.d.ts.map +1 -1
  159. package/dist/core/model-config.js +6 -2
  160. package/dist/core/model-config.js.map +1 -1
  161. package/dist/core/model-resolver-initial.js +1 -1
  162. package/dist/core/model-resolver-initial.js.map +1 -1
  163. package/dist/core/model-runtime-streaming.d.ts +14 -1
  164. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  165. package/dist/core/model-runtime-streaming.js +25 -3
  166. package/dist/core/model-runtime-streaming.js.map +1 -1
  167. package/dist/core/model-runtime.d.ts +39 -2
  168. package/dist/core/model-runtime.d.ts.map +1 -1
  169. package/dist/core/model-runtime.js +91 -7
  170. package/dist/core/model-runtime.js.map +1 -1
  171. package/dist/core/provider-composer-internal.d.ts +1 -1
  172. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  173. package/dist/core/provider-composer-internal.js +8 -2
  174. package/dist/core/provider-composer-internal.js.map +1 -1
  175. package/dist/core/sdk.d.ts.map +1 -1
  176. package/dist/core/sdk.js +21 -18
  177. package/dist/core/sdk.js.map +1 -1
  178. package/dist/core/session-manager-archive.d.ts.map +1 -1
  179. package/dist/core/session-manager-archive.js +25 -2
  180. package/dist/core/session-manager-archive.js.map +1 -1
  181. package/dist/core/settings-manager-core.d.ts +0 -2
  182. package/dist/core/settings-manager-core.d.ts.map +1 -1
  183. package/dist/core/settings-manager-core.js +2 -9
  184. package/dist/core/settings-manager-core.js.map +1 -1
  185. package/dist/core/settings-manager-internals.d.ts +0 -1
  186. package/dist/core/settings-manager-internals.d.ts.map +1 -1
  187. package/dist/core/settings-manager-internals.js.map +1 -1
  188. package/dist/core/settings-manager-ui-accessors.d.ts +0 -8
  189. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  190. package/dist/core/settings-manager-ui-accessors.js +0 -53
  191. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  192. package/dist/core/settings-manager.d.ts +1 -1
  193. package/dist/core/settings-manager.d.ts.map +1 -1
  194. package/dist/core/settings-manager.js.map +1 -1
  195. package/dist/core/settings-types.d.ts +0 -5
  196. package/dist/core/settings-types.d.ts.map +1 -1
  197. package/dist/core/settings-types.js.map +1 -1
  198. package/dist/core/skills.d.ts +1 -1
  199. package/dist/core/skills.d.ts.map +1 -1
  200. package/dist/core/skills.js +4 -2
  201. package/dist/core/skills.js.map +1 -1
  202. package/dist/core/slash-commands.d.ts.map +1 -1
  203. package/dist/core/slash-commands.js +0 -1
  204. package/dist/core/slash-commands.js.map +1 -1
  205. package/dist/core/system-prompt.js +7 -7
  206. package/dist/core/system-prompt.js.map +1 -1
  207. package/dist/core/tools/bash.d.ts.map +1 -1
  208. package/dist/core/tools/bash.js +10 -7
  209. package/dist/core/tools/bash.js.map +1 -1
  210. package/dist/core/tools/edit.d.ts +1 -1
  211. package/dist/core/tools/edit.d.ts.map +1 -1
  212. package/dist/core/tools/edit.js +153 -8
  213. package/dist/core/tools/edit.js.map +1 -1
  214. package/dist/core/tools/find.d.ts.map +1 -1
  215. package/dist/core/tools/find.js +9 -8
  216. package/dist/core/tools/find.js.map +1 -1
  217. package/dist/core/tools/grep.d.ts.map +1 -1
  218. package/dist/core/tools/grep.js +4 -3
  219. package/dist/core/tools/grep.js.map +1 -1
  220. package/dist/core/tools/hashline.d.ts +2 -2
  221. package/dist/core/tools/hashline.d.ts.map +1 -1
  222. package/dist/core/tools/hashline.js +40 -10
  223. package/dist/core/tools/hashline.js.map +1 -1
  224. package/dist/core/tools/ls.d.ts.map +1 -1
  225. package/dist/core/tools/ls.js +2 -2
  226. package/dist/core/tools/ls.js.map +1 -1
  227. package/dist/core/tools/read.d.ts.map +1 -1
  228. package/dist/core/tools/read.js +12 -11
  229. package/dist/core/tools/read.js.map +1 -1
  230. package/dist/core/tools/search.d.ts.map +1 -1
  231. package/dist/core/tools/search.js +20 -19
  232. package/dist/core/tools/search.js.map +1 -1
  233. package/dist/core/tools/write.d.ts.map +1 -1
  234. package/dist/core/tools/write.js +22 -21
  235. package/dist/core/tools/write.js.map +1 -1
  236. package/dist/core/workflow-stage-admission.d.ts +6 -0
  237. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  238. package/dist/core/workflow-stage-admission.js +14 -0
  239. package/dist/core/workflow-stage-admission.js.map +1 -1
  240. package/dist/index-extensions.d.ts +1 -1
  241. package/dist/index-extensions.d.ts.map +1 -1
  242. package/dist/index-extensions.js.map +1 -1
  243. package/dist/index.d.ts +5 -5
  244. package/dist/index.d.ts.map +1 -1
  245. package/dist/index.js +4 -5
  246. package/dist/index.js.map +1 -1
  247. package/dist/modes/interactive/components/atomic-working-status.d.ts +4 -0
  248. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -1
  249. package/dist/modes/interactive/components/atomic-working-status.js +26 -1
  250. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  251. package/dist/modes/interactive/components/custom-editor.d.ts +7 -0
  252. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  253. package/dist/modes/interactive/components/custom-editor.js +43 -0
  254. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  255. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/footer.js +0 -6
  257. package/dist/modes/interactive/components/footer.js.map +1 -1
  258. package/dist/modes/interactive/components/index.d.ts +1 -2
  259. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/index.js +0 -1
  261. package/dist/modes/interactive/components/index.js.map +1 -1
  262. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  263. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  264. package/dist/modes/interactive/components/model-selector.js +12 -25
  265. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  266. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -5
  267. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  268. package/dist/modes/interactive/components/scoped-models-selector.js +16 -34
  269. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  270. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  271. package/dist/modes/interactive/components/settings-selector-items.js +10 -5
  272. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  273. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
  274. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  275. package/dist/modes/interactive/components/settings-selector-submenus.js +10 -7
  276. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  277. package/dist/modes/interactive/components/thinking-selector.d.ts +1 -2
  278. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  279. package/dist/modes/interactive/components/thinking-selector.js +6 -13
  280. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  281. package/dist/modes/interactive/components/transcript-follow-indicator.js +3 -3
  282. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  283. package/dist/modes/interactive/components/trust-selector.js +2 -2
  284. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  285. package/dist/modes/interactive/interactive-agent-events.js +8 -8
  286. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  287. package/dist/modes/interactive/interactive-autocomplete.js +5 -16
  288. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  289. package/dist/modes/interactive/interactive-bash-compact.js +2 -9
  290. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  291. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  292. package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
  293. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  294. package/dist/modes/interactive/interactive-editor-actions.js +2 -2
  295. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  296. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
  297. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  298. package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
  299. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  300. package/dist/modes/interactive/interactive-extension-runtime.js +20 -10
  301. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  302. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -5
  303. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  304. package/dist/modes/interactive/interactive-initial-session-binding.d.ts.map +1 -1
  305. package/dist/modes/interactive/interactive-initial-session-binding.js +3 -0
  306. package/dist/modes/interactive/interactive-initial-session-binding.js.map +1 -1
  307. package/dist/modes/interactive/interactive-input-handling.js +0 -8
  308. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  309. package/dist/modes/interactive/interactive-mode-base.d.ts +5 -1
  310. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  311. package/dist/modes/interactive/interactive-mode-base.js +15 -9
  312. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  313. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -3
  314. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  315. package/dist/modes/interactive/interactive-mode-deps.js +1 -3
  316. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  317. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -12
  318. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  319. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  320. package/dist/modes/interactive/interactive-model-routing.js +10 -13
  321. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  322. package/dist/modes/interactive/interactive-render-chat.js +29 -0
  323. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  324. package/dist/modes/interactive/interactive-selectors.js +2 -32
  325. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  326. package/dist/modes/interactive/interactive-session-routing.js +1 -5
  327. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  328. package/dist/modes/interactive/interactive-session-runtime.js +1 -5
  329. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  330. package/dist/modes/interactive/interactive-slash-commands.js +6 -13
  331. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  332. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  333. package/dist/modes/interactive/interactive-startup.js +19 -13
  334. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  335. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  336. package/dist/modes/interactive/interactive-tui.js +27 -3
  337. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  338. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  339. package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
  340. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  341. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  342. package/dist/modes/interactive-engine/isolated-runtime.js +4 -1
  343. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  344. package/dist/utils/child-process.d.ts.map +1 -1
  345. package/dist/utils/child-process.js +13 -6
  346. package/dist/utils/child-process.js.map +1 -1
  347. package/dist/utils/exif-orientation.d.ts.map +1 -1
  348. package/dist/utils/exif-orientation.js +2 -3
  349. package/dist/utils/exif-orientation.js.map +1 -1
  350. package/dist/utils/tools-manager.d.ts +1 -0
  351. package/dist/utils/tools-manager.d.ts.map +1 -1
  352. package/dist/utils/tools-manager.js +33 -18
  353. package/dist/utils/tools-manager.js.map +1 -1
  354. package/docs/compaction.md +2 -0
  355. package/docs/custom-provider.md +4 -1
  356. package/docs/docs.json +14 -2
  357. package/docs/extensions.md +11 -4
  358. package/docs/intercom.md +33 -8
  359. package/docs/keybindings.md +8 -6
  360. package/docs/models/evals.md +394 -0
  361. package/docs/models/model-selection.md +60 -25
  362. package/docs/models/pareto-efficiency.md +33 -15
  363. package/docs/models.md +80 -1
  364. package/docs/packages.md +2 -2
  365. package/docs/providers.md +44 -20
  366. package/docs/quickstart.md +8 -6
  367. package/docs/rpc.md +3 -3
  368. package/docs/sdk.md +2 -16
  369. package/docs/settings.md +19 -22
  370. package/docs/skills.md +4 -2
  371. package/docs/subagents.md +9 -3
  372. package/docs/terminal-setup.md +15 -0
  373. package/docs/tools/edit.md +373 -0
  374. package/docs/tools.md +3 -7
  375. package/docs/tui.md +2 -1
  376. package/docs/usage.md +3 -5
  377. package/docs/workflows/api-reference.md +1395 -0
  378. package/docs/workflows/authoring.md +678 -0
  379. package/docs/workflows/builtins.md +245 -0
  380. package/docs/workflows/operations.md +811 -0
  381. package/docs/workflows/reliable-design.md +2099 -0
  382. package/docs/workflows/verification.md +62 -0
  383. package/docs/workflows.md +15 -5183
  384. package/npm-shrinkwrap.json +584 -69
  385. package/package.json +7 -7
  386. package/dist/client/remote-session.d.ts +0 -64
  387. package/dist/client/remote-session.d.ts.map +0 -1
  388. package/dist/client/remote-session.js +0 -351
  389. package/dist/client/remote-session.js.map +0 -1
  390. package/dist/client/transcript.d.ts +0 -12
  391. package/dist/client/transcript.d.ts.map +0 -1
  392. package/dist/client/transcript.js +0 -98
  393. package/dist/client/transcript.js.map +0 -1
  394. package/dist/core/codex-fast-mode-transport.d.ts +0 -12
  395. package/dist/core/codex-fast-mode-transport.d.ts.map +0 -1
  396. package/dist/core/codex-fast-mode-transport.js.map +0 -1
  397. package/dist/core/codex-fast-mode.d.ts +0 -53
  398. package/dist/core/codex-fast-mode.d.ts.map +0 -1
  399. package/dist/core/codex-fast-mode.js +0 -249
  400. package/dist/core/codex-fast-mode.js.map +0 -1
  401. package/dist/modes/interactive/components/fast-mode-selector.d.ts +0 -27
  402. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +0 -1
  403. package/dist/modes/interactive/components/fast-mode-selector.js +0 -107
  404. package/dist/modes/interactive/components/fast-mode-selector.js.map +0 -1
  405. package/dist/server/create-harness.d.ts +0 -53
  406. package/dist/server/create-harness.d.ts.map +0 -1
  407. package/dist/server/create-harness.js +0 -360
  408. package/dist/server/create-harness.js.map +0 -1
  409. package/docs/models/artificial-analysis-index.md +0 -83
package/docs/providers.md CHANGED
@@ -49,16 +49,32 @@ Checks refresh expired OAuth credentials by default through the ordinary locked
49
49
 
50
50
  If the Codex backend reports that an OAuth/auth token was invalidated or revoked, retry the request once in case the rejection is transient. If it persists, run `/logout` and select **OpenAI ChatGPT Plus/Pro**, then run `/login`, authenticate that subscription again, and retry the request. Atomic displays these recovery steps with the provider error; it does not automatically delete the stored credential or repeatedly retry a definitive authentication rejection.
51
51
 
52
- ### Fast mode
52
+ GPT-6-Astra is selectable as `openai-codex/gpt-6-astra`. Atomic also derives the canonical `openai-codex/gpt-6-astra-fast` choice. The fast choice sends upstream model `gpt-6-astra` with `service_tier: priority` and keeps the first-party Codex transport identity described below. Codex currently marks Astra as hidden in its bundled catalog, so access can depend on the account, rollout, and minimum client policy even though Atomic lists the model.
53
53
 
54
- Run `/fast` in interactive mode to configure fast mode separately for normal chat and workflow-stage sessions. Atomic supports two provider paths:
54
+ Codex describes Astra Fast as "2x speed, increased usage." OpenAI prices Fast at twice the applicable API token rates. Pick the fast identity only when the latency reduction is worth the higher usage and price.
55
55
 
56
- - OpenAI `openai/*` and `openai-codex/*` models use the priority service tier. A resolved provider alias also qualifies when it uses the shared `openai-codex-responses` transport.
57
- - GitHub Copilot models qualify when the OAuth model catalog for the signed-in account advertises a fast variant. Atomic uses that variant only for the outgoing request, so it does not appear as a separate choice in `/model`. Copilot fast mode requires the account catalog metadata obtained through `/login`; a raw `COPILOT_GITHUB_TOKEN` does not provide that metadata.
56
+ ### Fast models
58
57
 
59
- Main-chat subagents use the chat setting; workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use the workflow setting. Atomic checks each fallback, retry, compaction-planner, and branch-summary request against its effective model. An eligible fallback uses fast mode, while an unsupported model keeps its normal request behavior. The UI appends `fast` after the base model name in the chat footer, workflow stage model labels, and both main-chat and stage-launched subagent results. For an entitled Copilot child, that marker appears exactly when the outgoing request uses the account-advertised `<model-id>-fast` variant; OpenAI children instead use `service_tier: priority`. Fast mode does not apply to Azure OpenAI, OpenRouter, or generic OpenAI-compatible providers. Enable it deliberately for workflows because parallel fan-out can multiply provider usage.
58
+ Fast inference is a model choice, not a mode. Where a provider supports it, Atomic adds a second selectable model whose canonical ID is the base model ID plus `-fast` for example `openai-codex/gpt-5.6-sol-fast`. It appears in `/model`, in `atomic --list-models`, and in workflow model catalogs alongside its normal sibling, and it is persisted and restored by that exact ID. Select it anywhere you name a model, including with a thinking suffix: `openai-codex/gpt-5.6-sol-fast:medium`.
60
59
 
61
- For the shared ChatGPT Codex transport, Atomic sends the fast routing contract only after the final request payload contains `service_tier: priority`: `originator: codex_cli_rs` plus `x-codex-routing-hint: model=<effective-model>;tier=priority` on both HTTP/SSE and WebSocket transports. The same rule covers the stock provider, renamed providers, credential-resolved endpoints, and monitoring proxies that retain `api: "openai-codex-responses"`. WebSocket fallback, reconnect, and HTTP retry attempts reuse that identity; a final model or tier change drops a cached socket before reuse. Requests to the standard OpenAI API send only the tier. When fast mode is off, or a request hook changes the final tier away from `priority`, Atomic keeps the normal `originator: pi` identity and sends no routing hint.
60
+ Two provider paths produce these variants:
61
+
62
+ - Only first-party OpenAI `openai/*` and OpenAI Codex `openai-codex/*` models send the **base** upstream model ID plus the fixed `service_tier: priority`. A renamed provider, proxy, Azure OpenAI, OpenRouter, or generic OpenAI-compatible provider does not receive a synthetic fast variant.
63
+ - GitHub Copilot exposes only the real fast sibling IDs the OAuth model catalog advertises for the signed-in account, and only when the corresponding base model exists in Atomic's Copilot catalog. It sends those suffixed IDs verbatim with no OpenAI service-tier field. Copilot fast models require the account catalog metadata obtained through `/login`; a raw `COPILOT_GITHUB_TOKEN` does not provide that metadata.
64
+
65
+ The selection Atomic records stays the canonical `-fast` identity even when the outbound request carries the base upstream model ID, so sessions, usage rows, fallback attempts, workflow metadata, and subagent labels all keep normal and fast apart. There is no separate `fast` badge anywhere in the UI: the model ID already says it.
66
+
67
+ A fast variant's route owns two request fields: the upstream model ID and the service tier. A `before_provider_request` hook may rewrite anything else, but replacing the payload with a non-object or changing either route-owned field is refused with an error naming the model and the remedy, because a model recorded, persisted, and billed as `-fast` must not go out as a different model or at an ordinary tier. Select the normal sibling instead when a request needs different routing. A model without a fast variant keeps unrestricted hook freedom, and an explicit per-request service tier still applies to it without granting fast-model identity.
68
+
69
+ Atomic does not publish a fast variant for a model whose API is served by an extension's own stream function, including a natively registered provider: it cannot enforce the route through a transport it does not serialize. Such a provider keeps its normal models and its own transport untouched.
70
+
71
+ Fast behavior comes from explicit route metadata attached when the variant is derived — never from the `-fast` suffix. If a provider, a `models.json` custom model, or an extension already defines that exact `-fast` ID, that model wins: it routes exactly as it is declared, Atomic suppresses the derived duplicate, and interactive startup and `--list-models` print a warning naming the model to rename or remove. Fast variants are not derived for Azure OpenAI, OpenRouter, or generic OpenAI-compatible providers.
72
+
73
+ Provider-owned names that end in `-fast` remain ordinary exact IDs. The Vercel AI Gateway currently advertises `openai/gpt-6-astra` and `openai/gpt-6-astra-fast`; Atomic preserves both live-catalog records and their long-context prices without attaching `fastRoute` to the suffixed ID. OpenRouter independently advertises `openai/gpt-6-astra` and `openai/gpt-6-astra-pro`, also with request-wide long-context prices. If either live provider withdraws a record, the next generated catalog omits it rather than keeping a handwritten mirror.
74
+
75
+ For first-party OpenAI Codex models on the shared ChatGPT Codex transport, explicit fast-route metadata — not the final payload tier, a caller flag, or the `-fast` suffix — selects the routing contract: `originator: codex_cli_rs` plus `x-codex-routing-hint: model=<base-upstream-model>;tier=priority` on both HTTP/SSE and WebSocket transports. Credential resolution preserves that identity when it resolves to the first-party ChatGPT endpoint; merely using `api: "openai-codex-responses"` under a renamed provider or proxy does not grant it. WebSocket fallback, reconnect, and HTTP retry attempts reuse the model route's identity, and switching between normal and fast model routes drops a cached socket before reuse. Requests to the standard OpenAI API send only the tier. On a normal model Atomic keeps the normal `originator: pi` identity and sends no routing hint, even if a standalone caller explicitly requests `serviceTier: priority`. The same contract covers standalone `modelRuntime.stream()`/`complete()`/`streamSimple()`/`completeSimple()` requests.
76
+
77
+ Pick fast variants deliberately in workflows: parallel fan-out multiplies provider usage, and priority-tier requests are billed at a higher rate.
62
78
 
63
79
  ### Claude Pro/Max
64
80
 
@@ -77,6 +93,10 @@ Claude Opus 5 is available from the bundled/dynamic Anthropic and Amazon Bedrock
77
93
  - Models come from the bundled `pi-ai` GitHub Copilot catalog; an OAuth credential narrows the list to the ids your account can actually use
78
94
  - If you get "model not supported", enable it in VS Code: Copilot Chat → model selector → select model → "Enable"
79
95
 
96
+ Atomic includes a provisional `github-copilot/gpt-6-astra` entry routed through Copilot's Responses endpoint. Until Copilot publishes metadata, it uses Astra's known text/image capabilities, 272,000 default context, 128,000 output limit, and `low` through `max` reasoning. Zero catalog costs mean Copilot pricing is unknown, not free. Copilot metadata takes precedence when present, and the OAuth account catalog still controls availability. This entry does not guarantee that Copilot has enabled Astra for your account.
97
+
98
+ `github-copilot/gpt-6-astra-fast` appears only when the OAuth account catalog advertises that exact fast ID. It sends `gpt-6-astra-fast` unchanged with no `service_tier`, unlike first-party OpenAI's priority route. A raw `COPILOT_GITHUB_TOKEN` cannot supply that fast entitlement.
99
+
80
100
  #### Endpoint routing for `COPILOT_GITHUB_TOKEN`
81
101
 
82
102
  OAuth logins get their Copilot host from the token GitHub issues during login. Environment-token auth has no such exchange, so Atomic resolves the host itself, highest precedence first:
@@ -162,7 +182,7 @@ Remote pi.dev catalogs persist their ETag and are revalidated with `If-None-Matc
162
182
  | Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | `xiaomi-token-plan-ams` |
163
183
  | Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` | `xiaomi-token-plan-sgp` |
164
184
 
165
- Z.AI and Z.AI Coding Plan (China) default to `glm-5.3` (`zai/glm-5.3` and `zai-coding-cn/glm-5.3`), and both direct providers also expose the multimodal `glm-5.3-flash`. Baseten defaults to its directly selectable `zai-org/GLM-5.3`; OpenRouter exposes `z-ai/glm-5.3`, and both mirrors expose the multimodal Flash variant (`zai-org/GLM-5.3-Flash` on Baseten and `z-ai/glm-5.3-flash` on OpenRouter). Every full and Flash entry supports `low`, `high`, and `max` reasoning, and built-in workflow and subagent chains include all four provider routes at `:high`. Use Baseten's `zai-org/GLM-5.2` when fully disabled reasoning is required. Qwen Token Plan Individual defaults to `qwen3.8-max` and uses the international `QWEN_TOKEN_PLAN_API_KEY` shared with the existing Qwen Token Plan provider.
185
+ Z.AI and Z.AI Coding Plan (China) default to `glm-5.3` (`zai/glm-5.3` and `zai-coding-cn/glm-5.3`), and both direct providers also expose the multimodal `glm-5.3-flash`. Baseten defaults to its directly selectable `zai-org/GLM-5.3` and also exposes `zai-org/GLM-5.3-Fast` and the multimodal `zai-org/GLM-5.3-Flash`; OpenRouter exposes `z-ai/glm-5.3` and `z-ai/glm-5.3-flash`. The full and Flash entries support `low`, `high`, and `max` reasoning; Baseten's Fast entry also supports `off`. Built-in workflow and subagent chains include the Z.AI, Z.AI Coding Plan, Baseten, and OpenRouter routes at `:high`. Use Baseten's `zai-org/GLM-5.2` or `zai-org/GLM-5.3-Fast` when fully disabled reasoning is required. Qwen Token Plan Individual defaults to `qwen3.8-max` and uses the international `QWEN_TOKEN_PLAN_API_KEY` shared with the existing Qwen Token Plan provider. These catalogs follow their upstream providers, so use `--list-models` for the current entries.
166
186
 
167
187
  Reference for environment variables and `auth.json` keys: `findEnvKeys()` / `getEnvApiKey()` in the installed `@bastani/pi-ai` dependency (`node_modules/@bastani/pi-ai/dist/env-api-keys.d.ts`). The private provider map those functions use is in `node_modules/@bastani/pi-ai/dist/env-api-keys.js`; Atomic does not include a separate `packages/ai` source directory in this monorepo.
168
188
 
@@ -286,6 +306,16 @@ Also supports ECS task roles (`AWS_CONTAINER_CREDENTIALS_*`) and IRSA (`AWS_WEB_
286
306
  atomic --provider amazon-bedrock --model us.anthropic.claude-sonnet-4-20250514-v1:0
287
307
  ```
288
308
 
309
+ GPT-6-Astra uses three exact Bedrock IDs:
310
+
311
+ ```text
312
+ openai.gpt-6-astra
313
+ global.openai.gpt-6-astra
314
+ us.openai.gpt-6-astra
315
+ ```
316
+
317
+ Select them under the single `amazon-bedrock` provider. Atomic passes the chosen ID unchanged to Bedrock Converse and sends the selected `low`, `medium`, `high`, `xhigh`, or `max` setting as the OpenAI `reasoning_effort` field. The unprefixed ID is Codex's direct/Mantle entry; `global.` and `us.` are Bedrock Runtime inference profiles. Bedrock does not advertise Astra Fast, so Atomic derives no fast sibling for these models. AWS's public region and pricing pages did not list Astra when this catalog entry was added. Availability can vary by account and region, and Atomic records zero catalog cost until AWS publishes an authoritative rate.
318
+
289
319
  Prompt caching is enabled automatically for Claude models whose ID contains a recognizable model name (base models and system-defined inference profiles). For application inference profiles (whose ARNs don't contain the model name), set `AWS_BEDROCK_FORCE_CACHE=1` to enable cache points:
290
320
 
291
321
  ```bash
@@ -334,7 +364,7 @@ For normal Atomic usage, prefer unified billing or stored BYOK. Inline BYOK requ
334
364
 
335
365
  When Atomic's engine runs inside a Cloudflare Worker in the gateway's own account, requests can route through the [Workers AI binding](https://developers.cloudflare.com/ai-gateway/usage/workers-ai-binding/) (`env.AI`) instead of HTTPS. Binding calls are pre-authenticated in-account, so this path needs **no `CLOUDFLARE_API_KEY` at all**. Atomic re-exports the transport as `createGatewayBindingFetch` from `@bastani/atomic`.
336
366
 
337
- Declare the binding and the endpoint vars (the vars also satisfy the account/gateway resolution the gateway prefix needs):
367
+ Declare the binding and gateway slug. The binding channel carries the account identity, so this route does not need an account ID:
338
368
 
339
369
  ```toml
340
370
  # wrangler.toml
@@ -342,7 +372,6 @@ Declare the binding and the endpoint vars (the vars also satisfy the account/gat
342
372
  binding = "AI"
343
373
 
344
374
  [vars]
345
- CLOUDFLARE_ACCOUNT_ID = "your-account-id"
346
375
  CLOUDFLARE_GATEWAY_ID = "your-gateway-slug" # dash.cloudflare.com → AI → AI Gateway
347
376
  ```
348
377
 
@@ -362,13 +391,12 @@ import { streamSimple as anthropicStreamSimple } from "@bastani/pi-ai/api/anthro
362
391
  // so the snippet needs no `@cloudflare/workers-types` dependency.
363
392
  interface Env {
364
393
  AI: AiGatewayBinding;
365
- CLOUDFLARE_ACCOUNT_ID: string;
366
394
  CLOUDFLARE_GATEWAY_ID: string;
367
395
  }
368
396
 
369
397
  export default {
370
398
  async fetch(request: Request, env: Env): Promise<Response> {
371
- const gatewayPrefix = `https://gateway.ai.cloudflare.com/v1/${env.CLOUDFLARE_ACCOUNT_ID}/${env.CLOUDFLARE_GATEWAY_ID}`;
399
+ const bindingPrefix = `https://workers-binding.ai/ai-gateway/gateways/${env.CLOUDFLARE_GATEWAY_ID}`;
372
400
  const loader = new DefaultResourceLoader({
373
401
  cwd: "/workspace",
374
402
  agentDir: "/workspace/.atomic/agent",
@@ -378,25 +406,21 @@ export default {
378
406
  factory: (pi) => {
379
407
  pi.registerProvider("cloudflare-ai-gateway", {
380
408
  // Placeholder credential: it marks the provider configured and becomes
381
- // `cf-aig-authorization: Bearer cloudflare-gateway-binding`, which the
382
- // transport strips before the binding call. Never sent to the gateway.
409
+ // `cf-aig-authorization: Bearer cloudflare-gateway-binding`. On the plain
410
+ // binding fetch path, Cloudflare's gateway recognizes and strips it.
383
411
  apiKey: CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL,
384
412
  api: "anthropic-messages",
385
413
  streamSimple: (model, context, options) =>
386
414
  anthropicStreamSimple(
387
415
  {
388
416
  ...model,
389
- baseUrl: (model.baseUrl ?? gatewayPrefix)
390
- .replaceAll("{CLOUDFLARE_ACCOUNT_ID}", env.CLOUDFLARE_ACCOUNT_ID)
391
- .replaceAll("{CLOUDFLARE_GATEWAY_ID}", env.CLOUDFLARE_GATEWAY_ID)
417
+ baseUrl: `${bindingPrefix}/anthropic`
392
418
  },
393
419
  context,
394
420
  {
395
421
  ...options,
396
422
  fetch: createGatewayBindingFetch({
397
- binding: env.AI,
398
- gateway: env.CLOUDFLARE_GATEWAY_ID,
399
- baseUrl: gatewayPrefix
423
+ binding: env.AI
400
424
  })
401
425
  }
402
426
  )
@@ -417,7 +441,7 @@ export default {
417
441
  };
418
442
  ```
419
443
 
420
- Every request under the gateway prefix becomes one `env.AI.gateway(id).run({ provider, endpoint, headers, query })` call in the provider's native wire format, so streaming behaves identically to the HTTPS route. The transport serves only its gateway-bound client: URLs outside the prefix, and in-prefix requests the universal endpoint cannot express (non-POST, non-JSON body), reject with a descriptive error rather than being forwarded. Repeat the same pattern with `@bastani/pi-ai/api/openai-completions` (or `openai-responses`) to cover the `/openai` and `/compat` passthrough models of the same provider.
444
+ Current Workers AI bindings expose `fetch()`. `createGatewayBindingFetch` forwards each request untouched to `https://workers-binding.ai/ai-gateway/gateways/{gateway}/{provider}/...`. `baseUrl` and `gateway` options are ignored. Methods, headers (including the auth sentinel), query strings, non-JSON bodies, request streams, and response streams retain native fetch semantics; Cloudflare's gateway recognizes and strips the sentinel. Bindings that only expose `gateway(id).run(...)` are not supported. Repeat the same pattern with `@bastani/pi-ai/api/openai-completions` (or `openai-responses`), setting the model `baseUrl` to `${bindingPrefix}/openai` (or `${bindingPrefix}/compat`) for those provider routes.
421
445
 
422
446
  ### Cloudflare Workers AI
423
447
 
@@ -32,6 +32,8 @@ bun add -g @bastani/atomic
32
32
 
33
33
  Atomic does not require package install scripts. Add `--ignore-scripts` if you want to disable dependency lifecycle scripts during a package install.
34
34
 
35
+ Embedded PostgreSQL is also available without install scripts or a first-run download. npm-compatible package managers select a target-specific `@bastani/atomic-natives` package containing the runtime on Linux musl x64/ARM64 and Windows ARM64; standalone archives contain only their matching runtime. Both forms are offline at runtime. Windows ARM64 support is Windows x64 PostgreSQL under Windows 11's x64 emulation, not native PostgreSQL ARM64, and requires the Microsoft Visual C++ x64 v14 Redistributable. Windows 10 on ARM cannot run this x64 runtime.
36
+
35
37
  ### Release archive
36
38
 
37
39
  Alternatively, install the self-contained release archive, which needs no Node.js or package manager.
@@ -86,7 +88,7 @@ Optional; raises GitHub API limits on shared networks. Curl and GNU Wget keep th
86
88
 
87
89
  ### Which runtime runs your workflows
88
90
 
89
- How you install Atomic decides which runtime hosts it: a package-manager install runs under Node, while the standalone binaries are Bun-compiled and run under Bun. Authored workflows execute inside whichever host is active, so a workflow that reaches for a `Bun.*` global runs only under the standalone binary and fails with `Bun is not defined` under an npm install. Installing Bun separately does not change that — the npm install still runs on Node. Write workflow code against APIs both hosts provide, such as `node:child_process` and `node:fs`; see [Workflows](/workflows) for the rule and worked examples.
91
+ How you install Atomic decides which runtime hosts it: a package-manager install runs under Node, while the standalone binaries are Bun-compiled and run under Bun. Authored workflows execute inside whichever host is active, so a workflow that reaches for a `Bun.*` global runs only under the standalone binary and fails with `Bun is not defined` under an npm install. Installing Bun separately does not change that — the npm install still runs on Node. Write workflow code against APIs both hosts provide, such as `node:child_process` and `node:fs`; see [Custom Workflow Authoring](/workflows/authoring) for the rule and worked examples.
90
92
 
91
93
  ### Alpine and musl Linux archives
92
94
 
@@ -95,7 +97,7 @@ The shell installer detects Alpine and selects `atomic-linux-x64-musl.tar.gz` or
95
97
  Two features work differently on musl:
96
98
 
97
99
  - **Clipboard:** the musl archives omit a clipboard native binding because `@mariozechner/clipboard` 0.3.9 publishes metadata-only musl stubs without a `.node` payload; Atomic uses Linux clipboard commands and OSC52 fallback instead.
98
- - **Durable workflows:** the archives omit the glibc-linked `@embedded-postgres/*` binary packages, so durable workflows on Alpine require external Postgres via `DBOS_SYSTEM_DATABASE_URL` or Docker. Without a durable backend, Atomic uses a loud non-durable in-memory fallback.
100
+ - **Durable workflows:** the archives omit the glibc-linked `@embedded-postgres/*` binary packages and instead carry a checksum-pinned Alpine/musl PostgreSQL 18.6 runtime, so durable workflows provision offline without external Postgres or Docker. If no durable backend can be provisioned at all, Atomic still uses a loud non-durable in-memory fallback.
99
101
 
100
102
  Then start Atomic in the project directory you want it to work on:
101
103
 
@@ -225,7 +227,7 @@ The below-editor `BACKGROUND` panel uses two lines per card at 80 columns and wi
225
227
 
226
228
  Human-in-the-loop prompts (`ctx.ui.input`, `confirm`, `select`, `editor`) surface in the graph viewer, not as chat modals — connect to the run to answer them.
227
229
 
228
- Atomic also posts main-chat lifecycle notices when a run completes, fails, or awaits input. If you answer a workflow prompt in the graph or attached stage chat, the main chat receives a display-only answer summary for audit; it does not wake the model, enter LLM context, or answer later prompts. See [Workflows](/workflows) for the full reference and authoring guide.
230
+ Atomic also posts main-chat lifecycle notices when a run completes, fails, or awaits input. If you answer a workflow prompt in the graph or attached stage chat, the main chat receives a display-only answer summary for audit; it does not wake the model, enter LLM context, or answer later prompts. See [Workflow Operations](/workflows/operations) for the full run-control reference.
229
231
 
230
232
  ### Top skills to invoke directly
231
233
 
@@ -235,7 +237,7 @@ Skills are reusable expert instructions. Trigger one with `/skill:<name>` follow
235
237
  |---|---|---|
236
238
  | `research-codebase` | Scoped research that writes a grounded artifact for one subsystem or question. | `/skill:research-codebase how the rate limiter works in src/middleware/` |
237
239
  | `create-spec` | Turn research into an implementation-ready plan. | `/skill:create-spec from research/docs/2026-03-rate-limit.md` |
238
- | `prompt-engineer` | Create, optimize, evaluate, or troubleshoot prompts for GPT-5.6, Claude Opus 5, and Claude Fable 5. | `/skill:prompt-engineer Draft a sharper repo-research prompt for payment retries end to end.` |
240
+ | `prompt-engineer` | Write, evaluate, migrate, or troubleshoot GPT and Claude prompts using separate model guides. | `/skill:prompt-engineer Draft a sharper repo-research prompt for payment retries end to end.` |
239
241
  | `tdd` | Test-first feature or bug work. | `/skill:tdd` |
240
242
  | `impeccable` | Critique or refine web/native frontend and product UI; includes detector hooks, framework-aware live review, and mount-failure recovery. | `/skill:impeccable` |
241
243
  | `playwright-cli` | Drive a real browser for end-to-end UI checks, screenshots, and reviewable proof videos. | `/skill:playwright-cli` |
@@ -249,7 +251,7 @@ Use `/skill:research-codebase` for a focused subsystem or question. For reposito
249
251
 
250
252
  ### Create your own workflow in natural language
251
253
 
252
- Named workflows may be builtin, project, user, or package supplied. You do not have to hand-write TypeScript to add a new workflow. Describe what you want in plain chat and Atomic will design and write it for you using the [Workflows](/workflows) reference as the source of truth:
254
+ Named workflows may be builtin, project, user, or package supplied. You do not have to hand-write TypeScript to add a new workflow. Describe what you want in plain chat and Atomic will design and write it for you using [Builtins and Dynamic Workflows](/workflows/builtins) and the [Custom Workflow Authoring](/workflows/authoring) reference as its source of truth:
253
255
 
254
256
  ```text
255
257
  Create a reusable Atomic workflow called review-changes. It takes one
@@ -267,7 +269,7 @@ Atomic will:
267
269
  - run `/workflow reload` so the generated workflow is rediscovered and can be launched with `/workflow <name>`,
268
270
  - then report the generated workflow folder so you can inspect the code it wrote, using `Custom workflow created. You can inspect its code at: <workflow-folder-path>` (for example, `.atomic/workflows/`); Atomic does this only for newly created custom workflows, never builtin or pre-existing workflows.
269
271
 
270
- The same plain-chat approach works for editing or hardening an existing workflow. For the full authoring reference, see [Workflows](/workflows), including composition with user-defined workflows and all nine builtins from `@bastani/atomic/workflows/builtin`.
272
+ The same plain-chat approach works for editing or hardening an existing workflow. For the full authoring reference, see [Custom Workflow Authoring](/workflows/authoring), including composition with user-defined workflows and all nine builtins from `@bastani/atomic/workflows/builtin`.
271
273
 
272
274
  ### Default tools and prompts
273
275
 
package/docs/rpc.md CHANGED
@@ -127,7 +127,7 @@ See [set_follow_up_mode](#set_follow_up_mode) for controlling how follow-up mess
127
127
 
128
128
  #### abort
129
129
 
130
- Abort the current agent operation.
130
+ Abort the current operation and wait for the session to become idle before responding.
131
131
 
132
132
  ```json
133
133
  {"type": "abort"}
@@ -243,7 +243,7 @@ Messages are `AgentMessage` objects (see [Types](#types)).
243
243
 
244
244
  #### set_model
245
245
 
246
- Switch to a specific model. Omit `persist` (or set it false) to change only the current session. Set `"persist": true` to also write `defaultProvider`/`defaultModel` in settings, matching Ctrl+S in the interactive `/model` picker.
246
+ Switch to a specific model. Omit `persist` (or set it false) to change only the current session. Set `"persist": true` to also save `defaultProvider`, `defaultModel`, and the effective thinking level in settings, matching an interactive `/model` selection.
247
247
 
248
248
  ```json
249
249
  {"type": "set_model", "provider": "anthropic", "modelId": "claude-sonnet-4-20250514"}
@@ -349,7 +349,7 @@ Response:
349
349
 
350
350
  #### set_thinking_level
351
351
 
352
- Set the reasoning/thinking level for models that support it. Omit `persist` (or set it false) to change only the current session. Set `"persist": true` to also save the startup thinking default, matching Ctrl+S in the interactive `/thinking` picker. When a model is active, that writes the per-model override; otherwise it writes `defaultThinkingLevel`.
352
+ Set the reasoning/thinking level for models that support it. Omit `persist` (or set it false) to change only the current session. Set `"persist": true` to also save `defaultThinkingLevel` and, when a model is active, its per-model override. Interactive `/thinking` choices request persistence automatically.
353
353
 
354
354
  ```json
355
355
  {"type": "set_thinking_level", "level": "high"}
package/docs/sdk.md CHANGED
@@ -78,23 +78,9 @@ Atomic does not require package install scripts. If you want to disable dependen
78
78
 
79
79
  The SDK is included in the main package. No separate SDK package is needed.
80
80
 
81
- ## Experimental remote sessions
81
+ ## Pi client
82
82
 
83
- `@bastani/atomic/client` is an experimental entrypoint for upstream remote protocol sessions. It exports `RemoteSession` plus transcript projection helpers. Pass it a connected `PiClient` from `@earendil-works/pi-client`, then use `RemoteSession.open()` or `RemoteSession.create()` to own one remote session.
84
-
85
- `RemoteSession` and Atomic's isolated interactive engine deliberately **coexist**; neither adapts the other. `RemoteSession` owns the `pi-client`/`pi-protocol` transport, its `SessionLease`, the leased `SessionSnapshot`, and the transcript projection used by an external protocol client. The isolated engine owns Atomic's in-process host facade, child-process JSONL RPC engine, interactive rendering, custom UI, and engine recovery. The client entrypoint has no `atomic client` CLI command and does not start or control the local interactive engine.
86
-
87
- `RemoteSession.sessions` is a durable catalog of `SessionMetadata`. That is enough for listing and selecting stored sessions, but not for Atomic consumers that need runtime phase, model, thinking level, attachment, or lock state. Those consumers need the `SessionSnapshot` from an acquired lease; `RemoteSession.snapshot` exposes the current leased snapshot.
88
-
89
- This boundary is intentional. A bridge would join two different protocols and would risk routing isolated-engine teardown through the host facade's unbounded cooperative abort. Keep the surfaces separate until a future upstream `RemoteSession` change supplies an engine-aware/server contract with teardown semantics that can preserve Atomic's recovery guarantee. The API may change without notice while it remains experimental.
90
-
91
- ## Experimental Harness factory
92
-
93
- The package root also exports `createCodingAgentHarness()` for applications that provide a pi-agent-core `ExecutionEnv`. It creates a Harness with Atomic's six coding tools: `read`, `bash`, `edit`, `write`, `find`, and `search`.
94
-
95
- The factory routes the primary operations for the first five tools through the supplied execution environment, including directory-tree reads. URL reads use the session id for cache scope, fetch through the process network, and do not persist host-local artifacts because the factory has no local session directory. `search` is fully local; read and edit still use local path-variant probes and notebook projection, read also uses local archive, SQLite, and internal-resource selectors, write retains local generated-file, shebang, conflict, and resource helpers, and bash validates its cwd locally and uses Atomic's local temp storage for overflow output.
96
-
97
- The factory requires `ExecutionEnv.renameFile()` and does not add a fallback filesystem implementation.
83
+ `@bastani/atomic/client` re-exports `@earendil-works/pi-client`. Pi 0.85 replaced the experimental `RemoteSession` lease API with its service-addressed Chord client; use the upstream client and agent service APIs for remote sessions.
98
84
 
99
85
  ## Core Concepts
100
86
 
package/docs/settings.md CHANGED
@@ -7,7 +7,7 @@ Atomic uses JSON settings files with project settings overriding global settings
7
7
  | `~/.atomic/agent/settings.json` | Global (all projects) |
8
8
  | `.atomic/settings.json` | Project (current directory) |
9
9
 
10
- Edit directly or use `/settings` for common options. To save startup model defaults interactively, use `/model` and press Ctrl+S on the desired model; to save the startup thinking level, use `/thinking` and press Ctrl+S. Atomic also reads legacy `~/.pi/agent/settings.json` and `.pi/settings.json` as compatibility fallbacks, with `.atomic` paths taking precedence.
10
+ Edit directly or use `/settings` for common options. Choosing a model or thinking level with `/model`, `/thinking`, or their cycling shortcuts automatically saves it as the startup default. Thinking choices also update the active model's saved thinking level. `/scoped-models` saves cycle-list changes automatically. SDK calls, session restoration, and automatic fallbacks do not overwrite these defaults unless persistence is explicitly requested. Atomic also reads legacy `~/.pi/agent/settings.json` and `.pi/settings.json` as compatibility fallbacks, with `.atomic` paths taking precedence.
11
11
 
12
12
  ## Project Trust
13
13
 
@@ -31,13 +31,13 @@ Settings and trust JSON files may start with a UTF-8 BOM, as commonly written by
31
31
 
32
32
  | Setting | Type | Default | Description |
33
33
  |---------|------|---------|-------------|
34
- | `defaultProvider` | string | - | Startup provider (e.g., `"anthropic"`, `"openai"`; saved with Ctrl+S in `/model`, or edited manually) |
35
- | `defaultModel` | string | - | Startup model ID (saved with Ctrl+S in `/model`, or edited manually) |
36
- | `defaultThinkingLevel` | string | - | Startup thinking level (saved with Ctrl+S in `/thinking`, or edited manually): `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`; the active model must support the selected level |
37
- | `modelThinkingLevels` | object | - | Per-model startup thinking levels keyed by `"provider/modelId"`; configure from `/settings` → Default thinking level per model, or edit manually |
34
+ | `defaultProvider` | string | - | Startup provider, saved automatically when you switch models interactively |
35
+ | `defaultModel` | string | - | Startup model ID, saved automatically when you switch models interactively |
36
+ | `defaultThinkingLevel` | string | - | Startup thinking level, saved automatically on interactive model/thinking changes: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`; clamped to the active model's supported levels |
37
+ | `modelThinkingLevels` | object | - | Per-model startup thinking levels keyed by `"provider/modelId"`; updated automatically on interactive model/thinking changes, or configured from `/settings` → Default thinking level per model |
38
38
  | `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
39
39
  | `thinkingBudgets` | object | - | Custom token budgets per thinking level. Anthropic, Google, and Bedrock use these natively. OpenAI-compatible models use them when `compat.thinkingTokenBudgetField` (or `supportsThinkingTokenBudget`) is set. |
40
- | `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses and billed compaction or branch-summary usage |
40
+ | `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses, billed compaction or branch-summary usage, and provider recovery diagnostics such as dropped Anthropic thinking blocks, including when a persisted transcript is resumed |
41
41
  | `fallbackModels` | string[] | - | Ordered fallback models, written as `"provider/model"` with optional model-supported reasoning suffixes such as `:high`, `:xhigh`, or `:max`. Used by main-chat turns and, since compaction fallback rungs, borrowed for compaction planner requests |
42
42
 
43
43
  `defaultProvider` and `defaultModel` form one exact saved selection when both are present. Atomic waits for built-in, configured, and extension provider registration before classifying that provider. If it remains unsupported, Atomic does not silently switch providers: interactive mode stays live with a generic configuration warning; print and JSON modes write the warning to stderr and exit nonzero before prompting (with JSON stdout remaining JSONL-clean); and RPC rejects `prompt` until a successful explicit `set_model` selects an available model or an explicit model cycle returns a different available model. A null or unchanged cycle does not clear the condition. If the provider is supported but its saved model is unknown or lacks configured authentication, normal automatic selection of an available authenticated model remains enabled; the same is true when either field is omitted. Valid extension-provider defaults can resolve after deferred extension loading. Update an unsupported pair or choose a model with `/model`.
@@ -85,26 +85,23 @@ Fallback attempts are visible as model changes in the session transcript and as
85
85
 
86
86
  `enabledModels` is separate: it only controls the interactive Ctrl+P model cycle list and is not used as an implicit fallback chain.
87
87
 
88
- ### Fast mode
88
+ ### Fast models
89
89
 
90
- Use `/fast` in interactive mode to edit these settings. Atomic applies fast mode to supported `openai/*` and `openai-codex/*` providers, provider aliases that use the shared `openai-codex-responses` transport, and GitHub Copilot models whose OAuth account catalog advertises a fast variant. OpenAI requests use the priority service tier. GitHub Copilot requests use the account-supported fast variant without adding the OpenAI service-tier field. Fast mode does not apply to Azure OpenAI, OpenRouter, or generic OpenAI-compatible providers.
90
+ Fast inference is not a setting. Where a provider supports it, Atomic publishes a second selectable model whose canonical ID is the base model ID plus `-fast`, and you choose it the same way you choose any other model in `/model`, as a startup default, in `fallbackModels`, in `enabledModels`, in a workflow stage's `model`, or in a subagent definition. Thinking suffixes work unchanged: `openai-codex/gpt-5.6-sol-fast:medium`.
91
91
 
92
- Chat and workflow-stage scopes are independent. Workflow stages, nested `ctx.workflow(...)` stages, and subagents launched by those stages use `codexFastMode.workflow`; normal-chat subagents use `codexFastMode.chat`. Atomic resolves eligibility again for each fallback model, so the marker and request behavior follow the effective provider and model. When fast mode is active, Atomic shows `fast` after the model name in the chat footer, workflow stage model labels, and subagent results. Enable the workflow scope deliberately for broad fan-outs because each eligible stage can consume fast provider requests. The `codexFastMode` setting name remains for compatibility.
93
-
94
- | Setting | Type | Default | Description |
95
- |---------|------|---------|-------------|
96
- | `codexFastMode.chat` | boolean | `false` | Enable fast mode for supported normal chat models |
97
- | `codexFastMode.workflow` | boolean | `false` | Enable fast mode for supported workflow-stage models |
92
+ Normal and fast IDs stay distinct everywhere, so `fallbackModels` can list both and each attempt is recorded separately:
98
93
 
99
94
  ```json
100
95
  {
101
- "codexFastMode": {
102
- "chat": true,
103
- "workflow": false
104
- }
96
+ "fallbackModels": [
97
+ "openai-codex/gpt-5.6-sol-fast:medium",
98
+ "openai-codex/gpt-5.6-sol:medium"
99
+ ]
105
100
  }
106
101
  ```
107
102
 
103
+ See [Providers](/providers#fast-models) for which providers publish fast variants, what each one sends upstream, and how an exact `-fast` model ID you own yourself takes precedence over the derived one.
104
+
108
105
  ### UI & Display
109
106
 
110
107
  | Setting | Type | Default | Description |
@@ -112,7 +109,7 @@ Chat and workflow-stage scopes are independent. Workflow stages, nested `ctx.wor
112
109
  | `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, a Catppuccin built-in, or custom) |
113
110
  | `fullscreenScrollbar` | string | `"auto"` | Fullscreen transcript scrollbar: `"auto"` shows it temporarily while scrolling, `"always"` reserves the rightmost transcript column and keeps it visible, and `"hidden"` hides it. The thumb can be dragged when shown. |
114
111
  | `fullscreenExitOutput` | string | `"transcript"` | Fullscreen exit output: `"transcript"` prints the final transcript and session resume hint, while `"resume-hint"` restores the terminal's previous screen and prints only the resume hint. Settable from `/settings` |
115
- | `fullscreenCopyOnSelect` | boolean | `true` | Copy fullscreen text selections automatically on mouse release. When `false`, the selection remains highlighted and main-editor Ctrl+X copies it; Ctrl+X falls back to the last assistant message when there is no selection. Settable from `/settings` |
112
+ | `fullscreenCopyOnSelect` | boolean | `true` | Copy fullscreen text selections automatically on mouse release. When `false`, selection only highlights text. Ctrl+X does not copy; `/copy` copies the last assistant message. Settable from `/settings` |
116
113
  | `quietStartup` | boolean | `false` | Hide startup header |
117
114
  | `defaultProjectTrust` | string | `"ask"` | Fallback project trust behavior: `"ask"`, `"always"`, or `"never"`. Global setting only |
118
115
  | `collapseChangelog` | boolean | `false` | Show condensed changelog after updates |
@@ -198,7 +195,7 @@ The model emits numbered line ranges only; Atomic reconstructs retained text mec
198
195
 
199
196
  | Setting | Type | Default | Description |
200
197
  |---------|------|---------|-------------|
201
- | `branchSummary.reserveTokens` | number | `16384` | Tokens reserved for branch summarization |
198
+ | `branchSummary.reserveTokens` | number | `16384` | Tokens reserved when selecting branch history; output is capped at 4096 tokens |
202
199
  | `branchSummary.skipPrompt` | boolean | `false` | Skip "Summarize branch?" prompt on `/tree` navigation (defaults to no summary) |
203
200
 
204
201
  ### Session Summary
@@ -290,7 +287,7 @@ Older settings with a boolean `websockets` value are migrated to `transport`: `t
290
287
  | `terminal.trueColor` | boolean or `"auto"` | `"auto"` | JSON-only truecolor capability override. `true`/`false` overrides detection; `"auto"`, omitted, and invalid values preserve detection. Not shown in `/settings` |
291
288
 
292
289
 
293
- The installed pi-tui 0.84.4 renderer owns the matching environment overrides: `PI_HYPERLINKS=1|0|auto`, `PI_IMAGE_PROTOCOL=kitty|iterm2|none|auto`, and `PI_TRUE_COLOR=1|0|auto`. Explicit JSON booleans/protocols take precedence over those environment values. Use `"auto"` or omit a JSON value to leave environment and terminal detection in control.
290
+ The installed pi-tui 0.85.0 renderer owns the matching environment overrides: `PI_HYPERLINKS=1|0|auto`, `PI_IMAGE_PROTOCOL=kitty|iterm2|none|auto`, and `PI_TRUE_COLOR=1|0|auto`. Explicit JSON booleans/protocols take precedence over those environment values. Use `"auto"` or omit a JSON value to leave environment and terminal detection in control.
294
291
  When `images.autoResize` is enabled, Atomic normalizes images before sending them to the model. Tool-result images are normalized after `tool_result` extension handlers run, so images an extension inserts receive the same limit; if processing fails, Atomic keeps the original image. Set it to `false` to preserve source dimensions.
295
292
 
296
293
  ### Shell
@@ -391,7 +388,7 @@ When multiple sources specify a session directory, precedence is `--session-dir`
391
388
 
392
389
  Mermaid code blocks render as themed Unicode diagrams in interactive transcripts when they fit the available width. `"off"` keeps the Markdown fence, `"final"` renders only finalized responses, and `"streaming"` also renders partial assistant responses. Invalid or too-wide diagrams remain as code, and rendering is display-only: stored messages and model context keep the original Markdown. LaTeX rendering is also display-only and converts supported expressions to terminal-friendly Unicode math; set `markdown.latex` to `false` to keep the source form.
393
390
 
394
- The installed pi-tui 0.84.4 LaTeX renderer also handles whitespace and matrix layouts correctly.
391
+ The installed pi-tui 0.85.0 LaTeX renderer also handles whitespace and matrix layouts correctly.
395
392
 
396
393
  ### Resources
397
394
 
package/docs/skills.md CHANGED
@@ -66,14 +66,16 @@ For project-level Claude Code skills, add to `.atomic/settings.json` (legacy `.p
66
66
 
67
67
  1. At startup, Atomic scans skill locations and extracts names and descriptions
68
68
  2. The system prompt includes available skills in XML format per the [specification](https://agentskills.io/integrate-skills)
69
- 3. When a task matches, the agent uses `read` to load the full SKILL.md (models don't always do this; use prompting or `/skill:name` to force it)
69
+ 3. When a task matches, the agent uses `read`, or `bash` when `read` is unavailable, to load the full SKILL.md (models don't always do this; use prompting or `/skill:name` to force it)
70
70
  4. The agent follows the instructions, using relative paths to reference scripts and assets
71
71
 
72
72
  This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
73
73
 
74
74
  ### Built-in prompt engineering guidance
75
75
 
76
- The bundled `/skill:prompt-engineer` creates, optimizes, evaluates, and troubleshoots prompts for GPT-5.6, Claude Opus 5, and Claude Fable 5. It teaches a delete-first workflow: preserve outcomes, safety, permissions, evidence, output, and stopping contracts while removing repetition, generic self-checks, and obsolete process scaffolding. For autonomous prompts it recommends a compact `Role · Goal · Success criteria · Constraints · Tools · Output · Stop rules` shape, context-dependent tool routing, explicit effort and response-length controls, restrained delegation, grounded progress claims, and documents-first/query-last ordering for long inputs.
76
+ The bundled `/skill:prompt-engineer` creates, optimizes, evaluates, and troubleshoots prompts for GPT and Claude models. Its small routing file points to separate, source-attributed guides for GPT-6 Astra, GPT-5.6, GPT-5.5, Claude Fable 5.1, Claude Fable 5, Claude Opus 5, Claude Opus 4.8, and Claude Sonnet 5. Read the target model's page, or both relevant pages for a migration, without loading every guide. Shared references cover prompt structure, tools, evaluation, and instruction audits; model defaults, effort, verification, and API compatibility stay in their own pages.
77
+
78
+ Astra guidance distills [OpenAI's model guide](https://developers.openai.com/api/docs/guides/latest-model?model=gpt-6-astra) into completion and permission rules, proportionate verification, useful parallel delegation, concise writing, and API migration checks. An instruction audit based on [Eric Provencher's advice](https://x.com/pvncher/status/2095991462416490862) explains how to shorten skill descriptions, use small routing files with optional references, remove obsolete recipes, and define safe local work and stopping points. It preserves binding repository requirements and separates API features from capabilities actually exposed by the host.
77
79
 
78
80
  The skill no longer recommends response prefilling, which returns an error on Claude 4.6 and later, or visible chain-of-thought as a primary technique. Use explicit output instructions, schemas, tools, or post-processing instead of prefilling. Request conclusions, citations, commands, and observed results rather than reconstructed private reasoning; such requests can trigger Claude Fable 5's `reasoning_extraction` safeguard and force a model fallback.
79
81
 
package/docs/subagents.md CHANGED
@@ -71,6 +71,8 @@ Atomic currently bundles these agents from `@bastani/subagents`:
71
71
  | `code-simplifier` | Simplify recently changed code under its behavior-preservation “doors” rubric. | Yes |
72
72
  | `worker` | Implement an approved task or handoff, validate the narrow change, and escalate product, architecture, or scope decisions to its supervisor. | Yes |
73
73
 
74
+ All bundled agents except `debugger` default to `openai-codex/gpt-6-astra:low`; `debugger` uses `openai-codex/gpt-6-astra:xhigh`. Their fallback chains start with GitHub Copilot Astra, OpenAI Astra, Anthropic Fable 5.1, then GitHub Copilot Fable 5.1. Ordinary agents use Astra/Fable 5.1 at `low`, with Sol and GPT-5.5 fallbacks at `medium`, including the locator roles. Debugger keeps Astra and Sol at `xhigh` and Anthropic fallbacks at `high`. Later candidates retain provider-specific reasoning levels and identifiers; OpenRouter mirrors follow the direct-provider candidates. Each agent definition contains its complete ordered chain.
75
+
74
76
  The bundled definitions keep their routing and model frontmatter but use compact, outcome-first bodies: role and goal, success criteria, constraints and tool routes, output contract, and stop rules where applicable. Report-producing agents ground progress claims in tool results and return concise evidence rather than narrating internal reasoning. Read-oriented agents inspect and report. `debugger`, `code-simplifier`, and `worker` can edit files, so give them an explicit scope and validation target. The debugger should finish an in-scope diagnosis by applying and validating the fix, not stop at a proposed patch.
75
77
 
76
78
  ## Review compositions
@@ -126,15 +128,17 @@ A thinking-only aborted final message is skipped so earlier text can still be re
126
128
 
127
129
  Status and interrupt use the live Rust registry and status watch; `list` and `get` remain read-only management actions. No retained foreground-run map, resume generation, session rehydration, or bare-run-ID continuation exists. Terminal delivery remains an in-memory bounded envelope with artifacts and run history persisted once.
128
130
 
129
- Inside workflow stages, completion delivery observes the stage generation boundary. A completion received before the boundary closes is queued through the stage AgentSession and processed before the stage publishes its terminal snapshot. A completion that arrives after close is routed once to the parent/main chat and cannot reopen or append to the completed stage transcript. Explicit post-mortem stage chat is still available separately.
131
+ Inside workflow stages, completion delivery observes the stage generation boundary. A completion admitted before the boundary closes is queued through the stage AgentSession and processed before the stage publishes its terminal snapshot. Closing the boundary cancels still-running stage-owned children, and findings or completion notifications that arrive afterward are suppressed rather than routed to the parent/main chat. Explicit post-mortem stage chat remains available separately for deliberate follow-up.
132
+
133
+ Cancellation does not retract an Intercom send already submitted to the broker. That operation keeps its transport receipt or retry identity, while the closed stage suppresses late incoming messages from its own children. A transport acknowledgement does not mean a late finding was shown in the parent chat.
130
134
 
131
- Live progress and completed results show each step's resolved model, effective reasoning level, and applied fast-mode marker, including after a model fallback; parallel steps keep their metadata separate. Main-chat children use the launching chat's `codexFastMode.chat` setting, while children launched from a workflow stage (including a stage in a nested workflow) use `codexFastMode.workflow`. Eligible OpenAI children and Codex-transport aliases send `service_tier: priority`. A GitHub Copilot child is eligible only when its OAuth account catalog advertises the exact fast sibling; its outgoing request uses the `<model-id>-fast` wire model and its base-model label gets a separate `fast` marker. When the applicable scope is off or fallback selects an ineligible model, the request and label both return to the normal model without that marker.
135
+ Live progress and completed results show each step's resolved model ID and effective reasoning level, including after a model fallback; parallel steps keep their metadata separate. Fast inference is part of the model ID, so an agent pinned to a fast variant renders it directly `codebase-analyzer (openai-codex/gpt-5.6-sol-fast · thinking medium)` with no separate `fast` badge. Select fast inference in an agent definition's `model` and fallback model fields, for example `openai-codex/gpt-5.6-sol-fast:medium`; normal and fast IDs stay distinct fallback candidates and distinct records. See [Providers](/providers#fast-models) for which providers publish fast variants and what each one sends upstream.
132
136
 
133
137
  ## Orchestrator model and group policy
134
138
 
135
139
  Atomic applies the same delegation policy to any parent chat or workflow stage that orchestrates subagents. A named agent uses the model and fallback sequence declared by its agent definition, so the orchestrator normally omits the subagent tool's explicit `model` argument. An override needs either the user's exact model request or a documented task-specific reason recorded before launch; model diversity alone is not enough.
136
140
 
137
- If an agent declares no model or fallback policy, the orchestrator consults the role guidance in [Model selection](/models/model-selection), then calls `workflow({ action: "models" })` when that tool is available. It may pin only a returned `fullId` and may add a thinking suffix only when the model entry lists that level. When the catalog tool is unavailable, the catalog is empty, or no recommended model is present, the child stays unpinned and the orchestrator reports the limit instead of inventing a model or inspecting credentials.
141
+ If an agent declares no model or fallback policy, the orchestrator consults the role guidance in [Model selection](/models/model-selection) and the measured per-evaluation scores in [Evals](/models/evals), then calls `workflow({ action: "models" })` when that tool is available. It may pin only a returned `fullId` and may add a thinking suffix only when the model entry lists that level. When the catalog tool is unavailable, the catalog is empty, or no recommended model is present, the child stays unpinned and the orchestrator reports the limit instead of inventing a model or inspecting credentials.
138
142
 
139
143
  Each workflow invocation automatically receives one stable, non-`"default"` Intercom group as typed admission policy. Its stages and delegated children carry that group across single, parallel, and follow-up work unless a call explicitly overrides `group`. Outside workflows, children inherit the launching session's resolved group. This isolates workflow runs from unrelated runs and the main chat while `contact_supervisor` retains its authorized cross-group route.
140
144
 
@@ -161,6 +165,8 @@ For a collected `worktree: true` burst, every call-level `cwd` must resolve to t
161
165
 
162
166
  Subagent tasks, parallel items, and the top-level call accept a `group` field that sets the spawned child's [Intercom](/intercom) home group, so same-group subagents can intercom each other while staying isolated from other groups. A named string joins that group; `true` auto-generates one shared UUID group per parallel set. Precedence is `explicit subagent group > inherited current-session group > config > "default"`. Workflow stages carry their runtime-owned invocation group, so children launched without `group` automatically join the workflow group; callers do not need to copy or generate an ID. In other sessions, omission inherits that launching session's resolved group. The child group is applied only when the child has Intercom access (the peer `intercom` tool or subagent-only `contact_supervisor` tool); a child without Intercom receives no group. `contact_supervisor` still reaches the supervisor across group boundaries because Atomic requests a broker capability during typed admission and binds the child's registration to the issuing supervisor. Foreground paths use exact child scopes. The lightweight Intercom wrapper lazy-loads the authorization provider; provider failures abort launch, while hosts without a provider omit supervisor metadata instead of exposing a broken channel.
163
167
 
168
+ Detached children remain owned by the workflow stage that launched them. When that stage completes, Atomic cancels every still-running owned child (single or parallel) with the existing parent-cancellation outcome (`status: "interrupted"`, `cause: "abort"`) and suppresses late findings and completion notifications instead of routing them to the parent/main chat. A detached child that finishes while its stage is still live notifies normally, and completing one stage does not affect children owned by other stages or sessions.
169
+
164
170
  When a subagent call or parallel task uses a `cwd`, Atomic validates that working directory before starting the child runtime. Missing or non-directory paths are reported as `cwd` problems instead of lower-level runtime errors.
165
171
 
166
172
  Single-agent calls also accept `reads: string[] | false`. Atomic prepends those files as read context for foreground execution through the same in-process session path. Relative entries resolve against the effective child `cwd` (including a relative top-level `cwd` resolved from the parent); absolute entries are unchanged. Invalid values fail before the child session starts.
@@ -120,6 +120,21 @@ Add to `keybindings.json`:
120
120
  }
121
121
  ```
122
122
 
123
+ ## Zed (Integrated Terminal)
124
+
125
+ Add these key bindings to your Zed `keymap.json`:
126
+
127
+ ```json
128
+ {
129
+ "context": "Terminal",
130
+ "bindings": {
131
+ "shift-enter": ["terminal::SendText", "\u001b[13;2u"],
132
+ "ctrl--": ["terminal::SendText", "\u001b[45;5u"],
133
+ "ctrl-alt-]": ["terminal::SendText", "\u001b[93;7u"]
134
+ }
135
+ }
136
+ ```
137
+
123
138
  ## Windows Terminal
124
139
 
125
140
  Add to `settings.json` (CTRL+SHIFT+, or Settings → Open JSON file) to forward the modified Enter keys Atomic uses: