Глава 02

Анатомия проекта

Чтобы понять, как должен выглядеть хороший OpenCode setup, полезно смотреть не на искусственные примеры, а на реальный репозиторий. В этой главе разбирается github.com/ivanshamaev/ai-agent-codex и объясняется роль каждого OpenCode-слоя.

OpenCode-слой в репозитории-примере

ai-agent-codex/
├─ AGENTS.md
├─ opencode.json
├─ docs/
│  └─ specs/
│     ├─ hh-market-interfaces.md
│     └─ hh-vacancies-pipeline.md
└─ .opencode/
   ├─ agents/
   │  ├─ backend-engineer.md
   │  ├─ data-analyst.md
   │  ├─ data-engineer.md
   │  ├─ frontend-engineer.md
   │  ├─ infrastructure-engineer.md
   │  ├─ project-manager.md
   │  └─ system-analyst.md
   └─ skills/
      ├─ airflow-dag-design/SKILL.md
      ├─ dbt-modeling/SKILL.md
      ├─ docker-compose-local/SKILL.md
      ├─ fastapi-async-api/SKILL.md
      ├─ metric-design/SKILL.md
      ├─ python-etl/SKILL.md
      ├─ realtime-analytics-api/SKILL.md
      └─ requirements-spec/SKILL.md

Важно видеть, что это не «магическая папка OpenCode», а набор обычных репозиторных артефактов. Сила не в скрытой механике, а в том, как эти файлы связаны между собой.

Слой 1. AGENTS.md

Согласно документации Rules, AGENTS.md — это проектный instruction file. В репозитории-примере он выполняет очень важную роль: объясняет агенту, что это за система, какие слои считаются правильными, как организован код и какую роль играют docs/specs, .opencode/agents и .opencode/skills.

Хорошо, что этот файл не ограничивается общими лозунгами. В нем зафиксированы цели проекта, priorities, expected repository structure, architecture rules, role routing и delivery workflow. Именно такой формат делает его useful, а не декоративным.

## Expected Repository Structure
- `dags/` Airflow DAG definitions only.
- `src/` Shared Python code used by DAGs and data pipelines.
- `docs/specs/` short functional and technical specs.
- `.opencode/agents/` role-based subagents.
- `.opencode/skills/` reusable domain skills.

Почему это хороший пример

AGENTS.md в этом проекте объясняет не просто «пишите хороший код», а конкретно описывает устройство репозитория и то, как агент должен маршрутизировать работу. Это и есть признак сильного project contract.

Слой 2. opencode.json

Следующий слой — проектный control plane. В примере через opencode.json подключаются инструкции из AGENTS.md и docs/specs/*.md, задаются ограничения на использование skills и настраиваются permissions для встроенных primary agents.

{
  "$schema": "https://opencode.ai/config.json",
  "instructions": [
    "AGENTS.md",
    "docs/specs/*.md"
  ],
  "permission": {
    "skill": {
      "*": "deny",
      "requirements-spec": "allow",
      "dbt-modeling": "allow"
    }
  }
}

Это важно, потому что агент получает не только доступ к файлам, но и правила о том, какие модули знаний ему вообще доступны и какие инструкции нужно учитывать всегда.

Слой 3. docs/specs/

Очень сильная часть архитектуры примера — наличие docs/specs как отдельного durable слоя. В этой папке лежат не «заметки для человека», а реальные спецификации, которые агент читает через instructions. Это кардинально уменьшает количество догадок.

Файл Что описывает Чем помогает агенту
hh-vacancies-pipeline.md Source scope, pipeline flow, deduplication, raw fields, acceptance criteria. Помогает data-oriented агентам понимать, как устроен ingestion и какие поля/контракты обязательны.
hh-market-interfaces.md Product intent, interface surfaces, realtime semantics. Даёт API и frontend-агентам понимание продуктовой цели, а не только текущего кода.

Слой 4. .opencode/agents/

Здесь лежат project-specific subagents. И это один из лучших элементов примера, потому что роли названы на языке реальной команды: data-engineer, backend-engineer, frontend-engineer, project-manager, system-analyst.

Такой подход лучше абстрактного «универсального помощника», потому что каждый subagent получает четкую рабочую область, собственный prompt и, при необходимости, отдельные permission overrides.

---
description: Implements ingestion, SQL, Airflow DAGs, dbt models, and Python ETL components for the data platform.
mode: subagent
temperature: 0.1
steps: 12
permission:
  bash:
    "*": allow
    "git push*": ask
---

Здесь видно, что subagent — это не просто название. У него уже есть operational framing: что именно он делает, насколько творчески мыслит, сколько шагов ему допустимо сделать и какие bash-команды стоит дополнительно контролировать.

Слой 5. .opencode/skills/

Skills в OpenCode — это on-demand knowledge modules. В примере они вынесены по доменным областям: от requirements-spec и delivery-planning до python-etl, dbt-modeling и realtime-analytics-api. Это позволяет не раздувать базовый контекст и не держать всю экспертизу в одном giant prompt.

---
name: requirements-spec
description: Produce concise implementation-ready requirements, assumptions, field mappings, and acceptance criteria.
compatibility: opencode
---
## What I do
- Capture business goal and scope.
- Define inputs, outputs, and grain.
- Document source-to-target mapping.

Как эти слои работают вместе

Правила

AGENTS.md

Объясняет, как мыслить о проекте, что считается правильной структурой и какие роли существуют.

Механика

opencode.json

Определяет, какие инструкции загружать и какие действия, skills и subagents доступны.

Намерение

docs/specs

Хранит то, что код сам по себе не всегда способен точно выразить: цели, контракты и acceptance criteria.

Исполнение

.opencode/agents

Раскладывает работу по ролям и уменьшает смешивание ответственности в одном общем чате.

Экспертиза

.opencode/skills

Даёт проекту domain playbooks, которые можно подгружать тогда, когда они действительно нужны.

Результат

Предсказуемый OpenCode

Агент действует не на интуиции, а внутри понятной проектной операционной модели.