Agent Types
The six agent types — validators, executors, analysts, generators, explorers, and forecasters — their output shapes, ADL constraints, and when to use each.
Overview
Every UluOps agent is defined by a type, and type determines output shape, ADL schema constraints, and composition rules. The platform supports six agent types split into two families:
- Non-writing agents read and analyze without modifying artifacts: validators, analysts, explorers, forecasters
- Writing agents produce or modify artifacts: executors, generators
- Code quality validation
- Security auditing
- Documentation completeness
- API contract compliance
- Issue auto-fixing
- Code generation
- Migration scripts
- Refactoring operations
- Ecosystem pattern analysis
- Strategic assessment
- Data science review
- Risk assessment
- Agent prompt scaffolding
- Configuration generation
- Code scaffolding
- Schema generation
- Codebase mapping
- Dependency tracing
- Architecture discovery
- Knowledge extraction
- Perverse outcome detection
- Unintended consequence analysis
- Temporal decay prediction
- Cascade depth analysis
At a Glance
| Aspect | Validator | Executor | Analyst | Generator | Explorer | Forecaster |
|---|---|---|---|---|---|---|
| Primary output | Score + Decision + Findings | Artifacts + Changes | Structured Audit | Generated Artifacts | Discovery Artifact | Projections + Causal Chains |
| Produces scores | Yes (0–100, required) | No | Optional | No | No | Optional |
| Decision vocabulary | Per preset (e.g., PASS/FAIL) | COMPLETE / PARTIAL / FAILED | Custom per agent | Custom per agent | None (narrative) | Custom per agent |
| Required ADL blocks | scoring, decisions | tasks, completion | process | tasks | mission | mission, process |
| Forbidden ADL blocks | tasks, completion, rollback | scoring, decisions, deductions | tasks, completion, rollback | scoring, deductions, auto_fail | scoring, decisions, tasks, completion, rollback | tasks, completion, rollback |
| Tracker integration | Full (scores, issues, correlation) | Status tracking | Partial (recommendations) | Status tracking | Observations (auto-collected) | Partial (predictions) |
Epistemic Nature
Independent of agent type, each agent can declare its epistemic nature — a multi-axis classification describing what kind of claims it makes and how verifiable they are. This was added in ADL v1.13.0.
| Axis | Values | Question |
|---|---|---|
| Verifiability | mechanically_checkable, expert_judgment, not_checkable | Can a third party confirm the finding? |
| Determinism | deterministic, stochastic, environment_dependent | Same input → same output? |
| Claim Type | factual, normative, observational | What kind of assertion? |
Agents of the same type can have different epistemic natures. For example, code-validator (mechanically checkable, factual) and security-analyst (expert judgment, factual) are both validators, but their findings have different verifiability characteristics. This distinction matters for empirical analysis of agent effectiveness — see the RAH service for false-positive rate analysis across epistemic categories.
See the ADL Specification for classification guidelines and the full axis reference.
Validators
Validators are the most mature agent type and the foundation of UluOps quality gates. Each validator scores a target from 0 to 100 against weighted criteria, produces a pass/fail decision, and emits findings with file paths, line numbers, and failure taxonomy codes.
Output shape:
{
"score": 85,
"decision": "PASS",
"findings": [
{
"title": "Missing error handling",
"filePath": "src/api/client.ts",
"lineNumber": 42,
"severity": "H",
"failureDomain": "PRA"
}
]
}Examples: code-validator, type-safety-validator, test-architect, frontend-validator, security-analyst, docs-validator, mcp-validator, sql-validator
Agent names don't always match their type. security-analyst and test-architect are validators (they produce scores and pass/fail decisions), despite their names suggesting other types. The agentType field in the ADL definition determines the type, not the name.
Known characteristics:
- Lowest rejection rate of any type — empirical validators average ~17% rejection
- Strongest tracker integration — scores, issues, and correlation all tracked automatically
- Quality ceiling gradient — diminishing returns above score 90 on repeated runs
- Threshold sensitivity — validators near the 85/70 boundaries create the most actionable findings
For detailed coverage of scoring, gates, and runs, see Validation.
Executors
Executors perform tasks that modify state or produce artifacts. They are the action-oriented counterpart to validators — where a validator identifies what's wrong, an executor fixes it. Executors use a tasks block to define their inputs, steps, and completion criteria, and a completion block to define success/failure conditions.
Output shape:
{
"status": "COMPLETE",
"artifacts": [
{
"type": "file",
"path": "src/auth.ts",
"action": "modified",
"description": "Added null check on line 42"
}
],
"summary": "Fixed 3 of 3 identified issues"
}ADL schema constraints:
- Required:
interface,tasks,completion - Forbidden:
scoring,decisions,deductions— executors produce changes, not judgments - Optional:
rollback— defines how to undo changes if execution fails
The tasks block defines structured inputs and steps:
| Field | Purpose |
|---|---|
tasks.inputs | What the executor needs (file paths, issue IDs, configuration) |
tasks.steps | Ordered operations to perform |
tasks.validation | How to verify steps completed correctly |
The completion block defines what success looks like:
| Decision | Meaning |
|---|---|
| COMPLETE | All tasks finished successfully |
| PARTIAL | Some tasks completed, others need user input |
| FAILED | Execution blocked by an unresolvable issue |
Current status: No executor agents are registered in the ecosystem yet. The type is fully specified in ADL v1.0.0 and schema-validated, but the existing remediation pattern uses fix commands (/fix:test-gaps, /fix:security, /fix:type-safety) which are iterative validator-fix loops rather than standalone executor agents.
The executor type is designed for autonomous task completion — agents that can take an issue ID and fix it without human-in-the-loop iteration. This is a more advanced pattern than the current fix commands, which delegate back to the human for each review cycle.
Planned use cases:
- Issue auto-fixing from tracker findings
- Code migration and refactoring operations
- Configuration generation from templates
- Dependency upgrade workflows
When to use: When you need an agent that does something rather than evaluates something. When the agent's output is changed files, created artifacts, or modified state rather than a score or report.
Analysts
Analysts produce structured audits, decompositions, and coherence assessments. Unlike validators, analysts investigate why something is the way it is rather than scoring how good it is. Their output is investigation-oriented rather than gate-oriented.
Output shape:
{
"analysis": {
"sections": [
{ "title": "Material Cause", "content": "..." },
{ "title": "Formal Cause", "content": "..." }
]
},
"decision": "TELEOLOGICAL",
"recommendations": [...]
}The cognitive lens pattern: Many analysts use a cognitive_lens block to encode a philosophical framework that shapes their analysis:
| Agent | Framework | What it examines |
|---|---|---|
aristotle-analyst | Four-cause decomposition | Material, formal, efficient, and final causes |
hume-analyst | Empirical audit | What's observed vs. what's assumed |
confucius-analyst | Relational coherence | Role obligations, naming correspondence |
standard-analyst | Structural analysis | Components, dependencies, purpose alignment |
Specialized analysts target specific failure patterns rather than general analysis:
| Agent | Focus |
|---|---|
assumption-excavator | Implicit assumptions buried in artifacts |
contradiction-detector | Internal inconsistencies between sections |
perverse-outcome-detector | Failure modes from optimization against criteria |
bias-prejudice-detector | Systematic perspective shaping |
confidence-calibrator | Claims asserted beyond evidence |
When to use: When you need deep investigation rather than a pass/fail gate. When you want structured reasoning about why something is the way it is.
Known characteristics:
- Higher rejection rates than validators (~31%) due to subjective evaluation
assumption-excavatorachieves 70% completion despite being subjective — challenges the "analyst = lifecycle mismatch" assumption- Custom decision vocabularies per agent (e.g., TELEOLOGICAL/ATELEOLOGICAL, EXAMINED/UNEXAMINED, CONSISTENT/CONTRADICTED)
Generators
Generators produce artifacts from structured inputs. Where executors modify existing state, generators create new things from scratch. They use a tasks block (like executors) but without completion — generators define what to produce rather than what to change.
Output shape:
{
"status": "COMPLETE",
"artifacts": [
{
"type": "file",
"path": "agents/new-agent.agent.yaml",
"action": "created",
"description": "Generated ADL schema with 5 scoring categories"
}
],
"decisions_requiring_input": []
}ADL schema constraints:
- Required:
interface,tasks - Forbidden:
scoring,deductions,auto_fail— generators produce artifacts, not judgments - Optional:
completion(not required like executors)
Key difference from executors: Generators create new artifacts; executors modify existing ones. Generators don't need completion criteria because the artifact either exists or it doesn't — there's no partial modification state to track.
Examples:
| Agent | What it generates |
|---|---|
adl-generator | ADL YAML schema files from agent prompts or requirements |
prompt-creator | Agent prompt markdown files from natural language requirements |
Both generators use a COMPLETE/PARTIAL/BLOCKED vocabulary:
- COMPLETE — artifact was generated and written to disk
- PARTIAL — artifact was generated but sections need user clarification
- BLOCKED — generation cannot proceed (duplicate agent, contradictory requirements)
When to use: When you need to scaffold new artifacts from requirements or specifications. When the output is a new file rather than a modified one.
Known characteristics:
- Generators naturally pair with validators — generate an artifact, then validate it (e.g.,
adl-generator→adl-meta-validator) - Both current generators include duplicate detection to avoid generating overlapping agents
- Generators are the newest agent family (introduced in ADL v1.6.0)
Explorers
Explorers produce discovery artifacts — categorical maps, inventories, commitment extractions. They are the most purely read-only type: no scoring, no decisions, just discovery. Explorers answer "what's here?" rather than "is it good?"
Output shape:
{
"report": "Structured exploration narrative...",
"discoveries": [
{
"category": "Commitment",
"content": "The artifact claims X but never defines X"
}
]
}The cognitive lens pattern: Like analysts, most explorers operate through a philosophical framework:
| Agent | Framework | What it discovers |
|---|---|---|
socrates-explorer | Elenctic examination | Commitments, contradictions, untested definitions |
aristotle-explorer | Categorical mapping | Natural kinds, genus/differentia, essential properties |
hume-explorer | Evidence discovery | What's been measured vs. assumed or inherited |
confucius-explorer | Relational mapping | Naming chains, ritual protocols, role-obligation pairs |
deep-explore | Semantic search + call graphs | Code structure, call chains, symbol relationships |
Explorers have the most restricted ADL schema — they forbid scoring, decisions, deductions, auto_fail, tasks, completion, and rollback. This enforces their read-only, discovery-oriented nature.
When to use: When entering an unfamiliar codebase or domain. When you need a map before you can validate. When the question is "what exists and how does it relate?" rather than "does it meet criteria?"
Known characteristics:
- Observations are tracked and auto-collected — explorer output is parsed into structured discoveries stored in the tracker via the SDK
- Most valuable as a first step before running validators or analysts
deep-exploreis the only non-philosophical explorer — it uses semantic search and call graph tracing rather than a cognitive lens
Forecasters
Forecasters model future states rather than evaluating present states. They produce trajectory projections, decay predictions, and causal chain analyses. Where validators ask "is this good now?" and analysts ask "why is this the way it is?", forecasters ask "what happens next?"
Output shape:
{
"predictions": [
{
"title": "Knowledge decay in auth module",
"timeHorizon": "6 months",
"confidence": "HIGH",
"mechanism": "Dependency drift"
}
],
"causalChains": [
{ "trigger": "...", "consequence": "...", "depth": 2 }
]
}The forecast block: Unique to forecasters — configures the prediction lens:
| Field | Options | Purpose |
|---|---|---|
actor_type | rational, naive, adversarial, systemic, cultural, creative | Who is acting on the artifact |
time_horizon | near-term, medium-term, long-term | How far out to project |
prediction_format | probability-weighted, spectrum, timeline, depth-map | How predictions are structured |
Examples:
| Agent | What it predicts |
|---|---|
temporal-decay-forecaster | When an artifact becomes dangerous or obsolete |
staleness-predictor | Which parts decay first and on what timeline |
normalization-forecaster | What becomes unquestioned assumption after adoption |
capability-emergence-forecaster | New capabilities that emerge from artifact existence |
adoption-drift-detector | Gap between designed usage and actual adoption |
cascade-depth-analyzer | Second and third-order causal chains |
When to use: When current quality is good but you need to know how it will degrade. When you want to detect second-order effects of changes. When planning maintenance schedules.
Known characteristics:
- Predictions are inherently less verifiable than present-state analysis
- Most valuable for platform-level artifacts, infrastructure, and policy
- Custom decision vocabularies per agent (e.g., DURABLE/FRAGILE, BOUNDED/GENERATIVE, SHALLOW/DEEP)
- Weirdness increases with cascade depth — third-order predictions are speculative by nature
Choosing the Right Type
| Need | Type | Example |
|---|---|---|
| Pass/fail quality gate | Validator | code-validator, type-safety-validator |
| Fix identified issues | Executor | (planned — currently use /fix:* commands) |
| Deep investigation of a concern | Analyst | aristotle-analyst, assumption-excavator |
| Scaffold new artifacts | Generator | adl-generator, prompt-creator |
| Map unknown territory | Explorer | deep-explore, socrates-explorer |
| Predict future states | Forecaster | temporal-decay-forecaster, staleness-predictor |
Types compose naturally in workflows. A typical workflow might use an Explorer to map a codebase, then Validators to score quality, then a Generator to scaffold fixes, then an Executor to apply them. See Definitions for WDL workflow composition.
The boundary between types is enforced at the schema level — ADL validation will reject a validator that includes tasks, or a generator that includes scoring. This prevents type confusion and ensures each agent's output shape matches what the tracker and SDK expect.
Tracker Integration
Each type integrates differently with the validation tracker:
| Type | Scores | Issues | Correlation | Runs |
|---|---|---|---|---|
| Validator | Stored per-agent | Created from findings | Fingerprint matching | Full lifecycle |
| Executor | Not applicable | Status updates on existing | Links to source issues | Recorded |
| Analyst | Optional (if scored) | Created from recommendations | Partial | Recorded |
| Generator | Not applicable | Created if generation fails | Links to produced artifacts | Recorded |
| Explorer | Not applicable | Created from observations | Auto-collected | Recorded |
| Forecaster | Optional (if scored) | Created from predictions | Partial | Recorded |
All six types produce output that can be recorded as a run. The difference is how much of that output maps to the tracker's structured data model versus remaining as narrative text.
Type Maturity
The six types were introduced across different ADL versions, reflecting their maturity:
| Type | Introduced | Registry Count | Tracker Runs | Maturity |
|---|---|---|---|---|
| Validator | v1.0.0 | 30+ | 1,000+ | Production — the core of UluOps |
| Executor | v1.0.0 | 0 | 0 | Specified — schema complete, no agents yet |
| Analyst | v1.6.0 | 20+ | 40+ | Production — philosophical + specialized |
| Generator | v1.6.0 | 2 | — | Early — adl-generator and prompt-creator |
| Explorer | v1.8.0 | 8+ | — | Production — philosophical + deep-explore |
| Forecaster | v1.9.0 | 12+ | 10+ | Production — temporal + causal + adoption |
Registry counts from list_definitions, tracker runs from get_analytics({ metric: "agent_performance" }). Generators and explorers don't produce scored runs tracked in the standard pipeline. As of March 2026, 217+ total definitions are published across all types (agents, commands, workflows, pipelines).