Skip to content

Load operator extension paths in atomic Planner sessions - #238

Open
lavaman131 wants to merge 3 commits into
atomic-planner-run-controlfrom
atomic-planner-extensions
Open

lavaman131 wants to merge 3 commits into
atomic-planner-run-controlfrom
atomic-planner-extensions

Conversation

@lavaman131

Copy link
Copy Markdown
Collaborator

Stacked on #230.

Operators can now give the atomic Planner extensions and workflows without installing them into the server's Atomic agent directory. Today the Planner only sees what the agent directory and a verified checkout's .atomic/settings.json install, so a package an operator loads with atomic --extension in their own terminal never reaches it.

What changes

  • HARNESS_EXTENSIONS. A list of extension or package paths, separated by the platform path delimiter, that every atomic Planner session loads the same way Atomic's --extension flag does. A package's extensions, skills, and workflows all register. Chopin passes the paths to Atomic's resource loader as additionalExtensionPaths.
  • Startup checks. Every path must be absolute and must exist. Setting the variable under any other harness refuses at startup. The startup line lists the paths.
  • Workers stay isolated. Background summary and research workers never load these paths.
  • Docs. self-hosting.md, hosted-agent.md, and .env.example describe the variable.

Verification

  • bun test: 1907 pass, 2 PostgreSQL skips, 0 fail. The new Planner test registers a local package's tool, skill, and workflow through the operator paths, confirms a worker session on the same harness doesn't see them, and fails without the adapter change.
  • bun run types and bun run ci pass. oxlint reports no new warnings and Impeccable no new findings.

Assistant-workflow: inline
Assistant-verification: bun test passed: 1907 pass, 2 skip, 0 fail
Assistant-verification: bun run types and bun run ci passed
Co-authored-by: Alex Lavaee lavaman131@github.com

HARNESS_EXTENSIONS lists extension or package paths that every atomic
Planner session loads, as Atomic's --extension flag would. A package's
extensions, skills and workflows all register, so an operator can give the
Planner workflows without installing them into the agent directory. The
paths are split on the platform path delimiter, must be absolute and exist,
and are refused under any other harness. Background workers never load
them, and the startup line names them.

Assistant-model: Claude Opus 5.5
Assistant-workflow: inline
Assistant-verification: bun test passed: 1907 pass, 2 PostgreSQL skips, 0 fail; the new Planner test fails without the adapter change
Assistant-verification: bun run types passed: all workspaces
Assistant-verification: bun run ci passed: dprint, oxlint (7 existing warnings, none new), tokens, design contract, design record, Impeccable (no new findings)
Assistant-verification: adapter integration passed: a Planner session with a local package on HARNESS_EXTENSIONS listed that package's workflows through the workflow tool
Co-authored-by: Alex Lavaee <lavaman131@github.com>
…backend

CI timed out the operator-extension test at Bun's 5 s default. Its first
workflow tool call starts Atomic's durable backend, and without Postgres
that falls back to the in-memory backend only after several seconds; with
no Postgres runtime and no Docker, the call alone took 4.7 s locally. The
test is split in two, and both tests that call the workflow tool get 30 s.

Assistant-model: Claude Opus 5.5
Assistant-workflow: inline
Assistant-verification: bun test failed before this change on CI: operator extension paths test timed out after 5000 ms
Assistant-verification: bun test passed: full.test.ts with PATH lacking docker and ATOMIC_POSTGRES_RUNTIME_DIR=/nonexistent (15 pass), and the whole suite (1908 pass, 2 skip, 0 fail)
Assistant-verification: bun run types and bun run ci passed: no new oxlint warnings, no new Impeccable findings
Co-authored-by: Alex Lavaee <lavaman131@github.com>
…e room

A message without @chopin is sent as a room message, and the composer gave
no sign of it, so a member who expected a Planner reply got silence.

The composer now says, below the draft and before anything is sent, "Sends
to the Planner, which will reply" or "Room only. Add @chopin to ask the
Planner". The cue comes from the same chatSendPayload prediction the send
uses, so it follows references and an off Planner (no cue) exactly as the
wire destination will. The @chopin addressing rule and addressed() are
unchanged, and the Send button keeps its name.

Assistant-workflow: goal (run c99248c7-a6cb-4858-95f9-5039c865f0b6)
Assistant-model: Claude Sonnet 5.5
Assistant-verification: bun test passed: apps/web 355 pass, 0 fail, including destinationCue cases for room, planner, reference-masked mention, empty draft and Planner off
Assistant-verification: bun run types and bun run ci passed: dprint, oxlint (7 existing warnings, none new), tokens, design contract, Impeccable (no new findings)
Assistant-verification: playwright e2e passed: bun run e2e e2e/harness.e2e.ts, 2 passed including the composer destination cue test
Co-authored-by: Alex Lavaee <lavaman131@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant