ollie is a 9p-based generative agent surface
Go to file
Ollie Agent 83ca936c8c elevate: streaming protocol for real-time output
Replace the batch JSON request/response protocol with a streaming
frame protocol. The adapter now uses superpowerd ExecuteCommandStreaming
with SCM_RIGHTS fd-passing to stream stdout/stderr in real-time.

Protocol: client sends {cmd,cwd}+newline, server streams frames
(type byte + 4-byte length + payload). This enables elevated+detach
to capture live output in the ring buffer.

Also updates core submodule with elevated+detach support.
2026-07-18 00:16:32 +02:00
.beads agents: extract prompts to markdown, assemble via executable prompt 2026-04-26 15:00:46 +02:00
.kiro/settings sandbox: fix regression from simplification 2026-04-21 21:09:33 +02:00
9p@9ae36420ab update 9p, acme submodules: strip namespace to sessions only 2026-07-17 23:08:50 +02:00
acme@02ce7dafbe update 9p, acme submodules: strip namespace to sessions only 2026-07-17 23:08:50 +02:00
agents copilot agent: read-only tools, structured response format 2026-07-16 21:44:52 +02:00
contrib contrib: add ollie-remount script for 9pfuse recovery after sleep/wake 2026-05-21 08:44:17 +02:00
core@42361e6505 elevate: streaming protocol for real-time output 2026-07-18 00:16:32 +02:00
dbus@dd8a31dd8a update core + dbus submodules (detach exit injection) 2026-07-17 22:08:18 +02:00
doc update core submodule (session persistence), sync docs 2026-05-21 15:08:46 +02:00
el@d97f4c4f42 front-ends: transparent FUSE remount on I/O errors 2026-05-21 09:00:13 +02:00
experiments Clarify Identity-Specific Rigor description 2026-05-02 14:30:21 +02:00
httpgw@345508d9e1 httpgw: fix session naming on create 2026-07-07 12:40:03 +02:00
kde@caf547c4af update core + kde submodules 2026-07-17 23:28:26 +02:00
sandbox another sandbox tweak 2026-07-17 15:17:30 +02:00
scripts elevate: streaming protocol for real-time output 2026-07-18 00:16:32 +02:00
webui@0984739dba webui: fix cwd display 2026-07-07 12:38:19 +02:00
.gitignore gitignore: add __pycache__ 2026-04-29 10:17:28 +02:00
.gitmodules gitmodules: use relative URLs so forge links resolve correctly 2026-07-17 22:43:57 +02:00
AGENTS.md add AGENTS.md, update 9p/kde submodules (tools-image prompt) 2026-07-16 20:13:53 +02:00
Containerfile add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
Makefile add ollie-dbus submodule, update top-level Makefile 2026-07-07 13:02:44 +02:00
README.md docs: remove tier-based dispatch from feature list 2026-07-17 22:46:56 +02:00
mkfile move prompts/skills/tools into 9p/ and kde/ submodules 2026-07-07 12:07:50 +02:00
pull.sh add dbus to pull.sh 2026-07-10 15:02:08 +02:00

README.md

ollie

Ollie is an AI agent runtime. A small Go core handles the agent loop, tool dispatch, sandboxing, and multi-backend routing; frontends (terminal, acme, Emacs, KDE, browser) and orchestration (shell scripts, multi-agent workflows, cron) are external. The core is deliberately minimal — capabilities come from composing small pieces rather than building a monolithic framework.

Repository layout

Monorepo with Git submodules. Each submodule has its own Go module (except el which is Elisp and kde which is C++/Qt).

Directory Language Description
core/ Go Core library: agent loop, backends, tools, config, sandbox
9p/ Go 9P filesystem server (olliesrv)
dbus/ Go D-Bus session manager daemon (ollied)
acme/ Go Plan 9 acme editor frontend
httpgw/ Go HTTP-to-9P gateway (ollie-httpgw)
webui/ TypeScript Preact SPA browser frontend
kde/ C++/Qt6 KDE integration: plasmoid, standalone GUI, Kate plugin, KRunner, tray
el/ Elisp Emacs frontend (ellie.el)
agents/ JSON Agent config files (loaded at runtime)
prompts/ Markdown System prompt templates
tools/ Python/Bash Tool scripts (file_read, lsp_, memory_, etc.)
scripts/ Shell User-facing CLI scripts: session management, utilities, plumbing
sandbox/ YAML Landlock sandbox config
doc/ Markdown Architecture docs, usage guide
contrib/ Mixed Community scripts
experiments/ Mixed Trial notes

What you get

  • Agent loop with streaming tool calls — the core runs a turn loop: prompt the model, parse tool calls, dispatch them (in parallel where safe), repeat until done
  • Multi-backend routing — Ollama (local), OpenAI-compatible, Anthropic, GitHub Copilot, Kiro; switch backends per-session or let the tier router pick automatically
  • Sandboxed tool execution — every tool call runs inside a Landlock sandbox with per-profile filesystem access rules
  • Extensible tools — tools are executable scripts with header metadata; add one by dropping a file in a directory
  • Multi-agent orchestration — orchestrator/worker patterns, subagent delegation, parallel fan-out — all coordinated through the session primitives
  • Domain skills — teach the agent your project's conventions with a markdown file; loaded on demand
  • Automatic context compaction — long conversations are summarized transparently when approaching the context limit
  • Multiple frontends — terminal, acme, Emacs, KDE (plasmoid, standalone GUI, Kate plugin), and a browser-based web UI
  • AI code completion — a completion endpoint that any editor can call via stdin/stdout

Getting started

Clone with submodules:

git clone --recurse-submodules https://github.com/lneely/ollie.git

Or after cloning:

git submodule update --init --recursive

Build and install everything from the monorepo root:

mk

Or build specific components:

mk core    # Core library
mk 9p      # 9P filesystem server
mk httpgw  # HTTP gateway
mk webui   # Web UI (requires Node.js + npm)
mk dbus    # D-Bus daemon
mk data    # Install agents/prompts/tools/skills to ~/.config/ollie/
mk scripts # Install CLI scripts

For KDE, build from kde/ with CMake. For Emacs, copy el/ellie.el into your config and (require 'ellie).

See doc/USAGE.md for usage instructions.

Configuration

Environment: ~/.config/ollie/env

OLLIE_BACKEND=openai           # ollama | openai | anthropic | copilot | kiro (default: ollama)
OLLIE_OLLAMA_URL=              # base URL for Ollama (default: http://localhost:11434)
OLLIE_OPENAI_URL=https://openrouter.ai/api
OLLIE_OPENAI_KEY=sk-or-...
OLLIE_ANTHROPIC_KEY=sk-ant-...
OLLIE_COPILOT_TOKEN=...
OLLIE_KIRO_TOKEN=...           # bearer token or sqlite:// path (auto-detected from Kiro CLI if unset)
OLLIE_MODEL=qwen/qwen3-235b-a22b
OLLIE_TOOLS_PATH=~/.config/ollie/tools    # directory for tool scripts ({tool} steps)
OLLIE_MEMORY_PATH=~/.config/ollie/memory  # directory for memory files (ollie/m)
OLLIE_ELEVATE_SOCKET=${XDG_RUNTIME_DIR}/ollie/elevate.sock  # socket path for x/elevate adapter
OLLIE_COMPLETE_BACKEND=ollama             # backend for u/complete (required)
OLLIE_COMPLETE_MODEL=qwen3:latest         # model for u/complete (required)
OLLIE_ENABLED_BACKENDS=openrouter,kiro  # backends available for routing (comma-separated)

# Per-backend tier models for t/route
OLLIE_TIER_WORKER_openrouter=mistralai/devstral-small
OLLIE_TIER_EXPERT_openrouter=anthropic/claude-sonnet-4-20250514
OLLIE_TIER_WORKER_kiro=claude-haiku-4-20250514
OLLIE_TIER_EXPERT_kiro=claude-sonnet-4-20250514
OLLIE_TIER_WORKER_anthropic=claude-haiku-4-20250514
OLLIE_TIER_EXPERT_anthropic=claude-sonnet-4-20250514
OLLIE_TIER_WORKER_ollama=qwen3:8b
OLLIE_TIER_EXPERT_ollama=qwen3:32b

Shell environment variables take precedence over the env file.

Development

Update all submodules to latest:

git submodule update --remote

Each submodule has its own Go module with independent tests (go test ./...). See individual submodule READMEs for component-specific build and test instructions.

Credits

Many sources of inspiration:

  • Plan 9 from Bell Labs — for an interesting system
  • @9fans — for the Plan 9 port
  • Suckless — for articulating good software development principles
  • @simonfxr — for a solid agent baseline to "borrow" from, and other nifty ideas
  • @aws — for a solid open-source agent implementation

License

GPLv3