Понять обязательную структуру любого агентского файла в ControlFlow. После этой главы вы сможете прочитать новый *.agent.md и моментально найти ответ на любой вопрос о его поведении, правах и контрактах.
P.A.R.T. — это аббревиатура из четырёх обязательных секций агентского файла, идущих в строго фиксированном порядке:
| Буква | Секция | Содержит |
|---|---|---|
| P | Prompt | Миссия, scope, контракты, правила, abstention |
| A | Archive | Continuity, compaction, memory, PreFlect |
| R | Resources | Канонические доки и схемы |
| T | Tools | Allowed/disallowed tools, правила выбора |
Источник: docs/agent-engineering/PART-SPEC.md.
Цитата из спецификации: «Agents must keep this exact order. Missing or reordered sections are non-compliant.»
Несоблюдение порядка приводит к провалу drift-проверки в eval-харнессе (evals/drift-detection.test.mjs).
- Предсказуемость — вы открываете файл и сразу знаете, где искать миссию, где tools, где skills.
- Автоматизация — drift-чекер парсит структуру и валидирует наличие/порядок секций.
- Безопасность — раздел Tools всегда последний, что облегчает аудит привилегий.
- Согласованность с governance — поля frontmatter и секции жёстко связаны с
governance/agent-grants.jsonиgovernance/tool-grants.json.
Сердце агентского файла. Содержит:
- Mission — одно предложение, фиксирующее назначение агента.
- Scope IN / Scope OUT — что агент делает / не делает.
- Deterministic Contracts — ссылки на схемы выхода.
- State Machine (опционально для дирижёров) — диаграмма состояний.
- Planning vs Acting Split — жёсткое правило, нельзя смешивать дизайн и исполнение.
- PreFlect — обязательный pre-action гейт (см. ниже).
- Approval Gate — когда требуется человеческое одобрение.
- Clarification Triggers — когда вызывать
vscode/askQuestions. - Delegation Heuristics (для дирижёров) — кому делегировать.
- Abstention Rule — когда возвращать ABSTAIN вместо угадывания.
- Output Discipline — структурированный текст, не raw JSON.
Политики, обеспечивающие устойчивость агента в долгих сессиях:
- Context Compaction Policy — что сохранять, что отбрасывать при приближении к лимиту контекста.
- Agentic Memory Policy — куда писать (session / task-episodic / repo-persistent).
- State Tracking (для Orchestrator) — какие поля удерживать в памяти.
- Observability Sink — куда сливать gate-events для трассировки.
Список канонических документов и схем, которые агент должен знать:
- Schemas, которые агент эмитирует или читает.
- Governance-доки, релевантные его роли.
- Plan / project context файлы.
- Skills, которые он гарантированно использует.
Этот раздел — не индекс всего репозитория. Только то, что агент использует напрямую.
- Allowed — какие тулзы агенту разрешены.
- Disallowed — что явно запрещено.
- Tool Selection Rules — порядок предпочтения (например, «сначала локальный поиск, потом fetch»).
- External Tool Routing — правила для
web/fetch,vscode/askQuestionsи т.п.
Должен быть синхронизирован с governance/tool-grants.json и governance/agent-grants.json. Drift-чекер ловит расхождения.
Перед секциями P.A.R.T. всегда идёт YAML-frontmatter. Обязательные поля:
---
description: Краткое описание роли агента
agents: [список агентов, к которым этот может делегировать; для не-orchestrator — пустой]
tools: [список MCP-тулз]
model: GPT-5.5 (copilot)
model_role: capable-planner
---description— попадает в UI VS Code Copilot Chat.tools— должен соответствоватьgovernance/tool-grants.jsonдля этого агента.model_role— логическая роль изgovernance/model-routing.json(см. главу 10).model— требуется ТОЛЬКО для закреплённых (pinned) агентов (Orchestrator, Planner, PlanAuditor, AssumptionVerifier); для auto-агентов (по умолчанию) он ОПУСКАЕТСЯ, и модель выбирает picker Copilot. Если поле присутствует, оно должно совпадать сprimaryроли. Пример выше — закреплённый случайcapable-planner; auto-агент опускаетmodel:и оставляет только свойmodel_role:(например,model_role: research-capable).
---
description: Demo agent that does nothing useful
agents: []
tools: [search/codebase, read/file]
model_role: research-capable
---
You are DemoAgent, a minimal example for tutorial purposes.
<!-- DemoAgent — auto-агент (по умолчанию): он опускает `model:`, и модель выбирает picker Copilot. Закреплённый агент вместо этого добавил бы совпадающую строку `model:`, например `model: GPT-5.5 (copilot)` с `model_role: capable-planner`. -->
## Prompt
### Mission
Read a file and return a one-line summary.
### Scope IN
- File reading.
- Single-line summarization.
### Scope OUT
- Writing files.
- Multi-file analysis.
### Abstention Rule
If the file is binary or empty, return ABSTAIN.
### Output Discipline
Return structured text with fields: file_path, summary, status.
## Archive
### Context Compaction Policy
Drop file content after summarization; keep only the summary.
### Agentic Memory Policy
- Session: store the request.
- Task-episodic: not used.
- Repo-persistent: not used.
## Resources
- `schemas/demo.schema.json` (hypothetical)
## Tools
### Allowed
- `search/codebase`
- `read/file`
### Disallowed
- Any write operation.
### Tool Selection Rules
1. Prefer `search/codebase` for finding the file.
2. Use `read/file` only on resolved paths.evals/drift-detection.test.mjs проверяет следующее на каждом агентском файле:
| Проверка | Что ловит |
|---|---|
| Section order | Секции P → A → R → T в правильном порядке. |
| Section presence | Все 4 секции присутствуют. |
| Frontmatter completeness | Поля description, tools, model_role заполнены; model присутствует только у закреплённых агентов и отсутствует у auto-агентов (по умолчанию). |
| Tools sync | tools: frontmatter ↔ governance/tool-grants.json. |
| Schema references | Каждая упомянутая схема существует. |
| PreFlect presence | Каждый агент содержит ссылку на skills/patterns/preflect-core.md. |
Это значит: добавив новый агент или поменяв старый, всегда запускайте cd evals && npm test.
Заметьте: раздел Resources не загружается в контекст автоматически. Агент сам решает, какой документ прочитать в нужный момент через read/file. Это существенно экономит контекст-бюджет.
Аналогично — schema из Resources цитируется как контракт, но не подгружается целиком в каждый запрос. Агент знает, что такой-то контракт существует, и читает его по необходимости.
- Перепутать порядок (например, Resources перед Archive) → drift fail.
- Забыть PreFlect-ссылку → нарушение skills/patterns/preflect-core.md.
- Описать tool в
tools:frontmatter, но не зарегистрировать вgovernance/tool-grants.json→ desync. - Раздуть Resources списком всего репозитория → пустая трата токенов; держите минимум.
- Дублировать каноническую спеку в Archive вместо ссылки → расхождение при изменениях.
- (новичок) Откройте
Researcher-subagent.agent.md. Найдите границы каждой из 4 секций. Запишите номера строк. - (новичок) Найдите в
Orchestrator.agent.mdразделState Machine. В какой секции он находится? - (средний) Откройте
governance/tool-grants.jsonи сравнитеResearcher-subagentс frontmatter-полемtoolsвResearcher-subagent.agent.md. Совпадает? - (средний) Прочитайте docs/agent-engineering/PART-SPEC.md → раздел «Compliance Checklist». Сколько пунктов?
- (продвинутый) Создайте на бумаге заглушку нового агента «LinkChecker-subagent», который проверяет ссылки в Markdown. Какие тулзы ему нужны? Какие схемы? Какой PreFlect-риск-класс важнее всего?
- Расшифруйте P.A.R.T. и приведите порядок секций.
- Что произойдёт, если вы поменяете местами Archive и Resources?
- Где описан обязательный pre-action гейт PreFlect?
- Почему Resources — короткий список, а не полный индекс репозитория?
- Какой файл governance синхронизирован с frontmatter-полем
tools?