Skip to main content

Core Concepts

The mental model behind go-code: architecture, runs and conversations, tools and permissions, workspaces, providers, the event model, skills/profiles/subagents, memory, and configuration.

📄️Architecture

go-code is a local-first coding agent runtime. At the center is harnessd, a long-running HTTP daemon that boots the full agent runtime — LLM providers, tools, memory, cron, MCP, skills, and workflow orchestration — and exposes it over a REST + Server-Sent Events (SSE) API. Clients (the interactive TUI, the harnesscli one-shot command, or any external service) talk to that daemon over HTTP. Above the daemon sit optional orchestration layers — the Workflow Engine, Go Relay, and Symphony — that compose, route, and dispatch runs at higher levels of abstraction.

📄️Tools & Permissions

The agent runtime exposes a catalog of tools — Go functions that an LLM can call to read files, run shell commands, search the web, spawn subagents, and more. Not every tool is visible to the LLM at once. Instead, the catalog is split into two tiers: a compact core set that is always present, and a larger deferred set that is hidden until the agent activates what it needs. On top of that, every run has a permission model that governs filesystem access and whether humans must approve tool calls before they execute.

📄️Memory

The harness ships two complementary memory subsystems that let agents remember facts and task state across turns and across separate runs. Observational memory watches the conversation transcript automatically and extracts durable facts without any explicit agent action. Working memory is a key/value store that the agent controls explicitly — it writes exactly what it wants to remember and reads it back later. Both systems inject their contents into every LLM turn so the model always has relevant context in scope.