ollie is a 9p-based generative agent surface
Go to file
Levi Neely e9f10eeb92 add remote access via TCP: Containerfile, mount subcommand, docs
- Containerfile: multi-stage podman build for running olliesrv as a
  remote server (port 9564, no FUSE needed on server side)
- olliesrv mount <address> [mountpoint]: mounts a remote olliesrv
  namespace locally via 9pfuse over TCP
- olliesrv start -tcp <addr>: adds TCP listener alongside Unix socket
- README: document remote access and container usage
- doc/IDEAS.md: remove Network & Remote Access (implemented)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 23:32:37 +02:00
9p@f17774163c add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
agents cleanup agents 2026-04-14 19:38:03 +02:00
core@9ef3dd07cc Merge branch 'remove-execute-pipe' 2026-04-16 21:40:09 +02:00
doc add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
el@240ea79010 chore: update el and tui submodules 2026-04-15 07:02:11 +02:00
prompts transcript: add tr/ store, save via chat write or ctl save 2026-04-16 22:35:07 +02:00
sandbox rename OLLIE_9MOUNT → OLLIE throughout; update submodules 2026-04-14 17:39:48 +02:00
scripts oq: add -bg flag and trailing newline on exit 2026-04-16 22:46:50 +02:00
skills@2dd6fea2e6 doc: document offset file semantics 2026-04-16 22:17:33 +02:00
tools subagents: add subagent_spawn tool and system prompt fragment 2026-04-16 20:14:57 +02:00
tui@7a6ed061cf chore: update tui submodule 2026-04-15 07:57:22 +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 add remote access via TCP: Containerfile, mount subcommand, docs 2026-04-16 23:32:37 +02:00
mkfile mkfile: add scripts install target; update 9p submodule 2026-04-16 19:39:53 +02:00

README.md

ollie

What happens if agent primitives are exposed as an ordinary filesystem? How much can be subtracted from AI agent implementations without reducing their usefulness? These are some of the motivating questions behind ollie.

  • The core system provides a public library of AI agent primitives.
  • The 9p filesystem server (Go) creates a virtual filesystem exposing the important state and behaviors as ordinary files and operations.
  • A reference TUI implementation proves that it is possible to build a functioning and user-friendly terminal front-end using only the Go standard library.
  • And, just because I like my Emacs friends, a reference Emacs interface front-end implementation.

Project Structure

  • core/:
  • tui/:
  • 9p/:
  • el/:

Getting Started

Clone with submodules:

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

Or after cloning:

git submodule update --init --recursive

Building

Build 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/ollie.el into your own Emacs configuration directory, and:

(require 'ollie)

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