theta-spec is a declarative, harness-agnostic configuration standard for AI coding agents. One theta.toml file defines the full configuration surface, i.e. instructions, rules, tools, skills, subagents. A protocol is specified for the lifecycle of this configuration file, and any theta-spec compliant implementation can resolve, lock, and cast it to any supported harness.
theta is the default implementation of this spec — a Rust CLI that resolves, locks, and casts
theta.tomlto any supported harness.
Docs
All the documentation for the specification is present here and can also be built and served locally by running
uv run mkdocs serve --livereload
Motivation
Agent harnesses are here to stay. Each one ships its own configuration format but still all of them share similarities. Maintaining and declaring configurations is a burden. There is no standard way to share, version, or reproduce an agent configuration.
Parametrizing the configuration surface into a single manifest:
- Displays the exhaustive configuration at a glance
- Provides an entrypoint for searching the resources that define an agent
- Enables reproducible configurations between people and between agents
- Makes mutation strategies explicit and diffable
- Facilitates maintenance across harness updates
- Enables a project lifecycle tool, which is why the theta CLI exists
A parametrized function and a well-defined cost function enables function approximation. If the goal is to optimize the way we work with agents, this is the first tiny step towards building the tooling needed to cover at least one gap, the parameters.
Understanding the spec: theta.toml
Most of the spec is read-self-explanatory for anyone familiar with agent harnesses. A detailed and exhaustive description of each one of the defining fields can be found condensed here and also in the manifest section of this doc.
This is how a theta.toml looks:
[theta] schema = "2026-04" [agent] name = "harness-researcher" description = "researches agent harness configurations across public repos" version = "0.1.0" authors = ["ivan <ivan@tamarillo.ai>"] model = "claude-sonnet-4-20250514" [instructions] system = "instructions/system.md" [instructions.rules.concise] src = "instructions/rules/concise.md" apply = "always" [instructions.rules.rust] src = "instructions/rules/rust.md" apply = "glob" apply_to = ["*.rs"] [tools.context7] command = ["npx", "-y", "@upstash/context7-mcp@latest"] [tools.playwright] command = ["npx", "@anthropic-ai/playwright-mcp"] [tools.memory] command = ["npx", "-y", "@modelcontextprotocol/server-memory"] [skills.osint] source = { path = "skills/osint" } [[subagents]] name = "scraper" description = "scrapes github repos for harness config patterns" prompt_path = "subagents/scraper.md" model = "claude-sonnet-4-20250514" tools = ["playwright"] [[subagents]] name = "analyst" ref = "agents/analyst/theta.toml"
Supported harnesses
The following harnesses are supported. Prioritization is based on adoption research.
Related docs
- theta — Rust CLI (reference implementation)
- MCP — tool protocol standard
- Agent Skills spec — skill packaging standard
A declarative, harness-agnostic agent configuration standard.
Contributing
See CONTRIBUTING.md for how to propose spec changes, request new harnesses, and the TEP process.
Style
Check STYLE.md for documentation conventions.