Theta-spec: a humble harness agnostic configuration spec

ivanbelenky1 pts0 comments

GitHub - tamarillo-ai/theta-spec: harness agnostic configuration standard · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

tamarillo-ai

theta-spec

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>1 Commit<br>1 Commit

assets

assets

docs

docs

schemas/2026-04

schemas/2026-04

.gitignore

.gitignore

CONTRIBUTING.md

CONTRIBUTING.md

README.md

README.md

STYLE.md

STYLE.md

harnesses.toml

harnesses.toml

mkdocs.yml

mkdocs.yml

pyproject.toml

pyproject.toml

uv.lock

uv.lock

View all files

Repository files navigation

theta-spec

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.toml to 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:

"]<br>model = "claude-sonnet-4-20250514"

[instructions]<br>system = "instructions/system.md"

[instructions.rules.concise]<br>src = "instructions/rules/concise.md"<br>apply = "always"

[instructions.rules.rust]<br>src = "instructions/rules/rust.md"<br>apply = "glob"<br>apply_to = ["*.rs"]

[tools.context7]<br>command = ["npx", "-y", "@upstash/context7-mcp@latest"]

[tools.playwright]<br>command = ["npx", "@anthropic-ai/playwright-mcp"]

[tools.memory]<br>command = ["npx", "-y", "@modelcontextprotocol/server-memory"]

[skills.osint]<br>source = { path = "skills/osint" }

[[subagents]]<br>name = "scraper"<br>description = "scrapes github repos for harness config patterns"<br>prompt_path = "subagents/scraper.md"<br>model = "claude-sonnet-4-20250514"<br>tools = ["playwright"]

[[subagents]]<br>name = "analyst"<br>ref = "agents/analyst/theta.toml"">[theta]<br>schema = "2026-04"

[agent]<br>name = "harness-researcher"<br>description = "researches agent harness configurations across public repos"<br>version = "0.1.0"<br>authors = ["ivan "]<br>model = "claude-sonnet-4-20250514"

[instructions]<br>system = "instructions/system.md"

[instructions.rules.concise]<br>src = "instructions/rules/concise.md"<br>apply = "always"

[instructions.rules.rust]<br>src = "instructions/rules/rust.md"<br>apply = "glob"<br>apply_to = ["*.rs"]

[tools.context7]<br>command = ["npx", "-y", "@upstash/context7-mcp@latest"]

[tools.playwright]<br>command = ["npx", "@anthropic-ai/playwright-mcp"]

[tools.memory]<br>command = ["npx", "-y", "@modelcontextprotocol/server-memory"]

[skills.osint]<br>source = { path = "skills/osint"...

theta instructions spec harness configuration toml

Related Articles