The atomic capabilities Open Design exposes to plugins. Spec:
docs/plugins-spec.mdΒ§10. Source of truth:apps/daemon/src/plugins/atoms.ts. Live discovery:GET /api/atoms,od atoms list --json, andod atoms info <id>for the bundledSKILL.mdbody.
A plugin assembles atoms into ordered stages (od.pipeline.stages[].atoms[]).
The Open Design daemon is responsible for resolving each atom into a system-prompt
fragment, tool gating, and (when applicable) GenUI surface declarations. Plugins
never own the atom implementations; they only reference them by id.
- id β what you write inside
od.pipeline.stages[*].atoms[]andod.context.atoms[]. Stable across daemon versions. - status β
implementedorplanned. Every entry in the current catalog is implemented; the type remains available so a future reserved id can be discovered before promotion. - task kinds β which of the four product scenarios (
new-generation,code-migration,figma-migration,tune-collab) the atom is intended for. Plugins may reference an atom outside its declared task kinds, but doctor flags this as suspicious.
| id | label | task kinds |
|---|---|---|
discovery-question-form |
Discovery question form β structured clarification protocol for unresolved material requirements on any turn. | new-generation, tune-collab |
direction-picker |
Direction picker β optional 3β5 direction comparison when the user explicitly requests alternatives. | new-generation, tune-collab |
todo-write |
Todo write β TodoWrite-driven plan. | all |
file-read / file-write / file-edit |
File ops on the project cwd. | all |
research-search |
Research search β Tavily-backed shallow research. | new-generation |
media-image / media-video / media-audio |
Media generation through configured providers. | new-generation, tune-collab |
live-artifact |
Create / refresh live artifacts. | new-generation, tune-collab |
connector |
Composio connector tool calls. | new-generation, tune-collab |
critique-theater |
5-dimension panel critique; emits the critique.score signal that drives devloop convergence. |
all |
code-import |
Clone / read existing repo. | code-migration |
design-extract |
Extract design tokens from source code / Figma / screenshots. | code-migration, figma-migration |
figma-extract |
Extract Figma node tree + tokens + assets. | figma-migration |
token-map |
Map extracted tokens onto the active design system. | code-migration, figma-migration |
rewrite-plan |
Long-running multi-file rewrite plan. | code-migration, tune-collab |
patch-edit |
Small-step file patches. | code-migration, tune-collab |
build-test |
Run build/typecheck/tests and produce build/test convergence signals. | code-migration |
diff-review |
Render rewrite as a reviewable diff. | code-migration, tune-collab |
handoff |
Push artifact to downstream surfaces (cli / cloud / desktop). | tune-collab |
- The plugin manifest's
od.pipeline.stages[*].atoms[]is parsed into aPipelineStage[]byapps/daemon/src/plugins/pipeline.ts. - Before the run starts, the daemon resolves bundled atom instruction bodies
through
apps/daemon/src/plugins/atom-bodies.tsand renders the available bodies into## Active stageprompt blocks. Those bodies live underplugins/_official/atoms/<atom>/SKILL.md. - At run time,
apps/daemon/src/plugins/pipeline-runner.tswalks the stages. For each stage entry it:- emits a
pipeline_stage_startedSSE event, - asks the atom-worker registry in
apps/daemon/src/plugins/atoms/registry.tsfor daemon-observable signals (the built-in registry has a worker for every catalog entry and reads real Critique Theater scores when present), - persists one row into
run_devloop_iterationsfor audit, - emits a
pipeline_stage_completedevent with the resulting signals.
- emits a
Atoms whose work happens inside the selected agent CLI may use the registry's
permissive compatibility signals because the daemon has no independent
observation for that tool action. This is distinct from the old global stub;
OD_PIPELINE_RUNNER=stub exists only as a diagnostic/replay escape hatch.
The current until vocabulary is:
critique.scoreβ emitted bycritique-theater.iterationsβ built-in per-stage counter.user.confirmedβ emitted when aconfirmationGenUI surface resolves.preview.okβ emitted by the live-artifact preview pipeline.build.passingβ emitted by the build-test flow for the build/typecheck gate.tests.passingβ emitted by the build-test flow for the test gate.
The evaluator is deliberately closed and is not arbitrary JavaScript. Unknown
signals fail parsing and od plugin doctor reports them.
- Author the atom out-of-tree as a plugin (per spec Β§22.5 promotion path).
- Once the
SKILL.md/ MCP tool / pipeline shape stabilises, add the bundled atom underplugins/_official/atoms/<id>/, append the matching row toFIRST_PARTY_ATOMS, and register a worker when the daemon has a real signal it can observe. - Update this document and the spec Β§10 / Β§21 / Β§23 tables in the same PR.
- The atom is now reachable via:
od.pipeline.stages[*].atoms[]references in any plugin,GET /api/atomsdiscovery,od atoms list/show/info,od plugin doctorvalidation.