Three new Discipline rules: handle all repos/submodules when given a multi-repo task; diagnose and act, do not ask permission per sub-step; when sandbox-blocked, explain and move on.
olliesrv no longer has start/fgstart/stop/status subcommands — it runs
in the foreground and relies on the supervisor (systemd, openrc, or
xdg-autostart) for lifecycle management. This simplifies the binary
and makes the single-process model explicit.
Changes:
- All docs: olliesrv start → olliesrv
- justfile: add install-services target, used by all install recipes;
installs systemd user unit, openrc init script, xdg autostart entry;
remove inline autostart installs from individual targets
- systemd unit: ExecStart drops "start" subcommand
- openrc init script: deleted (was for daemonized start; now managed
via install-services)
- xdg-autostart: new desktop entry (moved from 9p/ submodule),
Exec=olliesrv (no longer shells out to start + remount)
- contrib/ollie-remount: add debug echo for namespace/socket
- 9p submodule: remove daemon subcommands from Go code;
delete old desktop file
- el submodule: update README for foreground-only olliesrv
The D-Bus adapter only exposed 4 parameters (cwd, backend, model, agent)
but the session manager supports 6 (+ system_prompt, remote). The remote
had already added system_prompt as the 5th; this adds remote as the 6th.
All frontends (KDE plasmoid, Kate, tray, dolphin, webui, httpgw) and
tool scripts now pass the correct 6 arguments.
Tool prompts (tools-file, tools-lsp, tools-reasoning, etc.) are now
embedded in code. Only tools-core.md and agent-*.md remain as external
prompt files. Use $OLLIE_CFG_PATH/prompts/ paths instead of bare
filenames that were being executed as commands.
Complete migration: process_*, route, subagent_*, env, grep,
image_read, gui_*, browser_screencap, denote_view.
Every tool script now self-documents its usage. BuildRuntime
automatically extracts and injects these into the system prompt.
Migrate usage documentation from separate tools-*.md prompt files
into the tool scripts themselves via ollie:prompt...ollie:end blocks.
BuildRuntime automatically extracts and appends these to the preamble.
Migrated: file_read, file_write, file_edit, file_glob, file_grep,
lsp_definition, lsp_references, lsp_hover, lsp_rename, lsp_symbols,
lsp_diagnostics, lsp_completion, reasoning_think, memory_remember,
memory_recall.
Usage documentation is now embedded in the script header and
automatically extracted into the system prompt by BuildRuntime.
This replaces the corresponding section in tools-file.md.
SYSTEM_PROMPT.md now contains only behavioral directives (identity,
output protocol, accuracy, security). Tool Interface and Skill Discovery
are separate prompt files referenced by agent configs.
Agent configs use short names resolved via OLLIE_PROMPTS_PATH and no
longer reference SYSTEM_PROMPT.md or session.md (those are now embedded
in the binary and injected automatically).
These tools were never reliably used by agents. Planning is handled
via in-context plan files (s/{id}/plan) and the replan/stall detection
in the agent loop.
openrc: single service (ollie.initd) manages both superpowerd and the
elevate adapter via start_post/stop_pre, since supervise-daemon only
supervises one process and openrc has no PartOf equivalent.
systemd: two user services with native dependency management.
superpowerd.service runs the daemon; ollie-elevate-adapter.service
depends on it via Requires+PartOf (auto-stops with superpowerd).
Reuse SEQPACKET connections across requests instead of
connect/close per command. Connections are returned to a
pool (max 4 idle) after successful use and discarded on error.
superpowerd HandleConn already loops for multiple requests
per connection, so this is safe. Each ExecuteCommandStreaming
still blocks its connection until the command exits, so
concurrent commands use separate pooled connections.
The adapter is now started by the system service manager, not
on-demand from inside the sandbox. ensureElevateAdapter was
removed from core in the previous commit.
Replace subprocess-based token refresh (superpowers run-session --child-session)
with direct SEQPACKET CreateSession RPC to superpowerd. This fixes:
1. Session PID mismatch: old approach registered session to short-lived sh
subprocess PID, causing immediate pidAlive() failure on next use
2. Child session failure: --child-session fails when superpowerd restarts
(parent session gone)
3. Gentoo python-exec2c exec chain: replace os.execvp startup with direct
CreateSession call
The adapter now owns its session directly (peerPID = adapter PID), so the
session stays valid for the adapters entire lifetime.
When superpowerd returns exit 255 with no output streamed, treat it as a
suspicious session failure (same as auth error) and retry with a refreshed
token. This addresses intermittent elevated command failures where the
session silently expires mid-conversation.
Also adds stderr logging at key decision points: token refresh attempts,
retry signals, RPC errors, and non-JSON responses from superpowerd.