# Subagents The fourteen files in `.claude/agents/` are Claude Code **project subagents**. Each is a Markdown file with YAML frontmatter (`name`, `description`, `tools`, `model`) and a body that is the subagent's full system prompt. Twelve are single-dimension **maintainers**: each enforces exactly one quality dimension and nothing else, and each carries the same accuracy doctrine: confirm every finding against the source, actively disprove false positives, cross-reference every consumer before changing anything, and never reduce functionality to satisfy a rule. The remaining two are the constructive `feature-builder` and the live-API `DevPlace` operator. ## The fleet These ten maintainers are the orchestrated fleet that `/maintenance` and the `/fleet` workflow run across every quality dimension, in canonical order. | Subagent | Dimension | |----------|-----------| | `security-maintainer` | Authorization on every route, private-resource gating, read-only file guards, input validation, XSS controls. | | `audit-maintainer` | Every state-changing action emits an audit record; denials and failures carry the right result; the event catalogue is complete. | | `devii-maintainer` | The Devii assistant can do everything a role allows over REST, and exposes only the tools that role may call. | | `docs-maintainer` | The root and nested CLAUDE.md files, README, the API docs, and the prose pages agree with the source, with correct role gating. | | `fanout-maintainer` | A feature is wired through every layer: form model, output schema, response, Devii tool, API docs, SEO, docs. | | `dry-maintainer` | Shared helpers are reused instead of duplicated logic re-implemented. | | `style-maintainer` | Naming, headers, typing, and formatting follow the project rules, applied with context so intentional patterns are left alone. | | `frontend-maintainer` | ES6 modules, custom components, and CSS follow the project's strict structure. | | `seo-maintainer` | Public pages carry the right search metadata and appear in the sitemap. | | `test-maintainer` | Routes without an integration test get one written. It never runs the suite. | ## Additional maintainers Two more single-dimension maintainers live in `.claude/agents/` but are invoked on their own rather than as part of the orchestrated fleet run. | Subagent | Dimension | |----------|-----------| | `background-maintainer` | Every non-response-critical side-effect (audit, XP and rewards, notifications, mention and admin fan-out) is deferred through the in-process background queue at the right choke point, response-critical work and cache invalidation stay inline, and external or async work uses a JobService. | | `locust-maintainer` | Every load-testable route has a weighted `locustfile.py` task, the file compiles clean, and routes that must not be load tested stay excluded. It edits the locustfile but never runs a load test. | ## Non-maintainer agents The last two subagents are not reviewers. | Subagent | Role | |----------|------| | `feature-builder` | The constructive counterpart to the maintainers: it researches the task, then writes a new feature or extends an existing one across the full fan-out (data layer, server, view, agent, docs, SEO, tests), and reports what must be restarted to go live. | | `DevPlace` | A live API operator for the DevPlace instance at pravda.education: it reads the running OpenAPI schema and carries out a given task by calling that API, cleaning up its temporary files when done. | ## Modes Each subagent operates in one of two modes, chosen by how it is invoked. - **Report** (default): record findings only, change nothing. - **Fix**: apply a minimal root-cause fix per the doctrine, then run the project validator (`hawk .`) and confirm the build still imports. A subagent never runs the test suite and never performs a git write. ## Invoking a subagent Mention the subagent by its `name`, or let Claude delegate to it automatically based on its `description`: ``` @agent-security-maintainer check every POST in routers/ has a guard @agent-docs-maintainer report doc drift in the issues router (report only) ``` Each subagent's `model` is set to `inherit`, so it runs on the model the session is using. To run the whole fleet at once, use the [`/maintenance` command or the `/fleet` workflow](/docs/claude-workflows.html).