- route --tier=worker (default): cheap model for scoped subtasks
- route --tier=expert: strong model for complex reasoning
- Orchestrator now uses route instead of cascade
- Unified prompt and callback contract for both tiers
- cascade/escalate remain available for other agents
- Orchestrator: describe what, not how. Workers reason about implementation.
- cascade prompt: allow workers to read code and make decisions within scope.
- Worker identity: 'reason and complete' replaces 'execute exactly'.
- Removes over-specification pressure from orchestrator.
subagent_spawn now reads the agent name from stdin (first line) when
-agent flag is not provided and stdin is not a tty. This enables clean
pipe composition: echo JSON | subagent_generate | subagent_spawn.
tools/cascade: fire-and-forget delegation to cheap model; worker
reports back to parent prompt when done. Parallelizable.
scripts/u/cascade: script-driven hub-and-spoke orchestrator for
terminal use — planner decomposes, workers execute in parallel,
planner synthesizes.
All lsp_* scripts used OLLIE_TOOLS_PATH for sys.path which points to
the physical backing store where _lib does not exist. Changed to use
$OLLIE/t (the FUSE mount) where _lib actually lives.
Also added lsp_completion script and textDocument/completion support
in the LSP bridge.
The 8MB size check caused models to fall back to cat which reads the
entire file without truncation. Now uses itertools.islice to read only
the requested segment without loading the whole file into memory.
Also: sandbox config additions (pcfs, ~/img).
Use $OLLIE/x/prime SYSTEM_PROMPT command instead of bare token.
Wrap custom prompt in echo command since all prompt array entries
are now shell commands.
New tool that generates a temporary agent config from a base agent
with custom identity text. Returns a unique agent name (jit-<hex>)
for use with subagent_spawn. Single file in a/, no p/ file needed.
Adds a thin LSP bridge daemon (tools/_lib/lsp/) that manages LSP server
processes on demand, with adapters for gopls, clangd, and intelephense.
Tool scripts:
- lsp_definition: go to definition
- lsp_references: find all references
- lsp_hover: type/doc info
- lsp_rename: rename symbol (applies edits directly)
- lsp_symbols: document/workspace symbols
- lsp_diagnostics: errors and warnings
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>
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>
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>
- subagent_spawn: use s/bfg instead of deprecated b/q
- SYSTEM_PROMPT: fix stale /b/ reference to /s/
- core: sort session index by ID
- webui: gitignore .kiro/
The markdown planning mechanism created competing signals against beads.
Removing it eliminates the conflict. Planning goes through beads (bd)
or whatever external mechanism is appropriate.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Submodules have .git as a file, not a directory. -d was stopping the
walk immediately in submodule directories.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Walk up from CWD only while .git exists at each level. Stops at the
first directory without .git, preventing false positives outside the repo.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The .beads check now traverses parent directories so plan_* enforcement
works from any subdirectory of the repo, not just the root.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
plan_* now blocks by default when bd and .beads are present.
Set OLLIE_BEADS_ENABLE=0 to use the markdown-based plan_* scripts instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All three conditions must hold to block plan_* in favor of bd:
OLLIE_BEADS_ENABLE=1, bd on PATH, and .beads exists in CWD.
This makes enforcement purely opt-in per project.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
If both conditions hold, plan_* scripts exit 2 with an error directing
the model to use bd instead. When either condition is false (beads not
configured or bd not installed), the scripts run normally as a fallback.
Document OLLIE_BEADS_ENABLE in README and doc/help.md.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- agents/test-bd.json: test agent with bd prime agentSpawn hook
- prompts/06_tool-plan.md: prefer beads when context injected at session start
- tools/plan_create: fix printf treating '- [ ]' format as option flag
- submodules: bump core
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace tools/elevate_superpowers with scripts/x/elevate — a single
self-contained plugin that bootstraps into a superpowers session and
runs the IPC. mkfile installs it to ~/.config/ollie/scripts/x/.
Update 08_tool-elevate.md to remove backend-specific language.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
tools/subagent_spawn: fork-join over b/; spawns N parallel subagents
with a shared prompt, polls status concurrently, joins results in
submission order.
prompts/08_subagents.md: core system prompt fragment — when to spawn,
flags, output format, design rules. Always in context, not a skill.
- tools/file_*: hard-fail when OLLIE_SESSION_ID is unset; surface errors
on all failure paths including dir checks, marker cleanup, and I/O
- tools/file_read: treat nonexistent path as new file (emit "(new file)",
write empty marker) so file_write can create new files
- tools/file_write: colorize new-file lines with + (U+FF0B)
- tools/file_glob, file_grep, memory_*, task_*: consistent error handling
and output to stdout so the model sees all failures
- tui/diffcolor.go: match +/− (U+FF0B/U+2212) lookalikes emitted by
file_edit/file_write; fix +++ / --- header pattern
- prompts: prohibit execute_code for file creation/modification;
enforce execute_tool with file_write/file_edit instead
- core submodule: surface isError from MCP responses; inject
OLLIE_SESSION_ID into execute server at session creation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The temp file + os.replace() (rename) pattern fails on FUSE-mounted paths
(e.g. $OLLIE/sk/, $OLLIE/pl/) because the 9P server doesn't implement Twstat.
Write directly to file_path instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tools, sandbox configs, docs, and skills all updated. $OLLIE is now
the canonical ollie root — cd $OLLIE goes directly to the FUSE mount.
Core now always injects $OLLIE into the execute env at session start.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
memory_remember: saves a denote-formatted flat file to $OLLIE_9MOUNT/m
memory_recall: searches memories by keyword/tag/title via grep
Both write/read through the 9P FUSE mount. Removed os.makedirs calls
that failed with ERANGE on the 9P-backed /m directory.
sandbox/restricted.yaml: add {HOME}/.pyenv, .rbenv, .nvm to rox so
python3 and other version-managed interpreters can execute.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- sandbox: ~/mnt/ollie added as RWX, OLLIE_9MOUNT passed through
- 9p server: create memory dir on startup
- tools: memory_remember/recall use $OLLIE_9MOUNT/m
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
tools.sh reads # description/# Args headers from all scripts and prints
a summary — one call replaces the schema injection built-in tools get
for free. Prompt now directs the model to run it before using unfamiliar
tools.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the removed built-in task server. Plans are written to
$OLLIE_9MOUNT/pl/ (persistent, shared across sessions). Scripts live
in the tools directory and are invoked via execute_tool.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>