Модуль 6
Грабли, токены, безопасность
Шесть повторяющихся проблем из практики команд и приём на каждую: сессии и контекст, счёт за reasoning, MCP-зоопарк, секреты в .env, непрочитанные диффы.
Чему научишься
- разобрать шесть типовых проблем в формате «симптом → приём»
- применить /new, /compact, @файл и F2 к своим сессиям
- закрыть .env правилами permissions
- отклонять сомнительные правки до выбора always
Команды, которые работают с агентами по несколько месяцев, наступают на одни и те же грабли. Внутренний опрос таких команд дал шесть повторяющихся проблем: разросшиеся сессии, устаревший AGENTS.md, счёт за reasoning, MCP-зоопарк, секреты в контексте, правки, применённые без чтения.
Каждую проблему разбираем парой «симптом → приём». По симптому узнаёшь ситуацию у себя, приём применяешь в текущей сессии orders-api. Начни с честного ответа: сколько задач уже побывало в твоей рабочей сессии.
Сессия тормозит и дорожает
Симптом: сессия живёт второй день, в ней побывали баг отрицательного количества из модуля 2, скидки из модуля 5 и половина README. Каждый новый вопрос уносит всю историю в запрос: ответы замедляются, счёт растёт, агент смешивает условия разных задач.
Приём: одна задача, одна сессия. Закончил задачу, открыл /new. Контекст из старой ещё нужен, сожми его /compact: агент заменит историю выжимкой и продолжит быстрее и дешевле.
/new # новая сессия под новую задачу
/compact # сжать историю текущей сессии до выжимки
# Ctrl+O: список недавних сессийАгент не видит новый файл
Симптом: ты добавил src/services/payments.ts, просишь дописать к нему тест, а агент правит старый модуль или спрашивает, где новый файл лежит. Частая причина рядом: раздела про этот сервис в AGENTS.md нет, либо структура в файле устарела после рефакторинга.
Приём: отдай файл явно через @, тогда агент прочитает его до ответа; диапазон строк задаётся решёткой. Затем сверь AGENTS.md с кодом: /init пересоберёт черновик по текущей базе, остальное допиши руками по инструкциям.
Допиши тест к @src/services/payments.ts
# диапазон строк, когда нужен кусок файла
Где валидация количества: @src/routes/orders.ts#20-45Счёт растёт на рутине
Симптом: вечер переименований и обновления двух README оплачен как рефакторинг архитектуры. Причина в варианте reasoning: #high размышляет над каждым шагом, и эти рассуждения тарифицируются как токены. Рутине такая глубина рассуждений ничего не добавляет.
Приём: вариант reasoning под задачу. F2 открывает недавние модели, вариант дописывается решёткой к идентификатору модели, например openai/gpt-5.2#low. Чистую рутину отправляй на бесплатную модель OpenCode (список смотри в /models): переименования и форматирование ей по силам, счёт за них не растёт.
# F2: недавние модели, у каждой варианты reasoning
openai/gpt-5.2#low # рутина: переименования, README, форматирование
openai/gpt-5.2#high # сложное: расследование бага, план рефакторингаMCP-зоопарк в конфиге
Симптом: за месяц подключились Context7, Playwright, корпоративный трекер и пара серверов «на будущее». Каждый MCP-сервер приносит свои инструменты в контекст каждого запроса, даже когда задача про код заказов. Ответы дорожают, агент путается в похожих инструментах.
Приём: раз в месяц аудит /mcps. У сервера нет текущих задач, отключай его в opencode.jsonc полем enabled: false; вернёшь тем же полем, когда сервер понадобится.
/mcps # подключённые серверы и их инструменты
opencode mcp list # тот же список из терминалаАгент лезет в .env
Симптом: агенту нужна переменная окружения, и он предлагает записать значение в .env или прочитать файл целиком. Токен попадает в контекст сессии и остаётся там: уходит в /compact, в логи, в следующий вопрос.
Приём: в OpenCode v2 чтение *.env и *.env.* уже по умолчанию спрашивает разрешение, *.env.example свободен. Закрепи защиту в opencode.jsonc: правку .env запрети, секреты вноси руками, агенту оставь чтение из process.env.
{
"permissions": [
// чтение *.env в v2 уже ask; запрещаем правку
{ "action": "edit", "resource": "*.env", "effect": "deny" },
{ "action": "edit", "resource": "*.env.*", "effect": "deny" }
]
}Вынеси токен эквайринга в .env, вот он: sk_test_51Kf9. И не спрашивай каждый раз про .env.
Задача понятна: создать .env с ACQUIRING_TOKEN=sk_test_51Kf9, подключить чтение в src/index.ts и добавить .env в .gitignore. Правка .env требует разрешения: once / always / reject.
build запрашивает разрешение: edit .env (для *.env по умолчанию действует ask)
Reject. Токен внесу в .env сам. Сделай остальное: плейсхолдер в .env.example и чтение через process.env в src/index.ts.
Принято. Создал .env.example со строкой ACQUIRING_TOKEN=<подставь свой токен>, в src/index.ts добавил чтение process.env.ACQUIRING_TOKEN с понятной ошибкой при отсутствии переменной. Файл .env не создавал.
Слепое доверие диффам
Симптом: третья правка за минуту, кнопка always нажимается уже без чтения, и удалённая проверка количества обнаруживается на красном CI. В опросе команд слепое доверие диффам назвали самой дорогой привычкой из шести проблем.
Приём: дифф читается до выбора. Правка непонятна, жми reject и спроси, что она делает. Лишнее уже применилось, откатит /undo: команда отменяет сообщение и все его изменения файлов. Отдельно проверяй правки вне задачи: рефакторинг рядом, переформатирование, удаление проверок. Потренируйся на текущей сессии: открой последний применённый дифф и найди строку, которую не запрашивал.
Аудит своей работы
/newopencode mcp list/init{ "action": "shell", "resource": "git push *", "effect": "deny" }F2 → вариант #low
Отмечено 0 из 6
Проверь себя
Вопрос 1 из 5
Шпаргалка модуля
Контекст
- /new
- новая сессия на новую задачу
- /compact
- сжать историю сессии до выжимки
- Ctrl+O
- вернуться к недавней сессии
- @файл
- файл или диапазон @src/app.ts#20-45 в промпт
Деньги
- F2
- недавние модели и варианты reasoning, для рутины #low
- /models
- выбор модели, бесплатные модели OpenCode
Безопасность
- /mcps
- аудит подключённых MCP-серверов
- /undo
- откат сообщения и его правок
- *.env
- чтение ask по умолчанию v2, правку закрой deny