ῥῆμα · "the spoken word": words that do things.
A small, embeddable agent framework in Rust.
Run the coding agent that ships with it, write your own driver, or embed the engine. Every layer is a generic crate with a public interface.
Rhema Code, the terminal-based coding agent.
Build at the right layer
Build at the layer you need: run a frontend, write it yourself on top of an existing agent, write your own agent, add a provider, embed the core.

http listening on 0.0.0.0:7799
Run the coding agent
Rhema Code is a full terminal UI, your editor over the Agent Client Protocol, on every provider the framework speaks.

The rhema TUI. Replies stream in as rendered markdown, every tool call is a shell command shown with its exit code, and sessions save under the cache dir for /resume.
rhema acp speaks the Agent Client Protocol: T3 Code, Zed, JetBrains, Neovim, Emacs, and VS Code launch it as a subprocess, and bash calls prompt through the client's own permission UI.
rhema run "summarize this diff" for scripts. Prompt on stdin, plain text on stdout, tool events on stderr, non-zero exit on failure.
The core assumes nothing
Each layer out adds a decision. Nothing in layer 0 knows a driver, a store, or an adapter exists.
- rhema-core · the step engine and its seams
- rhema-provider · the adapters' shared base: model cards, pricing, SSE decoding
- rhema-config · the config file: named profiles, stored keys, the active provider
- rhema-rsd · resource-scoped dispatch: per-key leases, live inboxes, revision-guarded checkpoints
- rhema-memory · cross-session memory the model pulls through tools, never injected context
- rhema-identity · the agent accounts layer: per-service accounts and their secrets, stored so no model reads them
- rhema-agent-tools · the shared toolkit on the core's tools: approval-gated bash, skills, paste expansion, the system-prompt renderer
- rhema-provider-{google, anthropic, llama-cpp, openai-compatible, openrouter, copilot} · six adapters: Gemini, Anthropic Messages, llama.cpp servers, any OpenAI-compatible endpoint, OpenRouter, GitHub Copilot
- rhema-coding-agent · the coding-agent driver: bash tool, approval seam, session save/resume
- rhema-autonomous-agent · the resident-agent core tier: sources, lease-driven driver, tool registry
- rhema-code · the rhema binary: full-screen terminal UI, pipeable one-shot, rhema acp
- rhema-acp · the Agent Client Protocol adapter: T3 Code, Zed, JetBrains, Neovim, Emacs, and VS Code drive rhema without a plugin per editor
- rhema-claw · the resident agent daemon: HTTP chat, forge watches, memory, phone notifications
Outside the crates: integrations/rhema-forge-integration, the forge event vocabulary and ingest path the claw mounts for its watches.
Why it stays small
The framework stays small on purpose, and the discipline that keeps it there is written down and tested.
The whole API a driver touches is four traits: ModelProvider, the only model seam; ToolResolver, one capability primitive, not a registry; Event and EventSink, streaming deltas and step lifecycle; Session, caller-owned and fully serializable.
The engine is built for the coding agent, and the resident dispatcher is the falsification test on the seams: when the second consumer runs without adding anything to rhema-core, the boundaries hold. A test in the suite checks exactly that.
Deliberately out of the core: the turn loop, persistence, HTTP, tool registries, approvals, sandboxing. Each one is a driver, or a later crate.
