@bastani/atomic 0.5.18-0 → 0.5.19-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/workflow-creator/SKILL.md +110 -1
- package/.agents/skills/workflow-creator/references/workflow-inputs.md +10 -0
- package/.mcp.json +9 -0
- package/.opencode/opencode.json +5 -2
- package/README.md +394 -645
- package/assets/settings.schema.json +0 -20
- package/dist/sdk/components/attached-statusline.d.ts +13 -0
- package/dist/sdk/components/attached-statusline.d.ts.map +1 -0
- package/dist/sdk/components/header.d.ts.map +1 -1
- package/dist/sdk/components/session-graph-panel.d.ts.map +1 -1
- package/dist/sdk/components/statusline.d.ts +1 -3
- package/dist/sdk/components/statusline.d.ts.map +1 -1
- package/dist/sdk/providers/claude.d.ts +16 -5
- package/dist/sdk/providers/claude.d.ts.map +1 -1
- package/dist/sdk/runtime/executor.d.ts +63 -0
- package/dist/sdk/runtime/executor.d.ts.map +1 -1
- package/dist/sdk/runtime/tmux.d.ts +0 -9
- package/dist/sdk/runtime/tmux.d.ts.map +1 -1
- package/dist/services/config/atomic-config.d.ts +1 -7
- package/dist/services/config/atomic-config.d.ts.map +1 -1
- package/dist/services/config/definitions.d.ts +0 -45
- package/dist/services/config/definitions.d.ts.map +1 -1
- package/dist/services/config/index.d.ts +1 -1
- package/dist/theme/colors.d.ts +33 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/package.json +3 -2
- package/src/cli.ts +16 -1
- package/src/commands/cli/chat/index.ts +1 -1
- package/src/commands/cli/footer.tsx +118 -0
- package/src/commands/cli/init/index.ts +6 -89
- package/src/commands/cli/workflow-command.test.ts +146 -0
- package/src/commands/cli/workflow.ts +43 -7
- package/src/completions/bash.ts +3 -8
- package/src/completions/fish.ts +1 -3
- package/src/completions/powershell.ts +1 -17
- package/src/completions/zsh.ts +0 -2
- package/src/scripts/bundle-configs.ts +0 -12
- package/src/sdk/components/attached-statusline.tsx +33 -0
- package/src/sdk/components/header.tsx +16 -2
- package/src/sdk/components/session-graph-panel.tsx +10 -51
- package/src/sdk/components/statusline.tsx +0 -17
- package/src/sdk/providers/claude.ts +179 -177
- package/src/sdk/runtime/executor-entry.ts +3 -1
- package/src/sdk/runtime/executor.test.ts +292 -1
- package/src/sdk/runtime/executor.ts +222 -1
- package/src/sdk/runtime/tmux.conf +35 -4
- package/src/sdk/runtime/tmux.ts +0 -22
- package/src/services/config/atomic-config.ts +1 -14
- package/src/services/config/definitions.ts +1 -102
- package/src/services/config/index.ts +1 -1
- package/src/services/config/settings.ts +2 -65
- package/src/services/system/skills.ts +2 -19
- package/src/commands/cli/init/scm.ts +0 -175
package/README.md
CHANGED
|
@@ -9,249 +9,145 @@
|
|
|
9
9
|
[](./package.json)
|
|
10
10
|
[](./LICENSE)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
**An open-source TypeScript SDK for building harnesses around your coding agent** — Claude Code, OpenCode, or GitHub Copilot CLI. Chain agent sessions into deterministic pipelines, add human-in-the-loop approval gates, dispatch **12 specialized sub-agents**, and tap **55 built-in skills** — then ship it as TypeScript your whole team runs.
|
|
13
13
|
|
|
14
14
|
> Define how your agent works. Start for yourself, scale to your team.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
Coding agents keep getting more capable — better reasoning, larger context windows, more reliable tool use. But a more capable model doesn't reduce the need for structure around it. It **increases** it.
|
|
21
|
-
|
|
22
|
-
The bottleneck is shifting from "can my agent write this code?" to "can my agent follow my process?" Every team has a process — how code gets reviewed, what checks run before merging, who approves deployments, how production gets monitored. That process lives in wikis nobody reads, in one senior engineer's head, or nowhere at all. A powerful agent without a defined process is just a faster way to ship unreviewed code.
|
|
23
|
-
|
|
24
|
-
**Harnesses are what turn a capable agent into a reliable part of your engineering workflow.** A harness encodes your process — research, then implement, then review, then run CI, then create a PR, then notify the right person, then wait for approval, then merge. Without one, you're prompting manually and copy-pasting between terminal sessions. With one, you run a single command and the process executes itself.
|
|
18
|
+
## Quick Start
|
|
25
19
|
|
|
26
|
-
|
|
20
|
+
Install, generate context, try Ralph, then write your own workflow — four steps, a few minutes.
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
### Prerequisites
|
|
29
23
|
|
|
30
|
-
- **
|
|
31
|
-
-
|
|
32
|
-
-
|
|
24
|
+
- **At least one coding agent** installed and logged in:
|
|
25
|
+
- [Claude Code](https://code.claude.com/docs/en/quickstart) — run `claude` and authenticate
|
|
26
|
+
- [OpenCode](https://opencode.ai) — run `opencode` and authenticate
|
|
27
|
+
- [GitHub Copilot CLI](https://github.com/features/copilot/cli) — run `copilot` and authenticate
|
|
28
|
+
- **Windows:** PowerShell 7+ ([install guide](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows))
|
|
33
29
|
|
|
34
|
-
###
|
|
30
|
+
### 1. Install
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
The bootstrap script installs [Bun](https://bun.sh/), Atomic, and shell completions in one step:
|
|
37
33
|
|
|
38
34
|
```bash
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
**Automate your team's review-to-merge pipeline.** Encode your exact process: review code changes → run security scans and linting in parallel → create a PR → notify the team lead on Slack → wait for human approval → merge. The [human-in-the-loop gate](#workflow-sdk--build-your-own-deterministic-harness) pauses execution until the right person approves. New team members inherit the same pipeline on day one.
|
|
35
|
+
# macOS / Linux
|
|
36
|
+
curl -fsSL https://raw.githubusercontent.com/flora131/atomic/main/install.sh | bash
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
atomic
|
|
38
|
+
# Windows (PowerShell 7+)
|
|
39
|
+
irm https://raw.githubusercontent.com/flora131/atomic/main/install.ps1 | iex
|
|
46
40
|
```
|
|
47
41
|
|
|
48
|
-
|
|
42
|
+
Upgrade later with `bun update -g @bastani/atomic`.
|
|
43
|
+
|
|
44
|
+
<details>
|
|
45
|
+
<summary><b>Alternative: Already have Bun? Install directly from npm</b></summary>
|
|
49
46
|
|
|
50
47
|
```bash
|
|
51
|
-
|
|
48
|
+
bun install -g @bastani/atomic
|
|
52
49
|
```
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
This skips the Bun install step but doesn't set up shell completions — run `atomic completions <shell>` separately if you want them (see [Commands Reference](#atomic-completions--shell-completions)).
|
|
55
52
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
## Table of Contents
|
|
53
|
+
**Prerelease builds:** `bun install -g @bastani/atomic@next` (may contain breaking changes).
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
- [Why Atomic](#why-atomic)
|
|
62
|
-
- [What You Can Build](#what-you-can-build)
|
|
63
|
-
- [Table of Contents](#table-of-contents)
|
|
64
|
-
- [Quick Start](#quick-start)
|
|
65
|
-
- [Prerequisites](#prerequisites)
|
|
66
|
-
- [1. Install](#1-install)
|
|
67
|
-
- [2. Generate Context Files](#2-generate-context-files)
|
|
68
|
-
- [3. Managing Sessions](#3-managing-sessions)
|
|
69
|
-
- [4. Build a Workflow](#4-build-a-workflow)
|
|
70
|
-
- [Core Features](#core-features)
|
|
71
|
-
- [Multi-Agent Support](#multi-agent-support)
|
|
72
|
-
- [Workflow SDK — Build Your Own Deterministic Harness](#workflow-sdk--build-your-own-deterministic-harness)
|
|
73
|
-
- [Builder API](#builder-api)
|
|
74
|
-
- [WorkflowContext (`ctx`) — top-level orchestrator](#workflowcontext-ctx--top-level-orchestrator)
|
|
75
|
-
- [SessionContext (`s`) — inside each session callback](#sessioncontext-s--inside-each-session-callback)
|
|
76
|
-
- [Session Options (`SessionRunOptions`)](#session-options-sessionrunoptions)
|
|
77
|
-
- [Saving Transcripts](#saving-transcripts)
|
|
78
|
-
- [Per-Agent Session APIs](#per-agent-session-apis)
|
|
79
|
-
- [Key Rules](#key-rules)
|
|
80
|
-
- [Research Codebase](#research-codebase)
|
|
81
|
-
- [Autonomous Execution (Ralph)](#autonomous-execution-ralph)
|
|
82
|
-
- [Deep Research Codebase](#deep-research-codebase)
|
|
83
|
-
- [Containerized Execution](#containerized-execution)
|
|
84
|
-
- [Specialized Sub-Agents](#specialized-sub-agents)
|
|
85
|
-
- [Built-in Skills](#built-in-skills)
|
|
86
|
-
- [Workflow Orchestrator Panel](#workflow-orchestrator-panel)
|
|
87
|
-
- [Commands Reference](#commands-reference)
|
|
88
|
-
- [CLI Commands](#cli-commands)
|
|
89
|
-
- [Global Flags](#global-flags)
|
|
90
|
-
- [`atomic session` Subcommands](#atomic-session-subcommands)
|
|
91
|
-
- [`atomic chat` Flags](#atomic-chat-flags)
|
|
92
|
-
- [`atomic workflow` Flags](#atomic-workflow-flags)
|
|
93
|
-
- [`atomic completions` — Shell Completions](#atomic-completions--shell-completions)
|
|
94
|
-
- [Atomic-Provided Skills (invokable from any agent chat)](#atomic-provided-skills-invokable-from-any-agent-chat)
|
|
95
|
-
- [Configuration](#configuration)
|
|
96
|
-
- [`.atomic/settings.json`](#atomicsettingsjson)
|
|
97
|
-
- [Agent-Specific Files](#agent-specific-files)
|
|
98
|
-
- [Installation Options](#installation-options)
|
|
99
|
-
- [Bun (recommended)](#bun-recommended)
|
|
100
|
-
- [Devcontainer (recommended for autonomous agents)](#devcontainer-recommended-for-autonomous-agents)
|
|
101
|
-
- [Updating \& Uninstalling](#updating--uninstalling)
|
|
102
|
-
- [Update](#update)
|
|
103
|
-
- [Uninstall](#uninstall)
|
|
104
|
-
- [Troubleshooting](#troubleshooting)
|
|
105
|
-
- [FAQ](#faq)
|
|
106
|
-
- [Contributing](#contributing)
|
|
107
|
-
- [License](#license)
|
|
108
|
-
- [Credits](#credits)
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Quick Start
|
|
113
|
-
|
|
114
|
-
### Prerequisites
|
|
115
|
-
|
|
116
|
-
- **macOS, Linux, or Windows** (PowerShell 7+ required on Windows — [install guide](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows))
|
|
117
|
-
- **[Bun](https://bun.sh/)** runtime installed
|
|
118
|
-
- **At least one coding agent installed and logged in:**
|
|
119
|
-
- [Claude Code](https://code.claude.com/docs/en/quickstart) — run `claude` and complete authentication
|
|
120
|
-
- [OpenCode](https://opencode.ai) — run `opencode` and complete authentication
|
|
121
|
-
- [GitHub Copilot CLI](https://github.com/features/copilot/cli) — run `copilot` and complete authentication
|
|
55
|
+
</details>
|
|
122
56
|
|
|
123
|
-
|
|
57
|
+
<details>
|
|
58
|
+
<summary><b>Authenticated downloads (CI / enterprise)</b></summary>
|
|
124
59
|
|
|
125
|
-
|
|
60
|
+
Set `GITHUB_TOKEN` to avoid GitHub API rate limits when running the bootstrap script in CI:
|
|
126
61
|
|
|
127
|
-
|
|
62
|
+
```bash
|
|
63
|
+
# macOS / Linux
|
|
64
|
+
GITHUB_TOKEN=ghp_... curl -fsSL https://raw.githubusercontent.com/flora131/atomic/main/install.sh | bash
|
|
128
65
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
> Use the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) for VS Code or [DevPod](https://devpod.sh) to spawn and manage your devcontainers.
|
|
66
|
+
# Windows PowerShell
|
|
67
|
+
$env:GITHUB_TOKEN='ghp_...'; irm https://raw.githubusercontent.com/flora131/atomic/main/install.ps1 | iex
|
|
68
|
+
```
|
|
133
69
|
|
|
134
|
-
|
|
70
|
+
</details>
|
|
135
71
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
├── .devcontainer/
|
|
139
|
-
│ └── devcontainer.json ← add the feature here
|
|
140
|
-
├── src/
|
|
141
|
-
└── ...
|
|
142
|
-
```
|
|
72
|
+
<details>
|
|
73
|
+
<summary><b>Alternative: Devcontainer (recommended for autonomous workflows)</b></summary>
|
|
143
74
|
|
|
144
|
-
|
|
75
|
+
> Devcontainers isolate the agent from your host, limiting the blast radius of destructive actions. This is the safest way to run workflows.
|
|
145
76
|
|
|
146
|
-
|
|
147
|
-
| -------------------- | ------------------------------------ | ---------------------------------------------------- |
|
|
148
|
-
| Atomic + Claude Code | `ghcr.io/flora131/atomic/claude:1` | [Claude Code](https://claude.ai) |
|
|
149
|
-
| Atomic + OpenCode | `ghcr.io/flora131/atomic/opencode:1` | [OpenCode](https://opencode.ai) |
|
|
150
|
-
| Atomic + Copilot CLI | `ghcr.io/flora131/atomic/copilot:1` | [Copilot CLI](https://github.com/github/copilot-cli) |
|
|
77
|
+
Add one feature to `.devcontainer/devcontainer.json`:
|
|
151
78
|
|
|
152
|
-
|
|
79
|
+
| Feature | Agent |
|
|
80
|
+
| ------------------------------------ | -------------------- |
|
|
81
|
+
| `ghcr.io/flora131/atomic/claude:1` | Atomic + Claude Code |
|
|
82
|
+
| `ghcr.io/flora131/atomic/opencode:1` | Atomic + OpenCode |
|
|
83
|
+
| `ghcr.io/flora131/atomic/copilot:1` | Atomic + Copilot CLI |
|
|
153
84
|
|
|
154
|
-
|
|
85
|
+
Full `.devcontainer.json` templates per agent live in [`.devcontainer/`](./.devcontainer/). Each feature installs Atomic, bun, playwright-cli, agent configs, and the agent CLI itself. First run takes ~1 minute to warm up.
|
|
155
86
|
|
|
156
|
-
|
|
87
|
+
Minimal example (Claude + Rust):
|
|
157
88
|
|
|
158
|
-
```
|
|
159
|
-
|
|
89
|
+
```jsonc
|
|
90
|
+
{
|
|
91
|
+
"image": "mcr.microsoft.com/devcontainers/rust:latest",
|
|
92
|
+
"features": {
|
|
93
|
+
"ghcr.io/devcontainers/features/common-utils": {},
|
|
94
|
+
"ghcr.io/flora131/atomic/claude:1": {},
|
|
95
|
+
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
96
|
+
},
|
|
97
|
+
"remoteEnv": {
|
|
98
|
+
"ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
160
101
|
```
|
|
161
102
|
|
|
162
|
-
|
|
103
|
+
Use the [Dev Containers VS Code extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) or the [Dev Container CLI](https://github.com/devcontainers/cli#dev-container-cli) to start the container.
|
|
163
104
|
|
|
164
|
-
|
|
105
|
+
</details>
|
|
165
106
|
|
|
166
|
-
|
|
107
|
+
<details>
|
|
108
|
+
<summary><b>Migrating from the old standalone binary?</b></summary>
|
|
167
109
|
|
|
168
|
-
|
|
110
|
+
Atomic used to ship as a standalone binary. It's now an npm package. One-time migration:
|
|
169
111
|
|
|
170
112
|
```bash
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```powershell
|
|
177
|
-
irm https://raw.githubusercontent.com/flora131/atomic/main/install.ps1 | iex
|
|
113
|
+
atomic uninstall
|
|
114
|
+
bun uninstall -g @bastani/atomic-workflows
|
|
115
|
+
rm -rf ~/.atomic ~/.copilot/skills ~/.opencode/skills
|
|
116
|
+
bun install -g @bastani/atomic
|
|
178
117
|
```
|
|
179
118
|
|
|
119
|
+
</details>
|
|
180
120
|
|
|
181
|
-
|
|
182
|
-
> **Migrating from the old standalone binary?** The old version of Atomic was a standalone binary. It is now distributed as an npm package. To migrate:
|
|
183
|
-
>
|
|
184
|
-
> 1. Uninstall the old binary: `atomic uninstall`
|
|
185
|
-
> 2. Uninstall the old workflows package: `bun uninstall -g @bastani/atomic-workflows`
|
|
186
|
-
> 3. Delete the old config directory: `rm -rf ~/.atomic`
|
|
187
|
-
> 4. Remove legacy skill directories: `rm -rf ~/.copilot/skills ~/.opencode/skills`
|
|
188
|
-
> 5. Re-install using any of the install options above
|
|
189
|
-
|
|
190
|
-
### 2. Generate Context Files
|
|
191
|
-
|
|
192
|
-
Start a chat session and run `/init` to generate `CLAUDE.md` and `AGENTS.md`:
|
|
121
|
+
### 2. Generate context files
|
|
193
122
|
|
|
194
123
|
```bash
|
|
195
124
|
atomic chat -a <claude|opencode|copilot>
|
|
196
125
|
```
|
|
197
126
|
|
|
198
|
-
|
|
199
|
-
/init
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
This explores your codebase using sub-agents and generates documentation that gives coding agents the context they need.
|
|
127
|
+
Then type `/init`. Atomic explores your codebase with sub-agents and writes `CLAUDE.md` / `AGENTS.md` so every future session starts with the right context.
|
|
203
128
|
|
|
204
|
-
### 3.
|
|
129
|
+
### 3. Try Ralph (autonomous coding)
|
|
205
130
|
|
|
206
|
-
|
|
131
|
+
Ralph plans, implements, reviews, and debugs a task on its own — up to 10 iterations, exiting after 2 consecutive clean reviews.
|
|
207
132
|
|
|
208
133
|
```bash
|
|
209
|
-
|
|
210
|
-
atomic session list
|
|
211
|
-
|
|
212
|
-
# List only chat sessions
|
|
213
|
-
atomic chat session list
|
|
214
|
-
|
|
215
|
-
# List only workflow sessions
|
|
216
|
-
atomic workflow session list
|
|
217
|
-
|
|
218
|
-
# Connect to a session by name
|
|
219
|
-
atomic session connect <session-name>
|
|
220
|
-
|
|
221
|
-
# Interactive session picker (fuzzy-search)
|
|
222
|
-
atomic session connect
|
|
223
|
-
|
|
224
|
-
# Kill a session by name (prompts for confirmation)
|
|
225
|
-
atomic session kill <session-name>
|
|
226
|
-
|
|
227
|
-
# Kill all sessions in scope (prompts for confirmation)
|
|
228
|
-
atomic session kill
|
|
134
|
+
atomic workflow -n ralph -a claude "Build a REST API for user management"
|
|
229
135
|
```
|
|
230
136
|
|
|
231
|
-
|
|
137
|
+
> ⚠️ Workflows run with agent permission checks **disabled** so pipelines don't block on prompts. Run them in a [devcontainer](#containerized-execution) or [git worktree](https://git-scm.com/docs/git-worktree), not on your host. See [Security](#security-workflow-permissions-model).
|
|
232
138
|
|
|
233
|
-
|
|
234
|
-
| ------------ | --------------------------- | -------------------------- |
|
|
235
|
-
| Chat | `atomic-chat-<id>` | `atomic-chat-a1b2c3d4` |
|
|
236
|
-
| Workflow | `atomic-wf-<workflow>-<id>` | `atomic-wf-ralph-x9y8z7w6` |
|
|
139
|
+
### 4. Build your own workflow
|
|
237
140
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
### 4. Build a Workflow
|
|
241
|
-
|
|
242
|
-
Every team has a process. Atomic lets you encode it as TypeScript — chain agent sessions together, pass transcripts between them, and run the whole thing from the CLI.
|
|
243
|
-
|
|
244
|
-
Create a workflow project, install the SDK, and add your workflow file:
|
|
141
|
+
Every team has a process — code review, CI checks, PR creation, approval, merge. Encode it as TypeScript once; everyone runs the same pipeline.
|
|
245
142
|
|
|
246
143
|
```bash
|
|
247
144
|
bun init && bun add @bastani/atomic
|
|
248
145
|
mkdir -p .atomic/workflows/review-to-merge/claude
|
|
249
146
|
```
|
|
250
147
|
|
|
251
|
-
|
|
148
|
+
Create `.atomic/workflows/review-to-merge/claude/index.ts`:
|
|
252
149
|
|
|
253
150
|
```ts
|
|
254
|
-
// .atomic/workflows/review-to-merge/claude/index.ts
|
|
255
151
|
import { defineWorkflow } from "@bastani/atomic/workflows";
|
|
256
152
|
|
|
257
153
|
export default defineWorkflow({
|
|
@@ -259,60 +155,38 @@ export default defineWorkflow({
|
|
|
259
155
|
description: "Review → CI → PR → Notify → Approve → Merge",
|
|
260
156
|
}).for<"claude">()
|
|
261
157
|
.run(async (ctx) => {
|
|
262
|
-
//
|
|
263
|
-
const review = await ctx.stage(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
await s.session.query(
|
|
268
|
-
"Review all uncommitted changes. Flag issues with correctness, security, and style.",
|
|
269
|
-
);
|
|
270
|
-
s.save(s.sessionId);
|
|
271
|
-
},
|
|
272
|
-
);
|
|
158
|
+
// 1. Review
|
|
159
|
+
const review = await ctx.stage({ name: "review" }, {}, {}, async (s) => {
|
|
160
|
+
await s.session.query("Review uncommitted changes for correctness, security, style.");
|
|
161
|
+
s.save(s.sessionId);
|
|
162
|
+
});
|
|
273
163
|
|
|
274
|
-
//
|
|
164
|
+
// 2. Run security + CI in parallel
|
|
275
165
|
await Promise.all([
|
|
276
166
|
ctx.stage({ name: "security-scan" }, {}, {}, async (s) => {
|
|
277
|
-
await s.session.query("Run `bun audit` and scan for leaked secrets
|
|
167
|
+
await s.session.query("Run `bun audit` and scan for leaked secrets.");
|
|
278
168
|
s.save(s.sessionId);
|
|
279
169
|
}),
|
|
280
170
|
ctx.stage({ name: "ci-checks" }, {}, {}, async (s) => {
|
|
281
|
-
await s.session.query("Run `bun lint` and `bun test`. Report
|
|
171
|
+
await s.session.query("Run `bun lint` and `bun test`. Report failures.");
|
|
282
172
|
s.save(s.sessionId);
|
|
283
173
|
}),
|
|
284
174
|
]);
|
|
285
175
|
|
|
286
|
-
//
|
|
287
|
-
await ctx.stage({ name: "create-pr" }, {}, {}, async (s) => {
|
|
288
|
-
const transcript = await s.transcript(review);
|
|
289
|
-
await s.session.query(
|
|
290
|
-
`Read the review at ${transcript.path}. Create a pull request summarizing the changes.`,
|
|
291
|
-
);
|
|
292
|
-
s.save(s.sessionId);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
// Step 4: Notify on Slack, then wait for human approval before merging.
|
|
296
|
-
// Stage callbacks are plain Bun code — fetch(), Bun.spawn(), and any
|
|
297
|
-
// Node API work here alongside agent session queries.
|
|
176
|
+
// 3. Open PR, then notify Slack + wait for human approval
|
|
298
177
|
await ctx.stage({ name: "notify-and-merge" }, {}, {}, async (s) => {
|
|
178
|
+
const t = await s.transcript(review);
|
|
179
|
+
await s.session.query(`Read ${t.path}. Open a PR summarizing the changes.`);
|
|
180
|
+
|
|
299
181
|
await fetch("https://slack.com/api/chat.postMessage", {
|
|
300
182
|
method: "POST",
|
|
301
|
-
headers: {
|
|
302
|
-
|
|
303
|
-
"Content-Type": "application/json",
|
|
304
|
-
},
|
|
305
|
-
body: JSON.stringify({
|
|
306
|
-
channel: "#code-review",
|
|
307
|
-
text: "New PR ready for review — please approve in GitHub.",
|
|
308
|
-
}),
|
|
183
|
+
headers: { Authorization: `Bearer ${process.env.SLACK_TOKEN}` },
|
|
184
|
+
body: JSON.stringify({ channel: "#code-review", text: "PR ready — please approve." }),
|
|
309
185
|
});
|
|
310
186
|
|
|
311
|
-
// Human-in-the-loop:
|
|
312
|
-
// user responds. The agent won't merge until approval is given.
|
|
187
|
+
// Human-in-the-loop: pauses until the user responds
|
|
313
188
|
await s.session.query(
|
|
314
|
-
"
|
|
315
|
-
"is approved, then merge it with `gh pr merge --squash`.",
|
|
189
|
+
"Ask the user to confirm approval, then merge with `gh pr merge --squash`.",
|
|
316
190
|
{ allowedTools: ["Bash", "Read", "AskUserQuestion"] },
|
|
317
191
|
);
|
|
318
192
|
s.save(s.sessionId);
|
|
@@ -327,9 +201,96 @@ Run it:
|
|
|
327
201
|
atomic workflow -n review-to-merge -a claude
|
|
328
202
|
```
|
|
329
203
|
|
|
330
|
-
|
|
204
|
+
Swap `-a claude` for `-a opencode` or `-a copilot` — same harness, different agent. See [Workflow SDK](#workflow-sdk--build-your-own-deterministic-harness) for parallel stages, input schemas, headless stages, and the full API reference.
|
|
205
|
+
|
|
206
|
+
### Managing sessions
|
|
207
|
+
|
|
208
|
+
Every chat and workflow runs inside an isolated [tmux](https://github.com/tmux/tmux) session on a dedicated socket (your personal tmux is untouched). If your terminal disconnects, your session keeps running — reconnect anytime.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
atomic session list # all sessions
|
|
212
|
+
atomic session connect # interactive fuzzy picker
|
|
213
|
+
atomic session connect <name> # by name
|
|
214
|
+
atomic session kill <name> # kill one (or all, with confirmation)
|
|
215
|
+
```
|
|
331
216
|
|
|
332
|
-
|
|
217
|
+
Session names follow `atomic-chat-<id>` or `atomic-wf-<workflow>-<id>`. Scope with `atomic chat session …` or `atomic workflow session …`.
|
|
218
|
+
|
|
219
|
+
Need a workflow to run in the background while you do something else? Pass `-d` / `--detach`:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
atomic workflow -n ralph -a claude -d "build the auth module" # returns immediately
|
|
223
|
+
atomic workflow session connect atomic-wf-claude-ralph-<id> # attach later
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Detached mode is what you want for scripted / CI automation and long-running tasks — the orchestrator keeps running on the atomic tmux socket regardless of your terminal.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Why Atomic
|
|
231
|
+
|
|
232
|
+
Better models make harnesses **more** important, not less. The more you trust an agent to execute complex tasks, the more value you get from defining exactly **what** it should execute, in **what order**, with **what checks** along the way. The harness is the durable layer — models keep improving underneath it, but your process stays the same.
|
|
233
|
+
|
|
234
|
+
- **Start for yourself.** Automate the repetitive parts of your own workflow — research a codebase, add monitoring, generate specs. One TypeScript file, one afternoon.
|
|
235
|
+
- **Scale to your team.** Encode your team's review process, deployment gates, and quality checks as TypeScript every member runs identically — versioned, testable, reproducible.
|
|
236
|
+
- **Work across agents.** Write a harness once, run it on Claude Code, OpenCode, or Copilot CLI with a flag change.
|
|
237
|
+
|
|
238
|
+
### Example use cases
|
|
239
|
+
|
|
240
|
+
**Add production monitoring.** Research observability gaps, implement missing metrics and health checks, review the changes.
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
atomic workflow -n add-monitoring -a claude "add Prometheus metrics and health checks to all API endpoints"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Parallel UX testing with 50 personas.** Spin up 50 agents, each with a distinct persona (power user, accessibility-dependent, non-technical stakeholder), each using [Playwright](#built-in-skills) to test your app.
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
atomic workflow -n ux-personas -a claude
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Review-to-merge pipeline.** The workflow from [step 4](#4-build-your-own-workflow) above — reviews code, runs CI in parallel, opens a PR, notifies Slack, waits for approval, merges.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Table of Contents
|
|
257
|
+
|
|
258
|
+
- [Quick Start](#quick-start)
|
|
259
|
+
- [Why Atomic](#why-atomic)
|
|
260
|
+
- [Security: Workflow Permissions Model](#security-workflow-permissions-model)
|
|
261
|
+
- [Core Features](#core-features)
|
|
262
|
+
- [Multi-Agent Support](#multi-agent-support)
|
|
263
|
+
- [Workflow SDK](#workflow-sdk--build-your-own-deterministic-harness)
|
|
264
|
+
- [Research Codebase](#research-codebase)
|
|
265
|
+
- [Autonomous Execution (Ralph)](#autonomous-execution-ralph)
|
|
266
|
+
- [Deep Research Codebase](#deep-research-codebase)
|
|
267
|
+
- [Containerized Execution](#containerized-execution)
|
|
268
|
+
- [Specialized Sub-Agents](#specialized-sub-agents)
|
|
269
|
+
- [Built-in Skills](#built-in-skills)
|
|
270
|
+
- [Workflow Orchestrator Panel](#workflow-orchestrator-panel)
|
|
271
|
+
- [Commands Reference](#commands-reference)
|
|
272
|
+
- [Configuration](#configuration)
|
|
273
|
+
- [Updating & Uninstalling](#updating--uninstalling)
|
|
274
|
+
- [Troubleshooting](#troubleshooting)
|
|
275
|
+
- [FAQ](#faq)
|
|
276
|
+
- [Contributing](#contributing)
|
|
277
|
+
- [License](#license)
|
|
278
|
+
- [Credits](#credits)
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Security: Workflow Permissions Model
|
|
283
|
+
|
|
284
|
+
> [!CAUTION]
|
|
285
|
+
> **Atomic workflows run coding agents with all permission checks disabled.** The agent can read, write, and delete files, execute arbitrary shell commands, and make network requests without prompting. This is required for unattended pipelines. **Run workflows in a [devcontainer](#containerized-execution), not on your host machine.**
|
|
286
|
+
|
|
287
|
+
| Agent | How permissions are bypassed | Key flags / settings |
|
|
288
|
+
| ---------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
289
|
+
| **Claude Code** | CLI flag disables the interactive permission prompt entirely | `--dangerously-skip-permissions` |
|
|
290
|
+
| **GitHub Copilot CLI** | CLI flag enables auto-execution; SDK auto-approves all tool requests | `--yolo`, `COPILOT_ALLOW_ALL=true`, `onPermissionRequest: approveAll` |
|
|
291
|
+
| **OpenCode** | Permissions handled programmatically through the event stream | Permission requests auto-replied via SSE events |
|
|
292
|
+
|
|
293
|
+
Defaults live in `src/services/config/definitions.ts` and `src/sdk/runtime/executor.ts`. Override per-project via `ProviderOverrides` in `.atomic/settings.json` — `chatFlags` replaces defaults entirely; `envVars` are merged.
|
|
333
294
|
|
|
334
295
|
---
|
|
335
296
|
|
|
@@ -337,7 +298,7 @@ This single file demonstrates multi-step pipelines, parallel stages (`Promise.al
|
|
|
337
298
|
|
|
338
299
|
### Multi-Agent Support
|
|
339
300
|
|
|
340
|
-
Atomic works across **three production coding agents** — switch
|
|
301
|
+
Atomic works across **three production coding agents** — switch with a flag and your workflows, skills, and sub-agents carry over.
|
|
341
302
|
|
|
342
303
|
| Agent | Command |
|
|
343
304
|
| ------------------ | ------------------------- |
|
|
@@ -345,23 +306,24 @@ Atomic works across **three production coding agents** — switch between them w
|
|
|
345
306
|
| OpenCode | `atomic chat -a opencode` |
|
|
346
307
|
| GitHub Copilot CLI | `atomic chat -a copilot` |
|
|
347
308
|
|
|
348
|
-
Each agent gets its own configuration directory (`.claude/`, `.opencode/`, `.github/`), skills, and context files — all managed by Atomic.
|
|
309
|
+
Each agent gets its own configuration directory (`.claude/`, `.opencode/`, `.github/`), skills, and context files — all managed by Atomic.
|
|
349
310
|
|
|
350
311
|
### Workflow SDK — Build Your Own Deterministic Harness
|
|
351
312
|
|
|
352
|
-
|
|
313
|
+
The Workflow SDK (`@bastani/atomic/workflows`) lets you encode your team's process as TypeScript — spawn agent sessions dynamically with native control flow (`for`, `if`, `Promise.all()`), and watch them appear in a live graph as they execute.
|
|
353
314
|
|
|
354
|
-
Set up a workflow project (`bun init && bun add @bastani/atomic`), create
|
|
315
|
+
Set up a workflow project (`bun init && bun add @bastani/atomic`), create `.atomic/workflows/<name>/<agent>/index.ts`, and run it:
|
|
355
316
|
|
|
356
317
|
```bash
|
|
357
318
|
atomic workflow -n my-workflow -a claude "describe this project"
|
|
358
319
|
```
|
|
359
320
|
|
|
321
|
+
See [step 4 of Quick Start](#4-build-your-own-workflow) for a complete review-to-merge example. More examples and the full API reference below.
|
|
322
|
+
|
|
360
323
|
<details>
|
|
361
|
-
<summary>Example: Sequential workflow (describe
|
|
324
|
+
<summary><b>Example: Sequential workflow (describe → summarize)</b></summary>
|
|
362
325
|
|
|
363
326
|
```ts
|
|
364
|
-
// .atomic/workflows/my-workflow/claude/index.ts
|
|
365
327
|
import { defineWorkflow } from "@bastani/atomic/workflows";
|
|
366
328
|
|
|
367
329
|
export default defineWorkflow({
|
|
@@ -386,9 +348,7 @@ export default defineWorkflow({
|
|
|
386
348
|
{}, {},
|
|
387
349
|
async (s) => {
|
|
388
350
|
const research = await s.transcript(describe);
|
|
389
|
-
await s.session.query(
|
|
390
|
-
`Read ${research.path} and summarize it in 2-3 bullet points.`,
|
|
391
|
-
);
|
|
351
|
+
await s.session.query(`Read ${research.path} and summarize in 2-3 bullets.`);
|
|
392
352
|
s.save(s.sessionId);
|
|
393
353
|
},
|
|
394
354
|
);
|
|
@@ -399,7 +359,7 @@ export default defineWorkflow({
|
|
|
399
359
|
</details>
|
|
400
360
|
|
|
401
361
|
<details>
|
|
402
|
-
<summary>Example: Parallel workflow (describe
|
|
362
|
+
<summary><b>Example: Parallel workflow (describe → [summarize-a, summarize-b] → merge)</b></summary>
|
|
403
363
|
|
|
404
364
|
```ts
|
|
405
365
|
import { defineWorkflow } from "@bastani/atomic/workflows";
|
|
@@ -412,23 +372,20 @@ export default defineWorkflow({
|
|
|
412
372
|
.run(async (ctx) => {
|
|
413
373
|
const prompt = ctx.inputs.prompt ?? "";
|
|
414
374
|
|
|
415
|
-
const describe = await ctx.stage(
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
s.save(s.sessionId);
|
|
420
|
-
},
|
|
421
|
-
);
|
|
375
|
+
const describe = await ctx.stage({ name: "describe" }, {}, {}, async (s) => {
|
|
376
|
+
await s.session.query(prompt);
|
|
377
|
+
s.save(s.sessionId);
|
|
378
|
+
});
|
|
422
379
|
|
|
423
380
|
const [summarizeA, summarizeB] = await Promise.all([
|
|
424
381
|
ctx.stage({ name: "summarize-a" }, {}, {}, async (s) => {
|
|
425
382
|
const research = await s.transcript(describe);
|
|
426
|
-
await s.session.query(`Read ${research.path} and summarize in 2-3
|
|
383
|
+
await s.session.query(`Read ${research.path} and summarize in 2-3 bullets.`);
|
|
427
384
|
s.save(s.sessionId);
|
|
428
385
|
}),
|
|
429
386
|
ctx.stage({ name: "summarize-b" }, {}, {}, async (s) => {
|
|
430
387
|
const research = await s.transcript(describe);
|
|
431
|
-
await s.session.query(`Read ${research.path} and summarize in
|
|
388
|
+
await s.session.query(`Read ${research.path} and summarize in one sentence.`);
|
|
432
389
|
s.save(s.sessionId);
|
|
433
390
|
}),
|
|
434
391
|
]);
|
|
@@ -448,12 +405,11 @@ export default defineWorkflow({
|
|
|
448
405
|
</details>
|
|
449
406
|
|
|
450
407
|
<details>
|
|
451
|
-
<summary>Example: Structured-input workflow (declared schema + CLI flag validation)</summary>
|
|
408
|
+
<summary><b>Example: Structured-input workflow (declared schema + CLI flag validation)</b></summary>
|
|
452
409
|
|
|
453
|
-
Declare
|
|
410
|
+
Declare `inputs` on `defineWorkflow` and the CLI materialises one `--<field>=<value>` flag per entry. Required fields, enum membership, and unknown-flag rejection are validated before any tmux session spawns. The interactive picker renders the same schema as a form.
|
|
454
411
|
|
|
455
412
|
```ts
|
|
456
|
-
// .atomic/workflows/gen-spec/claude/index.ts
|
|
457
413
|
import { defineWorkflow } from "@bastani/atomic/workflows";
|
|
458
414
|
|
|
459
415
|
export default defineWorkflow({
|
|
@@ -483,7 +439,6 @@ export default defineWorkflow({
|
|
|
483
439
|
],
|
|
484
440
|
}).for<"claude">()
|
|
485
441
|
.run(async (ctx) => {
|
|
486
|
-
// Read each declared field by name.
|
|
487
442
|
const { research_doc, focus } = ctx.inputs;
|
|
488
443
|
const notes = ctx.inputs.notes ?? "";
|
|
489
444
|
|
|
@@ -498,7 +453,7 @@ export default defineWorkflow({
|
|
|
498
453
|
.compile();
|
|
499
454
|
```
|
|
500
455
|
|
|
501
|
-
Run it
|
|
456
|
+
Run it:
|
|
502
457
|
|
|
503
458
|
```bash
|
|
504
459
|
# Named + flags (scriptable; CI-friendly)
|
|
@@ -506,16 +461,16 @@ atomic workflow -n gen-spec -a claude \
|
|
|
506
461
|
--research_doc=research/docs/2026-04-11-auth.md \
|
|
507
462
|
--focus=standard
|
|
508
463
|
|
|
509
|
-
# Picker (fuzzy-search
|
|
464
|
+
# Picker (fuzzy-search workflows, fill the form)
|
|
510
465
|
atomic workflow -a claude
|
|
511
466
|
```
|
|
512
467
|
|
|
513
468
|
</details>
|
|
514
469
|
|
|
515
470
|
<details>
|
|
516
|
-
<summary>Example:
|
|
471
|
+
<summary><b>Example: Headless (background) stages for parallel data gathering</b></summary>
|
|
517
472
|
|
|
518
|
-
Stages can run
|
|
473
|
+
Stages can run headlessly (`headless: true`) — they execute the provider SDK in-process instead of spawning a tmux window. Headless stages are invisible in the graph but tracked via a background counter in the statusline.
|
|
519
474
|
|
|
520
475
|
```ts
|
|
521
476
|
import { defineWorkflow, extractAssistantText } from "@bastani/atomic/workflows";
|
|
@@ -528,10 +483,8 @@ export default defineWorkflow({
|
|
|
528
483
|
.run(async (ctx) => {
|
|
529
484
|
const prompt = ctx.inputs.prompt ?? "";
|
|
530
485
|
|
|
531
|
-
// Visible stage: generate seed data
|
|
532
486
|
const seed = await ctx.stage(
|
|
533
|
-
{ name: "seed", description: "Generate overview" },
|
|
534
|
-
{}, {},
|
|
487
|
+
{ name: "seed", description: "Generate overview" }, {}, {},
|
|
535
488
|
async (s) => {
|
|
536
489
|
const result = await s.session.query(prompt);
|
|
537
490
|
s.save(s.sessionId);
|
|
@@ -539,7 +492,6 @@ export default defineWorkflow({
|
|
|
539
492
|
},
|
|
540
493
|
);
|
|
541
494
|
|
|
542
|
-
// Three parallel headless stages — invisible in graph, tracked by counter
|
|
543
495
|
const [pros, cons, uses] = await Promise.all([
|
|
544
496
|
ctx.stage({ name: "pros", headless: true }, {}, {}, async (s) => {
|
|
545
497
|
const r = await s.session.query(`List 3 pros:\n\n${seed.result}`);
|
|
@@ -558,10 +510,8 @@ export default defineWorkflow({
|
|
|
558
510
|
}),
|
|
559
511
|
]);
|
|
560
512
|
|
|
561
|
-
// Visible stage: merge background results
|
|
562
513
|
await ctx.stage(
|
|
563
|
-
{ name: "merge", description: "Combine results" },
|
|
564
|
-
{}, {},
|
|
514
|
+
{ name: "merge", description: "Combine results" }, {}, {},
|
|
565
515
|
async (s) => {
|
|
566
516
|
await s.session.query(
|
|
567
517
|
`Combine:\n\n## Pros\n${pros.result}\n\n## Cons\n${cons.result}\n\n## Uses\n${uses.result}`,
|
|
@@ -581,38 +531,34 @@ The graph shows `seed → merge` — headless stages are transparent to the topo
|
|
|
581
531
|
|
|
582
532
|
| Capability | Description |
|
|
583
533
|
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
584
|
-
| **Dynamic session spawning** |
|
|
585
|
-
| **Native TypeScript control flow** | Use `for`, `if/else`, `Promise.all()`, `try/catch` — no framework DSL
|
|
534
|
+
| **Dynamic session spawning** | `ctx.stage()` spawns sessions at runtime — each gets its own tmux window and graph node |
|
|
535
|
+
| **Native TypeScript control flow** | Use `for`, `if/else`, `Promise.all()`, `try/catch` — no framework DSL |
|
|
586
536
|
| **Session return values** | Session callbacks can return data: `const h = await ctx.stage(...); h.result` |
|
|
587
|
-
| **Transcript passing** | Access prior
|
|
588
|
-
| **Declared input schemas** | Add an `inputs: [...]` array
|
|
589
|
-
| **Interactive picker** | `atomic workflow -a <agent>`
|
|
590
|
-
| **Nested sub-sessions** |
|
|
591
|
-
| **Auto-inferred graph** |
|
|
592
|
-
| **Provider-agnostic** | Write raw SDK code for Claude, Copilot, or OpenCode inside each
|
|
593
|
-
| **Live graph visualization** | Sessions appear in the TUI graph as they
|
|
594
|
-
| **Background (headless) stages** |
|
|
537
|
+
| **Transcript passing** | Access prior output via handle (`s.transcript(handle)`) or name (`s.transcript("name")`) |
|
|
538
|
+
| **Declared input schemas** | Add an `inputs: [...]` array and the CLI materialises `--<field>=<value>` flags with built-in validation |
|
|
539
|
+
| **Interactive picker** | `atomic workflow -a <agent>` renders input schemas as forms — no flag memorisation |
|
|
540
|
+
| **Nested sub-sessions** | `s.stage()` inside a callback spawns child sessions — visible as nested graph nodes |
|
|
541
|
+
| **Auto-inferred graph** | Topology derived from `await` / `Promise.all` patterns — no annotations |
|
|
542
|
+
| **Provider-agnostic** | Write raw SDK code for Claude, Copilot, or OpenCode inside each callback |
|
|
543
|
+
| **Live graph visualization** | Sessions appear in the TUI graph as they spawn — loops and conditionals visible in real time |
|
|
544
|
+
| **Background (headless) stages** | `headless: true` runs in-process without a tmux window — invisible in graph, tracked by statusline counter, identical callback API |
|
|
595
545
|
|
|
596
546
|
**Deterministic execution guarantees:**
|
|
597
547
|
|
|
598
|
-
Workflows are deterministic by design — the same definition
|
|
548
|
+
Workflows are deterministic by design — the same definition produces the same execution order with the same data flow, anywhere.
|
|
599
549
|
|
|
600
|
-
- **Strict step ordering** —
|
|
601
|
-
- **Frozen definitions** — `.compile()` freezes the workflow
|
|
602
|
-
- **Controlled transcript access** — Sessions
|
|
603
|
-
- **Isolated context windows** — Each session runs in its own tmux pane with a fresh context
|
|
604
|
-
- **Persisted artifacts** — Every session writes
|
|
550
|
+
- **Strict step ordering** — Step 2 never starts until Step 1 finishes. Parallel sessions complete (or fail fast) before the next step begins.
|
|
551
|
+
- **Frozen definitions** — `.compile()` freezes the workflow. Once compiled, step order, session names, and the execution graph are immutable.
|
|
552
|
+
- **Controlled transcript access** — Sessions only read transcripts from *completed* upstream sessions; parallel siblings can't read each other.
|
|
553
|
+
- **Isolated context windows** — Each session runs in its own tmux pane with a fresh context. Data flows only through explicit `ctx.transcript()` / `ctx.getMessages()` calls.
|
|
554
|
+
- **Persisted artifacts** — Every session writes messages, transcript, and metadata to disk — a complete, inspectable execution record.
|
|
605
555
|
|
|
606
|
-
|
|
556
|
+
Variance comes only from the LLM's responses, not from the harness.
|
|
607
557
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
```
|
|
611
|
-
Use your workflow-creator skill to create a workflow that plans, implements, and reviews a feature.
|
|
612
|
-
```
|
|
558
|
+
> Ask Atomic to build workflows for you: `Use your workflow-creator skill to create a workflow that plans, implements, and reviews a feature.`
|
|
613
559
|
|
|
614
560
|
<details>
|
|
615
|
-
<summary>Full Workflow SDK Reference</summary>
|
|
561
|
+
<summary><b>Full Workflow SDK Reference</b></summary>
|
|
616
562
|
|
|
617
563
|
#### Builder API
|
|
618
564
|
|
|
@@ -638,7 +584,7 @@ Use your workflow-creator skill to create a workflow that plans, implements, and
|
|
|
638
584
|
| -------------------------------------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
639
585
|
| `s.client` | `ProviderClient<A>` | Pre-created SDK client (auto-managed by runtime) |
|
|
640
586
|
| `s.session` | `ProviderSession<A>` | Pre-created provider session (auto-managed by runtime) |
|
|
641
|
-
| `s.inputs` | `{ [K in N]?: string }` | Same typed inputs as `ctx.inputs`, forwarded into every stage so
|
|
587
|
+
| `s.inputs` | `{ [K in N]?: string }` | Same typed inputs as `ctx.inputs`, forwarded into every stage so callbacks can read values without closing over the outer `ctx` |
|
|
642
588
|
| `s.agent` | `AgentType` | Which agent is running |
|
|
643
589
|
| `s.paneId` | `string` | tmux pane ID for this session |
|
|
644
590
|
| `s.sessionId` | `string` | Session UUID |
|
|
@@ -656,7 +602,7 @@ Use your workflow-creator skill to create a workflow that plans, implements, and
|
|
|
656
602
|
| `description` | `string?` | Human-readable description shown in the graph |
|
|
657
603
|
| `headless` | `boolean?` | When `true`, run in-process without a tmux window — invisible in graph, tracked by background counter |
|
|
658
604
|
|
|
659
|
-
The runtime auto-infers parent-child edges from execution order: sequential `await` creates a chain,
|
|
605
|
+
The runtime auto-infers parent-child edges from execution order: sequential `await` creates a chain, `Promise.all` creates parallel fan-out/fan-in — no annotations needed.
|
|
660
606
|
|
|
661
607
|
#### Saving Transcripts
|
|
662
608
|
|
|
@@ -680,73 +626,57 @@ The runtime auto-creates `s.client` and `s.session` — use them directly inside
|
|
|
680
626
|
|
|
681
627
|
#### Key Rules
|
|
682
628
|
|
|
683
|
-
1. Every workflow file must
|
|
629
|
+
1. Every workflow file must `export default` a builder with `.run()` and `.compile()`
|
|
684
630
|
2. Session names must be unique within a workflow run
|
|
685
631
|
3. `transcript()` / `getMessages()` only access completed sessions (callback returned + saves flushed)
|
|
686
632
|
4. Each session runs in its own tmux window with the chosen agent
|
|
687
|
-
5. Workflows are organized
|
|
688
|
-
6. Set up your workflow project with `bun init && bun add @bastani/atomic`
|
|
633
|
+
5. Workflows are organized as `.atomic/workflows/<name>/<agent>/index.ts`
|
|
634
|
+
6. Set up your workflow project with `bun init && bun add @bastani/atomic`
|
|
689
635
|
7. Background (headless) stages use the same callback API — `s.client`, `s.session`, `s.save()`, return values all work identically
|
|
690
636
|
|
|
691
|
-
For the authoring walkthrough
|
|
637
|
+
For the authoring walkthrough ask Atomic to use the `workflow-creator` skill or read `.agents/skills/workflow-creator/`.
|
|
692
638
|
|
|
693
639
|
> [!TIP]
|
|
694
|
-
>
|
|
640
|
+
> When the Workflow SDK is updated, ask the `workflow-creator` skill to migrate your workflows to the latest patterns: _"Update this workflow to use the latest SDK patterns."_
|
|
695
641
|
|
|
696
642
|
</details>
|
|
697
643
|
|
|
698
644
|
### Research Codebase
|
|
699
645
|
|
|
700
|
-
The `/research-codebase` command dispatches **specialized sub-agents in parallel** to analyze your codebase
|
|
701
|
-
|
|
702
|
-
- Understand how authentication flows work in an unfamiliar codebase
|
|
703
|
-
- Track down root causes by analyzing code paths across dozens of files
|
|
704
|
-
- Search through docs, READMEs, and inline documentation
|
|
705
|
-
- Query external documentation via [DeepWiki MCP](https://deepwiki.com) integration
|
|
706
|
-
- Get up to speed on a new project in minutes instead of hours
|
|
707
|
-
|
|
708
|
-
**Research sub-agents:**
|
|
646
|
+
The `/research-codebase` command dispatches **specialized sub-agents in parallel** to analyze your codebase — understand auth flows, trace root causes, query docs, and hit external sources via [DeepWiki MCP](https://deepwiki.com). Get up to speed on a new project in minutes instead of hours.
|
|
709
647
|
|
|
710
648
|
| Sub-Agent | Model | Purpose |
|
|
711
649
|
| ---------------------------- | ------ | ----------------------------------------------------------------------------------------- |
|
|
712
650
|
| `codebase-locator` | Haiku | Locate files, directories, and components relevant to the research topic |
|
|
713
|
-
| `codebase-analyzer` | Sonnet | Analyze implementation details, trace data flow,
|
|
651
|
+
| `codebase-analyzer` | Sonnet | Analyze implementation details, trace data flow, explain technical workings |
|
|
714
652
|
| `codebase-pattern-finder` | Haiku | Find similar implementations, usage examples, and existing patterns to model after |
|
|
715
|
-
| `codebase-online-researcher` | Sonnet | Fetch up-to-date information from the web and repository
|
|
653
|
+
| `codebase-online-researcher` | Sonnet | Fetch up-to-date information from the web and repository knowledge from DeepWiki |
|
|
716
654
|
| `codebase-research-locator` | Haiku | Discover relevant documents in `research/` and `specs/` directories |
|
|
717
655
|
| `codebase-research-analyzer` | Sonnet | Extract high-value insights, decisions, and technical details from research documents |
|
|
718
656
|
|
|
719
|
-
**
|
|
657
|
+
**Run parallel research sessions** to compare approaches:
|
|
720
658
|
|
|
721
|
-
|
|
659
|
+
```bash
|
|
660
|
+
# Terminal 1: LangChain approach
|
|
661
|
+
atomic chat -a claude "/research-codebase Research GraphRAG using LangChain's graph retrieval."
|
|
722
662
|
|
|
723
|
-
|
|
663
|
+
# Terminal 2: Microsoft GraphRAG
|
|
664
|
+
atomic chat -a claude "/research-codebase Research GraphRAG using microsoft/graphrag."
|
|
724
665
|
|
|
725
|
-
|
|
666
|
+
# Terminal 3: LlamaIndex approach
|
|
667
|
+
atomic chat -a claude "/research-codebase Research GraphRAG using LlamaIndex's property graph."
|
|
668
|
+
```
|
|
726
669
|
|
|
727
|
-
|
|
670
|
+
Then run `/create-spec` on each output, spin up git worktrees, and run `atomic workflow -n ralph` in each — wake up to three complete implementations on separate branches. Research persists in `research/` and specs in `specs/`, so every investigation compounds into future context.
|
|
728
671
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
atomic chat -a claude "/research-codebase Research implementing GraphRAG using \
|
|
732
|
-
LangChain's graph retrieval patterns. Look up langchain-ai/langchain for \
|
|
733
|
-
graph store integrations."
|
|
734
|
-
|
|
735
|
-
# Terminal 2: Research Microsoft's GraphRAG
|
|
736
|
-
atomic chat -a claude "/research-codebase Research implementing GraphRAG using \
|
|
737
|
-
Microsoft's GraphRAG library. Look up microsoft/graphrag for their \
|
|
738
|
-
community detection pipeline."
|
|
739
|
-
|
|
740
|
-
# Terminal 3: Research LlamaIndex approach
|
|
741
|
-
atomic chat -a claude "/research-codebase Research implementing GraphRAG using \
|
|
742
|
-
LlamaIndex's property graph index. Look up run-llama/llama_index."
|
|
743
|
-
```
|
|
672
|
+
<details>
|
|
673
|
+
<summary><i>Why specialized research agents instead of one general-purpose agent?</i></summary>
|
|
744
674
|
|
|
745
|
-
|
|
675
|
+
A single agent asked to "research the auth system" tries to search, read, analyze, and summarize within one context window. As that window fills with file contents, search results, and intermediate reasoning, synthesis degrades — this is a fundamental constraint of transformer attention, not a prompt-engineering problem.
|
|
746
676
|
|
|
747
|
-
|
|
677
|
+
Atomic dispatches purpose-built sub-agents: a `codebase-locator` only finds relevant files, a `codebase-analyzer` only reads and analyzes implementations, a `codebase-online-researcher` only queries external docs. Each operates in its own context with only the tools it needs; the parent receives distilled findings. The result: faster research, higher-quality findings, less hallucination.
|
|
748
678
|
|
|
749
|
-
|
|
679
|
+
</details>
|
|
750
680
|
|
|
751
681
|
### Autonomous Execution (Ralph)
|
|
752
682
|
|
|
@@ -754,15 +684,15 @@ Research outputs persist in your `research/` directory and specs persist in your
|
|
|
754
684
|
<img src="assets/ralph-wiggum.jpg" alt="Ralph Wiggum" width="600">
|
|
755
685
|
</p>
|
|
756
686
|
|
|
757
|
-
The [Ralph Method](https://ghuntley.com/ralph/) enables **multi-hour autonomous coding sessions**.
|
|
687
|
+
The [Ralph Method](https://ghuntley.com/ralph/) enables **multi-hour autonomous coding sessions**. Approve your spec, let Ralph work in the background, focus on other things.
|
|
758
688
|
|
|
759
689
|
**How Ralph works:**
|
|
760
690
|
|
|
761
|
-
1. **Task Decomposition** — A `planner` sub-agent breaks your spec into a
|
|
762
|
-
2. **Orchestration** — An `orchestrator`
|
|
763
|
-
3. **Review & Debug** — A `reviewer`
|
|
691
|
+
1. **Task Decomposition** — A `planner` sub-agent breaks your spec into a task list with dependency tracking, stored in SQLite (WAL mode for parallel access).
|
|
692
|
+
2. **Orchestration** — An `orchestrator` retrieves the task list, validates the dependency graph, and dispatches `worker` sub-agents for ready tasks.
|
|
693
|
+
3. **Review & Debug** — A `reviewer` audits the implementation with structured JSON output; if P0–P2 findings exist, a `debugger` investigates root causes and feeds back to the planner on the next iteration.
|
|
764
694
|
|
|
765
|
-
**Loop
|
|
695
|
+
**Loop config:** Up to **10 iterations**. Exits early after **2 consecutive clean reviews** (zero actionable findings). P3 (minor) findings are non-actionable.
|
|
766
696
|
|
|
767
697
|
```bash
|
|
768
698
|
# From a prompt
|
|
@@ -772,7 +702,7 @@ atomic workflow -n ralph -a <claude|opencode|copilot> "Build a REST API for user
|
|
|
772
702
|
atomic workflow -n ralph -a claude "specs/YYYY-MM-DD-my-feature.md"
|
|
773
703
|
```
|
|
774
704
|
|
|
775
|
-
**Best practice:**
|
|
705
|
+
**Best practice:** run Ralph in a [git worktree](https://git-scm.com/docs/git-worktree) so autonomous changes stay isolated from your working tree:
|
|
776
706
|
|
|
777
707
|
```bash
|
|
778
708
|
git worktree add ../my-project-ralph feature-branch
|
|
@@ -782,45 +712,29 @@ atomic workflow -n ralph -a claude "Build the auth module"
|
|
|
782
712
|
|
|
783
713
|
### Deep Research Codebase
|
|
784
714
|
|
|
785
|
-
Atomic
|
|
715
|
+
Atomic ships a `deep-research-codebase` workflow that performs **multi-agent parallel research** across your codebase — a full pipeline, not a single-shot command.
|
|
786
716
|
|
|
787
|
-
1. **Scout** —
|
|
788
|
-
2. **History** — A parallel agent surfaces prior research from `research/docs
|
|
789
|
-
3. **Explorers** — Multiple parallel agents (count scaled by LOC) each investigate a partition
|
|
790
|
-
4. **Aggregator** — A final agent synthesizes all explorer reports + history into a dated research
|
|
717
|
+
1. **Scout** — One agent scans the codebase structure and writes an architectural orientation.
|
|
718
|
+
2. **History** — A parallel agent surfaces prior research from `research/docs/`.
|
|
719
|
+
3. **Explorers** — Multiple parallel agents (count scaled by LOC) each investigate a partition.
|
|
720
|
+
4. **Aggregator** — A final agent synthesizes all explorer reports + history into a dated research doc at `research/docs/YYYY-MM-DD-<slug>.md`.
|
|
791
721
|
|
|
792
722
|
```bash
|
|
793
723
|
atomic workflow -n deep-research-codebase -a claude "How does the authentication system work?"
|
|
794
724
|
```
|
|
795
725
|
|
|
796
|
-
The
|
|
726
|
+
The output is a permanent research artifact that future runs, specs, and workflows can reference.
|
|
797
727
|
|
|
798
728
|
### Containerized Execution
|
|
799
729
|
|
|
800
|
-
Atomic ships as **devcontainer features** that bundle the CLI, agent, and all dependencies into isolated containers
|
|
801
|
-
|
|
802
|
-
```jsonc
|
|
803
|
-
// .devcontainer/devcontainer.json
|
|
804
|
-
{
|
|
805
|
-
"image": "mcr.microsoft.com/devcontainers/rust:latest",
|
|
806
|
-
"features": {
|
|
807
|
-
"ghcr.io/flora131/atomic/claude:1": {},
|
|
808
|
-
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
809
|
-
},
|
|
810
|
-
"remoteEnv": {
|
|
811
|
-
"ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}"
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
```
|
|
730
|
+
Atomic ships as **devcontainer features** that bundle the CLI, agent, and all dependencies into isolated containers — the recommended way to run autonomous agents safely.
|
|
815
731
|
|
|
816
732
|
**Why containerize?**
|
|
817
733
|
|
|
818
734
|
- Agents run `rm`, `git reset --hard`, and arbitrary shell commands — containers limit blast radius
|
|
819
735
|
- Reproducible environments across team members and CI
|
|
820
736
|
- Pre-installed dependencies: bun, playwright-cli, agent CLI, GitHub CLI
|
|
821
|
-
- Features
|
|
822
|
-
|
|
823
|
-
Each feature installs Atomic + one agent. Mix and match across projects:
|
|
737
|
+
- Features versioned in sync with Atomic releases
|
|
824
738
|
|
|
825
739
|
| Feature | Installs |
|
|
826
740
|
| ------------------------------------ | -------------------- |
|
|
@@ -828,6 +742,8 @@ Each feature installs Atomic + one agent. Mix and match across projects:
|
|
|
828
742
|
| `ghcr.io/flora131/atomic/opencode:1` | Atomic + OpenCode |
|
|
829
743
|
| `ghcr.io/flora131/atomic/copilot:1` | Atomic + Copilot CLI |
|
|
830
744
|
|
|
745
|
+
See [Quick Start → Devcontainer](#1-install) for a working `.devcontainer.json` and the [`.devcontainer/`](./.devcontainer/) directory for per-agent templates.
|
|
746
|
+
|
|
831
747
|
### Specialized Sub-Agents
|
|
832
748
|
|
|
833
749
|
Atomic dispatches **purpose-built sub-agents**, each with scoped context, tools, and termination conditions:
|
|
@@ -837,7 +753,7 @@ Atomic dispatches **purpose-built sub-agents**, each with scoped context, tools,
|
|
|
837
753
|
| `planner` | Decompose specs into structured task lists with dependency tracking |
|
|
838
754
|
| `worker` | Implement single focused tasks (multiple workers run in parallel) |
|
|
839
755
|
| `reviewer` | Audit implementations against specs and best practices |
|
|
840
|
-
| `code-simplifier` | Simplify and refine code for clarity, consistency,
|
|
756
|
+
| `code-simplifier` | Simplify and refine code for clarity, consistency, maintainability |
|
|
841
757
|
| `orchestrator` | Coordinate complex multi-step workflows |
|
|
842
758
|
| `codebase-analyzer` | Analyze implementation details of specific components |
|
|
843
759
|
| `codebase-locator` | Locate files, directories, and components |
|
|
@@ -847,26 +763,30 @@ Atomic dispatches **purpose-built sub-agents**, each with scoped context, tools,
|
|
|
847
763
|
| `codebase-research-locator` | Find documents in `research/` directory |
|
|
848
764
|
| `debugger` | Debug errors, test failures, and unexpected behavior |
|
|
849
765
|
|
|
850
|
-
|
|
766
|
+
<details>
|
|
767
|
+
<summary><i>Why specialize instead of using one general-purpose agent?</i></summary>
|
|
851
768
|
|
|
852
|
-
LLMs have
|
|
769
|
+
LLMs have an architectural limitation: the more context they hold, the harder it becomes to attend to the right information. A single agent juggling a spec, dozens of files, tool outputs, and its own reasoning will lose details, repeat work, or hallucinate connections. This isn't solvable via prompt engineering — it's how attention mechanisms work.
|
|
853
770
|
|
|
854
|
-
Specialized sub-agents turn
|
|
771
|
+
Specialized sub-agents turn the limitation into an advantage:
|
|
855
772
|
|
|
856
|
-
- **Context isolation** —
|
|
857
|
-
- **Tool scoping** — Agents only see tools relevant to their role. A `reviewer` has read-only
|
|
858
|
-
- **Parallel execution** — Independent sub-agents run concurrently.
|
|
859
|
-
- **Composability** — Sub-agents
|
|
773
|
+
- **Context isolation** — Fresh, minimal context scoped to one job. A `codebase-locator` doesn't carry file contents; a `worker` doesn't carry the full spec.
|
|
774
|
+
- **Tool scoping** — Agents only see tools relevant to their role. A `reviewer` has read-only tools and can't edit files; a `worker` has edit tools but can't spawn other workers.
|
|
775
|
+
- **Parallel execution** — Independent sub-agents run concurrently. One worker writes the migration, another writes the handler, a third generates tests — all at once.
|
|
776
|
+
- **Composability** — Sub-agents combine into workflows or dispatch ad-hoc. The same `reviewer` used by Ralph is the one invoked when you ask for a code review in chat.
|
|
860
777
|
|
|
861
|
-
|
|
778
|
+
A specialized `codebase-analyzer` reading three files produces more accurate output than a generalist that has already consumed 50,000 tokens of search results and prior reasoning.
|
|
779
|
+
|
|
780
|
+
</details>
|
|
862
781
|
|
|
863
782
|
Use `/agents` in any chat session to see all available sub-agents.
|
|
864
783
|
|
|
865
784
|
### Built-in Skills
|
|
866
785
|
|
|
867
|
-
Skills are structured capability modules that give agents best practices and reusable workflows
|
|
786
|
+
Skills are structured capability modules that give agents best practices and reusable workflows. Atomic ships **55 skills** across eight categories; each lives at `.agents/skills/<name>/SKILL.md` and is auto-invoked when the agent detects a relevant trigger.
|
|
868
787
|
|
|
869
|
-
|
|
788
|
+
<details>
|
|
789
|
+
<summary><b>Development workflows</b></summary>
|
|
870
790
|
|
|
871
791
|
| Skill | Description |
|
|
872
792
|
| ------------------------- | --------------------------------------------------------------------------- |
|
|
@@ -879,7 +799,10 @@ Skills are structured capability modules that give agents best practices and reu
|
|
|
879
799
|
| `test-driven-development` | Write tests first; includes a testing anti-patterns guide |
|
|
880
800
|
| `prompt-engineer` | Create, improve, and optimize prompts using best practices |
|
|
881
801
|
|
|
882
|
-
|
|
802
|
+
</details>
|
|
803
|
+
|
|
804
|
+
<details>
|
|
805
|
+
<summary><b>Context engineering</b> — working within (and around) LLM context limits</summary>
|
|
883
806
|
|
|
884
807
|
| Skill | Description |
|
|
885
808
|
| ---------------------- | --------------------------------------------------------------------- |
|
|
@@ -895,7 +818,10 @@ Skills are structured capability modules that give agents best practices and reu
|
|
|
895
818
|
| `project-development` | Validate task-model fit before building; cost estimation |
|
|
896
819
|
| `bdi-mental-states` | Belief-desire-intention models for explainable agent reasoning |
|
|
897
820
|
|
|
898
|
-
|
|
821
|
+
</details>
|
|
822
|
+
|
|
823
|
+
<details>
|
|
824
|
+
<summary><b>TypeScript & runtime</b></summary>
|
|
899
825
|
|
|
900
826
|
| Skill | Description |
|
|
901
827
|
| --------------------------- | ----------------------------------------------------------------------- |
|
|
@@ -905,7 +831,10 @@ Skills are structured capability modules that give agents best practices and reu
|
|
|
905
831
|
| `bun` | Build, test, deploy with Bun (runtime, package manager, bundler, tests) |
|
|
906
832
|
| `opentui` | Build terminal UIs with OpenTUI (core, React, Solid reconcilers) |
|
|
907
833
|
|
|
908
|
-
|
|
834
|
+
</details>
|
|
835
|
+
|
|
836
|
+
<details>
|
|
837
|
+
<summary><b>Frontend design & UI polish</b> — used by `impeccable` and invoked individually for targeted refinement</summary>
|
|
909
838
|
|
|
910
839
|
| Skill | Description |
|
|
911
840
|
| ---------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
@@ -921,6 +850,11 @@ Skills are structured capability modules that give agents best practices and reu
|
|
|
921
850
|
| `harden` | Error handling, onboarding, empty states, i18n, overflow, edge-case resilience |
|
|
922
851
|
| `optimize` | Diagnose and fix loading, rendering, animation, bundle-size issues |
|
|
923
852
|
|
|
853
|
+
</details>
|
|
854
|
+
|
|
855
|
+
<details>
|
|
856
|
+
<summary><b>Evaluation, documents, git, meta</b></summary>
|
|
857
|
+
|
|
924
858
|
**Evaluation:**
|
|
925
859
|
|
|
926
860
|
| Skill | Description |
|
|
@@ -954,20 +888,22 @@ Skills are structured capability modules that give agents best practices and reu
|
|
|
954
888
|
| --------------- | ------------------------------------------------------- |
|
|
955
889
|
| `skill-creator` | Create, modify, evaluate, and benchmark your own skills |
|
|
956
890
|
|
|
957
|
-
|
|
891
|
+
</details>
|
|
892
|
+
|
|
893
|
+
Skills are auto-invoked when relevant. Run `ls .agents/skills/` for the complete, current list on disk.
|
|
958
894
|
|
|
959
895
|
### Workflow Orchestrator Panel
|
|
960
896
|
|
|
961
|
-
During `atomic workflow` execution, Atomic renders a live orchestrator panel built on [OpenTUI](https://github.com/anomalyco/opentui)
|
|
897
|
+
During `atomic workflow` execution, Atomic renders a live orchestrator panel built on [OpenTUI](https://github.com/anomalyco/opentui) over the workflow's tmux session graph. It shows:
|
|
962
898
|
|
|
963
|
-
- **Session graph** — Nodes
|
|
964
|
-
- **Task list tracking** — Ralph's decomposed task list with dependency arrows, updated in real time
|
|
965
|
-
- **Pane previews** — Thumbnail of each tmux pane so you can see
|
|
966
|
-
- **Transcript passing visibility** — Highlights `s.save()` / `s.transcript()` handoffs as they happen
|
|
899
|
+
- **Session graph** — Nodes per `.stage()` with status (pending / running / completed / failed) and edges for sequential / parallel dependencies
|
|
900
|
+
- **Task list tracking** — Ralph's decomposed task list with dependency arrows, updated in real time
|
|
901
|
+
- **Pane previews** — Thumbnail of each tmux pane so you can see every agent without context-switching
|
|
902
|
+
- **Transcript passing visibility** — Highlights `s.save()` / `s.transcript()` handoffs as they happen
|
|
967
903
|
|
|
968
|
-
During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>` spawns the native agent CLI inside a tmux
|
|
904
|
+
During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>` spawns the native agent CLI inside a tmux session, so chat features (streaming, `@` mentions, `/slash-commands`, model selection, theme, keyboard shortcuts) come from the agent CLI itself. Atomic handles config sync, tmux session management, and argument passthrough.
|
|
969
905
|
|
|
970
|
-
| Context |
|
|
906
|
+
| Context | UI provider |
|
|
971
907
|
| -------------------------------------- | ----------------------------------------------------------- |
|
|
972
908
|
| `atomic workflow -n <name> -a <agent>` | Atomic (orchestrator panel + tmux session graph) |
|
|
973
909
|
| `atomic chat -a <agent>` | The native agent CLI (Claude Code / OpenCode / Copilot CLI) |
|
|
@@ -980,8 +916,8 @@ During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>`
|
|
|
980
916
|
|
|
981
917
|
| Command | Description |
|
|
982
918
|
| ------------------------------- | --------------------------------------------------------------------- |
|
|
983
|
-
| `atomic chat` | Spawn the native agent CLI inside a tmux
|
|
984
|
-
| `atomic workflow` | Run a multi-session
|
|
919
|
+
| `atomic chat` | Spawn the native agent CLI inside a tmux session |
|
|
920
|
+
| `atomic workflow` | Run a multi-session workflow with the Atomic orchestrator panel |
|
|
985
921
|
| `atomic workflow list` | List available workflows, grouped by source |
|
|
986
922
|
| `atomic session list` | List all running sessions on the atomic tmux socket |
|
|
987
923
|
| `atomic session connect [name]` | Attach to a session (interactive picker when no name given) |
|
|
@@ -991,8 +927,6 @@ During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>`
|
|
|
991
927
|
|
|
992
928
|
#### Global Flags
|
|
993
929
|
|
|
994
|
-
These flags are available on all commands:
|
|
995
|
-
|
|
996
930
|
| Flag | Description |
|
|
997
931
|
| --------------- | ------------------------------------------ |
|
|
998
932
|
| `-y, --yes` | Auto-confirm all prompts (non-interactive) |
|
|
@@ -1001,7 +935,7 @@ These flags are available on all commands:
|
|
|
1001
935
|
|
|
1002
936
|
#### `atomic session` Subcommands
|
|
1003
937
|
|
|
1004
|
-
|
|
938
|
+
Available at three levels — scoped or global:
|
|
1005
939
|
|
|
1006
940
|
| Command | Description |
|
|
1007
941
|
| ---------------------------------------- | ----------------------------------------------------- |
|
|
@@ -1015,17 +949,17 @@ The `session` command is available at three levels — scoped or global:
|
|
|
1015
949
|
| `atomic workflow session connect [name]` | Attach to a workflow session |
|
|
1016
950
|
| `atomic workflow session kill [name]` | Kill a workflow session, or all workflow sessions |
|
|
1017
951
|
|
|
1018
|
-
`list`, `connect`, and `kill`
|
|
952
|
+
`list`, `connect`, and `kill` accept `-a <agent>` (repeatable) to filter by agent. `kill` prompts for confirmation.
|
|
1019
953
|
|
|
1020
954
|
```bash
|
|
1021
|
-
atomic session list #
|
|
1022
|
-
atomic session list -a claude #
|
|
1023
|
-
atomic session connect my-session #
|
|
1024
|
-
atomic session connect #
|
|
1025
|
-
atomic chat session list -a copilot #
|
|
1026
|
-
atomic session kill my-session #
|
|
1027
|
-
atomic session kill #
|
|
1028
|
-
atomic workflow session kill -a claude #
|
|
955
|
+
atomic session list # all sessions
|
|
956
|
+
atomic session list -a claude # only Claude sessions
|
|
957
|
+
atomic session connect my-session # attach by name
|
|
958
|
+
atomic session connect # interactive picker
|
|
959
|
+
atomic chat session list -a copilot # chat sessions for Copilot only
|
|
960
|
+
atomic session kill my-session # kill one session by name
|
|
961
|
+
atomic session kill # kill all sessions (with confirmation)
|
|
962
|
+
atomic workflow session kill -a claude # kill all Claude workflow sessions
|
|
1029
963
|
```
|
|
1030
964
|
|
|
1031
965
|
#### `atomic chat` Flags
|
|
@@ -1034,12 +968,12 @@ atomic workflow session kill -a claude # Kill all Claude workflow sessions
|
|
|
1034
968
|
| -------------------- | -------------------------------------- |
|
|
1035
969
|
| `-a, --agent <name>` | Agent: `claude`, `opencode`, `copilot` |
|
|
1036
970
|
|
|
1037
|
-
All other arguments are forwarded directly to the native agent CLI
|
|
971
|
+
All other arguments are forwarded directly to the native agent CLI:
|
|
1038
972
|
|
|
1039
973
|
```bash
|
|
1040
|
-
atomic chat -a claude "fix the bug" #
|
|
1041
|
-
atomic chat -a copilot --model gpt-5.4 #
|
|
1042
|
-
atomic chat -a claude --verbose #
|
|
974
|
+
atomic chat -a claude "fix the bug" # initial prompt
|
|
975
|
+
atomic chat -a copilot --model gpt-5.4 # custom model
|
|
976
|
+
atomic chat -a claude --verbose # forward --verbose to claude
|
|
1043
977
|
```
|
|
1044
978
|
|
|
1045
979
|
#### `atomic workflow` Flags
|
|
@@ -1048,48 +982,80 @@ atomic chat -a claude --verbose # Forward --verbose to claude
|
|
|
1048
982
|
| -------------------- | ------------------------------------------------------------------------------------------------- |
|
|
1049
983
|
| `-n, --name <name>` | Workflow name (matches directory under `.atomic/workflows/<name>/`) |
|
|
1050
984
|
| `-a, --agent <name>` | Agent: `claude`, `opencode`, `copilot` |
|
|
985
|
+
| `-d, --detach` | Start the workflow in the background without attaching — ideal for scripted / CI runs; attach later with `atomic workflow session connect <name>` |
|
|
1051
986
|
| `--<field>=<value>` | Structured input for workflows that declare an `inputs` schema (also accepts `--<field> <value>`) |
|
|
1052
987
|
| `[prompt...]` | Positional prompt — requires the workflow to declare a `prompt` input |
|
|
1053
988
|
|
|
1054
|
-
|
|
989
|
+
Five invocation shapes:
|
|
1055
990
|
|
|
1056
991
|
```bash
|
|
1057
|
-
# 1. List every workflow available
|
|
992
|
+
# 1. List every workflow available, grouped by source
|
|
1058
993
|
atomic workflow list
|
|
1059
994
|
atomic workflow list -a claude # filter by agent
|
|
1060
995
|
|
|
1061
|
-
# 2. Launch the interactive picker
|
|
1062
|
-
# the list, fill the form rendered from the workflow's declared inputs,
|
|
1063
|
-
# and confirm with y/n
|
|
996
|
+
# 2. Launch the interactive picker (no -n) — fuzzy-search, fill the form, confirm with y/n
|
|
1064
997
|
atomic workflow -a claude
|
|
1065
998
|
|
|
1066
|
-
# 3. Run
|
|
999
|
+
# 3. Run with a positional prompt (workflow must declare a "prompt" input)
|
|
1067
1000
|
atomic workflow -n ralph -a claude "build a REST API for user management"
|
|
1068
1001
|
|
|
1069
1002
|
# 4. Run a structured-input workflow with one --<field> flag per declared input
|
|
1070
1003
|
atomic workflow -n gen-spec -a claude \
|
|
1071
1004
|
--research_doc=research/docs/2026-04-11-auth.md \
|
|
1072
1005
|
--focus=standard
|
|
1006
|
+
|
|
1007
|
+
# 5. Run detached — orchestrator runs in the background; prints the session name
|
|
1008
|
+
# and returns immediately. Attach any time with `atomic workflow session connect`.
|
|
1009
|
+
atomic workflow -n ralph -a claude -d "build a REST API for user management"
|
|
1073
1010
|
```
|
|
1074
1011
|
|
|
1075
|
-
Workflows that declare
|
|
1012
|
+
Workflows that declare `inputs: WorkflowInput[]` get CLI flag validation for free. **Builtin workflows (e.g. `ralph`) are reserved** — a local/global workflow with the same name will not shadow a builtin.
|
|
1076
1013
|
|
|
1077
1014
|
#### `atomic completions` — Shell Completions
|
|
1078
1015
|
|
|
1079
|
-
Atomic ships tab-completion for **bash**, **zsh**, **fish**, and **PowerShell**.
|
|
1016
|
+
Atomic ships tab-completion for **bash**, **zsh**, **fish**, and **PowerShell**. Cache the script once so new shells don't re-spawn the atomic binary on startup.
|
|
1080
1017
|
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1018
|
+
<details>
|
|
1019
|
+
<summary><b>Bash / Zsh / Fish / PowerShell setup</b></summary>
|
|
1020
|
+
|
|
1021
|
+
**Bash**
|
|
1022
|
+
|
|
1023
|
+
```bash
|
|
1024
|
+
mkdir -p ~/.atomic/completions
|
|
1025
|
+
atomic completions bash > ~/.atomic/completions/atomic.bash
|
|
1026
|
+
echo '[ -f "$HOME/.atomic/completions/atomic.bash" ] && source "$HOME/.atomic/completions/atomic.bash"' >> ~/.bashrc
|
|
1027
|
+
```
|
|
1087
1028
|
|
|
1088
|
-
|
|
1029
|
+
**Zsh**
|
|
1030
|
+
|
|
1031
|
+
```zsh
|
|
1032
|
+
mkdir -p ~/.atomic/completions
|
|
1033
|
+
atomic completions zsh > ~/.atomic/completions/atomic.zsh
|
|
1034
|
+
echo '[ -f "$HOME/.atomic/completions/atomic.zsh" ] && source "$HOME/.atomic/completions/atomic.zsh"' >> ~/.zshrc
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
**Fish**
|
|
1038
|
+
|
|
1039
|
+
```fish
|
|
1040
|
+
atomic completions fish > ~/.config/fish/completions/atomic.fish
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
**PowerShell**
|
|
1044
|
+
|
|
1045
|
+
```powershell
|
|
1046
|
+
$cache = Join-Path $HOME '.atomic\completions\atomic.ps1'
|
|
1047
|
+
New-Item -ItemType Directory -Force -Path (Split-Path $cache) | Out-Null
|
|
1048
|
+
atomic completions powershell | Out-File -FilePath $cache -Encoding utf8
|
|
1049
|
+
Add-Content $PROFILE "`nif (Test-Path `"$cache`") { . `"$cache`" }"
|
|
1050
|
+
```
|
|
1051
|
+
|
|
1052
|
+
</details>
|
|
1053
|
+
|
|
1054
|
+
> The bootstrap installer (`install.sh` / `install.ps1`) sets this up automatically and migrates older `eval "$(atomic completions …)"` snippets to the cached form.
|
|
1089
1055
|
|
|
1090
1056
|
### Atomic-Provided Skills (invokable from any agent chat)
|
|
1091
1057
|
|
|
1092
|
-
Atomic ships skills — not slash commands. Skills are auto-discovered by Claude Code, OpenCode, and Copilot CLI
|
|
1058
|
+
Atomic ships skills — not slash commands. Skills are auto-discovered by Claude Code, OpenCode, and Copilot CLI, invoked by typing `/<skill-name>` (Claude Code) or by natural-language reference (OpenCode / Copilot CLI).
|
|
1093
1059
|
|
|
1094
1060
|
| Skill | Typical invocation | Purpose |
|
|
1095
1061
|
| ------------------- | --------------------------------- | ----------------------------------------------------------------------------- |
|
|
@@ -1103,7 +1069,7 @@ Atomic ships skills — not slash commands. Skills are auto-discovered by Claude
|
|
|
1103
1069
|
| `sl-submit-diff` | `/sl-submit-diff` | Submit a Sapling commit as a Phabricator diff |
|
|
1104
1070
|
| `workflow-creator` | natural language | Generate a multi-agent workflow file in `.atomic/workflows/` |
|
|
1105
1071
|
|
|
1106
|
-
Native slash commands
|
|
1072
|
+
Native slash commands (`/help`, `/clear`, `/compact`, `/model`, `/theme`, `/agents`, `/mcp`, `/exit`) come from the underlying agent CLI, not Atomic.
|
|
1107
1073
|
|
|
1108
1074
|
---
|
|
1109
1075
|
|
|
@@ -1121,22 +1087,18 @@ Resolution order:
|
|
|
1121
1087
|
"$schema": "https://raw.githubusercontent.com/flora131/atomic/main/assets/settings.schema.json",
|
|
1122
1088
|
"version": 1,
|
|
1123
1089
|
"scm": "github",
|
|
1124
|
-
"lastUpdated": "2026-04-09T12:00:00.000Z"
|
|
1125
|
-
"trustedPaths": [
|
|
1126
|
-
{ "workspacePath": "/home/you/project", "provider": "claude" }
|
|
1127
|
-
]
|
|
1090
|
+
"lastUpdated": "2026-04-09T12:00:00.000Z"
|
|
1128
1091
|
}
|
|
1129
1092
|
```
|
|
1130
1093
|
|
|
1131
|
-
| Field
|
|
1132
|
-
|
|
|
1133
|
-
| `$schema`
|
|
1134
|
-
| `version`
|
|
1135
|
-
| `scm`
|
|
1136
|
-
| `lastUpdated`
|
|
1137
|
-
| `trustedPaths` | array | Workspaces that have completed provider onboarding; atomic skips re-prompting for these |
|
|
1094
|
+
| Field | Type | Description |
|
|
1095
|
+
| ------------- | ------ | ----------------------------------------- |
|
|
1096
|
+
| `$schema` | string | JSON Schema URL for editor autocomplete |
|
|
1097
|
+
| `version` | number | Config schema version (currently `1`) |
|
|
1098
|
+
| `scm` | string | Source control: `github` or `sapling` |
|
|
1099
|
+
| `lastUpdated` | string | ISO 8601 timestamp of the last update |
|
|
1138
1100
|
|
|
1139
|
-
>
|
|
1101
|
+
> Model selection and reasoning effort are managed by each underlying agent CLI (e.g. Claude Code's `/model`), not Atomic. Atomic's chat command spawns the agent's native TUI — use the agent's own controls.
|
|
1140
1102
|
|
|
1141
1103
|
### Agent-Specific Files
|
|
1142
1104
|
|
|
@@ -1146,162 +1108,7 @@ Resolution order:
|
|
|
1146
1108
|
| OpenCode | `.opencode/` | `.agents/skills/` | `AGENTS.md` |
|
|
1147
1109
|
| GitHub Copilot | `.github/` | `.agents/skills/` | `AGENTS.md` |
|
|
1148
1110
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
---
|
|
1152
|
-
|
|
1153
|
-
## Installation Options
|
|
1154
|
-
|
|
1155
|
-
### Bun (recommended)
|
|
1156
|
-
|
|
1157
|
-
```bash
|
|
1158
|
-
bun install -g @bastani/atomic
|
|
1159
|
-
```
|
|
1160
|
-
|
|
1161
|
-
### Devcontainer (recommended for autonomous agents)
|
|
1162
|
-
|
|
1163
|
-
> [!TIP]
|
|
1164
|
-
> Devcontainers isolate the coding agent from your host system, reducing the risk of destructive actions like unintended file deletions or misapplied shell commands. This makes them the safest way to run Atomic.
|
|
1165
|
-
>
|
|
1166
|
-
> Use the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) for VS Code or [DevPod](https://devpod.sh) to spawn and manage your devcontainers.
|
|
1167
|
-
|
|
1168
|
-
Add a single feature to your `.devcontainer/devcontainer.json`:
|
|
1169
|
-
|
|
1170
|
-
```
|
|
1171
|
-
your-project/
|
|
1172
|
-
+-- .devcontainer/
|
|
1173
|
-
| +-- devcontainer.json <-- add the feature here
|
|
1174
|
-
+-- src/
|
|
1175
|
-
+-- ...
|
|
1176
|
-
```
|
|
1177
|
-
|
|
1178
|
-
```jsonc
|
|
1179
|
-
{
|
|
1180
|
-
"features": {
|
|
1181
|
-
"ghcr.io/flora131/atomic/claude:1": {} // or /opencode:1 or /copilot:1
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
```
|
|
1185
|
-
|
|
1186
|
-
| Feature | Reference | Agent |
|
|
1187
|
-
| -------------------- | ------------------------------------ | ---------------------------------------------------- |
|
|
1188
|
-
| Atomic + Claude Code | `ghcr.io/flora131/atomic/claude:1` | [Claude Code](https://claude.ai) |
|
|
1189
|
-
| Atomic + OpenCode | `ghcr.io/flora131/atomic/opencode:1` | [OpenCode](https://opencode.ai) |
|
|
1190
|
-
| Atomic + Copilot CLI | `ghcr.io/flora131/atomic/copilot:1` | [Copilot CLI](https://github.com/github/copilot-cli) |
|
|
1191
|
-
|
|
1192
|
-
Each feature installs the Atomic CLI, all shared dependencies (bun, playwright-cli), agent-specific configurations (agents, skills), and the agent CLI itself. Features are versioned in sync with Atomic CLI releases.
|
|
1193
|
-
|
|
1194
|
-
<details>
|
|
1195
|
-
<summary>Standalone binary (macOS / Linux)</summary>
|
|
1196
|
-
|
|
1197
|
-
```bash
|
|
1198
|
-
curl -fsSL https://raw.githubusercontent.com/flora131/atomic/main/install.sh | bash
|
|
1199
|
-
# or with wget:
|
|
1200
|
-
wget -qO- https://raw.githubusercontent.com/flora131/atomic/main/install.sh | bash
|
|
1201
|
-
```
|
|
1202
|
-
|
|
1203
|
-
</details>
|
|
1204
|
-
|
|
1205
|
-
<details>
|
|
1206
|
-
<summary>Standalone binary (Windows PowerShell)</summary>
|
|
1207
|
-
|
|
1208
|
-
```powershell
|
|
1209
|
-
irm https://raw.githubusercontent.com/flora131/atomic/main/install.ps1 | iex
|
|
1210
|
-
```
|
|
1211
|
-
|
|
1212
|
-
</details>
|
|
1213
|
-
|
|
1214
|
-
<details>
|
|
1215
|
-
<summary>Install a specific version</summary>
|
|
1216
|
-
|
|
1217
|
-
```bash
|
|
1218
|
-
bun install -g @bastani/atomic@0.5.0-4 # replace with desired version
|
|
1219
|
-
```
|
|
1220
|
-
|
|
1221
|
-
List all published versions with `npm view @bastani/atomic versions`.
|
|
1222
|
-
|
|
1223
|
-
> Don't have bun yet? Run the bootstrap installer first (it installs bun and the latest atomic), then re-run the command above to switch to your desired version.
|
|
1224
|
-
|
|
1225
|
-
</details>
|
|
1226
|
-
|
|
1227
|
-
<details>
|
|
1228
|
-
<summary>Install a prerelease version</summary>
|
|
1229
|
-
|
|
1230
|
-
> **Warning:** Prerelease versions may contain breaking changes or bugs. Use for testing only.
|
|
1231
|
-
|
|
1232
|
-
Prereleases are published under the `next` dist-tag on npm:
|
|
1233
|
-
|
|
1234
|
-
```bash
|
|
1235
|
-
bun install -g @bastani/atomic@next
|
|
1236
|
-
```
|
|
1237
|
-
|
|
1238
|
-
</details>
|
|
1239
|
-
|
|
1240
|
-
<details>
|
|
1241
|
-
<summary>Authenticated downloads (CI / enterprise)</summary>
|
|
1242
|
-
|
|
1243
|
-
Set `GITHUB_TOKEN` to use authenticated GitHub API requests, which avoids rate limits in CI/CD or enterprise environments:
|
|
1244
|
-
|
|
1245
|
-
**macOS / Linux:**
|
|
1246
|
-
|
|
1247
|
-
```bash
|
|
1248
|
-
GITHUB_TOKEN=ghp_... curl -fsSL https://raw.githubusercontent.com/flora131/atomic/main/install.sh | bash
|
|
1249
|
-
```
|
|
1250
|
-
|
|
1251
|
-
**Windows PowerShell:**
|
|
1252
|
-
|
|
1253
|
-
```powershell
|
|
1254
|
-
$env:GITHUB_TOKEN='ghp_...'; irm https://raw.githubusercontent.com/flora131/atomic/main/install.ps1 | iex
|
|
1255
|
-
```
|
|
1256
|
-
|
|
1257
|
-
</details>
|
|
1258
|
-
|
|
1259
|
-
<details>
|
|
1260
|
-
<summary>Devcontainer examples</summary>
|
|
1261
|
-
|
|
1262
|
-
**Atomic + Claude in a Rust project:**
|
|
1263
|
-
|
|
1264
|
-
```jsonc
|
|
1265
|
-
{
|
|
1266
|
-
"image": "mcr.microsoft.com/devcontainers/rust:latest",
|
|
1267
|
-
"features": {
|
|
1268
|
-
"ghcr.io/flora131/atomic/claude:1": {},
|
|
1269
|
-
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
1270
|
-
},
|
|
1271
|
-
"remoteEnv": {
|
|
1272
|
-
"ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}"
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
```
|
|
1276
|
-
|
|
1277
|
-
**Atomic + Copilot in a Python project:**
|
|
1278
|
-
|
|
1279
|
-
```jsonc
|
|
1280
|
-
{
|
|
1281
|
-
"image": "mcr.microsoft.com/devcontainers/python:3.12",
|
|
1282
|
-
"features": {
|
|
1283
|
-
"ghcr.io/flora131/atomic/copilot:1": {},
|
|
1284
|
-
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
1285
|
-
},
|
|
1286
|
-
"remoteEnv": {
|
|
1287
|
-
"GH_TOKEN": "${localEnv:GH_TOKEN}"
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
```
|
|
1291
|
-
|
|
1292
|
-
**Atomic + OpenCode in a Go project:**
|
|
1293
|
-
|
|
1294
|
-
```jsonc
|
|
1295
|
-
{
|
|
1296
|
-
"image": "mcr.microsoft.com/devcontainers/go:1.22",
|
|
1297
|
-
"features": {
|
|
1298
|
-
"ghcr.io/flora131/atomic/opencode:1": {},
|
|
1299
|
-
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
1300
|
-
}
|
|
1301
|
-
}
|
|
1302
|
-
```
|
|
1303
|
-
|
|
1304
|
-
</details>
|
|
1111
|
+
All three agents share the same skill set via `.agents/skills/`. Claude Code accesses them through a `.claude/skills/` symlink.
|
|
1305
1112
|
|
|
1306
1113
|
---
|
|
1307
1114
|
|
|
@@ -1309,15 +1116,12 @@ $env:GITHUB_TOKEN='ghp_...'; irm https://raw.githubusercontent.com/flora131/atom
|
|
|
1309
1116
|
|
|
1310
1117
|
### Update
|
|
1311
1118
|
|
|
1312
|
-
Use Bun's package manager directly:
|
|
1313
|
-
|
|
1314
1119
|
```bash
|
|
1315
|
-
bun update -g @bastani/atomic
|
|
1316
|
-
|
|
1317
|
-
bun install -g @bastani/atomic@next
|
|
1120
|
+
bun update -g @bastani/atomic # latest stable
|
|
1121
|
+
bun install -g @bastani/atomic@next # prerelease
|
|
1318
1122
|
```
|
|
1319
1123
|
|
|
1320
|
-
The first
|
|
1124
|
+
The first `atomic` run after upgrading auto-syncs tooling deps and global skills — no separate command needed.
|
|
1321
1125
|
|
|
1322
1126
|
### Uninstall
|
|
1323
1127
|
|
|
@@ -1325,47 +1129,14 @@ The first time you run `atomic` after upgrading, the CLI auto-syncs tooling deps
|
|
|
1325
1129
|
bun remove -g @bastani/atomic
|
|
1326
1130
|
```
|
|
1327
1131
|
|
|
1328
|
-
That removes the `atomic` binary installed by `bun install -g`. If you used the bootstrap installer (`install.sh` / `install.ps1`) on a machine without Bun, the same `bun remove` command still works once Bun is on your PATH.
|
|
1329
|
-
|
|
1330
|
-
<details>
|
|
1331
|
-
<summary>Clean up project config files</summary>
|
|
1332
|
-
|
|
1333
|
-
> **Warning:** This deletes all project-specific settings, skills, and agents configured by Atomic for the current project.
|
|
1334
|
-
|
|
1335
|
-
**macOS / Linux:**
|
|
1336
|
-
|
|
1337
|
-
```bash
|
|
1338
|
-
rm -rf .claude/ CLAUDE.md # Claude Code
|
|
1339
|
-
rm -rf .opencode/ AGENTS.md # OpenCode
|
|
1340
|
-
rm -f .github/copilot-instructions.md # Copilot CLI
|
|
1341
|
-
rm -rf .atomic/ # Atomic local settings + workflows
|
|
1342
|
-
```
|
|
1343
|
-
|
|
1344
|
-
**Windows PowerShell:**
|
|
1345
|
-
|
|
1346
|
-
```powershell
|
|
1347
|
-
Remove-Item -Path ".claude" -Recurse -Force; Remove-Item "CLAUDE.md" -Force
|
|
1348
|
-
Remove-Item -Path ".opencode" -Recurse -Force; Remove-Item "AGENTS.md" -Force
|
|
1349
|
-
Remove-Item -Path ".github\copilot-instructions.md" -Force
|
|
1350
|
-
Remove-Item -Path ".atomic" -Recurse -Force
|
|
1351
|
-
```
|
|
1352
|
-
|
|
1353
|
-
</details>
|
|
1354
|
-
|
|
1355
1132
|
<details>
|
|
1356
|
-
<summary>
|
|
1357
|
-
|
|
1358
|
-
> **Warning:** This deletes Atomic's global settings and cached agent configs.
|
|
1359
|
-
|
|
1360
|
-
**macOS / Linux:**
|
|
1133
|
+
<summary><b>Also remove global config and cached agent configs</b></summary>
|
|
1361
1134
|
|
|
1362
1135
|
```bash
|
|
1136
|
+
# macOS / Linux
|
|
1363
1137
|
rm -rf ~/.atomic/
|
|
1364
|
-
```
|
|
1365
|
-
|
|
1366
|
-
**Windows PowerShell:**
|
|
1367
1138
|
|
|
1368
|
-
|
|
1139
|
+
# Windows PowerShell
|
|
1369
1140
|
Remove-Item -Path "$env:USERPROFILE\.atomic" -Recurse -Force
|
|
1370
1141
|
```
|
|
1371
1142
|
|
|
@@ -1373,11 +1144,10 @@ Remove-Item -Path "$env:USERPROFILE\.atomic" -Recurse -Force
|
|
|
1373
1144
|
|
|
1374
1145
|
---
|
|
1375
1146
|
|
|
1376
|
-
|
|
1377
1147
|
## Troubleshooting
|
|
1378
1148
|
|
|
1379
1149
|
<details>
|
|
1380
|
-
<summary>Git identity error</summary>
|
|
1150
|
+
<summary><b>Git identity error</b></summary>
|
|
1381
1151
|
|
|
1382
1152
|
```bash
|
|
1383
1153
|
git config --global user.name "Your Name"
|
|
@@ -1387,43 +1157,22 @@ git config --global user.email "you@example.com"
|
|
|
1387
1157
|
</details>
|
|
1388
1158
|
|
|
1389
1159
|
<details>
|
|
1390
|
-
<summary>Windows
|
|
1160
|
+
<summary><b>Windows: agents fail to spawn</b></summary>
|
|
1391
1161
|
|
|
1392
|
-
|
|
1162
|
+
Ensure the agent CLI is in your PATH. Atomic uses `Bun.which()`, which handles `.cmd`, `.exe`, and `.bat` extensions automatically.
|
|
1393
1163
|
|
|
1394
1164
|
</details>
|
|
1395
1165
|
|
|
1396
|
-
<details>
|
|
1397
|
-
<summary>Sub-agent tree stuck on "Initializing..."</summary>
|
|
1398
|
-
|
|
1399
|
-
1. Update to the latest release (`bun install -g @bastani/atomic`) and retry
|
|
1400
|
-
2. Check for terminal progress events in verbose mode
|
|
1401
|
-
3. Press `Ctrl+F` twice to terminate stuck background agents, then resend your prompt
|
|
1402
|
-
4. If the issue persists, capture reproduction steps and [open an issue](https://github.com/flora131/atomic/issues)
|
|
1403
|
-
|
|
1404
|
-
</details>
|
|
1405
|
-
|
|
1406
|
-
<details>
|
|
1407
|
-
<summary>Shift+Enter not inserting newline</summary>
|
|
1408
|
-
|
|
1409
|
-
- **VS Code terminal:** Keep `terminal.integrated.enableKittyKeyboardProtocol` enabled
|
|
1410
|
-
- **GNOME Terminal, xterm, Alacritty, WezTerm, iTerm2:** `modifyOtherKeys` mode is enabled automatically
|
|
1411
|
-
- **Universal fallback:** Use `Ctrl+J` for newline
|
|
1412
|
-
- **Last resort:** End line with `\` and press Enter
|
|
1413
|
-
|
|
1414
|
-
</details>
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
1166
|
---
|
|
1418
1167
|
|
|
1419
1168
|
## FAQ
|
|
1420
1169
|
|
|
1421
1170
|
<details>
|
|
1422
|
-
<summary>How does Atomic differ from Spec-Kit?</summary>
|
|
1171
|
+
<summary><b>How does Atomic differ from Spec-Kit?</b></summary>
|
|
1423
1172
|
|
|
1424
1173
|
[Spec Kit](https://github.com/github/spec-kit) is GitHub's toolkit for "Spec-Driven Development." Both improve AI-assisted development, but solve different problems:
|
|
1425
1174
|
|
|
1426
|
-
**In short:** Spec-Kit works well for greenfield projects where you start from a spec and use a single Copilot session to generate code. Atomic is built for the harder case — large existing codebases where you need to research what's already there before changing anything.
|
|
1175
|
+
**In short:** Spec-Kit works well for greenfield projects where you start from a spec and use a single Copilot session to generate code. Atomic is built for the harder case — large existing codebases where you need to research what's already there before changing anything. Atomic gives you multi-session pipelines with isolated context windows, deterministic execution, and support for Claude Code, OpenCode, and Copilot CLI instead of just one agent.
|
|
1427
1176
|
|
|
1428
1177
|
| Aspect | Spec-Kit | Atomic |
|
|
1429
1178
|
| ------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
@@ -1442,11 +1191,11 @@ If agents fail to spawn on Windows, ensure the agent CLI is in your PATH. Atomic
|
|
|
1442
1191
|
</details>
|
|
1443
1192
|
|
|
1444
1193
|
<details>
|
|
1445
|
-
<summary>How does Atomic differ from DeerFlow?</summary>
|
|
1194
|
+
<summary><b>How does Atomic differ from DeerFlow?</b></summary>
|
|
1446
1195
|
|
|
1447
1196
|
[DeerFlow](https://github.com/bytedance/deer-flow) is ByteDance's agent harness built on LangGraph/LangChain. Both are multi-agent orchestrators, but take different approaches:
|
|
1448
1197
|
|
|
1449
|
-
**In short:** DeerFlow is a general-purpose agent orchestrator
|
|
1198
|
+
**In short:** DeerFlow is a general-purpose agent orchestrator with a web UI. Atomic is narrowly focused on coding workflows. The key difference is that Atomic runs on top of production coding agents (Claude Code, OpenCode, Copilot CLI) rather than reimplementing coding tools through a generic API — you get each agent's native file editing, permissions, MCP integrations, and hooks out of the box. Atomic also gives you deterministic execution, which matters when encoding a team's dev process.
|
|
1450
1199
|
|
|
1451
1200
|
| Aspect | DeerFlow | Atomic |
|
|
1452
1201
|
| ----------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
@@ -1466,11 +1215,11 @@ If agents fail to spawn on Windows, ensure the agent CLI is in your PATH. Atomic
|
|
|
1466
1215
|
</details>
|
|
1467
1216
|
|
|
1468
1217
|
<details>
|
|
1469
|
-
<summary>How does Atomic differ from Hermes Agent?</summary>
|
|
1218
|
+
<summary><b>How does Atomic differ from Hermes Agent?</b></summary>
|
|
1470
1219
|
|
|
1471
1220
|
[Hermes Agent](https://github.com/NousResearch/hermes-agent) is Nous Research's general-purpose AI agent with a self-improving learning loop. Both are open-source agent frameworks, but serve different use cases:
|
|
1472
1221
|
|
|
1473
|
-
**In short:** Hermes
|
|
1222
|
+
**In short:** Hermes is a broad AI assistant that learns across sessions and connects to messaging platforms. Atomic is a coding-specific harness for engineering teams. It lets you encode your development process as deterministic TypeScript workflows that run identically across team members, machines, and CI. Atomic inherits production-hardened tools from Claude Code, OpenCode, and Copilot CLI — including their permission systems, MCP integrations, and hooks — giving you two independent security boundaries (devcontainer isolation + agent permissions). Fresh context per session keeps output sharp over multi-hour tasks. Developer-authored skills don't drift the way auto-generated ones can.
|
|
1474
1223
|
|
|
1475
1224
|
| Aspect | Hermes Agent | Atomic |
|
|
1476
1225
|
| ------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|