Nodes in the 9P namespace can now declare alternate names (Aliases)
that resolve during Twalk but are invisible in directory listings.
Session dirs alias their immutable RunnableID(), agent dirs alias
their ID(). Clients can use session/{uuid}/agent/{uuid}/... paths
that remain valid across renames.
Changes:
- fs/fsnode.go: Add Aliases []string field, Alias() NodeOption
- fs/builder.go: findChild checks aliases via matchAlias helper
- fs/sessionfiles.go: Session dirs get Alias(s.RunnableID())
- fs/agentfiles.go: Agent dirs get Alias(a.ID())
- fs/spec.go: Add /aliases file (read-only alias→path table)
- fs/rootfiles.go: readAliases handler
- fs/lifecycle.go: buildIndex includes immutable ID in session/idx
- doc/edsl.md: Document Aliases field and behavior
- prompts: Update session/idx format documentation
The KDE GUI submodule now uses immutable IDs in all 9P paths,
fixing disconnected indicators after session rename.
ellie.el previously accessed ollie through a FUSE-mounted 9P
filesystem (plain file I/O via insert-file-contents/write-region).
This had several failure modes: stale mounts after suspend/resume,
no error propagation from 9P Rerror, no streaming support.
Now uses the ollie-9p CLI tool which speaks the 9P protocol
directly over the Unix socket. Also removed ellie-dired binding
(C-c C-d) and the ellie-mount-directory customization since
there is no mount point.
The completion subsystem was updated to use ollie-9p rdwr complete
instead of a shell pipeline to a 9P mount path.
With the zero-tools transition complete, the tools/builtin/ package
served no purpose — Builtins() returned nil. Removed:
- tools/builtin/builtins.go and the directory
- builtins field, WithBuiltins, Dispatch from toolsrv.Server
- Handler type from toolsrv (only used by builtins)
- OnPreDispatch/WithOnPreDispatch (dead code)
- Strict field and WithStrict (dead code, never read)
- CallTool simplified — no fallback to Dispatch
- builtin import and WithBuiltins/WithStrict calls from ollie-remote
- tools/builtin from justfile build/test targets
Updated AGENTS.md, ARCHITECTURE.md, README.md, EVOLUTION.md
Ollie's extensibility is the opposite of Emacs: instead of building
capabilities on top of an interpreter, the core provides integration
surfaces (9P, shell) and pushes everything else to the surrounding
system. This is the Acme/Plan 9 model.
The old fs/session/ package (14 files) and cmd/olliesrv/elevate_tree.go
(imperative FileTree implementations) are gone. Replaced by a single
declarative EDSL in fs/spec.go that declares the entire 9P namespace.
cmd/olliesrv/server.go simplified from 1430 to 825 lines:
- Deleted pathType() (110 lines) — tree.Stat() now handles all path resolution
- Deleted isSessionFile(), dirMode(), filePerm() — all from tree's info
- Deleted fsRoute/routes/route/routeDir — single rootTree, no route table
- Deleted elevateTree — EDSL handles /elevate/ in spec.go
- Deleted handleWrite(), readDNS(), helpPath() — dead code
- Deleted all 5 per-fid result fields — EDSL Request handlers manage state
- Deleted all path-based intercepts in read()/write() — entry.RequestRespMode()
- Deleted all path-depth hacks in makeStat() — custom Stat() closures in EDSL
- Deleted all content-length compute logic — info.Size() from tree
- Removed imports: agent, backend, elevate, paths, toolsrv, json
New fs/ package:
- spec.go — single EDSL declaration of the entire namespace
- builder.go — BuildTree() validates and compiles spec into *Tree
- tree.go — configurable FileTree implementation
- fsnode.go — Dir(), Leaf(), TemplateDir(), NodeOption constructors
- agentfiles.go / sessionfiles.go / rootfiles.go / elevatefiles.go
— handler implementations wired by the EDSL
- lifecycle.go — Create, Kill, Rename, Shutdown, InterruptAll
- persist.go, procfiles.go
- edsl.md — documentation of the EDSL
Tools no longer need to be co-located in $OLLIE_TOOLS_PATH. The .meta
sidecar can specify a cmd field pointing to any executable:
- Absolute path: use directly
- Bare name: resolve via $PATH
Resolution order: OLLIE_TOOLS_PATH/<name> → meta.cmd → PATH lookup.
Local wrappers always win, enabling simplified interfaces over complex
system binaries.
Rewrites doc/WRITING_TOOLS.md to document the plugin model: any
executable + .meta = tool, no source tree integration required.
These scripts were removed. Update all documentation to reference the
current alternatives: ollie-9p rdwr generate, ollie-9p rdwr complete,
and ollie-9p rdwr route.
- Fix all pkg/ path references in doc/*.md
- Update ARCHITECTURE.md package table and 9P interaction model
- Fix stale /tmp/ollie references
- Add ollie-9p client documentation to 9p/README.md
- Add prompts/user-preferences.md: visual-first communication preference
and communication style directives (moved from system_prompt.md).
- Inject user-preferences.md into all agent definitions.
- Replace all execute_code references with shell across docs, prompts,
and agent configs.
- Remove dead u/ and x/ entries from scripts/README.md.
- Remove SYSTEM_PROMPT_QWEN systemPrompt override from navigator.
- justfile: install user-preferences.md.
All tools now receive arguments as a JSON object on stdin instead of
positional CLI args. Each tool declares its schema via # args_json:
header comment.
New shared helpers:
- _lib/args.py: Python parse_args() -> Args with require/get/get_bool/etc
- _lib/args.sh: Bash arg_require/arg_get/arg_bool via jq
Removed denote_view (unused).
Updated WRITING_TOOLS.md to document the new contract.
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.
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.
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.
Design for local agent loop + remote tool execution over SSH.
Inspired by goq toolserv/ssh.go pattern: bootstrap a minimal binary
on the remote host, communicate via JSON-RPC over stdin/stdout.
Keeps LLM streaming, D-Bus signals, and GUI local while executing
tools on a remote filesystem.
Reframe from "everything is a file" as the sole design principle to
the actual layered philosophy:
- Design: small extensible core (Emacs-like)
- Integration: 9P filesystem (canonical) or D-Bus (conventional)
Both are thin adapters over the same agent.Core.
- Remove references to non-existent 9P paths (t/idx, sk/idx, m/, etc)
- Update system overview diagram to show KDE/Web frontends over D-Bus
- Show embedded D-Bus adapter in olliesrv and ollied alternative
- Update tool/skill discovery references to use env vars
- Update agent config example to current format
- Add -model and -backend flags; read OLLIE_COMPLETE_MODEL /
OLLIE_COMPLETE_BACKEND as defaults; error if neither is set
- Guard against winid=0 (acme column tag / +Errors window)
- Document OLLIE_COMPLETE_MODEL and OLLIE_COMPLETE_BACKEND in
README.md and doc/env.sample
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sandboxing is not layered. It is applied specifically to execute_code:
each step is wrapped with landrun using a named config from
~/.config/ollie/sandbox/<name>.yaml (default: "default"). Steps marked
elevated:true bypass the sandbox via x/elevate. Remove superpowerd
reference.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Auto-compact does exist: triggers automatically at 75% of the model's
context length (128k default), and also manually via /compact.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove references to the non-existent contextBuilder and rolling window.
Describe the actual compaction model: unbounded history, explicit /compact
trigger, LLM-generated summary, system message preservation, user message
budget (~20k tokens), tool call flattening, and pre-compaction snapshot.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add HTTP gateway and web UI sections to USAGE.md: build instructions,
runtime flags, HTTP→9P endpoint reference, nginx serving example, and
Vite dev workflow. Add HTTP gateway architecture section to
ARCHITECTURE.md with frontend comparison table. Update README.md with
httpgw build target, dual remote-access paths (9P mount vs httpgw),
and container example updated for both.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Promote IDEAS.md content to concrete how-to documentation: subagent
delegation via subagent_spawn, concurrent sessions with direct prompt
passing (prompt/statewait/offset), predefined shell-script workflows,
self-generating workflows, and store federation via OLLIE_TOOLS_PATH
and OLLIE_TRANSCRIPT_PATH pointing at 9pfuse-mounted remote dirs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Batch and session namespaces are now a single s/ concept. s/bfg blocks
until the agent finishes and writes to stdout; s/bbg returns immediately
and prints the session path. s/b is the core one-shot runner. Remove all
b/ references from README, USAGE, ARCHITECTURE, and scripts/README.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace Mermaid-generated SVG with hand-written SVG to avoid
font metric clipping. Shows core as foundation, olliesrv as
the 9P layer, and front-ends/scripts/pipelines as consumers.
b/job now blocks on statewait instead of polling; b/cleanup reads state.
Update all documentation references. Bump 9p submodule.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update send() to use statewait (eliminates busy-wait polling race on
submit). Fix stale prompts/08_subagents.md ref → prompts/tools-subagent.md.
Remove redundant offset explanation from prose.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
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>
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>
Install scripts to ~/.config/ollie/scripts/ (not ~/bin/) so they are
served via the 9p mount without PATH changes. Add thin wrappers oq-q
(s/q, foreground one-shot) and oq-schedule (s/sched, background with
b/ path output). Switch osh and oq from OLLIE_9MOUNT to OLLIE.
Update mkfile, docs, and submodule pointer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
offset points to chat position after the last user prompt;
tail -c +$((offset+1)) yields the model response for that turn.
Replace stale reply references in prompts, help, ideas, and skills.
Document offset usage in concurrent sessions pattern and shell script.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace reply-based polling with chat offset pattern and named
sessions. Agents have no knowledge of each other; coordinator
script drives the workflow explicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update s/new syntax (no 'new' prefix), rm -r for kill, and correct
Python script to use s/new and shutil.rmtree instead of top-level ctl.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 9p: memory defaults to ~/.config/ollie/memory, created on startup
- core sandbox: ~/.config/ollie and ~/mnt/ollie are RWX
- tools: memory_remember/recall use $OLLIE_9MOUNT/m
- doc: update ARCHITECTURE.md memory path reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reflect the removal of PlanBackend/MemoryBackend abstractions and the
addition of pkg/tools/memory and pkg/tools/task. Update tool table (12
tools, 5 servers), data flow diagram, planning lifecycle, and consumer
setup example. Rewrite PLANNING.md around task_plan/task_complete.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
help.md: s/new was listed as (w) but reading returns a KV template.
9p submodule: ctl comment listed 'compact, clear, interrupt' but
actual commands are stop, kill, rn, compact, clear.
Completes the rename started with the 9P file change.
Go API: WorkDir→CWD, SetWorkDir→SetCWD, WorkDirSetter→CWDSetter.
Unexported: workdir→cwd in fields, params, locals.
Template: {{.WorkDir}}→{{.CWD}}.
Docs: ARCHITECTURE.md, PLANNING.md, README.md, IDEAS.md.
- 9p: add Tcreate for /t and /sk, writable skill files, tools path
- core: default tools path to ~/.config/ollie/tools
- docs: update ARCHITECTURE.md and IDEAS.md for new path