Hamr is the de-facto coding agent for local models, built on Pi as an agent toolkit.
Relay is the compatibility gateway between your local llama.cpp server and real agent tooling. Model lifecycle, graceful switching, prefix-cache pre-warming. Point Hamr at Relay and go.
Switch models with /model. Each family gets its own color and glyph. The conversation keeps going.
A bounded model↔tool loop designed for local inference. Read cache, identical-read detection, escalating nudges, deterministic compaction, repair with verification contracts.
Up to 64 model steps and 192 tool calls. Context is a hard budget — not a suggestion. Won't burn your window. Won't loop forever.
JSON themes with variables and token mappings. Edit a theme file and Hamr reloads it without restarting.
Model-adaptive coloring tints the UI to the active model family when available.
Edit a theme JSON and the TUI hot-reloads. No restart.
Local models can emit malformed XML, leaked <think> tags, broken JSON, mixed final answers, and truncated tool calls.
Hamr includes native parsers and repair steps for those cases, with model-specific defaults where available.
JSONL event logs. Resume, fork, replay. Every tool call recorded.
SQLite FTS5 search across all sessions. Pattern recall, not just history.
Parallel orchestration via explicit delegation. Dependency-aware task splitting.
SKILL.md files auto-discovered from ~/.hamr/skills/ and .hamr/skills/.
TypeScript extensions for custom tools, commands, and events.
Embed the Session, EventBus, and tools in your own apps.
import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from '@hamr/coding-agent' const authStorage = AuthStorage.create() const modelRegistry = ModelRegistry.create(authStorage) const { session } = await createAgentSession({ sessionManager: SessionManager.inMemory(), authStorage, modelRegistry, })
Hamr is a local coding agent for Relay and compatible backends. The runtime is evolving, but the current CLI and docs are usable now.