ADR-0016: Agents as a First-Class Primitive
Status
Proposed / exploring. Captured during ideation on 2026-07-04. One of the three
primitives in the .stet topology (ADR-0015); extends the harness decision (ADR-0004).
Revisit for promotion after the core loop (SPEC-0001..0003) is standing.
Context and Problem Statement
ADR-0004 defined a pluggable harness — the mechanism that runs a coding agent
(OpenHands, Crush, Pi). But teams need to define reusable, named agents: a
configured actor with a persona, a chosen model, a set of attached skills, and the
verbs it responds to. "The harness" is the engine; "an agent" is a car built on it.
Agents are one of the three primitives versioned across the .stet topology (ADR-0015).
Sketch
An Agent is a named, versioned configuration:
- a harness (ADR-0004) — the mechanism it runs on;
- a model endpoint (ADR-0004) — bring-your-own, OpenAI-compatible;
- a persona / system prompt — how it behaves;
- attached skills (ADR-0012) — resolved across the topology;
- verbs it handles (ADR-0005) — which markup it responds to;
- guardrails / limits — sandbox scope, cost ceilings, permissions;
- enforcement — an optional pin marking this definition non-overridable by
lower tiers (ADR-0015), the mechanism by which an org mandates an agent. Pins are
set via a reviewed, voted PR to
$ORG/.stet, so the mandate is auditable provenance.
Agents are defined at user / org / project tiers (ADR-0015) and resolved most-specific-wins. A dispatch selects an agent; the agent supplies the harness, model, skills, and behavior. Multiple agents can share one harness. Agents are edited, reviewed, voted on, and distilled recursively like any Stet artifact.
Why it fits
- Good, because it separates mechanism (harness) from configured actor (agent), which the harness ADR conflated by necessity.
- Good, because named agents give teams reusable, shareable, versioned reviewers/ workers — e.g. a "docs agent," a "security agent," a "refactor agent."
- Good, because agent identity is exactly what agentic voting needs for attribution (ADR-0014): a vote comes from an agent, owned by a teammate.
Open questions
- Per-verb agent routing. Does a verb name the agent that handles it, or does the agent declare the verbs it serves (or both)?
- Agent identity & attribution for voting (ADR-0014) and for scoped credentials (ADR-0003) — how an agent maps to a forge identity.
- Model credentials per agent vs. shared endpoints; secret handling.
- Default agents shipped out of the box vs. everything user-defined.
- Diversity for voting — encouraging a panel of agents on different models (ADR-0014) is easier when agents are first-class and explicitly configured.
Consequences (tentative)
- Adds an
Agentprimitive + open schema, resolved via the topology (ADR-0015). - Layers on top of the
Harnessprotocol (ADR-0004) rather than replacing it. - Provides the identity that ADR-0014 (voting) and ADR-0003 (scoped credentials) need.
More Information
Extends ADR-0004 (harness). Resolved via ADR-0015 (topology). Consumes ADR-0005 (verbs) and ADR-0012 (skills); provides identity to ADR-0014 (voting).