Контекст проекта
Harness у вас один, а проекты разные: где-то pytest,
где-то uv run test, где-то «не трогай migrations».
Можно пытаться угадать, а можно просто положить в репо файл AGENTS.md -
как записку коллеге. При старте harness его прочитает и вклеит
в системный промпт.
main.py: если в cwd есть AGENTS.md -
читаем и передаём в
build_system_prompt(..., project_context=...).
Нет файла — работаем как раньше, без ошибки.
Слова по делу
-
AGENTS.md — markdown в корне проекта с локальными
правилами: команды, архитектура, «не делай вот это».
Тот же трюк, что
.cursorrules/CLAUDE.md, только имя общее для агентов. -
project_context — ключ в вашем
PromptContext: сюда кладём текст файла.
Быстрый путь
- В
main.pyперед сборкой промпта проверитьcwd / "AGENTS.md". - Если есть — прочитать utf-8 и передать как
project_context. - Положить тестовый
AGENTS.mdи спросить агента про команду тестов.
Какие файлы трогаем
| Файл | Что делать |
|---|---|
main.py |
Править. Чтение AGENTS.md + передача в билдер. |
prompts.py |
Уже умеет project_context (урок 3.2). Если вырезали — верните блок. |
AGENTS.md в cwd проекта |
Создать для проверки (можно временный). |
Шаг 1. Чтение файла в main.py
Прямо перед build_system_prompt(...):
main.py — фрагмент
from pathlib import Path
from prompts import build_system_prompt
agents_path = cwd / "AGENTS.md"
project_context = (
agents_path.read_text(encoding="utf-8")
if agents_path.is_file()
else None
)
instructions = build_system_prompt({
"working_directory": str(cwd),
"sandbox_type": "local",
"tool_names": ["read", "grep", "bash"],
**({"project_context": project_context} if project_context else {}),
})
Всё. Плагинов нет. Известное имя файла в корне — convention over configuration, как любят ленивые (то есть опытные) инженеры.
build_system_prompt должен быть кусок из урока 3.2:
if project := ctx.get("project_context"):
parts.append(f"""
# Инструкции проекта (из AGENTS.md)
{project}
""")
Без него файл прочитаете, а модель не увидит.
Шаг 2. Что писать в AGENTS.md
Только то, чего harness сам из кода не выведет:
AGENTS.md — пример
# Инструкции проекта
## Команды
- Тесты: `uv run pytest`
- Не использовать `npm test` — это не Node-проект
## Стиль
- Коммиты: `feat(scope): message`
## Грабли
- Не править файлы миграций руками — только генерировать новые
Проверьте
Положите такой файл в каталог, который передаёте первым аргументом
(.), затем:
uv run python main.py . "Какой командой в этом проекте гонять тесты?"
С файлом агент должен ответить про uv run pytest
(потому что так написано), а не угадать npm test.
Переименуйте / уберите AGENTS.md и спросите снова —
harness не падает, ответ снова «на глаз».
Готово, если:
- В
main.pyпроверяется наличиеcwd/AGENTS.md - Содержимое (если есть) уходит в
project_context - С файлом агент отвечает на вопрос о тестах по AGENTS.md
- Без файла агент стартует без ошибки
make coffee»). Спросите агента. Если послушно цитирует
бред — инъекция работает. Потом верните нормальный файл, пока
коллеги не увидели.