subagent_spawn rewritten: creates session, submits prompt, returns
immediately. Auto-prefixes session name with parent ID for uniqueness.
Injects [parent_session_id] and [session_id] headers into every prompt.
New read-only env file in session namespace exposes OLLIE_ vars.
TUI background-tails chat file for async output.
Updated SYSTEM_PROMPT.md and tools-subagent.md.
subagent_spawn now passes -name through to b, letting the parent assign
predictable session IDs. Updated coordination docs: parent passes full
peer roster in seeding prompts, names prefixed with parent session ID
for global uniqueness. Noted silent failure on duplicate names.
Backend now streams native thinking tokens via StreamEvent.Reasoning.
The no-op scratchpad tool is redundant.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
system prompt: require task list for multi-step work
agents: remove preTurn hook; rely on agentSpawn prime + system prompt
backend: require OLLIE_BACKEND/OLLIE_MODEL env vars
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move inline JSON prompt strings to prompts/agent-*.md files, referenced
via $OLLIE/x/prime in the new executable prompt array. Move all
prime calls (tools-*, beads) from hooks.agentSpawn into prompt.
Rename greybeard to sysarchitect.
preTurn now has two branches: no plan → remind task_add; open tasks → remind
task_check. Blank/whitespace-only arguments to task_add are silently skipped.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removing it caused the model to fall back to reasoning_think for planning.
The preTurn reminder is necessary to override that behavior.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
printf format string starting with '-' was treated as a flag; use '--' to
terminate option parsing. Agents reading individual tool scripts to understand
them should use $OLLIE/t/idx instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Agents must not read $OLLIE/s/*/chat or similar to reconstruct context
— the conversation is already in the context window. memory_recall is
the right tool for cross-session facts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace 'task prime' hook with inline .beads walk in all agent configs —
no wrapper script needed. Drop 'prime' subcommand from scripts/x/task.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All agents now run `bd list --status open` after each turn. Output is
injected into session history (not stdout) so the model is aware of open
tasks on the next turn without triggering autonomous continuation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tool primes (tools-file, tools-reasoning, tools-memory, tools-subagent,
tools-elevate) moved from preTurn to agentSpawn across all agent configs.
Context is now injected once at session refresh points (start, post-clear,
post-compaction) rather than repeated on every turn.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add x/elevate-adapter-start: checks if the adapter is already listening
(connect test), starts it in the background if not. Exits 0 always so it
never blocks session startup. Wire it into agentSpawn in all agent configs
and install it via mkfile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Python adds the script directory to sys.path[0] at startup and tries to
create a FileFinder for it. When the script lives on a 9P FUSE mount the
FileFinder init fails before any stdlib import can succeed. sys is a
builtin and loads without filesystem access, so strip the path first.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Both x/elevate and elevate-adapter-superpowerd now default the socket
path to $XDG_RUNTIME_DIR/ollie/elevate.sock (falling back to
/run/user/<uid>/ollie/elevate.sock) when OLLIE_ELEVATE_SOCKET is unset.
Add OLLIE_ELEVATE_SOCKET to env sections of both sandbox configs.
Add {XDG_RUNTIME_DIR}/ollie to restricted sandbox filesystem rw rules
so x/elevate can reach the socket. Update README env block and
scripts/README socket path docs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
x/elevate is now a generic client: reads OLLIE_ELEVATE_SOCKET, sends
{cmd,cwd}, reads back {stdout,stderr,exit_code}. All backend-specific
logic moves to adapters. Add elevate-adapter-superpowerd as the
reference adapter: owns the socket lifecycle, translates the ollie
protocol to superpowerd JSON-RPC ExecuteCommand. Add OLLIE_ELEVATE_SOCKET
to env docs. Update scripts/README.md with protocol spec, adapter
setup, and guide for writing custom adapters.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The purpose is to run steps outside the Landlock sandbox, not to gain
privileges. Clarify the constraint (kernel-enforced, must reach an
external process), reframe the minimal example and superpowerd walkthrough
accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sudo/doas don't work: Landlock is kernel-level and applies regardless
of user privileges within the sandboxed process. The backend must hand
the command to a process spawned outside landrun entirely. The
superpowerd Unix socket pattern is the right model.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>