Skip to content

An Agent is a focused role with a declared identity — one prompt, one model, one purpose — invoked by an orchestrator and producing one artifact per run.

Primitive

Agent

The artifact

A markdown file. Frontmatter declares identity. Body declares behavior.

.claude/agents/builders/builder-product.md

---name: builder-product← identity keydescription: Executes ONE task from product-spec planmodel: sonnet← cost/quality knobtools: [Read, Write, Edit, Bash, Grep, Glob]← minimum set---

# PurposeOne paragraph. Your single job. What you own.

## WorkflowNumbered steps. Read task → act → report.

## ReportExact output contract. Structured, parseable.

The frontmatter IS the agent's boot-time configuration. Every field is load-bearing — missing `name` means nobody can invoke it; missing `tools` means it inherits everything (the opposite of focused).

The levers you control

Every agent has exactly four knobs.

Context

what it reads

System prompt, skills, mental models, briefing docs.

Model

how smart

Haiku / Sonnet / Opus. Per-task, not default.

Prompt

what to do

Task brief from orchestrator. The user message.

Tools

how it acts

Minimum set. Never "all tools just in case."

Every agent failure traces to one of these four being wrong. Audit all four before blaming the model.

Four kinds of agents

Category determines what an agent is allowed to touch.

code-modifying

Writes code. Read + Write + Edit + Bash. The only category that mutates the repo.

builder-product

validator-product

meta/

Builds other agents. Creates agents, prompts, skills, hooks. Operates on the agentic layer, not the app.

meta-agent

adw-planner

context

Reads only. Searches, summarizes, returns findings. Never writes.

Explore

doc-scraper

review

Audits. Reads a spec + reads disk state, reports PASS/BLOCK. Never self-certifies its own work.

validator-product

test-creator

An agent that belongs to two categories is doing two jobs. Per One Agent One Prompt One Purpose — split it.

What the agent sees

System prompt is law. User prompt is per-task.

System prompt

The agent's identity

Set once at boot. Applies to every user prompt the agent ever runs. The rules, the constraints, the tone. Mistakes here scale to every execution.

You are builder-product. You implement

ONE task. Read task_get.py output first.

Never write outside filesExpected.

User prompt

The task at hand

Changes every invocation. The orchestrator's brief: task ID, context paths, acceptance criteria. The agent reads this and executes.

Implement task P1-T3. Read

AGENT_SYSTEM.md and the TDD §2.

Report when filesExpected match disk.

Most engineers will never touch the system prompt — they just write user prompts (Commands). You touch the system prompt when you're building a custom agent — that's where the Agent primitive earns its keep.

The create/don't-create test

Agent vs Command. Draw the line on reuse.

create an agent when

Agent earns the overhead

  • You need a specific model (Opus for hard planning)
  • You need restricted tools (validators: read-only)
  • Role is reused across many workflows
  • The agent will be spawned by other agents (delegation)

use a Command instead when

Agent is overhead

  • It's a one-off workflow you invoke directly
  • Default tools + default model are fine
  • No other agent will spawn it
  • Scope is a single slash-command invocation

The discipline

An agent is a focused role, not a generalist worker.

One job per agent. Minimum tools. Declared model. The agent you can't describe in one sentence is doing two jobs — split it. Mistakes in the system prompt scale to every run; mistakes in category scale to every workflow that spawns it. Focus is the whole point.