ollie is a 9p-based generative agent surface
Go to file
Levi Neely 61fc50a702 prompts: rename p/ files; drop OLLIE_PLAN_PATH and pl/ references
Rename prompt files to semantic names (no numerical prefix):
  00_base           => sys-base
  01_ollie          => sys-ollie
  02_skills         => sys-skills
  03_tool-files     => tools-file
  04_tool-reasoning => tools-reasoning
  05_tool-memory    => tools-memory
  07_tool-subagents => tools-subagent
  08_tool-elevate   => tools-elevate

Update agent configs and all documentation references. Remove
OLLIE_PLAN_PATH from env.sample and pl/ mention from OBSERVATIONS.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:09:50 +02:00
.beads bump core; init beads 2026-04-19 10:56:17 +02:00
9p@4dd16cb840 bump 9p, el, tui: *wait fixes and fifo.in rename 2026-04-19 17:02:19 +02:00
agents prompts: rename p/ files; drop OLLIE_PLAN_PATH and pl/ references 2026-04-19 20:09:50 +02:00
core@5a3f76d035 bump core, 9p: fix *wait one-shot semantics, Tflush cancellation, AfterFunc lock 2026-04-19 16:56:47 +02:00
doc prompts: rename p/ files; drop OLLIE_PLAN_PATH and pl/ references 2026-04-19 20:09:50 +02:00
el@0a1141f4a8 bump 9p, el, tui: *wait fixes and fifo.in rename 2026-04-19 17:02:19 +02:00
prompts prompts: rename p/ files; drop OLLIE_PLAN_PATH and pl/ references 2026-04-19 20:09:50 +02:00
sandbox adjust sandbox perms 2026-04-18 22:41:19 +02:00
scripts scripts/s/sh: statewait, stdin pipe, startup tail; bump tui 2026-04-19 17:20:20 +02:00
skills@2dd6fea2e6 doc: document offset file semantics 2026-04-16 22:17:33 +02:00
tools planning: remove plan_* tools and prompt entirely 2026-04-19 11:36:56 +02:00
tui@da6627c8b9 scripts/s/sh: statewait, stdin pipe, startup tail; bump tui 2026-04-19 17:20:20 +02:00
.gitignore .claude in gitignore 2026-04-19 10:57:46 +02:00
.gitmodules submodules: add agent-skills 2026-04-11 16:13:47 +02:00
Containerfile add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
README.md planning: remove plan_* tools and prompt entirely 2026-04-19 11:36:56 +02:00
mkfile scripts: add prime wrapper for agentSpawn prompt injection 2026-04-19 12:03:28 +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 | b/q 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

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

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

Start a remote server

On the remote host (or in a container):

olliesrv start -tcp :9564

Mount the remote namespace locally

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

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.

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:

olliesrv mount localhost:9564 ~/mnt/container-ollie

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