ollie is a 9p-based generative agent surface
Go to file
Levi Neely 0eaa4dc8eb docs: remove broken superpowerd link, treat as hypothetical
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 11:26:37 +02:00
.beads bump core; init beads 2026-04-19 10:56:17 +02:00
.kiro/settings sandbox: fix regression from simplification 2026-04-21 21:09:33 +02:00
9p@fb4d76a3aa remove batch jobs; rename spec -> cfg; s/job -> s/b, s/q -> s/bfg, s/sched -> s/bbg 2026-04-24 08:42:38 +02:00
agents docs: update documentation for recent refactor 2026-04-22 10:35:46 +02:00
core@cb99bed7bb fix subagent_spawn, sort sessions, update prompts 2026-04-24 21:44:57 +02:00
doc docs: correct Sandboxing section in ARCHITECTURE.md 2026-04-25 11:21:29 +02:00
el@a6cc5e1772 remove batch jobs; rename spec -> cfg; s/job -> s/b, s/q -> s/bfg, s/sched -> s/bbg 2026-04-24 08:42:38 +02:00
httpgw@14bcbf0646 update httpgw and webui submodules 2026-04-24 21:14:18 +02:00
prompts fix subagent_spawn, sort sessions, update prompts 2026-04-24 21:44:57 +02:00
sandbox update core submodule, sandbox config 2026-04-24 14:01:00 +02:00
scripts docs: remove broken superpowerd link, treat as hypothetical 2026-04-25 11:26:37 +02:00
skills@54889fda98 docs: update documentation for recent refactor 2026-04-22 10:35:46 +02:00
tools fix subagent_spawn, sort sessions, update prompts 2026-04-24 21:44:57 +02:00
tui@783351ffe3 remove batch jobs; rename spec -> cfg; s/job -> s/b, s/q -> s/bfg, s/sched -> s/bbg 2026-04-24 08:42:38 +02:00
webui@34443a6cb7 fix subagent_spawn, sort sessions, update prompts 2026-04-24 21:44:57 +02:00
.gitignore gitignore 2026-04-23 18:00:30 +02:00
.gitmodules add ollie-webui as webui submodule 2026-04-24 18:33:19 +02:00
Containerfile add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
README.md docs: document httpgw and webui 2026-04-25 09:14:48 +02:00
mkfile webui + httpgw fixes, tilde expansion, build targets 2026-04-24 20:11:04 +02:00

README.md

ollie

Ollie starts from a simple, slightly silly question: What might an AI agent look like in Plan 9? From there follow two more: What happens if agent primitives are exposed as an ordinary filesystem? and How much can we subtract from agent implementations while still being useful? The result is not a conventional "agent framework" but a small Go runtime and 9P‑backed filesystem surface that defines what an agent is, then exposes its state and behaviors as regular files and I/O streams, so that the surrounding environment (shell scripts, TUIs, web apps, cron, containers, and other OS facilities) can handle orchestration, scheduling, workflows, and interfaces instead. Features like conductor agents, complex workflow engines, or fancy editors are optional layers you build yourself by composing ordinary file reads, writes, and processes: a tiny s/sh CLI, an optimize | s/bfg pipeline, or a Claude‑Code‑style UI talking to the same filesystem namespace.

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    # Build core library
mk tui     # Build terminal UI
mk 9p      # Build 9p filesystem server
mk httpgw  # Build HTTP gateway
mk webui   # Build web UI (requires Node.js + npm)

For Emacs Lisp, copy el/ellie.el into your own Emacs configuration directory, and:

(require 'ellie)

See doc/USAGE.md for usage instructions.

Configuration

Environment: ~/.config/ollie/env

OLLIE_BACKEND=openai           # ollama | openai | openrouter | 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)

Shell environment variables take precedence over the env file.

Remote Access

Two approaches: mount the 9P namespace directly with 9pfuse, or reach it over HTTP via ollie-httpgw.

9P mount

Because olliesrv speaks 9P over TCP, a remote instance can be mounted into the local namespace using 9pfuse. Agent sessions, tools, and all other filesystem state on a remote host become ordinary local files — no special client needed.

# On the remote host:
olliesrv start -tcp :9564

# Locally:
olliesrv mount remotehost:9564 ~/mnt/remotehost
ls ~/mnt/remotehost      # s/, t/, ...

Sessions created under ~/mnt/remotehost/s/ run on the remote host, so tool calls execute close to the remote filesystem rather than over the wire.

HTTP gateway

ollie-httpgw translates HTTP to 9P, letting any HTTP client interact with olliesrv without a 9P library. It's also the backend for the web UI.

# Connect to local server:
ollie-httpgw

# Connect to remote server:
ollie-httpgw -net tcp -addr remotehost:9564

See doc/USAGE.md for full details on the gateway and web UI.

Container

A Containerfile is included for running a self-contained remote server:

podman build --network=host -t olliesrv .
podman run --network=host -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY olliesrv

Then mount locally or point httpgw at it:

olliesrv mount localhost:9564 ~/mnt/container-ollie
# or
ollie-httpgw -net tcp -addr localhost:9564

Development

Update all submodules to latest:

git submodule update --remote

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