@bastani/atomic 0.9.19-alpha.5 → 0.9.19-alpha.7
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.
- package/CHANGELOG.md +32 -0
- package/README.md +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/broker/client.ts +19 -1
- package/dist/builtin/intercom/index.bundle.mjs +8 -1
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/README.md +3 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +7 -7
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +3 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +2 -1
- package/dist/builtin/web-access/CHANGELOG.md +13 -0
- package/dist/builtin/web-access/README.md +31 -24
- package/dist/builtin/web-access/index.bundle.mjs +16121 -80
- package/dist/builtin/web-access/package.json +2 -1
- package/dist/builtin/workflows/CHANGELOG.md +15 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
- package/dist/builtin/workflows/builtin/{chunk-vhmnzdj9.js → chunk-1jth021m.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-p8jjwfg6.js → chunk-2377r57g.js} +4 -2
- package/dist/builtin/workflows/builtin/{chunk-hbnwv56f.js → chunk-31j2gs7h.js} +2 -2
- package/dist/builtin/workflows/builtin/{chunk-n8zysf1t.js → chunk-ngkqkzej.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-1nbq96fh.js → chunk-nkrafh9s.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-1kx4aggw.js → chunk-wf741bv3.js} +2 -2
- package/dist/builtin/workflows/builtin/{chunk-t6x2d78s.js → chunk-z29qbehr.js} +1 -1
- package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
- package/dist/builtin/workflows/builtin/goal.js +3 -3
- package/dist/builtin/workflows/builtin/index.js +7 -7
- package/dist/builtin/workflows/builtin/ralph.js +3 -3
- package/dist/builtin/workflows/builtin/tournament.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +339 -31
- package/dist/builtin/workflows/src/index.js +67 -19
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +10 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +3 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +91 -12
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-coordinator.d.ts +255 -0
- package/dist/core/tools/file-mutation-coordinator.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-coordinator.js +300 -0
- package/dist/core/tools/file-mutation-coordinator.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +14 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +15 -3
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/hashline.d.ts +9 -0
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +12 -1
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/index.d.ts +9 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +67 -12
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/non-minting-snapshot-store.d.ts +49 -0
- package/dist/core/tools/non-minting-snapshot-store.d.ts.map +1 -0
- package/dist/core/tools/non-minting-snapshot-store.js +64 -0
- package/dist/core/tools/non-minting-snapshot-store.js.map +1 -0
- package/dist/core/tools/powershell.d.ts +2 -2
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +2 -5
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read-document-extract.js.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/write.d.ts +30 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +97 -8
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/task-live-transcript.d.ts +1 -1
- package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/task-live-transcript.js +19 -11
- package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +3 -1
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +28 -4
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +3 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.d.ts +2 -2
- package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts +3 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.js +11 -0
- package/dist/modes/interactive-engine/engine-diagnostic-view.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +2 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts +2 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +23 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +20 -3
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/utils/markit.d.ts +2 -0
- package/dist/utils/markit.d.ts.map +1 -1
- package/dist/utils/markit.js +65 -5
- package/dist/utils/markit.js.map +1 -1
- package/docs/background-tasks.md +15 -11
- package/docs/build.md +51 -0
- package/docs/changelog.mdx +8 -8
- package/docs/compaction/reference.md +267 -0
- package/docs/compaction.md +36 -219
- package/docs/computer-use.md +35 -0
- package/docs/containerization.md +9 -5
- package/docs/custom-provider/api-reference.md +145 -0
- package/docs/custom-provider/oauth.md +131 -0
- package/docs/custom-provider/override.md +34 -0
- package/docs/custom-provider/registration.md +163 -0
- package/docs/custom-provider/streaming.md +214 -0
- package/docs/custom-provider.md +43 -607
- package/docs/development.md +87 -0
- package/docs/docs.json +199 -76
- package/docs/environment-variables.md +1 -1
- package/docs/extensions/api-reference.md +1001 -0
- package/docs/extensions/authoring.md +676 -0
- package/docs/extensions/events.md +793 -0
- package/docs/extensions/examples.md +94 -0
- package/docs/extensions/ui.md +470 -0
- package/docs/extensions.md +270 -2768
- package/docs/getting-started/authentication.md +55 -0
- package/docs/getting-started/first-session.md +172 -0
- package/docs/getting-started/installation.md +154 -0
- package/docs/getting-started/project-instructions.md +43 -0
- package/docs/guides/configuration.md +65 -0
- package/docs/guides/intercom.md +24 -0
- package/docs/guides/non-interactive.md +33 -0
- package/docs/guides/subagents.md +24 -0
- package/docs/guides/workflows.md +27 -0
- package/docs/guides.md +41 -0
- package/docs/index.md +13 -45
- package/docs/intercom/operations.md +178 -0
- package/docs/intercom/reference.md +146 -0
- package/docs/intercom.md +54 -259
- package/docs/json.md +17 -0
- package/docs/llama-cpp.md +5 -0
- package/docs/models/artificial-analysis-index.md +89 -0
- package/docs/models/evals.md +2 -2
- package/docs/models/model-selection.md +3 -3
- package/docs/models/pareto-efficiency.md +2 -2
- package/docs/models/reference.md +601 -0
- package/docs/models.md +45 -550
- package/docs/packages/authoring.md +88 -0
- package/docs/packages/reference.md +43 -0
- package/docs/packages.md +28 -107
- package/docs/programmatic.md +29 -0
- package/docs/prompt-templates.md +11 -0
- package/docs/providers/reference.md +23 -0
- package/docs/providers.md +10 -15
- package/docs/quickstart.md +44 -238
- package/docs/reference/cli.md +252 -0
- package/docs/reference.md +52 -0
- package/docs/rpc/examples.md +64 -0
- package/docs/rpc/extension-ui.md +198 -0
- package/docs/rpc/protocol.md +1341 -0
- package/docs/rpc.md +109 -1346
- package/docs/sdk/reference.md +1090 -0
- package/docs/sdk.md +56 -1002
- package/docs/session-format.md +2 -0
- package/docs/sessions.md +6 -10
- package/docs/settings.md +6 -45
- package/docs/skills/authoring.md +95 -0
- package/docs/skills/reference.md +60 -0
- package/docs/skills.md +20 -122
- package/docs/subagents/authoring.md +37 -0
- package/docs/subagents/reference.md +60 -0
- package/docs/subagents.md +42 -96
- package/docs/terminal-setup.md +1 -1
- package/docs/themes/reference.md +176 -0
- package/docs/themes.md +21 -135
- package/docs/tmux.md +5 -0
- package/docs/tools/edit.md +5 -0
- package/docs/tools.md +31 -0
- package/docs/tui/reference.md +343 -0
- package/docs/tui.md +23 -286
- package/docs/usage.md +26 -209
- package/docs/web-access.md +40 -0
- package/docs/windows.md +2 -1
- package/docs/workflows/api-reference.md +11 -4
- package/docs/workflows/authoring.md +4 -2
- package/docs/workflows/builtins.md +2 -2
- package/docs/workflows/operations.md +11 -7
- package/docs/workflows/reliable-design.md +21 -3
- package/docs/workflows/verification.md +8 -0
- package/examples/extensions/gondolin/index.ts +116 -148
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/ssh.ts +56 -34
- package/npm-shrinkwrap.json +33 -33
- package/package.json +4 -4
package/docs/usage.md
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Interactive use"
|
|
3
|
+
description: "Interactive mode, slash commands, the message queue, sessions, and context files."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Using Atomic
|
|
2
7
|
|
|
3
8
|
This page collects day-to-day usage details that do not fit on the quickstart page.
|
|
4
9
|
|
|
10
|
+
## On this page and its reference
|
|
11
|
+
|
|
12
|
+
This page covers interactive use: the interactive loop, slash commands, the message queue, sessions, context files, and the design principles behind them. Every command, flag, argument, and environment variable now lives in the [CLI reference](/reference/cli).
|
|
13
|
+
|
|
5
14
|
## Interactive Mode
|
|
6
15
|
|
|
7
16
|
<p align="center"><img src="images/interactive-mode.png" alt="Interactive Mode" width="600" /></p>
|
|
@@ -41,6 +50,10 @@ On native Windows, `!` and `!!` execute PowerShell (preferring `pwsh.exe`, then
|
|
|
41
50
|
|
|
42
51
|
On Windows, ALT+Z lends the terminal to an interactive PowerShell subshell. Type `exit` to return to the same Atomic session; owned background tasks keep running. CTRL+Z remains editor undo. On POSIX systems, CTRL+Z suspends Atomic and `fg` resumes it.
|
|
43
52
|
|
|
53
|
+
## Startup typing
|
|
54
|
+
|
|
55
|
+
On normal interactive TTY startup, Atomic starts a short-lived raw keyboard capture before deferred resources finish loading and keeps it active until the TUI input handler is mounted. Text typed before the prompt box is fully mounted is replayed into the editor. Enter-submitted ordinary prompts are queued for the prompt loop once startup is ready; command-like submissions such as `/settings` or `!pwd` are replayed as standalone editor submissions through normal command routing. If a command-like submission is captured, later captured submissions wait behind it and replay in original input order after that command is routed, so a later ordinary prompt cannot run before the earlier command and commands are not merged with following prompts. Startup work that can affect correctness, such as project trust prompts, resume/session selectors, cross-project session confirmations, explicit resource flags, metadata commands, non-TTY input, or explicit provider/model selection, still stays on the synchronous path instead of using this pre-session capture.
|
|
56
|
+
|
|
44
57
|
## Slash Commands
|
|
45
58
|
|
|
46
59
|
Type `/` in the editor to open command completion. Extensions can register custom commands, skills are available as `/skill:name`, and prompt templates expand via `/templatename`.
|
|
@@ -145,251 +158,55 @@ Treat exported and shared sessions as sensitive: transcripts can contain source
|
|
|
145
158
|
|
|
146
159
|
## CLI Reference
|
|
147
160
|
|
|
148
|
-
|
|
149
|
-
atomic [options] [@files...] [messages...]
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Use `--` to end option parsing when positional prompt text begins with `-`, `--`, or `@`. Every argument after the terminator is treated as literal message text rather than an option or file argument:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
atomic --print -- "- leading-dash prompt"
|
|
156
|
-
```
|
|
161
|
+
Moved to [CLI reference](/reference/cli#cli-reference).
|
|
157
162
|
|
|
158
163
|
### Package Commands
|
|
159
164
|
|
|
160
|
-
|
|
161
|
-
atomic install <source> [-l] # Install package, -l for project-local
|
|
162
|
-
atomic remove <source> [-l] # Remove package
|
|
163
|
-
atomic uninstall <source> [-l] # Alias for remove
|
|
164
|
-
atomic update [source|self|atomic] # Update Atomic only, or one package source
|
|
165
|
-
atomic update --all # Update Atomic and packages; reconcile pinned git refs
|
|
166
|
-
atomic update --extensions # Update packages only; reconcile pinned git refs
|
|
167
|
-
atomic update --models # Force-refresh authenticated provider model catalogs
|
|
168
|
-
atomic update --self # Update Atomic only
|
|
169
|
-
atomic update --extension <src> # Update one package
|
|
170
|
-
atomic list # List installed packages
|
|
171
|
-
atomic config # Enable/disable package resources
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
These commands manage Atomic packages and `atomic update` can update the Atomic CLI installation. To uninstall Atomic itself, see [Quickstart](/quickstart#uninstall). `atomic config` and project package commands accept `--approve`/`--no-approve` to trust or ignore project-local settings for one command. `atomic update` never prompts for project trust.
|
|
175
|
-
|
|
176
|
-
See [Atomic Packages](/packages) for package sources and security notes.
|
|
165
|
+
Moved to [CLI reference](/reference/cli#package-commands).
|
|
177
166
|
|
|
178
167
|
### Credential Commands
|
|
179
168
|
|
|
180
|
-
|
|
181
|
-
atomic auth check [--provider <p>] [--model <model>] [--json] [--credentials] [--no-refresh]
|
|
182
|
-
atomic auth print-api-key --model <model> [--provider <p>]
|
|
183
|
-
atomic auth print-bearer-token --model <model> [--provider <p>] [--min-expiry <dur>]
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
`atomic auth check` verifies the effective credential a provider or model would use before a session starts. It requires at least one of `--provider` or `--model`, prints `ready`, `not_ready`, or `invalid` to stdout, and exits `0`, `1`, or `2` for those states. `--json` adds the resolved provider when one is found, credential kind, and any reason. By default, a check never emits credential material.
|
|
187
|
-
|
|
188
|
-
`--credentials` is an explicit export opt-in. It requires `--provider` or an exact `--model` target; a fuzzy model match on an otherwise-ready provider is refused as `invalid` (exit `2`) rather than exporting a credential for a provider you did not name. If that provider is not ready, the check remains `not_ready` (exit `1`). On a ready check, plain stdout becomes the resolved credential alone and JSON adds it only in the `credentials` field. A non-ready raw export leaves stdout empty and reports its status on stderr; a JSON export returns the status object without a credential. Credential writes can also exit `8` (nothing written) or `9` (only a fragment written). Treat the stream like `print-api-key` or `print-bearer-token` output.
|
|
189
|
-
|
|
190
|
-
Checks refresh expired OAuth credentials by default, using Atomic's normal locked `auth.json` update path. Pass `--no-refresh` to read credentials without creating, locking, or mutating `auth.json`; this is useful when a probe must not change stored auth state. It still reads Atomic's primary and legacy credential paths and resolves configured API-key values, including `!command`, through the normal provider configuration. In this read-only mode, malformed `auth.json` is `invalid` (exit `2`) rather than an unavailable credential. An OAuth credential export requires at least 30 minutes of life: the normal path can refresh it, while `--no-refresh` refuses a shorter-lived token.
|
|
191
|
-
|
|
192
|
-
The credential commands print one configured credential for an external client — a proxy, a script, or another tool that needs the same key Atomic already holds. The credential goes to **stdout and nothing else**; warnings, provider selection, refresh notices, and help all go to stderr, so `KEY=$(atomic auth print-api-key --model gpt-5.5)` can never capture a diagnostic.
|
|
193
|
-
|
|
194
|
-
`--model` is required for the two `print-*` exports. An exporting auth check needs `--provider` or an exact `--model` target. When several configured providers offer a model, pass `--provider` to choose one. The two `print-*` subcommands accept only `--provider` and `--model`: any other flag — including `--export`, `--session-dir`, `--print`, and `--help` — is a usage error rather than a flag this path happens to ignore.
|
|
195
|
-
|
|
196
|
-
`atomic auth` on its own — and `atomic auth help`, `--help`, or `-h` — prints this usage on stderr and exits `0`. `atomic auth check --help` (or `-h`) does the same until a `--` terminator; after it, the flag is not help. Any other subcommand exits `1` and names all three valid commands. Help never uses stdout, so raw credential export stdout is a credential or empty; a JSON export writes an object that carries a credential only in its `credentials` field.
|
|
197
|
-
|
|
198
|
-
`print-bearer-token` works only on OAuth providers and `print-api-key` only on API-key providers; asking for the wrong kind is an error rather than a silent fallback. A bearer token with less than `--min-expiry` remaining (default `30m`, accepting `ms`, `s`, `m`, or `h`) is refreshed first. Both `--min-expiry 30m` and `--min-expiry=30m` are accepted. `--min-expiry` with `print-api-key` is a usage error — even after a `--` terminator — because an API key has no expiry. A failed refresh leaves your stored credential untouched.
|
|
199
|
-
|
|
200
|
-
Credential-export exits (`print-api-key`, `print-bearer-token`, and the `--credentials` write itself):
|
|
201
|
-
|
|
202
|
-
| Exit | Meaning |
|
|
203
|
-
|------|---------|
|
|
204
|
-
| `0` | Credential written to stdout, one trailing newline |
|
|
205
|
-
| `1` | Usage error |
|
|
206
|
-
| `2` | No credential configured for that model/provider |
|
|
207
|
-
| `3` | Several configured providers match — pass `--provider` |
|
|
208
|
-
| `4` | That credential kind is unsupported for the provider |
|
|
209
|
-
| `5` | OAuth refresh failed; the stored credential is unchanged |
|
|
210
|
-
| `6` | The provider cannot mint a token that lives as long as `--min-expiry` |
|
|
211
|
-
| `7` | The provider's OAuth credential could not be used — no claim is made about the stored credential |
|
|
212
|
-
| `8` | The credential could not be written; nothing was emitted |
|
|
213
|
-
| `9` | Only part of the credential was written; discard the output |
|
|
214
|
-
|
|
215
|
-
Auth-check exits:
|
|
216
|
-
|
|
217
|
-
| Exit | `atomic auth check` |
|
|
218
|
-
|------|---------------------|
|
|
219
|
-
| `0` | `ready` |
|
|
220
|
-
| `1` | `not_ready`, including a fuzzy `--model` with `--credentials` when its resolved provider is not ready |
|
|
221
|
-
| `2` | `invalid`, including check usage errors (unknown option, neither `--provider` nor `--model`, and a fuzzy `--model` with `--credentials` when its resolved provider is otherwise ready) |
|
|
222
|
-
| `8` | With `--credentials`, the credential could not be written; nothing was emitted |
|
|
223
|
-
| `9` | With `--credentials`, only part of the credential was written; discard the output |
|
|
224
|
-
|
|
225
|
-
Exit `5` is reported only for a refresh that itself failed, which happens before anything is persisted; that is the only exit that promises your stored credential is untouched. Any other OAuth failure exits `7` and makes no such promise.
|
|
226
|
-
|
|
227
|
-
For raw credential exports, stdout is empty on every non-zero exit but one. Once the credential reaches stdout the command has succeeded: if the stream then fails to drain — a reader that closed the pipe, for example — that is reported on stderr and the exit code stays `0`, because a non-zero exit here would contradict the bytes the caller already holds. The exception is exit `9`, which reports that only part of the credential was written before the stream failed; those bytes cannot be recalled, so stdout is not empty, and the output is a fragment to discard rather than a credential to use. `auth check --credentials --json` may instead write a credential-free JSON status object on a non-zero check result. See [Security](/security#credential-export) before wiring this into a script.
|
|
169
|
+
Moved to [CLI reference](/reference/cli#credential-commands).
|
|
228
170
|
|
|
229
171
|
### Modes
|
|
230
172
|
|
|
231
|
-
|
|
232
|
-
|------|-------------|
|
|
233
|
-
| default | Interactive mode (fullscreen TUI) |
|
|
234
|
-
| `-p`, `--print` | Print response and exit |
|
|
235
|
-
| `--mode json` | Output all events as JSON lines; see [JSON mode](/json) |
|
|
236
|
-
| `--mode rpc` | RPC mode over stdin/stdout; see [RPC mode](/rpc) |
|
|
237
|
-
| `--export <in> [out]` | Export a session to HTML |
|
|
238
|
-
|
|
239
|
-
Interactive sessions always use fullscreen: the transcript scrolls independently above a sticky dock containing the editor, status line, usage meter, extension widgets, and footer. Wheel and trackpad gestures go first to a focused workflow graph or stage chat overlay; events those overlays do not consume fall through to the alternate-screen viewport. Non-overlay focused components do not block pi-tui's mouse path, so transcript scrolling, scrollbar interaction, and drag selection still work. Selection copies automatically by default; disable `fullscreenCopyOnSelect` to highlight text without copying. Ctrl+X closes workflow tool detail to the graph, clears a scoped-model selection, returns stage chat to its graph, or returns a workflow graph to main chat. It does not copy. `/copy` always copies the last assistant message. The `fullscreenExitOutput` setting controls what exiting prints: `"transcript"` (the default) paints the final transcript plus a session resume hint on the main screen, while `"resume-hint"` restores the previous screen and prints only the resume hint. See [Settings](/settings) and [Terminal setup](/terminal-setup).
|
|
240
|
-
|
|
241
|
-
In print mode, Atomic also reads piped stdin and merges it into the initial prompt:
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
cat README.md | atomic -p "Summarize this text"
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
When a print-mode turn correctly finishes by calling an opt-in terminating structured-output tool created with `createStructuredOutputTool` (for example from an extension, SDK caller, or workflow item with a schema), Atomic ends after that tool result without an extra follow-up assistant turn. Print-mode stdout contains the terminating structured JSON payload, so `atomic -p` remains script-friendly while the same value is also available through the SDK `capture` sink, tool `details`, a configured file sink, or workflow `result.structured`. This also works for custom factory names such as `final_decision`. Non-terminating or unrelated tool results are not printed as the final response.
|
|
173
|
+
Moved to [CLI reference](/reference/cli#modes).
|
|
248
174
|
|
|
249
175
|
### Model Options
|
|
250
176
|
|
|
251
|
-
|
|
252
|
-
|--------|-------------|
|
|
253
|
-
| `--provider <name>` | Provider, such as `anthropic`, `openai`, or `google` |
|
|
254
|
-
| `--model <pattern>` | Model pattern or ID; supports `provider/id` and optional `:<thinking>` |
|
|
255
|
-
| `--api-key <key>` | API key, overriding environment variables |
|
|
256
|
-
| `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`; model capability mapping still governs availability |
|
|
257
|
-
| `--models <patterns>` | Comma-separated patterns for CTRL+P cycling |
|
|
258
|
-
| `--list-models [search]` | List available models |
|
|
177
|
+
Moved to [CLI reference](/reference/cli#model-options).
|
|
259
178
|
|
|
260
179
|
### Session Options
|
|
261
180
|
|
|
262
|
-
|
|
263
|
-
|--------|-------------|
|
|
264
|
-
| `-c`, `--continue` | Continue the most recent session |
|
|
265
|
-
| `-r`, `--resume` | Browse and select a session |
|
|
266
|
-
| `--session <path\|id>` | Use a specific session file or partial UUID |
|
|
267
|
-
| `--session-id <id>` | Use an exact project session ID; warn and create it when missing |
|
|
268
|
-
| `--fork <path\|id>` | Fork a session file or partial UUID into a new session |
|
|
269
|
-
| `--session-dir <dir>` | Custom session storage directory |
|
|
270
|
-
| `--name <name>`, `-n <name>` | Set the session display name |
|
|
271
|
-
| `--no-session` | Ephemeral mode; do not save |
|
|
181
|
+
Moved to [CLI reference](/reference/cli#session-options).
|
|
272
182
|
|
|
273
183
|
### Tool Options
|
|
274
184
|
|
|
275
|
-
|
|
276
|
-
|--------|-------------|
|
|
277
|
-
| `--tools <list>`, `-t <list>` | Allowlist specific built-in, extension, and custom tools; mandatory `intercom` remains available |
|
|
278
|
-
| `--exclude-tools <list>`, `-xt <list>` | Denylist specific built-in, extension, and custom tools; mandatory `intercom` cannot be excluded |
|
|
279
|
-
| `--no-builtin-tools`, `-nbt` | Disable built-in tools but keep extension/custom tools enabled |
|
|
280
|
-
| `--no-tools`, `-nt` | Disable every tool except mandatory `intercom` |
|
|
281
|
-
|
|
282
|
-
Default built-in tools: `read`, `bash`, `edit`, `write`, `find`, `search`, `ask_user_question`, `todo`, plus `powershell` on native Windows when a PowerShell executable is available. `find.paths` accepts directories, files, or glob paths such as `*.ts` and honors `timeout`; `search` accepts `pattern`, optional `paths`, `i`, `gitignore`, and `skip` for regex content-search pagination. Use `--exclude-tools` to disable one or more non-mandatory tools while leaving the rest available, for example `atomic --exclude-tools ask_user_question`. The `defaultTools` setting selects which built-in tools a session starts with; `--tools` replaces that default with a strict allowlist over non-mandatory built-in, custom, and extension tools; `--no-builtin-tools` removes only built-ins; `--no-tools` removes every tool except ordinary bundled `intercom`. `ls` remains available as an SDK compatibility tool but is not enabled by default.
|
|
185
|
+
Moved to [CLI reference](/reference/cli#tool-options).
|
|
283
186
|
|
|
284
187
|
### Project Trust Options
|
|
285
188
|
|
|
286
|
-
|
|
287
|
-
|--------|-------------|
|
|
288
|
-
| `--approve`, `-a` | Trust project-local files/resources for this run |
|
|
289
|
-
| `--no-approve`, `-na` | Ignore project-local files/resources for this run |
|
|
290
|
-
|
|
291
|
-
Project trust gates `.atomic`/legacy `.pi` project resources, project package settings, project-local context files, and `.agents/skills` discovered from the project tree. Saved trust decisions can be managed with `/trust`; see [Security](/security).
|
|
189
|
+
Moved to [CLI reference](/reference/cli#project-trust-options).
|
|
292
190
|
|
|
293
191
|
### Resource Options
|
|
294
192
|
|
|
295
|
-
|
|
296
|
-
|--------|-------------|
|
|
297
|
-
| `-e`, `--extension <source>` | Load an extension from path, npm, or git; repeatable |
|
|
298
|
-
| `--no-extensions`, `-ne` | Disable optional extension discovery; mandatory bundled Intercom remains loaded |
|
|
299
|
-
| `--skill <path>` | Load a skill; repeatable |
|
|
300
|
-
| `--no-skills`, `-ns` | Disable skill discovery |
|
|
301
|
-
| `--prompt-template <path>` | Load a prompt template; repeatable |
|
|
302
|
-
| `--no-prompt-templates`, `-np` | Disable prompt template discovery |
|
|
303
|
-
| `--theme <path>` | Load a theme; repeatable |
|
|
304
|
-
| `--no-themes` | Disable theme discovery |
|
|
305
|
-
| `--no-context-files`, `-nc` | Disable context-file discovery and loading |
|
|
306
|
-
|
|
307
|
-
Combine `--no-*` with explicit flags to load exactly what you need, ignoring settings. Example:
|
|
308
|
-
|
|
309
|
-
```bash
|
|
310
|
-
atomic --no-extensions -e ./my-extension.ts
|
|
311
|
-
```
|
|
193
|
+
Moved to [CLI reference](/reference/cli#resource-options).
|
|
312
194
|
|
|
313
195
|
### Other Options
|
|
314
196
|
|
|
315
|
-
|
|
316
|
-
|--------|-------------|
|
|
317
|
-
| `--system-prompt <text>` | Replace default prompt; context files and skills are still appended |
|
|
318
|
-
| `--append-system-prompt <text>` | Append to system prompt |
|
|
319
|
-
| `--use-theme <name[/name]>` | Set the interactive theme for this run without saving it; see [Themes](/themes#initial-theme) |
|
|
320
|
-
| `--offline` | Disable startup network operations, including update checks, package updates, and telemetry |
|
|
321
|
-
| `--verbose` | Force verbose startup |
|
|
322
|
-
| `-h`, `--help` | Show help |
|
|
323
|
-
| `-v`, `--version` | Show version |
|
|
197
|
+
Moved to [CLI reference](/reference/cli#other-options).
|
|
324
198
|
|
|
325
199
|
### File Arguments
|
|
326
200
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
```bash
|
|
330
|
-
atomic @prompt.md "Answer this"
|
|
331
|
-
atomic -p @screenshot.png "What's in this image?"
|
|
332
|
-
atomic @code.ts @test.ts "Review these files"
|
|
333
|
-
```
|
|
201
|
+
Moved to [CLI reference](/reference/cli#file-arguments).
|
|
334
202
|
|
|
335
203
|
### Examples
|
|
336
204
|
|
|
337
|
-
|
|
338
|
-
# Interactive with initial prompt
|
|
339
|
-
atomic "List all .ts files in src/"
|
|
340
|
-
|
|
341
|
-
# Non-interactive
|
|
342
|
-
atomic -p "Summarize this codebase"
|
|
343
|
-
|
|
344
|
-
# Non-interactive with piped stdin
|
|
345
|
-
cat README.md | atomic -p "Summarize this text"
|
|
346
|
-
|
|
347
|
-
# Different model
|
|
348
|
-
atomic --provider openai --model gpt-4o "Help me refactor"
|
|
349
|
-
|
|
350
|
-
# Model with provider prefix
|
|
351
|
-
atomic --model openai/gpt-4o "Help me refactor"
|
|
352
|
-
|
|
353
|
-
# Model with thinking level shorthand
|
|
354
|
-
atomic --model sonnet:high "Solve this complex problem"
|
|
355
|
-
|
|
356
|
-
# Limit model cycling
|
|
357
|
-
atomic --models "claude-*,gpt-4o"
|
|
358
|
-
|
|
359
|
-
# Read-only mode
|
|
360
|
-
atomic --tools read,search,find,ls -p "Review the code"
|
|
361
|
-
```
|
|
205
|
+
Moved to [CLI reference](/reference/cli#examples).
|
|
362
206
|
|
|
363
207
|
### Environment Variables
|
|
364
208
|
|
|
365
|
-
|
|
366
|
-
|----------|-------------|
|
|
367
|
-
| `AI_AGENT` | Set to `atomic` by the CLI, RPC, and compiled binary entry points and in every Atomic-owned child-process environment so generic tooling can identify Atomic processes; child environments override caller-supplied values without mutating the caller's environment object |
|
|
368
|
-
| `ATOMIC_CODING_AGENT_DIR` | Override config directory; default is `~/.atomic/agent`. Bundled intercom runtime/config files live under its `intercom/` subdirectory |
|
|
369
|
-
| `ATOMIC_CODING_AGENT_SESSION_DIR` | Override session storage directory; overridden by `--session-dir` |
|
|
370
|
-
| `ATOMIC_PACKAGE_DIR` | Override package directory, useful for Nix/Guix store paths |
|
|
371
|
-
| `ATOMIC_REDUCED_MOTION` | Set to `1` to skip startup choreography and render the ordinary working identity as a static regular accent `∀` without a timer |
|
|
372
|
-
| `ATOMIC_OFFLINE` | Disable startup network operations, including update checks, package update checks, and install/update telemetry |
|
|
373
|
-
| `ATOMIC_SKIP_VERSION_CHECK` | Skip the Atomic version update check at startup. This prevents the latest-version request |
|
|
374
|
-
| `ATOMIC_TELEMETRY` | Override install/update telemetry: `1`/`true`/`yes` or `0`/`false`/`no`. This does not disable update checks |
|
|
375
|
-
| `NODE_COMPILE_CACHE` | Override the directory for Node's persistent compile cache, which Atomic enables automatically on Node >= 22.8 to speed up startup (most noticeable on Windows). Set `NODE_DISABLE_COMPILE_CACHE=1` to opt out |
|
|
376
|
-
| `PI_CACHE_RETENTION` | Provider/upstream-specific prompt-cache retention knob; set to `long` where supported |
|
|
377
|
-
| `ATOMIC_NO_PTY` | Set to `1` to disable PTY use for bash commands (`PI_NO_PTY` is a legacy alias) |
|
|
378
|
-
| `VISUAL`, `EDITOR` | External editor for CTRL+G |
|
|
379
|
-
|
|
380
|
-
Every bash execution runs in the foreground and receives one execution-time snapshot of the active session:
|
|
381
|
-
|
|
382
|
-
| Atomic variable | Exact compatibility alias | Value |
|
|
383
|
-
|-----------------|---------------------------|-------|
|
|
384
|
-
| `ATOMIC_SESSION_ID` | `PI_SESSION_ID` | Active session ID |
|
|
385
|
-
| `ATOMIC_SESSION_FILE` | `PI_SESSION_FILE` | Active session JSONL path; omitted for unsaved sessions |
|
|
386
|
-
| `ATOMIC_PROVIDER` | `PI_PROVIDER` | Active model provider; omitted when no model is selected |
|
|
387
|
-
| `ATOMIC_MODEL` | `PI_MODEL` | Active model ID; omitted when no model is selected |
|
|
388
|
-
| `ATOMIC_REASONING_LEVEL` | `PI_REASONING_LEVEL` | Active reasoning level |
|
|
389
|
-
|
|
390
|
-
The snapshot is taken when the command executes, not when the tool is created, so resumed sessions, workflow stages, isolated sessions, model changes, and concurrent sessions cannot reuse stale metadata. Atomic preserves all unrelated inherited and caller-supplied environment variables; only the ten names above are cleared and overlaid. Factory-created bash tools expose the same metadata by default and can set `exposeSessionEnvironment: false` to omit it.
|
|
391
|
-
|
|
392
|
-
`PI_*` aliases are also supported for app-specific `ATOMIC_*` variables for legacy compatibility. For example, [Intercom](/intercom) honors `PI_CODING_AGENT_DIR` when `ATOMIC_CODING_AGENT_DIR` is unset and still reads legacy `~/.pi/agent/intercom/config.json` when the Atomic config is absent. `PI_CACHE_RETENTION` is not one of those aliases and has no `ATOMIC_*` equivalent. Use `PI_CACHE_RETENTION=long` when configuring prompt-cache retention for providers/upstreams that support long-lived caches. Intercom's default broker starter works across Node-based installs, Bun source checkouts, and standalone Atomic binaries without requiring `npx`, `tsx`, or `bun` to be present on `PATH`; custom broker commands remain explicit opt-in overrides.
|
|
209
|
+
Moved to [CLI reference](/reference/cli#environment-variables).
|
|
393
210
|
|
|
394
211
|
## Design Principles
|
|
395
212
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Fetching web content
|
|
2
|
+
|
|
3
|
+
Atomic's bundled `fetch_content` tool reads webpages, PDFs, GitHub repositories, YouTube videos, and local video files.
|
|
4
|
+
|
|
5
|
+
## Arguments
|
|
6
|
+
|
|
7
|
+
Always pass the lowercase `urls` field as a nonempty array of strings, even for one URL:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{"urls": ["https://example.com/article"]}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For multiple pages:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{"urls": ["https://example.com/one", "https://example.com/two"]}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
For a video, include the question in `prompt`:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{"urls": ["/path/to/recording.mp4"], "prompt": "What error appears on screen?"}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Existing prompts or integrations using `{"url": "..."}` must change to `{"urls": ["..."]}`. The singular `url` field is no longer accepted by `fetch_content`. This does not change the `url` selector on `get_search_content`.
|
|
26
|
+
|
|
27
|
+
Atomic can normalize a scalar `urls` string into a one-item array. Always use the documented array form in prompts and integrations; the legacy `url` field is not normalized.
|
|
28
|
+
|
|
29
|
+
## Troubleshooting
|
|
30
|
+
|
|
31
|
+
If argument validation fails, check that:
|
|
32
|
+
|
|
33
|
+
- The field is `urls`, not `URLs` or `url`.
|
|
34
|
+
- Its value is an array, not a string or an object.
|
|
35
|
+
- The array contains at least one nonempty string.
|
|
36
|
+
- The call has no unrecognized fields.
|
|
37
|
+
|
|
38
|
+
If every URL in a batch fails, the error lists each URL and its cause. Extraction errors may still include partial content, shown as incomplete excerpts. Check the URLs and retry transient failures individually with `fetch_content({ urls: ["<failed URL>"] })`. For blocked pages or repeated extraction failures, try an accessible alternate URL or use `web_search`. `get_search_content` cannot recover missing content from a failed fetch.
|
|
39
|
+
|
|
40
|
+
When fetched content is truncated, follow the returned `get_search_content` call to retrieve the stored content.
|
package/docs/windows.md
CHANGED
|
@@ -20,7 +20,7 @@ Every attempt removes its own `atomic-install-*` staging directory under the Win
|
|
|
20
20
|
|
|
21
21
|
After the script is fetched, it enables TLS 1.2 for its own GitHub requests and restores the caller's prior protocol setting. A downloaded script cannot repair the connection used to fetch itself: on a legacy Windows PowerShell 5.1 host where the literal `irm` command cannot reach GitHub, enable TLS 1.2 in that shell before rerunning the same one-liner.
|
|
22
22
|
|
|
23
|
-
The installer adds the bin directory to the User PATH and the current PowerShell process. Restart the terminal when it finishes so other processes see the new PATH. A custom `ATOMIC_BIN_DIR` containing `;` cannot be one Windows PATH entry, so the installer leaves PATH untouched and prints a direct-run command for `atomic.cmd` instead. If the bin directory already holds a same-stem launcher that `PATHEXT` resolves before `atomic.cmd`, such as a stale `atomic.exe` from an older Node-based install, the installer reports it and stops before downloading anything; remove that entry and rerun. Because the shim is `atomic.cmd`, `PATHEXT` must include `.CMD` for bare `atomic` to resolve; if it does not, the installer says so and stops rather than reporting a success you could not use. An unexpected regular `current` entry under `ATOMIC_INSTALL_DIR`, or a regular `atomic-current` entry under `ATOMIC_BIN_DIR`, is reported and left untouched instead of being moved or deleted. A pinned `-Ref` is honored literally: if GitHub answers with a different release tag, the install stops before downloading anything. Package-manager installation remains available but requires Node.js; see the [Quickstart](/
|
|
23
|
+
The installer adds the bin directory to the User PATH and the current PowerShell process. Restart the terminal when it finishes so other processes see the new PATH. A custom `ATOMIC_BIN_DIR` containing `;` cannot be one Windows PATH entry, so the installer leaves PATH untouched and prints a direct-run command for `atomic.cmd` instead. If the bin directory already holds a same-stem launcher that `PATHEXT` resolves before `atomic.cmd`, such as a stale `atomic.exe` from an older Node-based install, the installer reports it and stops before downloading anything; remove that entry and rerun. Because the shim is `atomic.cmd`, `PATHEXT` must include `.CMD` for bare `atomic` to resolve; if it does not, the installer says so and stops rather than reporting a success you could not use. An unexpected regular `current` entry under `ATOMIC_INSTALL_DIR`, or a regular `atomic-current` entry under `ATOMIC_BIN_DIR`, is reported and left untouched instead of being moved or deleted. A pinned `-Ref` is honored literally: if GitHub answers with a different release tag, the install stops before downloading anything. Package-manager installation remains available but requires Node.js; see the [Quickstart](/getting-started/installation#package-managers).
|
|
24
24
|
|
|
25
25
|
Atomic uses a Bash shell for the `bash` tool. For that tool, Atomic checks these locations in order:
|
|
26
26
|
|
|
@@ -48,6 +48,7 @@ Atomic mounts the themed startup identity and focused editor before waiting for
|
|
|
48
48
|
The isolated engine binds a mandatory minimal runtime first, with Intercom available, then stages bundled workflows, subagents, MCP, web access, optional tools, provider overrides, skills, prompts, and themes. Prompt dispatch, extension commands, model/resource commands, session replacement, and tool-aware RPC operations wait for a generation-scoped resource-ready gate. After a failure, `/reload` starts a fresh transactional resource attempt instead of waiting forever on the rejected gate. `session_start` messages wait too. A failed transactional candidate does not publish host-managed settings, providers, tools, resources, event subscriptions, or system-prompt state. Extension-owned session-scoped objects remain shared by design and are not rolled back.
|
|
49
49
|
|
|
50
50
|
The same source path is used for package-manager and release-archive builds. Node installs retain Node's persistent compile cache and its `NODE_DISABLE_COMPILE_CACHE=1` coverage opt-out. Release builds syntax-minify the shared application sidecar without shortening identifiers and compile the launcher with bytecode on Windows x64 and ARM64, matching Linux and macOS — but Windows bytecode launchers must still be compiled on a Windows host, preserving the safeguard from Bun 1.4.0. Despite the embedded-bytecode alignment fix ([#26299](https://github.com/oven-sh/bun/pull/26299)) and integrity fallback ([#31961](https://github.com/oven-sh/bun/pull/31961)), the same compile cross-run from a non-Windows host produced an executable that segfaulted before user code ran, even on `--version`: the 0.9.18-alpha.1 payload was built on Linux, so the shipped Windows launcher crashed while the Windows-hosted smoke build passed. `publish.yml` therefore builds both Windows archives on the Windows runner and the Linux release-payload job runs `build-binaries.sh --skip-windows`. The pinned Bun 1.4.2 probe cross-compiles `bun-windows-x64-baseline` and `bun-windows-arm64` launchers and verifies their PE machine types. Cross-compilation does not prove runtime compatibility, so release validation must still exercise the full archive, TUI, workflows, tools, extensions, workers, and native add-ons on Windows x64 and real Windows ARM64 hardware. No measured Windows speedup is claimed yet.
|
|
51
|
+
|
|
51
52
|
## Filesystem Watchers
|
|
52
53
|
|
|
53
54
|
On Windows, Atomic canonicalizes paths before starting native filesystem watchers. If a watcher target cannot be canonicalized or still contains an unsafe 8.3 short-name component such as `USERNA~1`, Atomic avoids native `fs.watch` for that target and uses polling where the feature supports it. This protects long-running sessions, footer git status refreshes, and custom theme reloads from Windows/libuv path-prefix assertion crashes.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "API reference"
|
|
3
|
+
description: "Exhaustive workflow, stage, and context contracts."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Workflow API Reference
|
|
2
7
|
|
|
3
8
|
Use this reference while authoring definitions or integrating the workflow SDK programmatically. For a continuous first workflow, start with [Custom Workflow Authoring](/workflows/authoring).
|
|
@@ -432,7 +437,7 @@ Callbacks that spawn child processes or perform network I/O need an explicit `ti
|
|
|
432
437
|
|
|
433
438
|
With `timeoutMs`, each retry receives a fresh signal and deadline. Run cancellation and operator abort remain cancellation rather than timeout, and a callback that completes before its deadline is unchanged. Omitting `timeoutMs` keeps the existing unbounded callback path.
|
|
434
439
|
|
|
435
|
-
See [`ctx.tool` — durable cached tool execution](/workflows/operations#
|
|
440
|
+
See [`ctx.tool` — durable cached tool execution](/workflows/operations#ctx-tool-—-durable-cached-tool-execution) for durable failure replay, process-output safety, explicit repair handoffs, and cancellation behavior.
|
|
436
441
|
|
|
437
442
|
### `ctx.exit(options?)`
|
|
438
443
|
|
|
@@ -454,7 +459,7 @@ interface WorkflowExitOptions<TOutputs extends WorkflowOutputValues = WorkflowOu
|
|
|
454
459
|
|
|
455
460
|
Intentionally ends the current run from any call depth. `status` defaults to `"completed"`; `failed` exits default to `resumable: false`, and `resumable: true` keeps the durable run eligible for a later retry. Supplying `resumable` with another status records a non-resumable authoring failure. The runtime persists and displays `reason`, and `outputs` may provide only declared, schema-valid, serializable output keys.
|
|
456
461
|
|
|
457
|
-
See [Early exit with `ctx.exit()`](/workflows/authoring#early-exit-with-
|
|
462
|
+
See [Early exit with `ctx.exit()`](/workflows/authoring#early-exit-with-ctx-exit) for snapshotting, cleanup, replay, and race semantics.
|
|
458
463
|
|
|
459
464
|
## Task and Stage Options
|
|
460
465
|
|
|
@@ -602,7 +607,7 @@ readonly schema?: TSchema;
|
|
|
602
607
|
|
|
603
608
|
Enables a schema-specific, single-use final-answer tool for that item. `ctx.stage`, `ctx.task`, `ctx.chain`, and `ctx.parallel` items accept a TypeBox schema or a plain JSON Schema descriptor object. The schema may describe an object, array, or primitive, and the captured JSON value becomes the schema-backed `stage.prompt(...)` result or `WorkflowTaskResult.structured`; task text remains formatted JSON for handoffs.
|
|
604
609
|
|
|
605
|
-
A schema-backed `StageContext` supports one `prompt()` call, so create another stage for another structured prompt. Missing or invalid `structured_output` calls receive up to three corrective follow-ups quoting the contract error and reminding the model to call `structured_output` instead of replying with plain JSON. That budget is per model candidate: a candidate that spends the initial prompt and all three follow-ups without a valid call is treated as a failed candidate and the stage advances to the next entry in [`fallbackModels`](#fallbackmodels
|
|
610
|
+
A schema-backed `StageContext` supports one `prompt()` call, so create another stage for another structured prompt. Missing or invalid `structured_output` calls receive up to three corrective follow-ups quoting the contract error and reminding the model to call `structured_output` instead of replying with plain JSON. That budget is per model candidate: a candidate that spends the initial prompt and all three follow-ups without a valid call is treated as a failed candidate and the stage advances to the next entry in [`fallbackModels`](#fallbackmodels-/-fallbackthinkinglevels), which receives the original stage prompt and its own fresh budget. The recorded attempt error names what the turn actually looked like — no assistant message after the prompt, an assistant message with empty text, or the `structured_output` validation error — so a repeated external cause is attributable. With no fallback candidate left, the stage fails with the contract error rather than completing. An explicit tool allowlist automatically receives the final-answer tool, while items without `schema` do not.
|
|
606
611
|
|
|
607
612
|
When `schema` and `output` are both configured, the successful `structured_output` turn carries two separate results. All ordinary assistant text blocks from that exact message, in order, are written to the artifact; the successful tool arguments become the typed schema-backed workflow value. The runtime snapshots both sides against the exact successful tool-call id rather than searching by tool name, so corrective attempts and later admitted turns cannot replace either result, and it never serializes the tool arguments into the artifact. When the successful message carries no ordinary text — including when a model-fallback session recreation leaves the live session without that message — the artifact falls back to the most recent earlier assistant text that made no `structured_output` call; if no such text exists the artifact is empty and its receipt includes the standard empty-artifact warning. Stages with `schema` but no `output` keep their existing result-text behavior. Builtin pattern workflows that hand structured decisions to later stages (`adversarial-verification`, `generate-and-filter`, `tournament`, `loop-until-done`) persist those decisions themselves, so their `*.json` inter-stage artifacts remain machine-readable JSON.
|
|
608
613
|
|
|
@@ -679,7 +684,7 @@ Selects or creates a reusable same-repository Git worktree for `ctx.stage`, `ctx
|
|
|
679
684
|
- **Caching and diagnostics:** Temporary isolation defaults to the runner invocation cwd, and relative task cwd values resolve there. Reusable setup is cached by canonical repository and target identity independently of equivalent path spelling or `baseBranch`, revalidates checkout identity before reuse, retries one transient timeout from read-only repository probes, and reports the exact Git command, cwd, timeout, elapsed time, exit status or signal, and spawn error details on failure.
|
|
680
685
|
- **Security boundary:** Worktrees isolate checkouts and cwd, not the operating system. Use a container, VM, or another OS-enforced boundary for untrusted code that can race or mutate arbitrary paths.
|
|
681
686
|
|
|
682
|
-
For lower-level integrations, [`setupGitWorktree(options)`](#
|
|
687
|
+
For lower-level integrations, [`setupGitWorktree(options)`](#setupgitworktree-options) returns the validated and remapped setup result.
|
|
683
688
|
|
|
684
689
|
### `sessionDir`
|
|
685
690
|
|
|
@@ -738,6 +743,8 @@ readonly failFast?: boolean;
|
|
|
738
743
|
|
|
739
744
|
`WorkflowParallelOptions` uses `concurrency` to bound active tasks in an authored `ctx.parallel(...)`. When omitted, the runtime uses the workflow's `defaultConcurrency` setting, which defaults to `3`; explicit configuration and per-call concurrency remain honored. Parallel execution is fail-fast unless `failFast` is explicitly `false`.
|
|
740
745
|
|
|
746
|
+
For a dynamic parallel step array that cannot be scanned, set `possibleStageNames: ["review-*"]` in the call's options. Supply a literal array covering every possible step name; `*` matches a varying name component. This metadata only controls advance stage discovery, not execution or concurrency. Named helpers can forward `options.possibleStageNames` directly to their parallel calls when every direct caller supplies a literal array, including through named relative imports. Use plain data properties in those caller options; options methods/getters, mutation, and side-effecting parameter defaults are not supported for discovery. Opaque forwarding and unannotated dynamic calls still produce discovery warnings.
|
|
747
|
+
|
|
741
748
|
### Stage prompt options (`StagePromptOptions`)
|
|
742
749
|
|
|
743
750
|
```typescript
|
|
@@ -158,7 +158,7 @@ The subdirectory is for cohesive, reusable support code, not a requirement to gi
|
|
|
158
158
|
|
|
159
159
|
### Workflow and extension responsibilities
|
|
160
160
|
|
|
161
|
-
Evaluate Atomic extension hooks when a workflow needs fine-grained, cross-cutting tool or session event control. Workflow TypeScript owns the inspectable DAG, stages, handoffs, durable `ctx.tool` side effects, and gates. Extension hooks own cross-cutting session and model-tool policy such as `tool_call` interception, input mutation, or blocking; `tool_result` transformation; context and provider hooks; lifecycle observation; or reusable custom tools. Use hooks only when cross-stage or cross-workflow event control is materially clearer than embedding the policy in each stage. Do not require a companion extension for ordinary workflow logic. See the authoritative [extension event documentation](/extensions#events) for hook contracts and ordering.
|
|
161
|
+
Evaluate Atomic extension hooks when a workflow needs fine-grained, cross-cutting tool or session event control. Workflow TypeScript owns the inspectable DAG, stages, handoffs, durable `ctx.tool` side effects, and gates. Extension hooks own cross-cutting session and model-tool policy such as `tool_call` interception, input mutation, or blocking; `tool_result` transformation; context and provider hooks; lifecycle observation; or reusable custom tools. Use hooks only when cross-stage or cross-workflow event control is materially clearer than embedding the policy in each stage. Do not require a companion extension for ordinary workflow logic. See the authoritative [extension event documentation](/extensions/events#events) for hook contracts and ordering.
|
|
162
162
|
|
|
163
163
|
When a workflow depends on a companion extension, make that dependency explicit and package and document the extension with the workflow. If stages use `tools` allowlists, include any custom tools provided by the extension. Document the hook-driven behavior and keep the graph, stage contracts, artifacts, gates, and stop conditions visible in the workflow entry file so readers can distinguish inspectable workflow orchestration from event policy.
|
|
164
164
|
|
|
@@ -340,6 +340,8 @@ outputs: {
|
|
|
340
340
|
|
|
341
341
|
The same rule applies to inputs: `inputs: { counts: Type.Array(Type.Number()) }` makes `ctx.inputs.counts` a `number[]`, while `Type.Array(Type.Unknown())` only gives you `unknown[]`.
|
|
342
342
|
|
|
343
|
+
<a id="type-unsafe-t-escape-hatch-for-deeply-nested-values"></a>
|
|
344
|
+
|
|
343
345
|
#### `Type.Unsafe<T>()` escape hatch for deeply-nested values
|
|
344
346
|
|
|
345
347
|
When you already have a precise TypeScript type for a deeply-nested serializable value and don't want to hand-write the equivalent TypeBox schema, wrap a permissive runtime schema with `Type.Unsafe<MyType>(...)`. The **static** type becomes exactly `MyType` (so `ctx.inputs`, the `run` return, and `child.outputs` stay precise), while the **runtime** check stays as lenient as the wrapped schema. Use a `type` alias rather than an `interface` for the wrapped type — an `interface` has no implicit index signature, so it does not satisfy the serializable-output constraint:
|
|
@@ -438,7 +440,7 @@ interface StageSessionRuntime {
|
|
|
438
440
|
|
|
439
441
|
A session announces its queue by `queue_update`, so a queue that exists before Atomic's listeners reach that session is announced to nobody — which happens when a retiring session hands its pending messages to the session replacing it, and when a retained session is reopened for post-mortem chat holding what it was queued. Atomic reads these two methods once, as it attaches a session, and replays the missed snapshot to that stage's listeners; every later change still arrives as an ordinary event. An adapter that omits them loses nothing it had before: only a queue predating the attach is invisible, and a session that starts empty never had one.
|
|
440
442
|
|
|
441
|
-
Externally produced traffic has a separate lifecycle rule.
|
|
443
|
+
Externally produced traffic has a separate lifecycle rule. While a workflow stage generation is still open, Intercom messages are admitted as priority input that cancels the current model call or cancellable tool and continues in the same stage generation; subagent completion notices retain the stage AgentSession's native steering/follow-up queue. For a busy stage, admission into the generation boundary happens synchronously before the exact foreground subagent owner's probe/commit detach handshake; Intercom cancellation and model-visible delivery wait inside that admitted delivery until the handshake is claimed or falls back after an unclaimed/vanished owner. A commit accepted within a parallel foreground group releases aggregate supervision for every active sibling while retaining their process and eventual-result ownership. Reserving admission before the asynchronous handshake prevents terminal close from overtaking an in-flight Intercom delivery, while waiting inside the reservation prevents a blocking child request from queueing behind either a single foreground tool call or a parallel aggregate still waiting on another child. The stage drains already-admitted work before publishing its terminal snapshot, including schema-backed turns that have already called `structured_output`.
|
|
442
444
|
|
|
443
445
|
Closing the generation is atomic with admission: a notification admitted first belongs to that stage. Stage-owned children that are still running are cancelled at close, and their later findings or completion notifications cannot reopen the completed stage or escape through the main-chat notification path. Ordinary notifications not owned by that stage arriving after close retain the existing single main-chat route. A blocking sibling `intercom.ask` is the deliberate exception: when the completed stage retains a valid conversation, Atomic schedules a post-mortem turn in that conversation so it can inspect the exact ask and reply without changing terminal workflow state. Failed running-stage admission and failed post-mortem admission return correlated actionable errors to the asker instead of consuming the full reply timeout.
|
|
444
446
|
|
|
@@ -43,7 +43,7 @@ Atomic will:
|
|
|
43
43
|
- ask clarifying questions when stage purpose, inputs, models, or handoffs are ambiguous,
|
|
44
44
|
- write a `.atomic/workflows/<name>.ts` file using `workflow({...})`,
|
|
45
45
|
- pick `ctx.task` / `ctx.chain` / `ctx.parallel` / `ctx.ui` per the [WorkflowContext primitives](/workflows/api-reference#workflowcontext) and [task options](/workflows/api-reference#task-and-stage-options) reference,
|
|
46
|
-
- use `ctx.tool(name, args, fn)` for workflow-owned side effects so completed operations are durably checkpointed and do not run again after resume (see [`ctx.tool`](/workflows/operations#
|
|
46
|
+
- use `ctx.tool(name, args, fn)` for workflow-owned side effects so completed operations are durably checkpointed and do not run again after resume (see [`ctx.tool`](/workflows/operations#ctx-tool-—-durable-cached-tool-execution)),
|
|
47
47
|
- run `/workflow reload` so Atomic rediscovers the workflow resource and you can launch it immediately,
|
|
48
48
|
- then report the generated workflow folder so you can inspect the code it wrote, using `Custom workflow created. You can inspect its code at: <workflow-folder-path>` (for example, `.atomic/workflows/`); Atomic does this only for newly created custom workflows, never builtin or pre-existing workflows.
|
|
49
49
|
|
|
@@ -157,7 +157,7 @@ Goal persists the literal objective and immutable acceptance criteria in a run l
|
|
|
157
157
|
Goal reviewers derive checks from the literal objective before consulting implementation receipts, inspect the actual checkout delta, and report commands, observed output, and file:line evidence rather than internal reasoning. Shared contracts cover acceptance-matrix traceability, contract-fidelity risks, end-to-end and QA-video evidence, and independent verification. `stop_review_loop` is the authoritative convergence signal: it remains `false` for P0–P2 findings, any `required_by_objective` finding, or unproven implementation/validation requirements; it becomes `true` only when independent evidence proves the objective and only non-blocking or authorized post-approval work remains. The deterministic reducer consumes that signal without reinterpreting free-form prose.
|
|
158
158
|
Goal and Ralph worker, reviewer and final handoff prompts share [verification and evidence guidance](/workflows/verification): browser, terminal and desktop/simulator routing; environment-aware setup and truthful fallback; qlty initialization or manual offline configuration selected from user/repository priorities; and authorized native GitHub media attachment with hosted-link confirmation. Existing config, read-only tasks and authoritative project checks remain protected. Explicit task-scoped inline/no-workflow steering overrides workflow-first defaults and requires safe reconciliation of active work before continuing without duplicate execution.
|
|
159
159
|
Both workflows also share repository-intent mining guidance: implementers and reviewers infer maintainer and requesting-user conventions from repository behavior — git history (including `git log --show-signature`), merged PRs, issues and their comments, review comments, commit subjects and trailers, and CI/branch-protection config — covering norms written docs rarely state, such as commit signing, message style and issue linking, changelog discipline, and review etiquette. The dominant, recent, intentional pattern wins over accidental drift, the requesting user's own activity weighs highest, implementers match the inferred conventions (an unsigned commit in a signed history is a miss, not a preference), and reviewers report deviations as convention findings. Behavioral evidence fills contract gaps; it never overrides the literal objective, acceptance criteria, or explicit `AGENTS.md`/`CLAUDE.md` guidance.
|
|
160
|
-
Goal and Ralph share the same low-confidence finding re-verification and per-round convergence evidence, documented under [`ralph`](#ralph).
|
|
160
|
+
Goal and Ralph share the same low-confidence finding re-verification and per-round convergence evidence, documented under [`ralph`](/workflows/builtins#ralph).
|
|
161
161
|
|
|
162
162
|
| Input | Type | Required | Default | Description |
|
|
163
163
|
|---|---|---|---|---|
|
|
@@ -168,16 +168,16 @@ Surface behavior:
|
|
|
168
168
|
- **Working animation lifecycle** - Ordinary attached-stage work keeps the same exact one-cell `∀` visible while following the active workflow theme's dark → accent → bright/bold → accent → dark luminance ramp every 88ms. Every agent and SDK turn resets to the dark regular phase with a fresh lifecycle-relative cadence; turn, terminal, error, replacement, and disposal cleanup stop the active timer without stale repaint. In an eligible retained-stage chat, every accepted idle follow-up — including a workflow-authored `stage.sendUserMessage(...)` after a prior turn ended — shows Working on admission or attach, including while Atomic restores a saved retained conversation, and keeps it through prompt startup, pre-turn compaction, and agent handoff. Attaching or remounting mid-delivery paints immediately rather than waiting for the turn's first event. A message queued into a live turn with `followUp`/`steer` uses that turn's existing status instead of starting a new one. A no-turn result, prompt or restore error, or terminal completion removes it; once the last accepted post-terminal delivery settles, a leftover start cannot bring it back. An accepted manual retry clears stale status from the prior prompt before showing new pre-stream activity. `NO_COLOR` retains regular/bold activity without foreground-color escapes. Reduced motion uses a static regular accent `∀` without an animation timer; factual automatic retry, fallback, compaction, cancellation, and error copy retains precedence.
|
|
169
169
|
- **Subagent statusline** - If a subagent is running while the fullscreen workflow graph is open, the graph statusline mirrors its summary so the run remains visible; hide the graph with `h`, leave it with `ctrl+x`, or reconnect later to return to the full below-editor widget.
|
|
170
170
|
- **Run control** - Use `pause` and `resume` for resumable live work. Pause holds a stage's queued steering and follow-up items in place without dequeuing them or starting continuation; `resume` releases those items once in their existing per-queue order, but queue release alone does not start a model turn. `resume` on a non-paused run reopens the saved snapshot or overlay. Use `quit` to pause a live run gracefully while preserving it for `/workflow resume`. `/workflow pause` selects the active run by default, accepts a full run id or `--all`, and does not open a stage picker. Use the workflow tool's `stageId` for stage or tool-node targeting.
|
|
171
|
-
- **Rediscovery** - Use `/workflow reload` after adding, editing, installing, or removing workflow resources or package manifest workflow entries and you want Atomic to rediscover them in-process ([Reloading workflow resources](#reloading-workflow-resources)).
|
|
171
|
+
- **Rediscovery** - Use `/workflow reload` after adding, editing, installing, or removing workflow resources or package manifest workflow entries and you want Atomic to rediscover them in-process ([Reloading workflow resources](/workflows/operations#reloading-workflow-resources)).
|
|
172
172
|
- **Status listing** - `/workflow status` lists all retained active and terminal top-level runs by default; implementation-owned nested child runs are flattened into their parent workflow rather than listed separately. `/workflow status --all` is retained as a compatibility alias.
|
|
173
173
|
|
|
174
|
-
`/workflows` is the retained-run history alias for `/workflow resume`: with no id it opens the same mixed picker, but the resumable section lists only runs that the resume path can actually accept and the completed section is read-only inspection. A run with no durable checkpoint, missing/pruned artifacts, or explicit deletion is omitted from the resume picker; an explicit `/workflow resume <id>` still returns an explanatory error. It is intentionally different from `/workflow list`, which lists installed workflow definitions. See [`/workflow resume` — cross-session resume selector](
|
|
174
|
+
`/workflows` is the retained-run history alias for `/workflow resume`: with no id it opens the same mixed picker, but the resumable section lists only runs that the resume path can actually accept and the completed section is read-only inspection. A run with no durable checkpoint, missing/pruned artifacts, or explicit deletion is omitted from the resume picker; an explicit `/workflow resume <id>` still returns an explanatory error. It is intentionally different from `/workflow list`, which lists installed workflow definitions. See [`/workflow resume` — cross-session resume selector](#/workflow-resume-—-cross-session-resume-selector) for the full picker semantics.
|
|
175
175
|
|
|
176
176
|
At the supported 40-column terminal minimum, attached stage chats keep the `ctrl+x return to graph` hierarchy hint. The TUI may truncate provider/model context to make room, but it keeps that context separate from the hierarchy hint so the controls stay readable.
|
|
177
177
|
|
|
178
178
|
<p align="center"><img src="../images/workflow-graph.png" alt="Workflow Graph Viewer" width="600" /></p>
|
|
179
179
|
|
|
180
|
-
Human-in-the-loop prompts appear as awaiting-input nodes in the workflow graph, not as ordinary chat modals — see [Lifecycle Notices and Human Input](#lifecycle-notices-and-human-input) for how to find and answer them.
|
|
180
|
+
Human-in-the-loop prompts appear as awaiting-input nodes in the workflow graph, not as ordinary chat modals — see [Lifecycle Notices and Human Input](/workflows/operations#lifecycle-notices-and-human-input) for how to find and answer them.
|
|
181
181
|
|
|
182
182
|
### Skills in attached stage chats
|
|
183
183
|
|
|
@@ -187,7 +187,7 @@ Suggestions use the terminal's default background, including selected rows; acce
|
|
|
187
187
|
|
|
188
188
|
Enter starts an idle turn or steers a streaming turn; Ctrl+F preserves follow-up delivery. The command stays bound to the submitted stage even if you switch panes. Its session performs the existing expansion once, including the selected skill's location, candidate identity, base directory, and trimmed arguments. Relative skill references use the skill directory; tools retain the stage cwd and restrictions. Manually typed commands still work when suggestions are disabled. Unknown bare selectors pass through unchanged, while qualified-resolution and file-read errors appear in the attached chat.
|
|
189
189
|
|
|
190
|
-
Mounted HIL and custom prompts take precedence: a `/skill:` answer is literal prompt input. Blocked stages, read-only archives, and replay do not admit skill messages. Explicit editable [post-mortem chat](#post-mortem-chat-vs-execution-resume) can use its own skills, but cannot revive a workflow node or change the completed DAG. Skill invocation grants no additional delegation or tool authority and does not forward unrelated commands to the parent chat.
|
|
190
|
+
Mounted HIL and custom prompts take precedence: a `/skill:` answer is literal prompt input. Blocked stages, read-only archives, and replay do not admit skill messages. Explicit editable [post-mortem chat](/workflows/operations#post-mortem-chat-vs-execution-resume) can use its own skills, but cannot revive a workflow node or change the completed DAG. Skill invocation grants no additional delegation or tool authority and does not forward unrelated commands to the parent chat.
|
|
191
191
|
|
|
192
192
|
`/tasks` opens the owner task list locally, never a skill or model message. Empty and populated lists use the same compact picker as main chat, without combining tasks from other chats. Enter inspects the selected task; focused actions offer retained transcript inspection, foreground waiting, confirmed cancellation, and stdin when available. Terminal tasks omit live actions. Escape returns to the picker with selection preserved, then to chat. A stage question arriving during inspection remains pending and is shown when you leave the inspector. Task navigation does not create a main-chat input-needed notice; genuine main-chat prompts waiting behind a visible graph still do.
|
|
193
193
|
|
|
@@ -273,6 +273,10 @@ Use slash commands for graph connect and stage attach because those are interact
|
|
|
273
273
|
|
|
274
274
|
### Pausing, quitting, and resuming
|
|
275
275
|
|
|
276
|
+
If a stage is waiting on `ask_user_question`, `/workflow quit <run-id>` or `workflow({ action: "quit", runId: "<run-id>" })` cancels and dismisses that question without requiring an answer. This includes the “Are you ready to move on to the next stage?” question and questions in nested stages. Quit leaves the run paused under the usual resume rules; it does not approve the question or advance downstream work. Questions belonging to other runs are unaffected. After resuming a cancelled readiness question, answer the new question; an old answer cannot restart the run.
|
|
277
|
+
|
|
278
|
+
If pause or quit reports a stage cancellation error, do not assume that stage stopped: check `/workflow status <run-id>` before retrying. A readiness answer already accepted by a stage whose stop failed can continue normally; it does not require resume unless the stage actually paused.
|
|
279
|
+
|
|
276
280
|
Graceful quit is idempotent for an already-paused resumable run. If a run is waiting on `ctx.ui`, quit preserves its current DBOS prompt reservation. Answers cannot advance paused workflow code until explicit resume; checkpointing the answer releases exactly that reservation generation. Concurrent and nested prompts use composed scopes and independent DBOS reservation tokens.
|
|
277
281
|
|
|
278
282
|
When no stage or tool owns the pending await, whole-run `pause` holds the live executor until resume; `quit` retires it at a durability boundary. Neither forcibly stops arbitrary JavaScript outside `ctx.*`; already-started untracked code and non-cancellable I/O may finish later. Control results disclose this limit. An executor-only quit before any checkpoint progress is retained as paused/nonresumable; start a new run only after reconciling any external effects.
|
|
@@ -328,9 +332,9 @@ Passing a stage session's file path to `--session` still opens it explicitly. Cl
|
|
|
328
332
|
|
|
329
333
|
## Workflow activity for extensions
|
|
330
334
|
|
|
331
|
-
Extensions can subscribe with `ctx.observeWorkflowActivity(observer)` and use the typed `workflow_lifecycle`, `workflow_activity_changed`, `workflow_stage_completed`, and `workflow_heartbeat` hooks. See [Workflow activity and lifecycle hooks](/extensions#workflow-activity-and-lifecycle-hooks) for the public types and subscription example.
|
|
335
|
+
Extensions can subscribe with `ctx.observeWorkflowActivity(observer)` and use the typed `workflow_lifecycle`, `workflow_activity_changed`, `workflow_stage_completed`, and `workflow_heartbeat` hooks. See [Workflow activity and lifecycle hooks](/extensions/events#workflow-activity-and-lifecycle-hooks) for the public types and subscription example.
|
|
332
336
|
|
|
333
|
-
The workflows extension publishes activity for its owning session, folding nested runs into full root summaries. Observation is silent and independent of `workflowNotifications.enabled`, `notifyOn`, and the user/agent attribution filters used by chat notices. It neither wakes the model nor adds graph nodes. The built-in [Herdr reporter](/herdr) is one consumer: it reports these root states, combined with agent and approval-prompt activity, to the owning Herdr pane (see its [
|
|
337
|
+
The workflows extension publishes activity for its owning session, folding nested runs into full root summaries. Observation is silent and independent of `workflowNotifications.enabled`, `notifyOn`, and the user/agent attribution filters used by chat notices. It neither wakes the model nor adds graph nodes. The built-in [Herdr reporter](/herdr) is one consumer: it reports these root states, combined with agent and approval-prompt activity, to the owning Herdr pane (see its [setup guidance](/herdr#setup)).
|
|
334
338
|
|
|
335
339
|
| Runtime situation | Root activity |
|
|
336
340
|
| --- | --- |
|
|
@@ -370,7 +374,7 @@ When an active recoverable block is resumed in-process, Atomic dispatches a fres
|
|
|
370
374
|
|
|
371
375
|
Ended recoverable blocks, including reviewer execution failures, use this same in-process continuation path. A resume response that only returns an unchanged blocked snapshot or refuses a non-resumable target reports no progress, not success. Inspect the returned continuation ID rather than assuming the original snapshot became running.
|
|
372
376
|
|
|
373
|
-
Completed top-level `ctx.tool` nodes also replay into the fresh run. See [`ctx.tool` — durable cached tool execution](#
|
|
377
|
+
Completed top-level `ctx.tool` nodes also replay into the fresh run. See [`ctx.tool` — durable cached tool execution](#ctx-tool-—-durable-cached-tool-execution). A fail-closed topology mismatch ends that continuation; the durable source stays blocked and resumable, and the same session can retry after the continuation settles.
|
|
374
378
|
|
|
375
379
|
Attributed control actions on a top-level run report themselves too. `/workflow <name>` emits a `WORKFLOW STARTED` notice (`▶`), `/workflow quit` a `WORKFLOW QUIT` notice (`⏹`, warning tone, carrying a `resumable` field), and `/workflow resume` a `WORKFLOW RESUMED` notice (`▶`). These travel the same steer delivery, capped-backoff retry, and notice-card path as the failure notice. The quit text states that the stop was deliberate and user-requested and tells the model not to resume the run or take the work over unless asked, with `/workflow resume <run-id>` as the card hint; the resumed text does not, because the run is progressing again.
|
|
376
380
|
|