This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Levi Neely 8e4cdaa4bd session: extract agent/ as separate package
Agent is now in ollie/agent with proper encapsulation:
- Unexported fields, exported methods as the API
- Own constructor (agent.NewAgent)
- Owns: turn execution, history, runtime, hooks, commands, compaction
- Session never reaches into agent internals

Session (ollie/session) is a thin host:
- Owns: persistence, session ID, env, detach delegation
- Delegates all agent operations through exported Agent methods
- handleCommand dispatches to agent.HandleCommand for agent-level commands

Agent-level commands (/model, /backend, /compact, /agent, etc.) live
in agent/commands.go and access internals directly (same package).

Session-level commands (/sessions, /save, /resume, /cwd, /help)
remain in session/commands.go.

Test files temporarily removed pending rewrite against new API.
The fifo_test.go passes as a sanity check.
2026-07-29 21:43:49 +02:00
agent session: extract agent/ as separate package 2026-07-29 21:43:49 +02:00
backend backend: add Noop backend for testing 2026-07-29 20:00:26 +02:00
detach restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
elevate restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
env restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
execute restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
log restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
paths restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
sandbox restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
session session: extract agent/ as separate package 2026-07-29 21:43:49 +02:00
skills restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
tools restructure: drop pkg/, split tools/execute into focused packages 2026-07-29 18:10:25 +02:00
.gitignore mkfile: remove build target; ollie is now a library 2026-04-09 22:08:21 +02:00
LICENSE Add GNU General Public License v3 2026-02-21 22:21:21 +01:00
README.md session: rename config.go → agent_config.go, update README 2026-07-29 19:18:04 +02:00
env.sample add env.sample with all supported OLLIE_* variables 2026-05-21 17:06:53 +00:00
go.mod elevate: SSH agent proxy with approval gating 2026-07-27 10:49:26 +02:00
go.sum elevate: SSH agent proxy with approval gating 2026-07-27 10:49:26 +02:00

README.md

ollie

A Go library for building agentic systems. Provides sandboxed tool execution, a common LLM backend interface, dynamic tool/skill registries, and a session lifecycle framework.

Architecture

graph TD
    session --> tools
    session --> backend
    session --> log
    session --> paths

    execute --> tools
    execute --> skills
    execute --> detach
    execute --> sandbox
    execute --> paths

    tools --> paths
    elevate -.->|socket| execute

Packages

session/     Session + Agent: the core runtime (loop, compaction, hooks, commands, persistence)
backend/     Backend interface + LLM providers (Anthropic, OpenAI, Ollama, Gemini, Copilot, CodeWhisperer)
tools/       Server/Dispatcher interfaces, tool registry, discovery, schema parsing
execute/     Sandboxed shell execution, promoted tool dispatch, skill dispatch, remote SSH
detach/      Background process management (ring buffer, signal)
skills/      Skill metadata parsing and per-session registry
elevate/     Elevation broker (privilege escalation daemon, policy)
sandbox/     Landrun sandbox configuration and command wrapping
env/         Session environment helpers
log/         Structured logger
paths/       XDG path resolution

Core concepts

session.Session — the public interface. A session is the runtime environment that hosts an agent. It provides identity, working directory, event bus, environment, and lifecycle management.

session.Agent — the reasoning entity within a session. Owns the conversation history, LLM backend, tools, hooks, and system prompt. Swappable via /agent command.

session.harness (unexported) — implements Session. Wires the agent to the session environment and drives turn execution.

backend.Backend — the LLM interface: ChatStream, Models, ContextLength, Name, Model/SetModel.

tools.Server — interface for a tool provider: ListTools, CallTool. Implementations: execute.Server (local) and execute.RemoteServer (SSH).

tools.Registry — per-session dynamic tool loading. Discovers scripts from OLLIE_TOOLS_PATH, parses schemas, promotes to native callable functions on demand.

Install

No build step — ollie-core is a library.

Configuration

Agent config: ~/.config/ollie/agents/<name>.json

{
  "prompt": "agent-coding.md",
  "backend": "anthropic",
  "model": "claude-sonnet-4-20250514",
  "hooks": {
    "preTurn": ["$OLLIE/x/prime tools-file"]
  },
  "maxSteps": 50,
  "reasoning": 10000
}

Hook values accept a string or array of strings. Commands run in order; stdout is appended to context. Exit code 2 blocks the action; other non-zero is a warning.

Sandbox config: ~/.config/ollie/sandbox/<name>.yaml

Controls landrun sandboxing for shell. See file header for documentation.

Tools

One built-in tool via execute.Server:

shell — run a bash command in a sandbox. Accepts cmd, timeout (default 30s, 0 for unlimited), sandbox (profile name), elevated (bypass sandbox via elevation broker).

Named tool scripts from OLLIE_TOOLS_PATH are promoted to native callable functions via tools.Registry. Each script declares its schema and metadata in header comments (ollie:prompt, args_json:, ollie:tier, ollie:parallel read).

Skills

Skills are domain-specific knowledge modules in OLLIE_SKILLS_PATH (default: ~/.config/ollie/skills/). Each is a directory containing a SKILL.md with YAML front-matter (name, description). Loaded into session context on demand via skill_load.

Session lifecycle

The 9P server (olliesrv) is the session manager. It instantiates the execute server, elevation broker, and tool/skill registries at daemon level. Sessions are created, queried, and controlled via the 9P filesystem — all agent interaction uses the ollie-9p client internally.

session.New() creates a session with its agent. The session drives turn execution, manages compaction, and handles lifecycle events. Close() tears down resources when a session is killed.

License

GPLv3