You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 8327a75
Browse filesBrowse the repository at this point in the historyBrowse files
Atom++ Agent Sketch: run persistence + prompt-to-flow + connector archetypes
Never lose a paid run:
- sketch.js writeSession/readSession (atomic) + init restore; the webview autosaves the whole
session (graph + last-run results) to .atompp/.session.json on every mutation (debounced) and
immediately on run completion / clear, and restores it on reopen. nodeDone now carries FULL output
(not a 400-char preview) so a mid-run/interrupted run never persists truncated text; restore keeps
unknown-agent nodes so an extension update can't wipe a run. Export button → a Markdown deliverable.
Design + free-vs-paid cloud-sync monetization: docs/atompp-agent-runs-persistence.md.
Prompt -> whole flow:
- Empty board + a description → generateFlow() designs a complete DAG (populated board still edits via
ops). normalizeFlowSpec resolves edges by the model's own labels (first-declared wins; dedup labels
it never saw aren't registered) and accepts 1-based index refs, so fan-in/out isn't miswired.
- agentCatalog.js: +2 groups (Content & Editorial, Connectors & Triggers) and 13 archetypes
(news-collector, press-editor, copywriter, telegram-publisher, email-sender, scheduler, …). SK1 runs
them text-only (a connector emits the payload it WOULD send); real side effects + cron = SK2/SK3,
designed in docs/atompp-agent-sketch-design.md §4.
.gitignore: ignore /.atompp/ (per-workspace runtime state) and local /UNSIGNED-*.app.zip artifacts.
Hardened via three adversarial-review passes (Clear TOCTOU, persistence data-loss x3, generator
edge-wiring x4) — all fixed. 75 unit tests green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/atompp-agent-sketch-design.md
+41-3Lines changed: 41 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -118,9 +118,47 @@ files). Costs shown are planning estimates from list prices — the provider bil
118
118
119
119
| Phase | Deliverable |
120
120
|---|---|
121
-
|**SK2**|**Tool-using nodes**: a node can run the full `agent.js` loop (read/edit/run with Keep-Undo review + per-run checkpoint) so a sketched flow actually edits the workspace; live streamed output in the inspector; run history. |
122
-
|**SK3**|**Topologies**: coordinator/hierarchical patterns (a queen node that dispatches + collects, ruflo-style), conditional edges, retry/verify loops; per-flow token budgets with early stop. |
123
-
|**SK4**|**Interop**: import/export ruflo swarm configs; publish sketches as shareable templates; sketch → `atompp.ai` chat-agent handoff ("run this flow on the current repo"). |
121
+
|**SK1.3**|**Prompt → whole flow** (shipped): type a plain-English description into the (empty) board and the active model designs a complete DAG — `generateFlow()` returns `{goal, nodes, edges}`, normalized to a loadable sketch and auto-laid-out. Empty canvas = *build*; populated canvas = *edit* (the existing ops command). |
122
+
|**SK2**|**Tool-using + connector nodes**: a node runs the full `agent.js` loop (read/edit/run with Keep-Undo review) so a sketched flow edits the workspace; **connector nodes actually act** — Telegram/Slack post, email send, webhook call, file write — behind credentials + per-flow permission (see §4). |
123
+
|**SK3**|**Triggers & topologies**: a `scheduler`/`webhook-trigger` root fires the flow on a **cron cadence / inbound event** (Managed-Agents-style scheduled deployment); coordinator/hierarchical patterns, conditional edges, retry/verify loops; per-flow token budgets. |
Not every node is the same *kind* of thing. The catalog now spans four execution tiers; SK1 runs them
129
+
all as **text-only** (a connector emits the payload it *would* send; a trigger emits the context it
130
+
*would* fire with), and later phases make the side-effecting tiers real — each with the safety it needs.
131
+
132
+
| Tier | Examples | SK1 (today) | Later — what "real" needs |
133
+
|---|---|---|---|
134
+
|**Text**| coder, researcher, news-collector, copywriter, editor-in-chief | one LLM turn, in/out text | — (this is the whole SK1 model) |
135
+
|**Tool / file**| file-writer, and any node run through `agent.js`| outputs the file + contents it *would* write | SK2: writes via the same **Keep/Undo review + per-run checkpoint** the chat agent uses |
136
+
|**Connector (actuator)**| telegram-publisher, email-sender, slack-publisher, webhook-caller | outputs the exact message/email/HTTP payload it *would* send | SK2: real send. Needs **(a)** credentials in SecretStorage/keychain (bot token, SMTP creds — never in the sketch file), **(b)** a **per-flow send permission** the user grants once (sending is outward-facing — mirrors the harness "Explicit permission" rule: publishing/messaging requires a clear yes), **(c)** an **allowlist** (which chat/recipient/host), **(d)** a dry-run preview (show the message, click Send) |
137
+
|**Trigger**| scheduler (cron), webhook-trigger | the ROOT node; outputs the run context ("collect news since the last run at <time>") | SK3: a **scheduled/triggered run** — cron cadence or inbound webhook fires the downstream DAG unattended. Maps onto the Managed-Agents *scheduled deployment* pattern (cron + per-firing run records) or a local scheduler; ties into the run-persistence archive so every firing is logged |
138
+
139
+
**Why the tiering is the point:** it keeps SK1 shippable and safe (nothing sends, nothing runs on a
140
+
timer — you can design and cost a Telegram-publishing pipeline today and see exactly what it *would*
141
+
post), while giving a clear, honest path to real automation where each dangerous capability (send,
142
+
write, schedule) is gated by the credential + permission model it deserves. The BYOK rule is unchanged
143
+
— connectors use the *user's own* integration credentials; Atom++ never proxies or stores the content.
144
+
145
+
### Worked example (what the generator produces)
146
+
Prompt: *"5 agents collect recent AI & agentic-AI news; a head-of-press-release edits them; a
147
+
copywriter verifies and composes one post; publish it to Telegram; run it daily."* →
0 commit comments