@bastani/atomic 0.9.24 → 0.9.25-alpha.2

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 (430) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/builtin/intercom/index.bundle.mjs +5 -0
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/CHANGELOG.md +11 -0
  5. package/dist/builtin/mcp/index.bundle.mjs +219 -71
  6. package/dist/builtin/mcp/package.json +6 -2
  7. package/dist/builtin/subagents/package.json +3 -3
  8. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
  9. package/dist/builtin/web-access/index.bundle.mjs +7 -6
  10. package/dist/builtin/web-access/package.json +2 -2
  11. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  12. package/dist/builtin/workflows/package.json +2 -2
  13. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  14. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +66 -0
  15. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1 -0
  16. package/dist/cli/startup-ui.d.ts +3 -4
  17. package/dist/cli/startup-ui.d.ts.map +1 -1
  18. package/dist/cli/startup-ui.js +3 -4
  19. package/dist/cli/startup-ui.js.map +1 -1
  20. package/dist/config.d.ts +3 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +17 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/core/agent-session-events.d.ts.map +1 -1
  25. package/dist/core/agent-session-events.js +5 -0
  26. package/dist/core/agent-session-events.js.map +1 -1
  27. package/dist/core/agent-session-export.d.ts.map +1 -1
  28. package/dist/core/agent-session-export.js +3 -0
  29. package/dist/core/agent-session-export.js.map +1 -1
  30. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  31. package/dist/core/agent-session-extension-bindings.js +4 -0
  32. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  33. package/dist/core/agent-session-methods.d.ts +2 -1
  34. package/dist/core/agent-session-methods.d.ts.map +1 -1
  35. package/dist/core/agent-session-methods.js.map +1 -1
  36. package/dist/core/agent-session-nested-tools.d.ts +10 -0
  37. package/dist/core/agent-session-nested-tools.d.ts.map +1 -0
  38. package/dist/core/agent-session-nested-tools.js +76 -0
  39. package/dist/core/agent-session-nested-tools.js.map +1 -0
  40. package/dist/core/agent-session-runtime-auth.js +3 -1
  41. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  42. package/dist/core/agent-session-state.d.ts +2 -0
  43. package/dist/core/agent-session-state.d.ts.map +1 -1
  44. package/dist/core/agent-session-state.js +11 -11
  45. package/dist/core/agent-session-state.js.map +1 -1
  46. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  47. package/dist/core/agent-session-tool-hooks.js +18 -3
  48. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  49. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  50. package/dist/core/agent-session-tool-registry.js +15 -3
  51. package/dist/core/agent-session-tool-registry.js.map +1 -1
  52. package/dist/core/agent-session-types.d.ts +6 -2
  53. package/dist/core/agent-session-types.d.ts.map +1 -1
  54. package/dist/core/agent-session-types.js.map +1 -1
  55. package/dist/core/builtin-resource-loader.d.ts.map +1 -1
  56. package/dist/core/builtin-resource-loader.js +13 -1
  57. package/dist/core/builtin-resource-loader.js.map +1 -1
  58. package/dist/core/compaction/utils.d.ts +1 -1
  59. package/dist/core/compaction/utils.d.ts.map +1 -1
  60. package/dist/core/compaction/utils.js +18 -18
  61. package/dist/core/compaction/utils.js.map +1 -1
  62. package/dist/core/execution-model-router.d.ts.map +1 -1
  63. package/dist/core/execution-model-router.js +24 -8
  64. package/dist/core/execution-model-router.js.map +1 -1
  65. package/dist/core/export-html/template.js +12 -0
  66. package/dist/core/extensions/agent-events.d.ts +3 -0
  67. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  68. package/dist/core/extensions/agent-events.js.map +1 -1
  69. package/dist/core/extensions/api-types.d.ts +2 -0
  70. package/dist/core/extensions/api-types.d.ts.map +1 -1
  71. package/dist/core/extensions/api-types.js.map +1 -1
  72. package/dist/core/extensions/context-types.d.ts +9 -0
  73. package/dist/core/extensions/context-types.d.ts.map +1 -1
  74. package/dist/core/extensions/context-types.js.map +1 -1
  75. package/dist/core/extensions/event-results.d.ts +3 -0
  76. package/dist/core/extensions/event-results.d.ts.map +1 -1
  77. package/dist/core/extensions/event-results.js.map +1 -1
  78. package/dist/core/extensions/index.d.ts +2 -0
  79. package/dist/core/extensions/index.d.ts.map +1 -1
  80. package/dist/core/extensions/index.js.map +1 -1
  81. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  82. package/dist/core/extensions/loader-api.js +4 -0
  83. package/dist/core/extensions/loader-api.js.map +1 -1
  84. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  85. package/dist/core/extensions/loader-core.js +3 -5
  86. package/dist/core/extensions/loader-core.js.map +1 -1
  87. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  88. package/dist/core/extensions/loader-host-modules.js +7 -1
  89. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  90. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  91. package/dist/core/extensions/loader-runtime.js +3 -0
  92. package/dist/core/extensions/loader-runtime.js.map +1 -1
  93. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  94. package/dist/core/extensions/loader-virtual-modules.js +4 -0
  95. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  96. package/dist/core/extensions/provider-types.d.ts +2 -0
  97. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  98. package/dist/core/extensions/provider-types.js.map +1 -1
  99. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  100. package/dist/core/extensions/runner-events.js +16 -1
  101. package/dist/core/extensions/runner-events.js.map +1 -1
  102. package/dist/core/extensions/runner.d.ts +5 -0
  103. package/dist/core/extensions/runner.d.ts.map +1 -1
  104. package/dist/core/extensions/runner.js +34 -0
  105. package/dist/core/extensions/runner.js.map +1 -1
  106. package/dist/core/extensions/runtime-types.d.ts +5 -0
  107. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  108. package/dist/core/extensions/runtime-types.js.map +1 -1
  109. package/dist/core/extensions/tool-events.d.ts +4 -0
  110. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  111. package/dist/core/extensions/tool-events.js.map +1 -1
  112. package/dist/core/extensions/tool-types.d.ts +34 -3
  113. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  114. package/dist/core/extensions/tool-types.js.map +1 -1
  115. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  116. package/dist/core/extensions/wrapper.js +14 -2
  117. package/dist/core/extensions/wrapper.js.map +1 -1
  118. package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
  119. package/dist/core/fast-model-routing-transport.js +2 -1
  120. package/dist/core/fast-model-routing-transport.js.map +1 -1
  121. package/dist/core/fast-model-routing.d.ts +1 -2
  122. package/dist/core/fast-model-routing.d.ts.map +1 -1
  123. package/dist/core/fast-model-routing.js +13 -11
  124. package/dist/core/fast-model-routing.js.map +1 -1
  125. package/dist/core/fast-model-variants.d.ts +4 -1
  126. package/dist/core/fast-model-variants.d.ts.map +1 -1
  127. package/dist/core/fast-model-variants.js +42 -17
  128. package/dist/core/fast-model-variants.js.map +1 -1
  129. package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
  130. package/dist/core/mandatory-resource-loader.js +9 -0
  131. package/dist/core/mandatory-resource-loader.js.map +1 -1
  132. package/dist/core/model-registry.d.ts +4 -1
  133. package/dist/core/model-registry.d.ts.map +1 -1
  134. package/dist/core/model-registry.js +9 -0
  135. package/dist/core/model-registry.js.map +1 -1
  136. package/dist/core/model-resolver-defaults.js +1 -1
  137. package/dist/core/model-resolver-defaults.js.map +1 -1
  138. package/dist/core/model-routing-candidates.d.ts +4 -0
  139. package/dist/core/model-routing-candidates.d.ts.map +1 -1
  140. package/dist/core/model-routing-candidates.js +8 -3
  141. package/dist/core/model-routing-candidates.js.map +1 -1
  142. package/dist/core/model-routing-evals.d.ts.map +1 -1
  143. package/dist/core/model-routing-evals.js +4 -5
  144. package/dist/core/model-routing-evals.js.map +1 -1
  145. package/dist/core/model-runtime.d.ts +3 -2
  146. package/dist/core/model-runtime.d.ts.map +1 -1
  147. package/dist/core/model-runtime.js +19 -25
  148. package/dist/core/model-runtime.js.map +1 -1
  149. package/dist/core/nested-tool-calls.d.ts +64 -0
  150. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  151. package/dist/core/nested-tool-calls.js +132 -0
  152. package/dist/core/nested-tool-calls.js.map +1 -0
  153. package/dist/core/oauth-provider-metadata.js +1 -1
  154. package/dist/core/oauth-provider-metadata.js.map +1 -1
  155. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  156. package/dist/core/package-manager-resolver.js +21 -3
  157. package/dist/core/package-manager-resolver.js.map +1 -1
  158. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  159. package/dist/core/package-manager-resource-accumulator.js +2 -0
  160. package/dist/core/package-manager-resource-accumulator.js.map +1 -1
  161. package/dist/core/package-manager-types.d.ts +2 -0
  162. package/dist/core/package-manager-types.d.ts.map +1 -1
  163. package/dist/core/package-manager-types.js.map +1 -1
  164. package/dist/core/package-manager.d.ts.map +1 -1
  165. package/dist/core/package-manager.js +1 -0
  166. package/dist/core/package-manager.js.map +1 -1
  167. package/dist/core/resource-loader-core.d.ts.map +1 -1
  168. package/dist/core/resource-loader-core.js +12 -6
  169. package/dist/core/resource-loader-core.js.map +1 -1
  170. package/dist/core/resource-loader-extensions.d.ts +1 -0
  171. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  172. package/dist/core/resource-loader-extensions.js +64 -4
  173. package/dist/core/resource-loader-extensions.js.map +1 -1
  174. package/dist/core/resource-loader-paths.d.ts.map +1 -1
  175. package/dist/core/resource-loader-paths.js +2 -1
  176. package/dist/core/resource-loader-paths.js.map +1 -1
  177. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  178. package/dist/core/resource-loader-reload.js +5 -4
  179. package/dist/core/resource-loader-reload.js.map +1 -1
  180. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  181. package/dist/core/resource-loader-source-info.js +7 -5
  182. package/dist/core/resource-loader-source-info.js.map +1 -1
  183. package/dist/core/resource-loader-types.d.ts +4 -0
  184. package/dist/core/resource-loader-types.d.ts.map +1 -1
  185. package/dist/core/resource-loader-types.js.map +1 -1
  186. package/dist/core/sdk-types.d.ts +1 -1
  187. package/dist/core/sdk-types.js.map +1 -1
  188. package/dist/core/session-manager-core.d.ts +2 -0
  189. package/dist/core/session-manager-core.d.ts.map +1 -1
  190. package/dist/core/session-manager-core.js +5 -1
  191. package/dist/core/session-manager-core.js.map +1 -1
  192. package/dist/core/session-manager-entries.d.ts +1 -1
  193. package/dist/core/session-manager-entries.d.ts.map +1 -1
  194. package/dist/core/session-manager-entries.js.map +1 -1
  195. package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
  196. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  197. package/dist/core/settings-manager-basic-accessors.js +27 -1
  198. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  199. package/dist/core/settings-manager-core.d.ts +2 -0
  200. package/dist/core/settings-manager-core.d.ts.map +1 -1
  201. package/dist/core/settings-manager-core.js +4 -0
  202. package/dist/core/settings-manager-core.js.map +1 -1
  203. package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
  204. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  205. package/dist/core/settings-manager-ui-accessors.js +13 -0
  206. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  207. package/dist/core/settings-manager.d.ts +1 -1
  208. package/dist/core/settings-manager.d.ts.map +1 -1
  209. package/dist/core/settings-manager.js.map +1 -1
  210. package/dist/core/settings-merge.d.ts +1 -0
  211. package/dist/core/settings-merge.d.ts.map +1 -1
  212. package/dist/core/settings-merge.js +30 -1
  213. package/dist/core/settings-merge.js.map +1 -1
  214. package/dist/core/settings-types.d.ts +8 -1
  215. package/dist/core/settings-types.d.ts.map +1 -1
  216. package/dist/core/settings-types.js.map +1 -1
  217. package/dist/core/source-info.d.ts +3 -0
  218. package/dist/core/source-info.d.ts.map +1 -1
  219. package/dist/core/source-info.js +11 -0
  220. package/dist/core/source-info.js.map +1 -1
  221. package/dist/core/structured-output/index.d.ts.map +1 -1
  222. package/dist/core/structured-output/index.js +3 -1
  223. package/dist/core/structured-output/index.js.map +1 -1
  224. package/dist/core/tool-loadout.d.ts +6 -0
  225. package/dist/core/tool-loadout.d.ts.map +1 -0
  226. package/dist/core/tool-loadout.js +63 -0
  227. package/dist/core/tool-loadout.js.map +1 -0
  228. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  229. package/dist/core/tools/ask-user-question/ask-user-question.js +1 -0
  230. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  231. package/dist/core/tools/bash.d.ts.map +1 -1
  232. package/dist/core/tools/bash.js +31 -11
  233. package/dist/core/tools/bash.js.map +1 -1
  234. package/dist/core/tools/output-accumulator.d.ts +4 -0
  235. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  236. package/dist/core/tools/output-accumulator.js +32 -0
  237. package/dist/core/tools/output-accumulator.js.map +1 -1
  238. package/dist/core/tools/powershell.d.ts +27 -21
  239. package/dist/core/tools/powershell.d.ts.map +1 -1
  240. package/dist/core/tools/render-utils.d.ts +4 -0
  241. package/dist/core/tools/render-utils.d.ts.map +1 -1
  242. package/dist/core/tools/render-utils.js +19 -0
  243. package/dist/core/tools/render-utils.js.map +1 -1
  244. package/dist/core/tools/tool-concurrency.d.ts +1 -1
  245. package/dist/core/tools/tool-concurrency.d.ts.map +1 -1
  246. package/dist/core/tools/tool-concurrency.js +28 -3
  247. package/dist/core/tools/tool-concurrency.js.map +1 -1
  248. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  249. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  250. package/dist/core/tools/tool-definition-wrapper.js +4 -1
  251. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  252. package/dist/core/usage-totals.d.ts +2 -0
  253. package/dist/core/usage-totals.d.ts.map +1 -1
  254. package/dist/core/usage-totals.js +23 -0
  255. package/dist/core/usage-totals.js.map +1 -1
  256. package/dist/extensions/codemode/execute.d.ts +10 -0
  257. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  258. package/dist/extensions/codemode/execute.js +313 -0
  259. package/dist/extensions/codemode/execute.js.map +1 -0
  260. package/dist/extensions/codemode/index.d.ts +11 -0
  261. package/dist/extensions/codemode/index.d.ts.map +1 -0
  262. package/dist/extensions/codemode/index.js +14 -0
  263. package/dist/extensions/codemode/index.js.map +1 -0
  264. package/dist/extensions/codemode/renderer.d.ts +4 -0
  265. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  266. package/dist/extensions/codemode/renderer.js +78 -0
  267. package/dist/extensions/codemode/renderer.js.map +1 -0
  268. package/dist/extensions/codemode/tool.d.ts +51 -0
  269. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  270. package/dist/extensions/codemode/tool.js +134 -0
  271. package/dist/extensions/codemode/tool.js.map +1 -0
  272. package/dist/extensions/codemode/worker.d.ts +2 -0
  273. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  274. package/dist/extensions/codemode/worker.js +2 -0
  275. package/dist/extensions/codemode/worker.js.map +1 -0
  276. package/dist/extensions/index.d.ts.map +1 -1
  277. package/dist/extensions/index.js +5 -1
  278. package/dist/extensions/index.js.map +1 -1
  279. package/dist/extensions/llama/provider.d.ts.map +1 -1
  280. package/dist/extensions/llama/provider.js +31 -10
  281. package/dist/extensions/llama/provider.js.map +1 -1
  282. package/dist/extensions/tool-search/index.d.ts +5 -0
  283. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  284. package/dist/extensions/tool-search/index.js +6 -0
  285. package/dist/extensions/tool-search/index.js.map +1 -0
  286. package/dist/extensions/tool-search/tool.d.ts +41 -0
  287. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  288. package/dist/extensions/tool-search/tool.js +161 -0
  289. package/dist/extensions/tool-search/tool.js.map +1 -0
  290. package/dist/index.d.ts +7 -0
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +5 -0
  293. package/dist/index.js.map +1 -1
  294. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
  295. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  296. package/dist/modes/interactive/components/chat-message-renderer.js +2 -0
  297. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  298. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  299. package/dist/modes/interactive/components/config-selector-list.js +9 -1
  300. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  301. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
  302. package/dist/modes/interactive/components/config-selector-project-scope.js +4 -1
  303. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  304. package/dist/modes/interactive/components/first-time-setup.d.ts +2 -2
  305. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  306. package/dist/modes/interactive/components/first-time-setup.js +1 -0
  307. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  308. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  309. package/dist/modes/interactive/components/footer.js +42 -7
  310. package/dist/modes/interactive/components/footer.js.map +1 -1
  311. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  312. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  313. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  314. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  315. package/dist/modes/interactive/components/settings-selector-items.js +13 -0
  316. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  317. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  318. package/dist/modes/interactive/components/settings-selector-submenus.js +3 -1
  319. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  320. package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
  321. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  322. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  323. package/dist/modes/interactive/components/themed-text.d.ts +8 -0
  324. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  325. package/dist/modes/interactive/components/themed-text.js +14 -0
  326. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  327. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  328. package/dist/modes/interactive/components/tool-execution.js +5 -3
  329. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  330. package/dist/modes/interactive/interactive-agent-events.js +2 -0
  331. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  332. package/dist/modes/interactive/interactive-mode-base.d.ts +2 -1
  333. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  334. package/dist/modes/interactive/interactive-mode-base.js +5 -0
  335. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  336. package/dist/modes/interactive/interactive-resource-rendering.js +7 -10
  337. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  338. package/dist/modes/interactive/interactive-selectors.js +5 -0
  339. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  340. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  341. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  342. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  343. package/dist/modes/interactive/interactive-startup.js +8 -3
  344. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  345. package/dist/modes/interactive/interactive-tui.d.ts +2 -1
  346. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  347. package/dist/modes/interactive/interactive-tui.js +1 -0
  348. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  349. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  350. package/dist/modes/interactive/theme/color-utils.js +3 -0
  351. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  352. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
  353. package/dist/modes/interactive/theme/export-colors.js +4 -1
  354. package/dist/modes/interactive/theme/export-colors.js.map +1 -1
  355. package/dist/modes/interactive/theme/system-theme.d.ts +23 -0
  356. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  357. package/dist/modes/interactive/theme/system-theme.js +462 -0
  358. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  359. package/dist/modes/interactive/theme/terminal-colors.d.ts +10 -0
  360. package/dist/modes/interactive/theme/terminal-colors.d.ts.map +1 -0
  361. package/dist/modes/interactive/theme/terminal-colors.js +36 -0
  362. package/dist/modes/interactive/theme/terminal-colors.js.map +1 -0
  363. package/dist/modes/interactive/theme/terminal-detection.d.ts +4 -6
  364. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  365. package/dist/modes/interactive/theme/terminal-detection.js +12 -46
  366. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
  367. package/dist/modes/interactive/theme/theme-class.d.ts +1 -0
  368. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  369. package/dist/modes/interactive/theme/theme-class.js +2 -2
  370. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  371. package/dist/modes/interactive/theme/theme-controller.d.ts +16 -8
  372. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  373. package/dist/modes/interactive/theme/theme-controller.js +106 -64
  374. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  375. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  376. package/dist/modes/interactive/theme/theme-loading.js +23 -2
  377. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  378. package/dist/modes/interactive/theme/theme-schema.js +1 -1
  379. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  380. package/dist/modes/interactive/theme/theme-schema.json +2 -2
  381. package/dist/modes/interactive/theme/theme.d.ts +2 -0
  382. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  383. package/dist/modes/interactive/theme/theme.js +2 -0
  384. package/dist/modes/interactive/theme/theme.js.map +1 -1
  385. package/dist/modes/interactive-engine/engine-session-stats.d.ts +26 -0
  386. package/dist/modes/interactive-engine/engine-session-stats.d.ts.map +1 -0
  387. package/dist/modes/interactive-engine/engine-session-stats.js +71 -0
  388. package/dist/modes/interactive-engine/engine-session-stats.js.map +1 -0
  389. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
  390. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  391. package/dist/modes/interactive-engine/extension-ui-bridge.js +4 -0
  392. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  393. package/dist/modes/interactive-engine/isolated-runtime.d.ts +3 -0
  394. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  395. package/dist/modes/interactive-engine/isolated-runtime.js +27 -5
  396. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  397. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  398. package/dist/modes/rpc/rpc-provider-auth.js +3 -1
  399. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  400. package/dist/package-manager-cli.d.ts.map +1 -1
  401. package/dist/package-manager-cli.js +8 -2
  402. package/dist/package-manager-cli.js.map +1 -1
  403. package/dist/utils/paths.d.ts.map +1 -1
  404. package/dist/utils/paths.js +2 -1
  405. package/dist/utils/paths.js.map +1 -1
  406. package/dist/utils/shell.d.ts +1 -3
  407. package/dist/utils/shell.d.ts.map +1 -1
  408. package/dist/utils/shell.js +3 -30
  409. package/dist/utils/shell.js.map +1 -1
  410. package/docs/extensions/api-reference.md +5 -1
  411. package/docs/extensions/authoring.md +31 -1
  412. package/docs/extensions/events.md +3 -1
  413. package/docs/extensions.md +14 -0
  414. package/docs/models/evals.md +45 -2
  415. package/docs/models/reference.md +33 -2
  416. package/docs/models.md +1 -0
  417. package/docs/packages.md +2 -0
  418. package/docs/providers.md +34 -7
  419. package/docs/reference/cli.md +4 -0
  420. package/docs/rpc/protocol.md +10 -0
  421. package/docs/sdk/reference.md +11 -1
  422. package/docs/sdk/structured-decisions.md +4 -2
  423. package/docs/session-format.md +5 -0
  424. package/docs/settings.md +19 -5
  425. package/docs/skills.md +1 -1
  426. package/docs/themes/reference.md +2 -1
  427. package/docs/themes.md +4 -2
  428. package/docs/tools.md +39 -0
  429. package/npm-shrinkwrap.json +115 -113
  430. package/package.json +12 -9
@@ -603,6 +603,8 @@ Before `tool_call` runs, Atomic waits for previously emitted Agent events to fin
603
603
 
604
604
  In the default parallel tool execution mode, sibling tool calls from the same assistant message are preflighted sequentially, then executed concurrently. `tool_call` is not guaranteed to see sibling tool results from that same assistant message in `ctx.sessionManager`.
605
605
 
606
+ Nested calls made inside a tool through `ctx.executeTool()` run the same hooks and execution events. Their events include `parentToolCallId`; use that field to distinguish them from model-issued calls. Nested calls do not add standalone transcript messages. See [nested tools](/extensions/authoring#structured-results-and-nested-tools).
607
+
606
608
  `event.input` is mutable. Mutate it in place to patch tool arguments before execution.
607
609
 
608
610
  Behavior guarantees:
@@ -678,7 +680,7 @@ In parallel tool mode, `tool_result` and `tool_execution_end` may interleave in
678
680
  `tool_result` handlers chain like middleware:
679
681
  - Handlers run in extension load order
680
682
  - Each handler sees the latest result after previous handler changes
681
- - Handlers can return partial patches (`content`, `details`, or `isError`); omitted fields keep their current values
683
+ - Handlers can return partial patches (`content`, `structuredContent`, `details`, `usage`, or `isError`); omitted fields keep their current values, except replacing `content` without replacing `structuredContent` drops the structured value
682
684
 
683
685
  After all handlers finish, Atomic normalizes image blocks returned by the tool or inserted by a handler according to `images.autoResize` before saving the result to history. If image processing fails, the original image remains in the result.
684
686
 
@@ -215,6 +215,20 @@ Additional paths via `settings.json`:
215
215
  }
216
216
  ```
217
217
 
218
+ ### Built-in extension resources
219
+
220
+ Atomic exposes `builtin:llama.cpp`, `builtin:codemode`, and `builtin:tool-search` as extension resources, not filesystem paths. Disable one in the `extensions` setting, for example:
221
+
222
+ ```json
223
+ { "extensions": ["-builtin:codemode"] }
224
+ ```
225
+
226
+ A trusted project `"+builtin:codemode"` entry can override a global exclusion. Explicit loading also works with `--no-extensions`: `atomic --no-extensions -e builtin:codemode --tools read,codemode`. Loading the resource registers the tool; activating it still requires `defaultTools` or `--tools` because codemode and tool search are inactive by default.
227
+
228
+ Codemode and tool search are replaceable: an extension that registers the same tool, command, or flag can take over. Atomic reports the replacement and names its owner. Disable that extension through `atomic config` when you want the built-in implementation instead.
229
+
230
+ These symbolic names do not replace Atomic's bundled MCP, workflow, subagent, web-access, or Intercom resources. There are no corresponding `builtin:mcp`, `builtin:workflows`, or `builtin:subagents` aliases. Keep using the existing package controls and MCP configuration.
231
+
218
232
  To share extensions via npm or git as Atomic packages, see [Atomic packages](/packages).
219
233
 
220
234
  ## Available Imports
@@ -11,7 +11,7 @@ Key:
11
11
 
12
12
  - `∅`=source null/absent, not zero.
13
13
  - Values are rounded to 1 decimal from the public [model leaderboard](https://artificialanalysis.ai/leaderboards/models) and [Intelligence Index](https://artificialanalysis.ai/evaluations/artificial-analysis-intelligence-index) pages. Each row includes the model's release date.
14
- - `PDF`, `MLCR`, `Open`, `Ent`, and `Analyst` are published only for models shown on the default Intelligence Index chart; other rows are `∅` for those columns.
14
+ - `PDF`, `MLCR`, `Open`, `Ent`, and `Analyst` are generally published only for models shown on the default Intelligence Index chart. The GPT-6.1 Sol model page publishes `PDF` at all five efforts and `MLCR` at max; other missing values remain `∅`.
15
15
  - A chart label may show the nearest integer of `idx`.
16
16
  - `idx`: Intelligence Index points, aggregate performance across knowledge, reasoning, coding, and agentic work.
17
17
  - `Brief`: AA-Briefcase, long-horizon business knowledge work producing spreadsheets, presentations, and memos; normalized Elo `clamp((Elo-500)/2000)*100`.
@@ -46,10 +46,17 @@ Key:
46
46
 
47
47
  ## Artificial Analysis Intelligence Index v4.3.2
48
48
 
49
- Table: the 673 models on the Artificial Analysis leaderboard as of 2026-09-25, including models with no published scores, plus 5 Claude Sonnet 5.5 rows accessed 2026-09-28.
49
+ Table: the 673 models on the Artificial Analysis leaderboard as of 2026-09-25, including models with no published scores, plus 5 Claude Sonnet 5.5 rows accessed 2026-09-28 and 5 GPT-6.1 Sol rows accessed 2026-09-29.
50
+
51
+ GPT-6.1 Sol's five effort rows were accessed 2026-09-29 from the [leaderboard](https://artificialanalysis.ai/leaderboards/models) and [model page](https://artificialanalysis.ai/models/gpt-6-1-sol). The release date is not an evaluation run date; run dates are unpublished. AA's [methodology](https://artificialanalysis.ai/methodology/intelligence-benchmarking) uses mini-swe-agent for TB4, all 66 tasks, pass@1 averaged over three repeats, a 500-step cap and no context compaction.
50
52
 
51
53
  | slug | Model | Release date | idx | Brief | Gn | Auto | TB4 | Sci | HLE | PDF | Crit | OA | ONH | LCR | Omni | GPQA | TB21 | TBh | IF | MMMU | tau2 | tauB | Analyst | ITB | Apex | AIME | LCB | Harvey | MLCR | Open | Ent |
52
54
  | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
55
+ | gpt-6-1-sol | GPT-6.1 Sol (max) | 2026-09-29 | 51.8 | 53.2 | 53.8 | 64.9 | 56.1 | 54.2 | 52.9 | 31 | 31.7 | 62.1 | 45.7 | 83 | 41.5 | ∅ | ∅ | ∅ | ∅ | 86 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | 33.9 | ∅ | ∅ |
56
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol (xhigh) | 2026-09-29 | 51 | 50.3 | 50.5 | 66.6 | 54 | 55.7 | 52.6 | 31.8 | 31.7 | 60.8 | 49.1 | 79.7 | 40.9 | ∅ | ∅ | ∅ | ∅ | 85.1 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ |
57
+ | gpt-6-1-sol-high | GPT-6.1 Sol (high) | 2026-09-29 | 50.2 | 48.6 | 49.3 | 64.5 | 51.5 | 55.8 | 51.4 | 32 | 30 | 60.8 | 50.6 | 82.3 | 41.5 | ∅ | ∅ | ∅ | ∅ | 84.9 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ |
58
+ | gpt-6-1-sol-medium | GPT-6.1 Sol (medium) | 2026-09-29 | 47.8 | 43.2 | 46.6 | 62.6 | 48 | 53.2 | 49.9 | 30 | 27.7 | 60.4 | 48.4 | 83.3 | 40 | ∅ | ∅ | ∅ | ∅ | 83.9 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ |
59
+ | gpt-6-1-sol-low | GPT-6.1 Sol (low) | 2026-09-29 | 42.1 | 30.9 | 39.9 | 52.6 | 30.8 | 53.2 | 47.4 | 27 | 24.9 | 58.9 | 48.4 | 84 | 37.6 | ∅ | ∅ | ∅ | ∅ | 83.1 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ |
53
60
  | claude-opus-5-5 | Claude Opus 5.5 (Adaptive Reasoning, Max Effort, Default Fallback) | 2026-09-22 | 57.6 | 66.1 | 67.3 | 69.5 | 59.6 | 66.9 | 61.4 | 26.2 | 31.7 | 66.2 | 41.4 | 84.7 | 46.4 | ∅ | ∅ | ∅ | ∅ | 87.7 | ∅ | ∅ | ∅ | 38.2 | ∅ | ∅ | ∅ | 91.2 | 66.7 | ∅ | ∅ |
54
61
  | claude-opus-5-5-xhigh | Claude Opus 5.5 (Adaptive Reasoning, Xhigh Effort, Default Fallback) | 2026-09-22 | 56 | 64 | 66 | 65 | 59.6 | 65 | 57.5 | 26.6 | 31.7 | 65.4 | 34.3 | 84.7 | 42.7 | ∅ | ∅ | ∅ | ∅ | 86.6 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | 91.2 | ∅ | ∅ | ∅ |
55
62
  | claude-sonnet-5-5 | Claude Sonnet 5.5 (Adaptive Reasoning, Max Effort, Default Fallback) | 2026-09-28 | 56 | 65.5 | 67.2 | 71.3 | 63.6 | 61 | 55 | 25.8 | 31.4 | 54 | 53 | 82.7 | 32.3 | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | ∅ | 93.1 | 75 | ∅ | ∅ |
@@ -771,6 +778,8 @@ Key:
771
778
 
772
779
  Source: [FrontierCode leaderboard](https://cognition.com/frontiercode) by Cognition, current revision, accessed 2026-09-28. Each row is the model's best-scoring reasoning effort, which is the same on both sets.
773
780
 
781
+ GPT-6.1 Sol was added 2026-09-29 and accessed that day in the [primary JSON](https://cognition.com/data/frontiercode-leaderboard/data.json). Its best score on both sets is medium effort under the `codex` harness. The Codex revision and run date are unpublished. Main averages 11,365 output tokens and 14.42 minutes per rollout.
782
+
774
783
  Key:
775
784
 
776
785
  - FrontierCode: mergeability of agent-written pull requests on tasks built by open-source maintainers, graded by rubrics, unit tests and other verifiers for correctness, test quality, scope discipline, style and codebase conventions. Runs that consult solution-bearing sources such as the original pull request score zero.
@@ -787,6 +796,7 @@ Key:
787
796
  | claude-sonnet-5-5 | Sonnet 5.5 | xhigh | 52.1 | 57.2 | 64.4 | 69.9 | 0.0 | $1.59 |
788
797
  | claude-fable-5-1 | Fable 5.1 | medium | 50.9 | 55.5 | 63.6 | 68.8 | 0.0 | $3.28 |
789
798
  | swe-2 | SWE-2 | max | 50.0 | 55.5 | 62.5 | 68.4 | ∅ | $1.18 |
799
+ | gpt-6-1-sol | GPT-6.1 Sol | medium | 50.2 | 55.8 | 60.4 | 66.5 | 0.4 | $0.36 |
790
800
  | gpt-6-sol | GPT-6 Sol | max | 49.3 | 54.3 | 60.7 | 66.3 | 0.0 | $2.07 |
791
801
  | grok-4-6 | Grok 4.6 | high | 48.0 | 53.1 | 61.3 | 67.0 | 0.7 | $2.88 |
792
802
  | grok-4-7 | Grok 4.7 | high | 47.6 | 53.1 | 59.4 | 65.2 | 1.3 | $6.65 |
@@ -828,8 +838,15 @@ Scores published by model vendors and benchmark owners for recent frontier model
828
838
 
829
839
  Sources: OpenAI = [GPT-6 Astra announcement](https://openai.com/index/gpt-6-astra/); Anthropic = [Claude Fable 5.1 announcement](https://www.anthropic.com/claude-fable-and-mythos-5-1), [Claude Sonnet 5.5 announcement](https://www.anthropic.com/claude-sonnet-5-5) and [system card](https://www.anthropic.com/claude-sonnet-5-5-system-card); Google = [Gemini 3.8 Flash model card](https://deepmind.google/models/model-cards/gemini-3-8-flash/); ARC Prize = [arcprize.org results](https://arcprize.org/results/google-gemini-3-8-flash); TB-Science leaderboard = [terminal-bench-science.ai](https://www.terminal-bench-science.ai/); Zapier = [AutomationBench leaderboard](https://zapier.com/benchmarks).
830
840
 
841
+ GPT-6.1 Sol rows were accessed 2026-09-29. OpenAI = [Sol 6.1 announcement](https://openai.com/index/introducing-gpt-6-1-sol/) and [system card](https://deploymentsafety.openai.com/gpt-6-1-sol); Artificial Analysis = [Sol 6.1 model page](https://artificialanalysis.ai/models/gpt-6-1-sol) and [methodology](https://artificialanalysis.ai/methodology/intelligence-benchmarking). OpenAI's external benchmark results are vendor-reported, not benchmark-owner leaderboard rows. They ran in its research environment or API; individual harness revisions and run dates are not stated. AA's TBSci result is independent evidence from its own harness.
842
+
843
+ No matching Sol 6.1 row was retrieved from the DeepSWE, TB-Science, Zapier, Surge GDP.pdf, OSWorld or ARC Prize owner leaderboards on that date. These gaps are unknown, not zero. No `minimal` effort is measured here, and no Fast or Ultrafast tier has a separate benchmark or latency measurement for any model. Atomic's derived `-fast` and `-ultrafast` routes use explicit base-model metadata to reuse capability evidence, not a separately measured tier score or latency result.
844
+
831
845
  Key:
832
846
 
847
+ - `DSWE`: DeepSWE v1.1, vendor-reported software-engineering results; distinct from Datacurve's independent table above.
848
+ - `GDPpdf`: GDP.pdf All-pass, satisfying every criterion on professional-document tasks.
849
+
833
850
  - `ALE`: [Agents' Last Exam](https://agents-last-exam.org/), long-horizon professional tasks in real software, from financial modeling to engineering and media production.
834
851
  - `OSW2`, `OSW2s`: [OSWorld 2.0](https://osworld-v2.xlang.ai/), long-horizon computer-use workflows operating desktop applications through the screen; partial credit and strict all-pass scoring.
835
852
  - `SSP`: [ScreenSpot-Pro](https://gui-agent.github.io/grounding-leaderboard/), locating GUI elements in high-resolution professional application screenshots.
@@ -847,6 +864,32 @@ Key:
847
864
 
848
865
  | slug | Model | Benchmark | Score | Setting | Source |
849
866
  | --- | --- | --- | ---: | --- | --- |
867
+ | gpt-6-1-sol | GPT-6.1 Sol | TBSci | 58.1 | max effort; v0.1.0, 70 tasks, mini-swe-agent, pass@1 over 3 repeats, 1000-step cap | Artificial Analysis |
868
+ | gpt-6-1-sol-low | GPT-6.1 Sol | DSWE | 64.4 | low effort; v1.1; OpenAI-reported, harness not stated | OpenAI |
869
+ | gpt-6-1-sol-medium | GPT-6.1 Sol | DSWE | 73 | medium effort; v1.1; OpenAI-reported, harness not stated | OpenAI |
870
+ | gpt-6-1-sol-high | GPT-6.1 Sol | DSWE | 75.2 | high effort; v1.1; OpenAI-reported, harness not stated | OpenAI |
871
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol | DSWE | 71.9 | xhigh effort; v1.1; OpenAI-reported, harness not stated | OpenAI |
872
+ | gpt-6-1-sol | GPT-6.1 Sol | DSWE | 71.9 | max effort; v1.1; OpenAI-reported, harness not stated | OpenAI |
873
+ | gpt-6-1-sol-low | GPT-6.1 Sol | GDPpdf | 27 | low effort; All-pass; OpenAI-reported, harness not stated | OpenAI |
874
+ | gpt-6-1-sol-medium | GPT-6.1 Sol | GDPpdf | 30 | medium effort; All-pass; OpenAI-reported, harness not stated | OpenAI |
875
+ | gpt-6-1-sol-high | GPT-6.1 Sol | GDPpdf | 32 | high effort; All-pass; OpenAI-reported, harness not stated | OpenAI |
876
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol | GDPpdf | 31.8 | xhigh effort; All-pass; OpenAI-reported, harness not stated | OpenAI |
877
+ | gpt-6-1-sol | GPT-6.1 Sol | GDPpdf | 31 | max effort; All-pass; OpenAI-reported, harness not stated | OpenAI |
878
+ | gpt-6-1-sol-low | GPT-6.1 Sol | ABench | 24.7 | low effort; v1.0.6, strict state-based scoring; OpenAI-reported, harness not stated | OpenAI |
879
+ | gpt-6-1-sol-medium | GPT-6.1 Sol | ABench | 31.7 | medium effort; v1.0.6, strict state-based scoring; OpenAI-reported, harness not stated | OpenAI |
880
+ | gpt-6-1-sol-high | GPT-6.1 Sol | ABench | 33.2 | high effort; v1.0.6, strict state-based scoring; OpenAI-reported, harness not stated | OpenAI |
881
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol | ABench | 35.5 | xhigh effort; v1.0.6, strict state-based scoring; OpenAI-reported, harness not stated | OpenAI |
882
+ | gpt-6-1-sol | GPT-6.1 Sol | ABench | 36.1 | max effort; v1.0.6, strict state-based scoring; OpenAI-reported, harness not stated | OpenAI |
883
+ | gpt-6-1-sol-low | GPT-6.1 Sol | OSW2 | 59 | low effort; v2026.08.08 offline set, partial reward; OpenAI-reported, harness not stated | OpenAI |
884
+ | gpt-6-1-sol-medium | GPT-6.1 Sol | OSW2 | 66.8 | medium effort; v2026.08.08 offline set, partial reward; OpenAI-reported, harness not stated | OpenAI |
885
+ | gpt-6-1-sol-high | GPT-6.1 Sol | OSW2 | 69.6 | high effort; v2026.08.08 offline set, partial reward; OpenAI-reported, harness not stated | OpenAI |
886
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol | OSW2 | 69.4 | xhigh effort; v2026.08.08 offline set, partial reward; OpenAI-reported, harness not stated | OpenAI |
887
+ | gpt-6-1-sol | GPT-6.1 Sol | OSW2 | 71.4 | max effort; v2026.08.08 offline set, partial reward; OpenAI-reported, harness not stated | OpenAI |
888
+ | gpt-6-1-sol-low | GPT-6.1 Sol | TBSci | 43.7 | low effort; v0.1; OpenAI-reported, harness not stated | OpenAI |
889
+ | gpt-6-1-sol-medium | GPT-6.1 Sol | TBSci | 47.6 | medium effort; v0.1; OpenAI-reported, harness not stated | OpenAI |
890
+ | gpt-6-1-sol-high | GPT-6.1 Sol | TBSci | 51.1 | high effort; v0.1; OpenAI-reported, harness not stated | OpenAI |
891
+ | gpt-6-1-sol-xhigh | GPT-6.1 Sol | TBSci | 53.7 | xhigh effort; v0.1; OpenAI-reported, harness not stated | OpenAI |
892
+ | gpt-6-1-sol | GPT-6.1 Sol | TBSci | 57 | max effort; v0.1; OpenAI-reported, harness not stated | OpenAI |
850
893
  | gpt-6-astra | GPT-6 Astra | ALE | 59.3 | max effort | OpenAI |
851
894
  | gpt-6-astra | GPT-6 Astra | OSW2 | 72.6 | offline set v2026.08.08, partial, official settings | OpenAI |
852
895
  | gpt-6-astra | GPT-6 Astra | SSP | 92.7 | no tools; Fable 5 value is Mythos 5 | OpenAI |
@@ -123,7 +123,21 @@ The built-in OpenAI and Codex entries use a 272,000-token default input/context
123
123
  | Up to 272,000 | $10 | $1 | $12.50 | $50 |
124
124
  | Above 272,000 | $20 | $2 | $25 | $75 |
125
125
 
126
- Rates are per million tokens. `openai/gpt-6-astra-fast` and `openai-codex/gpt-6-astra-fast` are derived canonical choices that keep these base catalog rates; the OpenAI adapters apply Fast's 2x multiplier at request time. The Codex fast choice sends upstream ID `gpt-6-astra` with `service_tier: priority` while Atomic records `gpt-6-astra-fast`.
126
+ Rates are per million tokens. `openai/gpt-6-astra-fast` and `openai-codex/gpt-6-astra-fast` are derived canonical choices. They send upstream ID `gpt-6-astra` with `service_tier: priority` while Atomic records `gpt-6-astra-fast`. Usage is priced at OpenAI's published Fast rates when Fast serves the request:
127
+
128
+ | Aggregate input | Input | Cached input | Cache write | Output |
129
+ | --- | ---: | ---: | ---: | ---: |
130
+ | Up to 272,000 | $20 | $2 | $25 | $100 |
131
+ | Above 272,000 | $40 | $4 | $50 | $150 |
132
+
133
+ `openai/gpt-6-astra-ultrafast` and `openai-codex/gpt-6-astra-ultrafast` send the same upstream ID with `service_tier: "ultrafast"` and are priced at OpenAI's published Ultrafast rates, six times Standard:
134
+
135
+ | Aggregate input | Input | Cached input | Cache write | Output |
136
+ | --- | ---: | ---: | ---: | ---: |
137
+ | Up to 272,000 | $60 | $6 | $75 | $300 |
138
+ | Above 272,000 | $120 | $12 | $150 | $450 |
139
+
140
+ GPT-6 Astra is the only model with an Ultrafast choice. Auto routing requires an Ultrafast choice's exact ID in `modelConstraints.allowedModels`. Base-model evaluations are reused through explicit route metadata, with no separate Ultrafast benchmark or latency score. See [Fast and Ultrafast tiers](/providers#fast-and-ultrafast-tiers).
127
141
 
128
142
  Amazon Bedrock exposes `openai.gpt-6-astra`, `global.openai.gpt-6-astra`, and `us.openai.gpt-6-astra` through the `amazon-bedrock` provider. These entries keep the same 272,000 input and 128,000 output limits, text and image input, and five reasoning levels; Atomic sends the selected effort as Bedrock's OpenAI `reasoning_effort` field. They do not get Fast or OpenAI tool-search metadata. Atomic sends each Bedrock ID unchanged and records all four price fields as zero because AWS had not published Astra pricing. Zero means unknown here, not free.
129
143
 
@@ -131,6 +145,23 @@ Atomic does not synthesize Azure OpenAI Astra entries. Live-provider catalogs re
131
145
 
132
146
  On OpenAI Responses, Astra uses the newer prompt-cache payload. `cacheRetention: "long"` sends `prompt_cache_options.ttl: "30m"` instead of the legacy `prompt_cache_retention: "24h"`; `none` sends explicit mode without a cache key, and `short` sends neither cache option. Earlier Responses models keep the 24-hour field for long retention.
133
147
 
148
+ <a id="gpt-6-1-sol" />
149
+
150
+ ### GPT-6.1 Sol
151
+
152
+ Select `openai/gpt-6.1-sol` with API-key authentication or `openai-codex/gpt-6.1-sol` with a ChatGPT subscription. Both accept text and images and support `low`, `medium`, `high`, `xhigh`, and `max`. Reasoning cannot be turned off. Codex also offers a `minimal` UI alias that sends `low`, not a separate API effort.
153
+
154
+ Atomic uses a 272,000-token default context and a 128,000-token output limit. Increase `contextWindow` through a model override only when you intend to use the larger API window and its whole-request long-context prices:
155
+
156
+ | Aggregate input | Input | Cached input | Cache write | Output |
157
+ | --- | ---: | ---: | ---: | ---: |
158
+ | Up to 272,000 | $2 | $0.10 | $2.50 | $10 |
159
+ | Above 272,000 | $4 | $0.20 | $5 | $15 |
160
+
161
+ Rates are per million tokens. Derived `openai/gpt-6.1-sol-fast` and `openai-codex/gpt-6.1-sol-fast` choices send the same upstream model with priority routing. Fast costs twice the applicable rates; do not pre-multiply catalog costs. [Published evaluations](/models/evals) describe base-model results and measured efforts, not separate Fast measurements.
162
+
163
+ GPT-6.1 Sol supports Standard and Fast only; it has no `-ultrafast` choice. See [provider tier caveats](/providers#fast-models).
164
+
134
165
  ### Image Input Limits
135
166
 
136
167
  Use `inputLimits.images.resize` to configure how new images are encoded before they enter conversation history:
@@ -407,7 +438,7 @@ These rules apply when you write `models.json`:
407
438
  - **Your exact ID wins.** If a provider, a custom model in `models`, or an extension already defines that exact `<base>-fast` ID, Atomic keeps yours untouched, does not derive a duplicate, and prints a warning naming the model to rename or remove if you wanted the derived variant instead. A model you define is an ordinary model: the `-fast` suffix alone never gives it fast routing behavior.
408
439
  - **`modelOverrides` applies to derived variants.** A derived entry is a real catalog model, so `modelOverrides["gpt-5.6-sol-fast"]` customizes it exactly like any other model, and its routing metadata survives the override. Overriding the *base* model still flows through to the derived entry by inheritance; a fast-specific override wins over that inherited value.
409
440
 
410
- A derived variant inherits the base model's `cost`. The provider adapter applies the fast multiplier at request time (OpenAI's priority tier, Anthropic's fast-mode speed), so do not pre-multiply cost in an override.
441
+ A derived variant inherits the base model's `cost`. The provider adapter applies the fast multiplier at request time (OpenAI's priority tier, Anthropic's fast-mode speed), so do not pre-multiply cost in an override. An Ultrafast variant is the exception: it carries the provider's published Ultrafast rates as its own `cost`, which a `modelOverrides` entry keyed on its ID replaces.
411
442
 
412
443
  ## Anthropic Messages Compatibility
413
444
 
package/docs/models.md CHANGED
@@ -29,6 +29,7 @@ For choosing which model to use rather than how to declare one, see [Model selec
29
29
  - [Provider Configuration](/models/reference#provider-configuration)
30
30
  - [Model Configuration](/models/reference#model-configuration)
31
31
  - [GPT-6-Astra Built-in Models](/models/reference#gpt-6-astra-built-in-models)
32
+ - [GPT-6.1 Sol](/models/reference#gpt-6-1-sol)
32
33
  - [Request-wide Cost Tiers](/models/reference#request-wide-cost-tiers)
33
34
  - [Overriding Built-in Providers](/models/reference#overriding-built-in-providers)
34
35
  - [Per-model Overrides](/models/reference#per-model-overrides)
package/docs/packages.md CHANGED
@@ -169,6 +169,8 @@ Moved to [Package reference](/packages/reference#package-filtering).
169
169
 
170
170
  Use `atomic config` to enable or disable extensions, skills, prompt templates, and themes. It starts in global settings (`~/.atomic/agent/settings.json`); press Tab to switch global/project scope. Use `atomic config -l` to start in project overrides (`.atomic/settings.json`) with inherited global resources dimmed. Workflow package filters can be configured with `workflows` patterns.
171
171
 
172
+ For Atomic's inline llama.cpp, codemode, and tool-search extensions, use the symbolic `builtin:<name>` resources in extension settings rather than an installation path. See [built-in extension resources](/extensions#built-in-extension-resources) for exclusions, explicit loading, and replacement diagnostics. These are not npm/git package sources.
173
+
172
174
  When an uncaught exception or a fatal runtime error ends an interactive session, Atomic checks the crash stack for frames that belong to loaded extensions and names the matching extension packages or files in the exit message, suggesting `atomic config` to disable them or `atomic -ne` to confirm the crash reproduces without optional extensions.
173
175
 
174
176
  ## Scope and Deduplication
package/docs/providers.md CHANGED
@@ -57,6 +57,12 @@ Run `atomic auth check --provider <provider>` to verify the effective credential
57
57
 
58
58
  Checks refresh expired OAuth credentials by default through the ordinary locked `auth.json` path. Use `--no-refresh` for a read-only probe: it neither creates nor mutates an auth file and reads Atomic's primary `~/.atomic/agent/auth.json` plus legacy `~/.pi/agent/auth.json` paths with the normal precedence. Readiness output contains no credential material unless you explicitly ask for `--credentials` with `--provider` or an exact `--model` target. That opt-in treats stdout or the JSON `credentials` field as a credential export; it refuses an OAuth token with less than 30 minutes of life when `--no-refresh` prevents a refresh.
59
59
 
60
+ ### OpenAI API or ChatGPT sign-in
61
+
62
+ Run `/login openai`, then choose **API key** or **Sign in with ChatGPT**. The ChatGPT option authenticates the `openai` provider for requests to OpenAI's Responses API; it is separate from `/login openai-codex`, which uses the Codex backend. Choose the provider/model identity appropriate to the account and endpoint you intend to use.
63
+
64
+ Complete the browser callback, or paste the full callback URL into the login dialog on a remote machine. If your browser cannot reach `127.0.0.1:1455`, copy the final URL from its address bar, including `code`, `state`, and `client_id`, and paste it into Atomic. Atomic creates a global device identity on first use of this sign-in; project settings do not override it. A saved subscription credential does not verify model entitlement or remaining usage.
65
+
60
66
  ### OpenAI Codex
61
67
 
62
68
  - Requires ChatGPT Plus or Pro subscription
@@ -64,11 +70,28 @@ Checks refresh expired OAuth credentials by default through the ordinary locked
64
70
 
65
71
  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.
66
72
 
67
- 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.
73
+ 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. Access can still depend on the account, rollout, and minimum client policy even though Atomic lists the model.
74
+
75
+ GPT-6 Sol and GPT-6 Luna are selectable as `openai/gpt-6-sol`, `openai/gpt-6-luna`, `openai-codex/gpt-6-sol`, and `openai-codex/gpt-6-luna`. Each has a derived `-fast` choice, such as `openai-codex/gpt-6-sol-fast`, that sends the base upstream model with `service_tier: priority`. Copilot's bundled catalog and account policy determine which Sol models are available; fast siblings require an exact advertised ID.
76
+
77
+ GPT-6.1 Sol is selectable as `openai/gpt-6.1-sol` and `openai-codex/gpt-6.1-sol`, with derived `-fast` siblings. For example, `atomic --model openai-codex/gpt-6.1-sol-fast:high` selects priority routing at high effort. Sol 6.1 supports `low`, `medium`, `high`, `xhigh`, and `max`; Codex's `minimal` UI alias also sends `low`. `off` is unavailable. See [Sol 6.1 limits and pricing](/models/reference#gpt-6-1-sol).
78
+
79
+ GPT-6.1 Sol supports Standard and Fast only, so it has no `-ultrafast` choice yet.
80
+
81
+ #### Fast and Ultrafast tiers
68
82
 
69
- GPT-6 Sol and GPT-6 Luna are selectable as `openai/gpt-6-sol`, `openai/gpt-6-luna`, `openai-codex/gpt-6-sol`, and `openai-codex/gpt-6-luna`. Each has a derived `-fast` choice, such as `openai-codex/gpt-6-sol-fast`, that sends the base upstream model with `service_tier: priority`. GitHub Copilot does not list Sol or Luna yet, so there is no Copilot fast choice for them.
83
+ Atomic offers a tier only for the models that advertise it, following Codex's per-model catalog and OpenAI's published API pricing:
70
84
 
71
- 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.
85
+ - **Fast** (`service_tier: priority`): every Codex model except `gpt-5.3-codex-spark`, and the `openai/*` models listed on OpenAI's [Fast pricing](https://developers.openai.com/api/docs/pricing) tab. For example, `openai/gpt-5-nano`, `openai/gpt-5-pro`, and `openai/o1` have no `-fast` choice.
86
+ - **Ultrafast** (`service_tier: "ultrafast"`): GPT-6 Astra only, as `openai/gpt-6-astra-ultrafast` and `openai-codex/gpt-6-astra-ultrafast`. For example, `atomic --model openai-codex/gpt-6-astra-ultrafast:high`. Each keeps the base upstream model, following [Codex's tier-switching protocol](https://github.com/openai/codex/blob/17a9df60e420b58e3edc55efb1bb052e39492bbc/codex-rs/core/tests/suite/agent_websocket.rs#L518-L605). GPT-5.6 Sol Ultrafast is an API-only limited preview without published rates, so Atomic does not offer it.
87
+
88
+ Listing a choice does not establish that your account has access. Ultrafast needs an eligible plan: Pro $500 or an eligible Enterprise or Edu workspace with ChatGPT sign-in. With an API key, it is available at low default rate limits. If the provider rejects a Fast or Ultrafast choice you selected, the request fails; Atomic does not retry it at a lower tier.
89
+
90
+ A tier the model does not advertise is left out of the request, which then runs at standard processing instead of failing. `flex` is always passed through. With Codex, an explicit `default` sends no tier, as in Codex. With the OpenAI API, `default` is sent as requested.
91
+
92
+ Usage is priced at the tier that served the request, using OpenAI's published per-model rates. Fast is usually twice Standard but varies by model: GPT-5.5 is 2.5x and GPT-4o is 1.7x. GPT-6 Astra Ultrafast is six times Standard: $60 input, $6 cached input, $75 cache write, and $300 output per million tokens up to 272,000 input tokens, and $120, $12, $150, and $450 above that ([OpenAI API pricing](https://developers.openai.com/api/docs/pricing?latest-pricing=ultrafast)). If OpenAI serves a Fast request at Standard, the usage is priced at Standard. With ChatGPT sign-in, [Codex](https://developers.openai.com/codex/speed) counts Fast against included limits at 2.5x and Astra Ultrafast at 8x, and bills purchased credits at 2x and 6x. Atomic's displayed cost uses the API rates.
93
+
94
+ Auto routing excludes Ultrafast unless `modelConstraints.allowedModels` explicitly lists its exact provider/model ID. When explicitly allowed, it uses base-model benchmark evidence without an additional latency bonus. Normal and Fast choices keep their existing automatic selection behavior. Pick a fast identity only when the latency reduction is worth the higher usage and price.
72
95
 
73
96
  ### Fast models
74
97
 
@@ -76,7 +99,7 @@ Fast inference is a model choice, not a mode. Where a provider supports it, Atom
76
99
 
77
100
  Four provider paths produce these variants:
78
101
 
79
- - 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.
102
+ - First-party OpenAI `openai/*` and OpenAI Codex `openai-codex/*` models that advertise Fast (see [Fast and Ultrafast tiers](#fast-and-ultrafast-tiers)) 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.
80
103
  - First-party xAI `xai/*` models get a fast variant for every Grok model, such as `xai/grok-4.7-fast`. It sends the **base** upstream model ID with xAI's [Priority Processing](https://docs.x.ai/developers/advanced-api-usage/priority-processing) `service_tier: priority`. xAI has no separate `-fast` model IDs for current Grok models. OpenRouter, Vercel AI Gateway, and renamed or proxied xAI-compatible providers do not receive a synthetic fast variant.
81
104
  - First-party Anthropic `anthropic/*` exposes [fast mode](https://platform.claude.com/docs/en/build-with-claude/fast-mode) for Claude Opus 5.5, Claude Opus 5, and Claude Opus 4.8: `anthropic/claude-opus-5-5-fast`, `anthropic/claude-opus-5-fast`, and `anthropic/claude-opus-4-8-fast`. Each sends the **base** upstream model ID with `speed: "fast"` and the `fast-mode-2026-02-01` beta header. It works with API keys and Claude subscription logins. Amazon Bedrock, Google Vertex, GitHub Copilot, OpenRouter, and renamed or proxied Anthropic-compatible providers do not receive a synthetic fast variant.
82
105
  - 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.
@@ -87,11 +110,11 @@ A fast variant's route owns two request fields: the upstream model ID and the se
87
110
 
88
111
  Models served by an extension's own stream function, including native provider registrations, do not get automatic fast variants. Their normal models and custom transport remain available.
89
112
 
90
- 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.
113
+ Fast behavior comes from explicit route metadata attached when the variant is derived, never from the `-fast` or `-ultrafast` suffix. If a provider, a `models.json` custom model, or an extension already defines that exact variant ID, that model wins: it routes exactly as declared, Atomic suppresses the derived duplicate, and startup and `--list-models` name the collision. No synthetic variant is derived for Azure OpenAI, OpenRouter, or generic OpenAI-compatible providers. Ultrafast derivation is restricted to first-party OpenAI and Codex models that advertise the tier; an extension-owned transport does not get it.
91
114
 
92
115
  Provider-owned names ending in `-fast` remain ordinary exact IDs. Vercel AI Gateway advertises `openai/gpt-6-astra` and `openai/gpt-6-astra-fast`; OpenRouter advertises `openai/gpt-6-astra` and `openai/gpt-6-astra-pro`. Their catalog prices and routing apply, not Atomic's first-party fast routing. Check the live catalog before selecting one.
93
116
 
94
- First-party Codex fast models keep their priority routing across retries and transport changes. Renaming a provider or setting `serviceTier: priority` on a normal model does not grant fast-model identity.
117
+ First-party Codex variants keep their exact priority or ultrafast routing across retries and transport changes. Renaming a provider or setting a service tier on a normal model does not grant variant identity.
95
118
 
96
119
  Pick fast variants deliberately in workflows: parallel fan-out multiplies provider usage, and priority-tier requests are billed at a higher rate.
97
120
 
@@ -114,6 +137,10 @@ Claude Opus 5 is available from the bundled/dynamic Anthropic and Amazon Bedrock
114
137
  - Models come from the bundled `pi-ai` GitHub Copilot catalog; an OAuth credential narrows the list to the ids your account can actually use
115
138
  - If you get "model not supported", enable it in VS Code: Copilot Chat → model selector → select model → "Enable"
116
139
 
140
+ GPT-6.1 Sol is included as `github-copilot/gpt-6.1-sol`. Select it with `atomic --model github-copilot/gpt-6.1-sol:high`. It uses Copilot's Responses endpoint and supports `low`, `medium`, `high`, `xhigh`, and `max`, not `off` or `minimal`.
141
+
142
+ Copilot metadata lists a 1,050,000-token context, 922,000-token input limit, and 128,000-token output limit; account policy still controls availability. Copilot Fast choices require exact account advertisement. Codex's Ultrafast service tier does not apply to Copilot.
143
+
117
144
  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.
118
145
 
119
146
  `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.
@@ -506,7 +533,7 @@ For router-mode discovery, load/unload management, and Hugging Face downloads wi
506
533
 
507
534
  Use `/login typesafe` to save an API key under `typesafe` in `auth.json`, or set `TYPESAFE_API_KEY` in Atomic's process environment. Stored credentials take precedence over the environment key. `/logout typesafe` removes the saved TypeSafe credential; an environment key remains active until you unset it. Jev appears in `/login` but not `/model`, because it only makes structured decisions. Do not put the key in prompts, decision state, or `settings.json`.
508
535
 
509
- `openrouter/~typesafe/jev-latest`, `vercel-ai-gateway/typesafe-ai/jev`, `opencode/jev-1.13`, and `opencode/jev-1.13-free` are not registered classifiers and no longer resolve. Use `typesafe/jev-latest` or another classifier the current registry lists, or use a chat model.
536
+ Atomic also registers `vercel-ai-gateway/typesafe-ai/jev`, `opencode/jev-1.13`, and `opencode/jev-1.13-free` as classifiers. Use the corresponding gateway's credentials (`AI_GATEWAY_API_KEY` or `/login vercel-ai-gateway`; `/login opencode` for Zen) and name the exact ID. They do not appear in the chat model selector. Gateway Jev uses its TypeSafe endpoint, not Chat Completions. The old `openrouter/~typesafe/jev-latest` ID remains unregistered.
510
537
 
511
538
  An explicit `routerModel` other than `auto` selects that exact registered chat or classifier model for workflow-stage and subagent `model: "auto"` routing. An unset or `auto` router uses the current chat model. General `generateStructuredOutput()` calls and the `structured_output` tool select their own model: an optional exact `model`, then `fallbackModels`, then the current chat model. Those calls resolve the ID through the current model registry and use the generic classify operation for a registered classifier, including `typesafe/jev-latest`. They do not inherit `routerModel`. A catalog entry does not prove that classify is available or entitled. User-issued `/workflow` commands launch directly.
512
539
 
@@ -102,6 +102,8 @@ Once the complete credential reaches stdout, the command has succeeded. If the s
102
102
 
103
103
  Interactive sessions use fullscreen, with a scrolling transcript above the docked editor and status area. Wheel and trackpad input goes to a focused workflow graph or stage chat first, then the transcript when not consumed. Scrolling, scrollbar dragging, and selection remain available outside overlays.
104
104
 
105
+ Adjust **Fullscreen wheel scroll lines** in `/settings`, or set `fullscreenWheelScrollLines` to `"auto"` or a number from 1 to 100. This also applies to fullscreen tool detail and chat views.
106
+
105
107
  Selection copies automatically unless `fullscreenCopyOnSelect` is false. Ctrl+X returns tool detail or stage chat to the graph, returns the graph to main chat, or clears a scoped-model selection. It does not copy; `/copy` copies the last assistant message.
106
108
 
107
109
  On exit, `fullscreenExitOutput: "transcript"` prints the final transcript and resume hint. `"resume-hint"` restores the previous screen and prints only the hint. See [Settings](/settings) and [Terminal setup](/terminal-setup).
@@ -149,6 +151,8 @@ When a print-mode turn correctly finishes by calling an opt-in terminating struc
149
151
 
150
152
  Default built-in tools: `read`, `bash`, `kill`, `edit`, `write`, `find`, `search`, `ask_user_question`, `todo`, plus `powershell` on native Windows when a PowerShell executable is available. `ls` remains available but is not a default. `defaultTools` selects initial coding tools without narrowing extension/custom tools. `--tools` selects an explicit allowlist; `--exclude-tools` subtracts from it. `--no-builtin-tools` suppresses coding defaults when no allowlist is given. `--no-tools` overrides all selection. To retain Intercom with an allowlist, include `intercom` explicitly.
151
153
 
154
+ To add opt-in [codemode](/tools#codemode) or [tool search](/tools#tool_search) alongside defaults, use `"defaultTools": ["+codemode", "+tool_search"]` in settings. With `--tools`, include their names and every other tool you want available.
155
+
152
156
  ## Project Trust Options
153
157
 
154
158
  | Option | Description |
@@ -624,6 +624,14 @@ Response:
624
624
  "tokens": 60000,
625
625
  "contextWindow": 200000,
626
626
  "percent": 30
627
+ },
628
+ "latestAssistantUsage": {
629
+ "input": 200,
630
+ "output": 800,
631
+ "cacheRead": 59000,
632
+ "cacheWrite": 0,
633
+ "totalTokens": 60000,
634
+ "cost": {"input": 0.0006, "output": 0.012, "cacheRead": 0.0177, "cacheWrite": 0, "total": 0.0303}
627
635
  }
628
636
  }
629
637
  }
@@ -633,6 +641,8 @@ Response:
633
641
 
634
642
  `contextUsage` is omitted when no model or context window is available. `contextUsage.tokens` and `contextUsage.percent` are `null` immediately after compaction until a fresh post-compaction assistant response provides valid usage data.
635
643
 
644
+ `latestAssistantUsage` is the usage reported by the newest assistant message, including an aborted or failed one; the interactive footer reads its cache-hit rate from it. It is omitted until the session has an assistant message.
645
+
636
646
  #### export_html
637
647
 
638
648
  Export session to an HTML file.
@@ -184,7 +184,7 @@ Specify which tools to expose by name:
184
184
  - `excludedTools` removes matching names from the registry and active selection. Exclusions win over `tools`; unknown names are ignored.
185
185
  - `noTools: "all"` exposes no tools, even with a nonempty `tools` allowlist. It does not remove package resources or authorize services.
186
186
  - `noTools: "builtin"` suppresses coding-tool defaults when `tools` is omitted, keeping extension/custom tools except exclusions. An explicit `tools` list still wins over this mode.
187
- - Configured `defaultTools` selects only initial coding tools when `tools` and `noTools` are omitted. It does not disable extension/custom tools.
187
+ - Configured `defaultTools` selects initial coding tools when `tools` and `noTools` are omitted. Plain names replace the defaults; modifier-only lists such as `["-bash", "+ls"]` change the defaults, and project modifier-only lists layer over the global selection. Extension/custom tools retain their own activation behavior. See [defaultTools](/settings#tools).
188
188
 
189
189
  Workflow and subagent children inherit these restrictions. Child allowlists intersect with the parent selection, including during model fallback. A child cannot restore a parent-disabled package or excluded tool. See [child configuration](/sdk#workflow-and-subagent-children) for model/auth, host callback and working-directory inheritance.
190
190
 
@@ -217,6 +217,8 @@ const { session } = await createAgentSession({
217
217
 
218
218
  Atomic's built-in `bash` tool matches upstream pi: when `bash` is enabled, commands execute through the configured shell with the Atomic process permissions. Use `tools`, `excludedTools`, or `noTools` to decide whether a session exposes the `bash` tool at all. Atomic no longer provides a command-level allow/deny option for `bash`; use an operating-system/container sandbox or a custom tool/extension when you need command allowlisting or stronger isolation.
219
219
 
220
+ Completed `bash` commands also return `structuredContent` shaped as `{ output, truncated, full_output_path?, exit_code, wall_time_seconds }`, including nonzero exits. Programmatic callers receive up to 1 MiB of captured output, plus an omission marker when truncated; larger output keeps its head and tail and supplies a path to the full output. This is a captured-output limit, not a strict serialized JSON size limit. Model-facing text keeps its ordinary truncation limits. Running/background observations keep their existing task lifecycle and result format.
221
+
220
222
  #### Waiting for existing shell tasks
221
223
 
222
224
  Both Bash and PowerShell factories accept `{ action: "wait", id: taskId, budgetMs: 1000 }` with a trusted `taskOwner` binding. No command is executed. `BashToolInput` and `PowerShellToolInput` distinguish command launches from existing-task waits; narrow by `action` before reading `command`.
@@ -375,6 +377,8 @@ const { session } = await createAgentSession({ resourceLoader: loader });
375
377
 
376
378
  `createAgentSession()` preserves the resources from a supplied loader and adds Atomic's shipped builtin extensions and resources. Repeated references to a shipped builtin load it once. Your loader's arrays and discovery options are not rewritten. Existing tool selection and collision rules still apply.
377
379
 
380
+ Named `extensionFactories` descriptors may set `builtin: true` to expose the factory as a synthetic `builtin:<name>` resource, and `replaceable: true` to omit it when another extension claims the same tool, command, or flag. Use `additionalExtensionPaths: ["builtin:codemode"]` for explicit built-in loading, including with `noExtensions: true`. These inline resource controls are separate from the companion-package `builtins` map. See [built-in extension resources](/extensions#built-in-extension-resources).
381
+
378
382
  Pass `extensionBindings` to `createAgentSession()` to install `uiContext`, `mode`, `commandContextActions`, `shutdownHandler` or `onError` before startup hooks run. Creation awaits startup and resource discovery. A failed startup shuts down the partially created session before rejecting. Rebinding updates the host without replaying `session_start`; reload emits one start for its new generation. Remove manual post-creation startup calls from integrations that only used them to initialize extensions.
379
383
 
380
384
  Strict reloads (`failOnExtensionErrors: true`) require the loader's transactional `prepareReload()` support so a failed candidate cannot mutate live state before validation. `DefaultResourceLoader` provides that support. Custom loaders without it remain compatible with ordinary reloads, but strict reload fails before calling their mutating `reload()` method.
@@ -662,6 +666,12 @@ const themes = loader.getThemes();
662
666
  const contextFiles = loader.getAgentsFiles().agentsFiles;
663
667
  ```
664
668
 
669
+ Package workflows returned by `DefaultResourceLoader` are available through the SDK session's `workflow` tool, even when the factory adds the shipped workflows extension. Use the tool's `reload` action to pick up added or removed package workflows without recreating the session. Project packages still require project trust; workflow reload does not grant it.
670
+
671
+ Custom `ResourceLoader` implementations can optionally provide `getWorkflowResources()` returning `ResolvedResource[]` and `refreshWorkflowResources()` returning `Promise<ResolvedResource[]>`. Refresh should return the current trust-filtered resources. If refresh is omitted, workflow reload uses the getter's current snapshot. If both are omitted, shipped workflows and normal workflow-directory discovery remain available.
672
+
673
+ Package MCP servers from `DefaultResourceLoader` remain available through the session's `mcp` tool when the factory adds the shipped MCP extension. Custom loaders can provide `getMcpServerContributions()` returning `McpServerContribution[]`; return only contributions allowed by your loader's trust policy. Normal MCP configuration overrides still apply. See [MCP servers](/mcp-servers) for connection and tool invocation.
674
+
665
675
  ## Return Value
666
676
 
667
677
  `createAgentSession()` returns:
@@ -49,7 +49,7 @@ const result = await generateStructuredOutput({
49
49
  console.log(result.value.category, result.model);
50
50
  ```
51
51
 
52
- The returned `value` is the schema-validated decision, not the request arguments. `model` names the candidate that produced it. `modelAttempts` records skips and failed candidates when a chain was used. A classifier result does not include token usage, so `usage` on a classifier-produced decision is not a classifier bill. Chat usage is reported only when a chat candidate supplies the accepted result. A valid shape is not proof that the judgment is correct. Validate current policy again before any later action.
52
+ The returned `value` is the schema-validated decision, not the request arguments. `model` names the candidate that produced it. `modelAttempts` records skips and failed candidates when a chain was used. This decision API does not expose classifier billing usage: its classifier-produced `usage` is not a classifier bill. The lower-level classifier operation may report usage and cost separately. Chat usage is reported when a chat candidate supplies the accepted result. A valid shape is not proof that the judgment is correct. Validate current policy again before any later action.
53
53
 
54
54
  The `structured_output` tool takes the same decision inputs from the calling model: required `instructions` and nonempty named `state`, plus optional `model` and `fallbackModels`. The registered schema is fixed by `createStructuredOutputTool({ schema })`. The tool resolves those IDs through the session registry and returns the inferred value. Omitting `model` uses the current stage or session chat model. See [Structured output final results](/sdk/reference#structured-output-final-results).
55
55
 
@@ -73,6 +73,8 @@ Automatic routing builds its own finite Choice questions from eligible execution
73
73
 
74
74
  Chat candidates receive one internal result tool whose parameters are the registered schema. Atomic uses provider-aware serialization, requests strict sampling where supported, and validates the returned arguments without coercing values or removing extra fields. Use `additionalProperties: false` for closed objects. A prose-only response, extra tool call, truncated response, or invalid result fails that candidate and advances the chain. The public `structured_output` tool is separate: its parameters are `instructions`, `state`, and optional model selectors, and its result is the inferred value.
75
75
 
76
+ Use `Type.Optional(...)` for result fields that may be omitted. When a strict provider represents an omitted optional object property as `null`, Atomic removes that placeholder if the property's schema rejects null, including declared properties inside nested objects and array items. If null is a meaningful result, explicitly allow it in the property schema; Atomic preserves those null values. Required properties and undeclared fields still follow the original schema.
77
+
76
78
  Chat decisions use HTTP/SSE rather than WebSocket transport fallback and disable configured Anthropic server-side fallbacks for this request only. The chat decision layer retries transient failures according to the request's retry settings. Classifier calls use the registered provider's `classify` operation and forward the retry limit and cancellation signal; provider implementations own their transport retries.
77
79
 
78
80
  A registered classifier receives shared state and choice questions through the generic classify operation. [TypeSafe Jev](/providers#typesafe-jev) is one such classifier. Router classification is one classify request. A provider that rejects the request size or context fails that candidate; routing then uses the current chat model when one exists.
@@ -81,7 +83,7 @@ The structured-decision path never trims supplied state. A general structured-ou
81
83
 
82
84
  Automatic subagent and workflow-stage model selection has a chat model read the task and sends a classifier only the resulting answers and candidate models; see [automatic model selection](/subagents/reference#automatic-model-selection).
83
85
 
84
- Classifier response bodies are limited by the provider operation. Atomic validates that every question receives a known Choice option. The classify result does not report token usage. Reported model, probabilities, and confidence are advisory and never reject an otherwise valid decision.
86
+ Classifier response bodies are limited by the provider operation. Atomic validates that every question receives a known Choice option. Lower-level classify results may report usage and cost when the provider supplies them; this structured-decision API does not expose them as classifier billing usage. Reported model, probabilities, and confidence are advisory and never reject an otherwise valid decision.
85
87
 
86
88
  ## Cancellation and failures
87
89
 
@@ -105,6 +105,9 @@ interface ToolResultMessage {
105
105
  toolName: string;
106
106
  content: (TextContent | ImageContent)[];
107
107
  details?: JsonValue; // Tool-specific durable metadata
108
+ structuredContent?: JsonValue; // Machine-readable tool output
109
+ usage?: Usage; // Tool's own and nested billed usage
110
+ nestedCalls?: NestedToolCalls; // Bounded metadata, not nested outputs
108
111
  isError: boolean;
109
112
  timestamp: number;
110
113
  }
@@ -131,6 +134,8 @@ System messages record prompt and tool changes in chronological order. Later `co
131
134
 
132
135
  A process can stop after a `toolUse` assistant message reaches JSONL but before every corresponding `toolResult` is appended. Atomic does not rewrite that append-only history. When the inactive session is reopened, its derived context supplies an error result for each unanswered call before rendering, compaction, or another provider request. The error states that execution was interrupted and its result is unavailable; it does not claim the tool had no side effects. Orphaned and duplicate results are also removed from provider-bound derived context. The original JSONL remains the authoritative record of what was actually persisted.
133
136
 
137
+ Nested tool calls are recorded on their parent `toolResult`, not as independent messages. `nestedCalls` contains `{ calls, complete }`: each call has its ID, name, status, optional arguments, duration and error. At most 256 calls are retained; arguments exceeding 8 KiB per call or 32 KiB across the parent are omitted. `complete: false` means the record is incomplete. Do not treat this metadata as a complete audit log or infer that omitted calls had no side effects. Nested output is not retained there; the parent reports any result needed by the conversation.
138
+
134
139
  ### Extended Message Types (from Atomic coding-agent)
135
140
 
136
141
  ```typescript
package/docs/settings.md CHANGED
@@ -82,7 +82,7 @@ Normal automatic selection of an available authenticated model remains enabled i
82
82
 
83
83
  Use `/settings` → **Router model** to change the effective selection. If the project already defines `routerModel`, the picker edits that project override; otherwise it saves the global default in `~/.atomic/agent/settings.json`. The picker identifies which scope it will save. Choose **Automatic** to save `""` in that scope. `""` and `auto` both use the current chat model; saved classifier credentials do not change that choice. To pin a decision model, choose an exact ID from the current registry, such as `typesafe/jev-latest`, or a chat model by provider/model ID. A classifier is not a chat model and does not appear in `/model`. Run `/reload` or restart Atomic to apply the saved choice to an already-running isolated engine.
84
84
 
85
- An explicit ID other than `auto` is resolved through the current model registry: a registered classifier first, otherwise a chat model. Gateway classifier IDs are not registered automatically; configure their classifier models and operations before selecting them. An invalid explicit ID, image-generation model, non-string value, or surrounding whitespace fails the decision instead of silently changing providers. An explicit empty project value overrides a global selection and restores the current chat model.
85
+ An explicit ID other than `auto` is resolved through the current model registry: a registered classifier first, otherwise a chat model. Built-in gateway classifiers include `vercel-ai-gateway/typesafe-ai/jev`, `opencode/jev-1.13`, and `opencode/jev-1.13-free`; authenticate their provider before choosing them. An invalid explicit ID, image-generation model, non-string value, or surrounding whitespace fails the decision instead of silently changing providers. An explicit empty project value overrides a global selection and restores the current chat model.
86
86
 
87
87
  A failed explicit classifier routing attempt switches to the current chat model when one exists. That includes missing credentials, an unavailable classify operation, a provider size or context rejection, a refusal, and a malformed answer. Transient retries follow the provider operation and retry settings. Chat routing gets an initial attempt plus three corrective retries for invalid output, using the same context. Routing has no built-in wall-clock deadline; cancel the request to stop waiting. Independent provider, credential-preparation, and enclosing tool-request limits still apply. The fallback can incur chat-provider charges. Cancellation does not trigger fallback.
88
88
 
@@ -182,10 +182,11 @@ See [Providers](/providers#fast-models) for which providers publish fast variant
182
182
 
183
183
  | Setting | Type | Default | Description |
184
184
  |---------|------|---------|-------------|
185
- | `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, a Catppuccin built-in, or custom) |
185
+ | `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, `"system"`, a Catppuccin built-in, or custom). `"system"` derives its palette from the terminal; see [Themes](/themes) |
186
186
  | `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. |
187
187
  | `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` |
188
188
  | `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` |
189
+ | `fullscreenWheelScrollLines` | `"auto"` or number | `"auto"` | Lines per mouse-wheel tick in fullscreen views. `"auto"` uses terminal-aware scrolling; numeric values are clamped to 1–100. Settable from `/settings` |
189
190
  | `quietStartup` | boolean | `false` | Hide startup header |
190
191
  | `defaultProjectTrust` | string | `"ask"` | Fallback project trust behavior: `"ask"`, `"always"`, or `"never"`. Global setting only |
191
192
  | `collapseChangelog` | boolean | `false` | Show condensed changelog after updates |
@@ -194,6 +195,7 @@ See [Providers](/providers#fast-models) for which providers publish fast variant
194
195
  | `onboardedVersion` | string | - | Managed onboarding completion state; leave unchanged |
195
196
  | `enableAnalytics` | boolean | `false` | Opt in to analytics during first-run setup |
196
197
  | `trackingId` | string | - | Locally generated analytics identifier when analytics is enabled |
198
+ | `deviceId` | string | - | Managed global installation identity, created only when a provider sign-in needs it. Project values are ignored |
197
199
  | `doubleEscapeAction` | string | `"tree"` | Action for double-escape: `"tree"`, `"fork"`, or `"none"` |
198
200
  | `treeFilterMode` | string | `"default"` | Default filter for `/tree`: `"default"`, `"no-tools"`, `"user-only"`, `"labeled-only"`, `"all"` |
199
201
  | `editorPaddingX` | number | `0` | Horizontal padding for input editor (0-3) |
@@ -444,9 +446,11 @@ On Windows, JSON paths must use forward slashes or escaped backslashes:
444
446
 
445
447
  | Setting | Type | Default | Description |
446
448
  |---------|------|---------|-------------|
447
- | `defaultTools` | string[] | - | Built-in tools enabled at startup. When omitted, Atomic uses its standard defaults |
449
+ | `defaultTools` | string[] | - | Initial built-in tools. Plain names replace the defaults; `+name` and `-name` add or remove tools |
450
+ | `codemode.mode` | `"on"` or `"only"` | `"on"` | While codemode is active, `"on"` keeps direct tool declarations visible with script-call information; `"only"` hides ordinary direct callable declarations so the model uses scripts. Model-only tools remain directly available |
451
+ | `codemode.inlineBudget` | number | `3000` | Estimated token budget for inline script-tool declarations. Omitted tools remain discoverable with `searchTools()`. `0` lists namespaces without inline declarations |
448
452
 
449
- `defaultTools` selects the built-in tools a session starts with. Extension and SDK custom tools stay enabled regardless. Available built-ins are `read`, `bash`, `powershell`, `edit`, `write`, `find`, `search`, `ask_user_question`, `todo`, and `ls`:
453
+ `defaultTools` selects the built-in tools a session starts with. Extension and SDK custom tools retain their own activation behavior. Available built-ins include `read`, `bash`, `powershell`, `edit`, `write`, `find`, `search`, `ask_user_question`, `todo`, and `ls`:
450
454
 
451
455
  ```json
452
456
  {
@@ -462,7 +466,17 @@ On Windows, select `powershell` instead of `bash`, or include both:
462
466
  }
463
467
  ```
464
468
 
465
- An empty array starts with no coding tools while preserving extension/custom tools. `--tools` replaces this behavior with an allowlist including Intercom; `--no-tools` disables every tool even with an allowlist. `--no-builtin-tools` suppresses coding defaults when no allowlist is given. `--exclude-tools` filters the result, including Intercom. A project `defaultTools` array replaces the global array.
469
+ An empty array starts with no coding tools while preserving extension/custom tools. `--tools` replaces this behavior with an allowlist including Intercom; `--no-tools` disables every tool even with an allowlist. `--no-builtin-tools` suppresses coding defaults when no allowlist is given. `--exclude-tools` filters the result, including Intercom.
470
+
471
+ A list containing only modifiers starts from Atomic's standard defaults. Modifiers are applied in order; adding an existing name or removing an absent one has no effect:
472
+
473
+ ```json
474
+ { "defaultTools": ["-bash", "+ls"] }
475
+ ```
476
+
477
+ Plain names establish a replacement list before its modifiers apply. A project list of only modifiers layers over the global selection. A project list with plain names, or an empty list, replaces the global selection. For example, global `["read", "bash"]` plus project `["-bash", "+ls"]` resolves to `["read", "ls"]`.
478
+
479
+ `codemode` and `tool_search` are built-in extension tools registered inactive. Add `"+codemode"` or `"+tool_search"` to `defaultTools` to activate them alongside ordinary defaults. See [codemode](/tools#codemode) and [tool search](/tools#tool_search) for usage and safety boundaries.
466
480
 
467
481
  ### Sessions
468
482
 
package/docs/skills.md CHANGED
@@ -82,7 +82,7 @@ This is progressive disclosure: only descriptions are always in context, full in
82
82
 
83
83
  ### Built-in prompt engineering guidance
84
84
 
85
- 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.5, Claude Opus 5, Claude Opus 4.8, Claude Sonnet 5.5, 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.
85
+ 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.1 Sol, GPT-6 Astra, GPT-5.6, GPT-5.5, Claude Fable 5.1, Claude Fable 5, Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8, Claude Sonnet 5.5, 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. For example, use `/skill:prompt-engineer Improve this prompt for GPT-6.1 Sol: ...`.
86
86
 
87
87
  Each model guide pairs an observed behavior with a prompt adjustment, example wording, and caveats. Choose the patterns that address your task instead of copying the whole guide; compatibility notes explain when a prompt also needs provider or application support.
88
88
 
@@ -153,11 +153,12 @@ The `export` section controls colors for `/export` HTML output. If omitted, colo
153
153
 
154
154
  ## Color Values
155
155
 
156
- Four formats are supported:
156
+ Five formats are supported:
157
157
 
158
158
  | Format | Example | Description |
159
159
  |--------|---------|-------------|
160
160
  | Hex | `"#ff0000"` | 6-digit hex RGB |
161
+ | OKHSL | `"okhsl(295 0.6 0.5)"` | Hue in degrees, saturation and lightness from 0 to 1. Converted to hex for HTML export. |
161
162
  | 256-color | `39` | xterm 256-color palette index (0-255) |
162
163
  | Variable | `"primary"` | Reference to a `vars` entry |
163
164
  | Default | `""` | Terminal's default color |
package/docs/themes.md CHANGED
@@ -22,7 +22,7 @@ This page covers selecting a theme and authoring your first one. The theme file
22
22
 
23
23
  Atomic loads themes from:
24
24
 
25
- - Built-in: `dark`, `light`, `catppuccin-frappe`, `catppuccin-latte`, `catppuccin-macchiato`, `catppuccin-mocha`
25
+ - Built-in: `system`, `dark`, `light`, `catppuccin-frappe`, `catppuccin-latte`, `catppuccin-macchiato`, `catppuccin-mocha`
26
26
  - Global: `~/.atomic/agent/themes/*.json` (legacy `~/.pi/agent/themes/*.json`)
27
27
  - Project: `.atomic/themes/*.json` (legacy `.pi/themes/*.json`, only after the project is trusted)
28
28
  - Packages: `themes/` directories, `atomic.themes`, or legacy `pi.themes` entries in `package.json`
@@ -41,7 +41,9 @@ Select a theme via `/settings` or in `settings.json`:
41
41
  }
42
42
  ```
43
43
 
44
- Use `"theme": "light-theme/dark-theme"` for automatic mode. Atomic chooses the first theme when the terminal reports a light color scheme and the second theme for dark terminals, and it follows terminal color-scheme changes when supported.
44
+ Use `"theme": "system"` to derive colors from your terminal's foreground, background, and ANSI palette. It follows terminal appearance changes where supported. If the terminal does not report colors, it uses ANSI palette colors and faint secondary text. Atomic's existing `dark`, `light`, and Catppuccin palettes remain available.
45
+
46
+ Use `"theme": "light-theme/dark-theme"` for automatic mode. The reported background decides which theme is selected, followed by the terminal's appearance notification, `COLORFGBG`, then dark. Atomic follows terminal appearance changes when supported.
45
47
 
46
48
  On first run, Atomic detects your terminal background and defaults to `dark` or `light`.
47
49