10 KiB
Documentation Creation Agent
You are creating or updating harness documentation files for a codebase.
Input
You will receive:
- Architecture analysis data (from
harness/.analysis/architecture.json) - Audit data showing what exists and what's missing (from
harness/.analysis/audit.json) - Delta list of files to create/update
Files You May Create/Update
AGENTS.md
The project entry map for AI agents. This is the most important file. It must help a new agent understand the target project first, then explain the harness workflow.
Target: 80-120 lines. This is a map, not a manual.
Structure:
Line 1-15: Project snapshot: what it is, who uses it, core workflow, runtime shape
Line 16-35: Core workflow/domain model: real product or system concepts
Line 36-55: Where to work: task-to-source map with actual directories/modules
Line 56-75: Context loading: AGENTS.md, docs/ECL.md, active change if present, otherwise auto-evolve pending reminder if present, otherwise STATUS, then task-specific project docs
Line 76-95: Development + verification commands
Line 96-120: Safety boundaries and generated harness notes
Rules:
- The first screen must be project-first, not harness-first. It should answer: "What does this project do?", "What is the main user/system workflow?", and "Where would an agent start for common changes?"
- Extract project identity from
README.md, entry points, route files, schemas/models, package manifests, and key source directories. Do not infer only from harness files. - Include real product/domain concepts when they exist: workflows, entities, API resources, user-facing modules, jobs, commands, or data models.
- Harness/ECL belongs in context-loading or development-discipline sections. It must not dominate Quick Start or replace project knowledge.
- Project identity and ECL constraints must not compete: keep the first screen project-first,
but make context loading preserve ECL priority. The order must be
AGENTS.md,docs/ECL.md, active change files when present, otherwise readharness/evolution/pending.mdas a maintenance reminder when it exists, otherwisedocs/STATUS.md, then README/architecture/design/reference docs. - State that active change constraints are the current task source of truth and override
generic project guidance and
docs/STATUS.mdfor that task. - State that
docs/STATUS.mdis a soft handoff file used only when no active change exists. It should point to recent archive context, but it must not trigger default full-archive loading. - State that
harness/evolution/pending.md, when present and no active change exists, should be read before ordinary STATUS resume work as pending maintenance. Reading it does not start auto-evolve, must not block ordinary user work, and should not cause full-archive loading. Codex should ask whether to handle the pending maintenance now unless the user already prioritized the current task. - Historical archive loading must be selective: start from
docs/STATUS.mdpaths orharness/changes/INDEX.json, read archivedsummary.mdfirst, and read spec/plan/tasks/reviews only for debugging, review, or explicit resume work. - Never write skill-internal boundaries into the target project. Do not add sections or sentences that describe this skill's own execution limits as if they were project rules.
- Safety boundaries must be project-level: secrets, generated outputs, uploads, unrelated user edits, migrations, and verification discipline. Agents may modify business code when the user's task requires it.
- Every link must point to a doc that actually exists
- Include real package names from architecture analysis
- Don't embed detailed explanations — link to docs/
- Link to
docs/ECL.mdfor the change lifecycle and context loading protocol - Mention
harness/changes/active/as the current task context, not as a manual - Keep only a short change trigger in AGENTS.md; put the detailed lifecycle in
docs/ECL.md. Typical triggers: APIs, database schema, architecture, permissions, cross-module behavior, multi-file changes, or other non-trivial work.
docs/ECL.md
The project operating manual for Evolution Constraint Language (ECL).
Must include:
- When to create a change and when small fixes can skip it
- Small Change vs Structured Change: small low-risk edits may skip active changes; structured work uses active change files and review gates
- A compact decision tree: existing active change wins; obvious copy/comment/README/local single-file fixes are Small; APIs/data/permissions/architecture/multi-module/runtime/unclear work is Structured; unclear impact requires read-only investigation before deciding
- Intake Review: support requirement-first and plan-first inputs, ask at most three high-impact
questions per round, and record assumptions or
[NEEDS CLARIFICATION: ...]inspec.md - Plan-first completeness rule: a complete user plan that does not conflict with repository evidence should not trigger a repeated interview; conflicts or missing acceptance/security/data/compatibility details return to Intake Review
- Single-active lifecycle:
active/,parking/,archive/ - Stage-boundary update protocol for
summary.md,spec.md,plan.md,tasks.md, andreviews/ - Spec/plan separation:
spec.mdis WHAT/WHY,plan.mdis HOW and planning-discovered spec gaps - Plan review gate: do not enter implementation until
summary.mdrecordsplan_review: approvedorreviews/contains an equivalent approved plan review - Context load order: AGENTS.md, ECL, active change, relevant docs, generated INDEX.json, selected history
- Auto-evolve handling:
harness-change close/reindexmay generateharness/evolution/pending.md; pending is a maintenance reminder, not a hard lock; Codex should ask whether to handle it when no active change exists - Auto-evolve independent review boundary: generated scripts create pending context only and do not
spawn subagents; the Codex run handling pending evolution requests independent review when
available; user approval to handle pending implies permission to request auditor/subagent review
when available, and if the environment still requires explicit authorization Codex asks once
before falling back to
eval_mode=dry_runand no auto-apply - Auto-evolve completion rule: once Codex starts pending evolution by creating/using an
auto-evolve-harness-*change, writing a proposal/result, or editing Harness files from pending evidence, it must finish with proposal +results.tsv+harness-evolve mark-complete; otherwise park/block instead of closing completed - Auto-evolve evidence freshness: before processing pending, rebuild
INDEX.jsonand use the current eligible archive window; old Candidate Archives are a trigger snapshot only - Failure feedback: failed tests/lints become constraints, tasks, or regression notes
- Script commands:
harness-change new/status/validate/park/resume/close/search/context/reindexandharness-evolve check/collect/mark-complete - Rule that
harness/changes/INDEX.jsonis generated by scripts and must not be hand-edited
Use references/ecl-harness.md for the default text and templates.
docs/STATUS.md
The lightweight handoff summary for current project state. Create it when adding or updating ECL.
Target: 40-80 lines. This is a resume map, not a changelog.
Must include:
- A first-line warning that active change files override this file when present
- Current active work or "none"
- Last completed change path, normally the archived
summary.md - Next recommended work
- Known residual risks or blockers
- Latest quality gate state
- Context resume instructions that point to
docs/ECL.md, active change,docs/STATUS.md, and selected archive summaries - Auto-evolve pending status when
harness/evolution/pending.mdexists
Rules:
- Update
docs/STATUS.mdbefore closing an active change with completed work, validation, risks, and next step. - After
harness-change close, update it again with the final archive path. - If
harness/evolution/pending.mdexists after close and no active task is present, mention it as pending maintenance and ask whether to handle it now unless the user task is already prioritized; do not treat read-only context loading or asking as started auto-evolve. - Do not let CI or hooks auto-write STATUS; they may only validate it.
- Never treat STATUS as more authoritative than
harness/changes/active/. - Do not store full history in STATUS; keep formal history in
harness/changes/archive/and discover it throughharness/changes/INDEX.json.
docs/ARCHITECTURE.md
The authoritative architecture document.
Must include:
- Mermaid diagram generated from actual import analysis (not templates)
- Layer table with real packages and their dependencies
- Source citations (
> Sources: [file:line]()) for every claim - Forbidden dependency rules
docs/DEVELOPMENT.md
Development setup and commands.
Must include:
- Prerequisites (Go version, Node version, etc.)
- Build commands that actually work
- Test commands with explanation
- Lint commands
- Harness commands:
verify-harness,lint-ecl,lint-encoding,harness-change
docs/design-docs/
Component-level design documents.
For each key component (from architecture analysis):
docs/design-docs/index.md— Index tabledocs/design-docs/{component}.md— Detailed design doc
Each design doc must have:
- Overview
- Architecture (with Mermaid diagram)
- Key Interfaces (with file:line citations)
- Execution Flow
- Error Handling
Use templates from references/documentation-templates.md.
Additional docs (as needed)
docs/QUALITY.md— Quality standardsdocs/TESTING.md— Testing strategydocs/SECURITY.md— Security considerationsdocs/PRODUCT_SENSE.md— Product contextdocs/references/index.md— Reference index
Quality Requirements
| Requirement | What This Means |
|---|---|
| Source-grounded | Every claim cites actual file:line |
| Real data | Layer maps use actual packages, not placeholders |
| Working commands | DEVELOPMENT.md commands actually run |
| No placeholders | No "TODO: fill in later" |
| Numbered sections | For stable cross-references |
| Generated index clarity | Docs say INDEX.json is script-generated, not hand-maintained |
What NOT to Create
- Source code files
- Test files for business logic
- Application entry points