Skip to content

Specialist Agents

edikt ships 18 domain specialist agents — the ones that review your plans, audit your code, and implement features in their domain. Alongside them sit seven internal system agents that edikt's own commands dispatch (the evaluator, the sidecar extractor, and the rest); those are covered in System agents below, and are not part of the domain roster.

This guide explains what agents are, how routing works, how they interact with rule packs, how they are governed, and how model selection works per phase.

What agents are

Specialist agents are subagents with a defined domain focus. Each agent has:

  • A description: field that tells the model when to activate it
  • Domain expertise scoped to one area (database, security, frontend, etc.)
  • Constraints that keep it from straying outside its domain

Agents don't replace the model — they add specialist focus. The model is the engineer running the session. Agents are the specialists who review plans and code, and implement self-contained tasks in their domain.

Two types of agents

Advisory agents (read-only) — review plans and code, return findings with severity levels. They never write code. This keeps invocations fast and non-destructive. (pm is the one advisor that writes anything: it authors PRDs, and nothing else.)

Implementation agents (read and write) — both review AND implement. The model delegates self-contained implementation tasks to them.

TypeAgents
Advisoryarchitect, dba, security, api, sre, platform, docs, pm, ux, data, performance, compliance, seo, gtm
Implementationbackend, frontend, qa, mobile

The 18 domain agents

Always installed

AgentDomain
architectSystem design, ADRs, component boundaries, architectural trade-offs
docsDocumentation accuracy, gap detection, runbooks
qaTesting strategy, test writing, coverage

Common (most projects)

AgentDomain
sreReliability, observability, deployment, infrastructure
securityOWASP, auth patterns, secret management, threat modeling
pmProduct requirements, prioritization, user stories
apiAPI contracts, versioning, breaking changes, documentation

Stack-triggered

AgentTriggered by
backendGo, TypeScript, Python, PHP, Ruby, Java, Rust
frontendTypeScript + React/Vue/Angular/Svelte/Next.js
dbaGo, Python, Java (database-heavy stacks)
uxReact, Next.js, Vue, Angular, Svelte, React Native, Flutter
platformDocker, Kubernetes, Terraform
mobileReact Native, Flutter, Swift, Kotlin
seoNext.js, web content projects
gtmWeb content projects
dataData pipeline projects

Optional (add with /edikt:agents add {slug})

AgentDomain
performancePerformance bottlenecks, profiling, optimization
complianceHIPAA, PCI, SOC2, GDPR

compliance also installs automatically when project-context.md mentions regulated data. The stack-triggered agents above (data, mobile, seo, gtm) are in the same opt-in set — they install on their own when their stack is detected, and can be added by hand when it isn't.

System agents

Seven further templates ship in templates/agents/, but they are not domain specialists and you never route to them by hand — edikt's own commands dispatch them: evaluator, evaluator-headless, sidecar-extractor, governance-verifier, post-flight-synthesizer, compile-quality-grader, and cheat-rate-adversary. They install unconditionally, because the commands that dispatch them fail to resolve otherwise (ADR-043, ADR-044).

Evaluator

The evaluator is the one you'll notice, because it runs at two points in the SDLC chain:

  • Pre-flight — before a phase starts, validates that acceptance criteria are testable (TESTABLE / VAGUE / SUBJECTIVE / BLOCKED)
  • Phase-end — after a phase completes, verifies each criterion with evidence (file:line citations)

It's skeptical by default, assuming work is incomplete until proven otherwise. Every PASS requires evidence; every FAIL requires a citation.

It runs in two modes: headless (the default — a separate claude -p invocation with zero shared context, which eliminates self-evaluation bias and works in CI) and subagent (a forked agent inside the session — faster, but only partial context isolation). Both are configurable under evaluator.* in .edikt/config.yaml.

The evaluator is core rather than optional: the plan harness and quality gates depend on it, so /edikt:init and /edikt:upgrade install it unconditionally, and /edikt:doctor probes its presence and configured mode before a phase can block on it.

See Evaluator for the full mode comparison and configuration reference.

How routing works

The model routes to agents using their description: field. Each description includes trigger conditions:

yaml
# dba agent description
description: "Reviews and implements database schema, migrations,
  queries, and data modeling. Use proactively when migration or
  schema files are modified."

When the model sees you working on a migration file, it reads this description and delegates to the dba agent.

Three routing paths:

Auto-routing — the model reads file context and the agent descriptions, delegates when there's a match.

Command routing — edikt's commands route to the right specialists automatically:

You sayWhat happens
"review this"/edikt:sdlc:code-review detects changed file domains, routes to matching agents
"audit the codebase"/edikt:sdlc:audit routes to security and sre agents
"create a plan"/edikt:sdlc:plan assigns reviewers to each phase based on domain
"generate spec artifacts"/edikt:sdlc:artifacts routes each artifact to its domain specialist

Direct delegation — ask by name: "have the dba review this migration"

Plan pre-flight review

When you run /edikt:sdlc:plan, edikt scans the plan content for domain signals and invokes the relevant advisors before execution begins:

Plan mentions...Agent invoked
SQL, migration, schema, indexdba
docker, terraform, helm, k8splatform, sre
auth, JWT, payment, token, RBACsecurity
API, endpoint, REST, webhookapi
bounded context, hexagonal, layerarchitect
performance, cache, latencyperformance

Each advisor reviews only their domain and returns findings before you start building.

Post-implementation review

/edikt:sdlc:code-review classifies changed files by domain and routes the diff to the relevant agents:

Changed filesAgent invoked
*.sql, migration*, schema*dba
Dockerfile*, docker-compose*, *.tf, helm/*sre
*auth*, *jwt*, *payment*, *token*security
*route*, *handler*, *controller*, *api*api
*cache*, *perf*, *optimize*performance

How agents work with rule packs

Agents and rule packs serve different purposes and work at different levels:

Rule packsAgents
WhenEvery file, every sessionWhen the task matches their domain
HowLoaded into context automaticallySpawned as subagents with isolated context
WhatStatic coding standardsDynamic specialist review
LanguageLanguage-specific (go.md, typescript.md)Language-agnostic (dba reviews any SQL)

They work together: the Go rule pack teaches the model Go patterns. The backend agent reviews whether those patterns were applied correctly. The rule pack prevents violations. The agent catches what the rules missed.

Example: Your Go rule pack says "always wrap errors with context." Your backend agent reviews a PR and catches a bare return err — even though the rule told it not to do this, the agent catches it in review.

Severity model

All advisory agents use the same three-level model:

LevelMeaning
CriticalMust address before shipping — data loss, security breach, broken contract
WarningShould fix, not blocking
OKDomain looks healthy

Critical findings trigger quality gates that block progression. See Quality Gates.

Agent governance

Every agent template carries frontmatter that constrains its autonomy and resource usage. These are enforced by Claude Code, not merely requested in the prompt.

Turn limits

maxTurns caps how many agentic turns an agent takes before it stops. Read-only reviewers cap at 10 — enough to read, grep, and report. Agents that produce output over several passes (backend, frontend, mobile, qa, plus pm and platform) cap at 20, leaving room for write-test-fix cycles.

Tool restrictions

The advisory/implementation boundary is enforced at the tool layer, not by instruction. Advisory agents declare disallowedTools: [Write, Edit], so they can read and analyze but cannot modify code — platform reaches the same result through a tools: allowlist that simply never grants write access. The exception worth knowing: pm holds Write so it can author PRDs, but it has no Edit and never touches source.

Effort level

effort controls how hard the model works per turn. It's independent of the model — a high effort agent still runs on whatever model the plan phase assigned.

EffortAgents
higharchitect, security, qa, performance, compliance
mediumapi, backend, data, dba, docs, frontend, mobile, platform, pm, sre, ux
lowseo, gtm

Auto-loaded context

Every agent template declares an initialPrompt — the context it reads before it responds when run as the main session agent via claude --agent. The architect reads all ADRs and invariants; security reads the architecture and identifies trust boundaries; pm reads all active PRDs and specs.

When the same agents are invoked as subagents by edikt commands, the parent command supplies the context instead.

Resumption

When a specialist stops — review finished, or turn limit reached — it can be resumed with SendMessage. Claude Code auto-resumes stopped background agents rather than erroring, so edikt commands that spawn specialists can re-engage them later without tracking state. Useful when a review produces follow-up questions.

Model selection — per phase, not per agent

Agents don't have a fixed model. No model: field exists in any agent template. The model is determined by what's being done and how complex it is — assigned at the plan phase level.

When you create a plan, each phase includes a complexity assessment and suggested model:

Phase 1: Multi-tenant schema design
  Complexity: High — architecture decision with security implications
  Suggested model: opus
  Reviewers: architect, dba, security

Phase 3: CRUD handler implementation
  Complexity: Medium
  Suggested model: sonnet
  Reviewers: backend, api

Complexity-to-model mapping:

TaskComplexitySuggested model
Architecture/design decisionsHighopus
Complex implementation (domain logic, state machines)Highopus or sonnet
Standard implementation (CRUD, handlers, tests)Mediumsonnet
Mechanical tasks (formatting, docs, simple tests)Lowhaiku or sonnet
Critical review (security, schema, API contracts)Highopus
Routine review (formatting, naming, small fixes)Lowsonnet or haiku

When agents run outside a plan (ad-hoc review, direct delegation), they use the default model from the main conversation.

Managing agents

List installed agents:

/edikt:agents

Add an optional agent:

/edikt:agents add performance
/edikt:agents add compliance

Get recommendations for your stack:

/edikt:agents suggest

Command reference: /edikt:agents

Customizing agents

Agents install to .claude/agents/, and you can edit any of them in place — change the domain expertise, tighten the constraints, adjust maxTurns or effort. Mark the file with <!-- edikt:custom -->, or list its slug under agents.custom in .edikt/config.yaml, so /edikt:upgrade leaves your version alone.

To add a new one, create a file in .claude/agents/my-agent.md:

yaml
---
name: my-domain-expert
description: "Reviews X for Y. Use proactively when Z files are modified."
tools:
  - Read
  - Grep
  - Glob
---

You are a {domain} specialist with deep knowledge of...

The description: field is what the model reads to decide when to delegate, so make it specific and state the trigger condition explicitly.

Agent memory

Two agents have persistent memory across sessions:

  • dba — accumulates schema knowledge, migration history, query patterns
  • security — accumulates threat model context, past findings, auth decisions

Memory stores at .claude/agent-memory/{agent-name}/ and loads automatically. The dba agent remembers your schema decisions from last week.

To add memory to any agent, add memory: project to its frontmatter.

Released under the Elastic License 2.0. Free to use, not for resale.