- Зачем: прокси из окружения запуска до API не доходил. Запросы Codex
отправляет общий демон app-server, и маршрут зависел от того, кто запустил
демон первым. Нужно было и обратное: Codex и Claude должны работать без
прокси, даже если запускающее приложение его задало.
- Что: шаблоны codex/proxy.env (копируется в ~/.codex/.env) и
claude/proxy-settings.json (блок env добавляется в ~/.claude/settings.json).
По умолчанию прокси 127.0.0.1:12334. install.sh не трогает выбор, уже
сделанный на машине. В README описано, как переключить машину на работу
без прокси.
- Проверка: tests/test_install.sh и tests/test_proxy_env_sync.py проходят.
Вручную: значения из ~/.codex/.env и из env в настройках Claude перекрывают
унаследованные переменные; codex doctor проходит через Xray; очищенные
адреса вместе с NO_PROXY=* дают прямое подключение.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- удалён каталог coordinator-loop, adversarial-review убран из .gitignore
- из claude-subagent-playbook убраны ссылки на оба скилла
- chief-of-staff и pr от Matt Pocock добавлены в .gitignore
- в AGENTS.md добавлено правило удаления устаревших скиллов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ключ Context7 подставляется через {env:...}: с ${env:...} в заголовок
уходил лишний $
- убраны устаревшие в V2 разрешения write и patch, их покрывает edit
- удалён слишком широкий шаблон *shadow*
- в permission-reviewer.md отмечено, что система отключена
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Зачем: профиль XHTTP с x_padding_bytes и пустым host не запускался.
Что: Xray обновлён до 26.10.10; добавлены параметры TLS, REALITY и XHTTP,
значения по умолчанию и преобразование старых названий сессии XHTTP.
Обновлены документация и регрессионные тесты.
Проверка: 59 тестов на Python 3.14 и 3.8, Bash-функции и установщик;
16 тестов разбора после уточнения проверки SHA-256. Настоящий Xray
проверил конфигурацию и выполнил HTTPS-запрос через профиль с HTTP 200.
Пользователь подтвердил работу proxy-client start.
Плагин настроен и проверен (jev через Zen + прокси, enforce+deny),
но признан не стоящим использования: хрупкая цепочка, нервные
эскалации, запертая сессия. Запись в opencode.json отключена
(закомментирована), выводы — в docs/research/.
У glm-5.3-flash в подписке opencode-go лимиты в 4 раза выше, чем у
deepseek-v4.1-flash, при сравнимом интеллекте. outputFormat json_schema:
модель поддерживает structured output (по models.dev).
escalationReviewer ссылался на deepseek/deepseek-flash - такого провайдера
нет, каждая эскалация Jev падала с 'Reviewer model is unavailable'.
Заменено на opencode-go/deepseek-v4.1-flash (подписка, в 2 раза дешевле
Zen): outputFormat text (у модели нет json_schema), variant high
(none не поддерживается, есть только low/high/max).
Профили дублировали работу permission-reviewer статическими списками:
их deny обходили ревьюер и давали отказы без причины (git push). Теперь
решения об ask принимает плагин; статикой оставлены только deny на чтение
секретов - детерминированная гарантия, LLM-ревьюеру не доверяем.
- opencode.json: default_agent -> build, убраны статические списки
и deny на git push (решение за ревьюером)
- permission-reviewer.jsonc: actorProfiles переключены на встроенные
build/plan
- install.sh: блок линковки agents заменён чисткой старого симлинка;
добавлено копирование permission-reviewer.jsonc в ~/.config/opencode
(плагин читает его только оттуда - раньше тюнинг не применялся)
- тесты: проверка чистки симлинка и копирования конфига ревьюера
- Зачем: Jev (System One) решает за ~0.6 с против 4 с у чат-модели,
но на тонком контексте занижает confidence (0.6 < 0.7) и эскалировал
даже тривиальные команды.
- Что: model=opencode/jev-1.13-free (ключ OPENCODE_API_KEY из
~/.env.secrets, нужен export); escalationReviewer=deepseek/deepseek-flash
для неуверенных решений; actorProfiles для safe-build/safe-plan.
- Проверка: прогон printf → allow (low, 0.97), аудит пишется;
fail-closed при отсутствии ключа подтверждён (эскалация, не allow).
- Зачем: allow-правило "cat *" в safe-агентах пропускало чтение
~/.ssh/*, ~/.env.secrets и подобного без ask, мимо ревьюера.
- Что: deny-паттерны на .ssh, id_rsa/id_ed25519, .pem, shadow, .env*,
*.secrets*, .netrc в safe-build и safe-plan; .env.example оставлен allow.
Префиксные паттерны — заслон от буквальных случаев; обход через
интерпретаторы остаётся на ревьюере (он видит содержимое скриптов).
- Проверка: прогон cat ~/.ssh/config → Permission denied до выполнения,
содержимое в вывод не попало.
- Зачем: ключ Zen нужен ревьюеру разрешений Jev в окружении процесса
opencode; ZAI больше не используется.
- Что: добавлен закомментированный export OPENCODE_API_KEY с пояснением;
убран ZAI_API_KEY; зафиксировано комментирование CONTEXT7_API_KEY
из рабочего дерева.
- Проверка: ещё не выполнена; ключ появится после заведения в Zen.
- Зачем: плагин читает конфиг с O_NOFOLLOW и молча игнорирует симлинк
(проверено doctor: со слинкованным файлом применяются дефолты).
- Что: добавлен .stow-local-ignore; файл деплоится копией в
~/.config/opencode/, репозиторий остаётся источником истины.
- Проверка: doctor видит файл и применяет model=deepseek/deepseek-flash.
Хранилище задач переведено с локальных файлов в .scratch/ на Gitea Issues.
Состояния triage стали метками Gitea. Оставшиеся английские заголовки
и термины в документах для агентов переведены на русский.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Рабочие заметки агентов больше не коммитятся и не удаляются перед
слиянием: каталог живёт на машине. Долговечное по-прежнему выносится
в docs/ до слияния.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- state.json снова хранит адрес и порт: при смене конфига у работающего
Xray status/env/run отказывают и советуют перезапустить start.
- Ошибки разбора ссылки называют файл профиля.
- Тесты: отказ start при чужой версии Xray, ключи REALITY не попадают
в вывод, Xray узнаётся после замены файла; машинный конфиг проверяется
через CLI; тест пути по умолчанию не зависит от доступности Hiddify.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Спецификация 603 → 220 строк: без описаний снятых защит и без пересказа
кода и README; остались задача, границы, решения с причинами и риски.
В README раздел «Изменение кода» ведёт к спецификации и тестам.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Проверка «тот ли процесс»: /proc/PID/exe для Xray и cmdline для
супервизора вместо boot_id, времени старта и разбора argv; нет больше
состояния «не удалось подтвердить, удалите файлы вручную».
- Установка Xray: SHA-256 и атомарная замена остаются; без ограничений
размера, строгого разбора .dgst и блокировки на время установки.
- Разбор ссылки: extra — обычный json.loads; allowInsecure/insecure
игнорируются с предупреждением.
- Ошибки о файлах называют полный путь и готовую команду
(chmod 600 для профиля, rm для битого state.json).
- Тесты: разбор ссылок — табличные без запуска процессов, по одному
запуску на сценарий управляемого Xray; без подмены внутренних функций.
Код 1569 → 925 строк, тесты 2479 → 895, прогон 63 → 9 с.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- install.sh ставит три прямые ссылки без Stow; чужие файлы не трогает
и перечисляет все конфликты сразу; ~/.local и ~/.config могут быть
ссылками; блок в ~/.bashrc дописывается, если нет маркера.
- proxy_on читает вывод proxy-client env без временного файла.
- Тесты Bash-функций работают через поддельный PROXY_CLIENT_BIN.
- test_proxy_client_full.sh запускает только тесты proxy-client,
прогон под Python 3.8 — если есть uv.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Проверка порта перед запуском открывала сокет без SO_REUSEADDR и
отказывала, пока на порту доживали закрытые соединения Xray (TIME_WAIT),
хотя сам Xray запустился бы. Живой слушатель флаг на Linux не обходит,
так что занятый порт по-прежнему обнаруживается.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Новые ссылки Hiddify пишут «/» перед параметрами, используют
VLESS-шифрование mlkem768x25519plus и flow=xtls-rprx-vision поверх XHTTP.
Разбор принимает эти ссылки; прежние форматы работают как раньше.
Vision поверх XHTTP разрешён только вместе с шифрованием.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Зачем: Claude Code с v2.1.273 при старте сессии скачивает скиллы аккаунта
claude.ai в ~/.claude/skills/synced/; ~/.claude/skills — симлинк на
agents/.agents/skills, поэтому кэш попадал в репозиторий как
неотслеживаемый каталог.
- Что: agents/.agents/skills/synced/ добавлен в .gitignore.
- Проверка: git status после правки чистый, кроме самого .gitignore.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем: не было скилла про содержание описания PR — только gh-команды
в github. Формат humanlayer/visual-pr совпадает с принятой структурой
коммитов «Зачем / Что / Проверка» и опирается на уже установленный show-me.
- Что: адаптированная копия humanlayer/skills visual-pr. Убраны привязки
к платформе HumanLayer (.humanlayer/tasks, permalink из хука), дубль
show-me заменён ссылкой на установленный скилл, финальный отчёт свёрнут
в одну строку. Скилл хостинг-независимый (glab, tea, gh), ручной вызов
через disable-model-invocation, язык описания — по истории коммитов.
Шаблон references/pr_description_template.md — без изменений.
В .skill-lock.json не добавлен, чтобы npx skills update не перезатёр
правки.
- Проверка: SKILL.md вычитан по правилам writing-for-agents (кэш --help
и дубли шаблона убраны); ссылка ../show-me/SKILL.md резолвится через
~/.claude/skills. Прогон на реальном PR ещё не выполнен.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем: плагин больше не используется, а в OpenCode 2 он не грузится (V1-формат) и даёт ошибку на старте.
- Что: из opencode.json удалена опция plugin с репозиторием obra/superpowers.
- Проверка: opencode plugin list больше не показывает superpowers; JSON валиден; V1 и V2 читают конфиг как раньше.
- Зачем: новому агенту нужна точка продолжения работы без пересказа существующих артефактов.
- Что: навык переименован в session-handoff; уточнены содержание записки и выбор пути, сохранён вызов из других навыков.
- Проверка: YAML и git diff --check пройдены; quick_validate.py отклоняет сохранённые поля argument-hint и disable-model-invocation.
- Зачем: сохранён общий стиль сообщений без избыточных ограничений для модели.
- Что: тело стало гибким, уточнены условия вызова и требования к amend; убраны повторения и пошаговые инструкции.
- Проверка: quick_validate.py и git diff --check пройдены.
- Зачем:
- retro входит в набор Matt Pocock и не должен храниться в этом репозитории.
- Что:
- в agents/.agents/skills/.gitignore добавлен retro/.
- Проверка:
- git status не показывает agents/.agents/skills/retro/.
- Зачем:
- после прерывания или сжатия контекста нужна возможность продолжить работу в новой сессии.
- Что:
- создан agents/.agents/skills/session-state-handoff/SKILL.md.
- скилл формирует документ-передачу и список скиллов для следующей сессии.
- Проверка:
- вызвать скилл session-state-handoff и проверить созданный документ.
- Зачем:
- Профили на пути установки Codex ломались после переустановки, а прежние проверки могли давать ложный успех.
- Что:
- Штатный профиль системного bwrap выбран основным способом настройки; исторические обходы ограничены подтверждёнными случаями.
- Уточнены диагностика, переход со старых профилей и проверки режимов и границ записи.
- Обновлены связанные инструкции и записан результат применения на Ubuntu 24.04.4 с Codex 0.154.0.
- Проверка:
- Пройдены quick_validate, проверка ссылок, синтаксиса Bash и git diff --check.
- Штатный профиль применён; старые профили выгружены. Оба режима и запреты записи проверены из процесса unconfined; подтверждены метки AppArmor у bwrap и дочерней команды.
- Зачем:
- продолжение треда не должно получать неподходящие модель и effort из конфига.
- Что:
- добавлено предупреждение явно указывать модель и effort при resume.
- Проверка:
- git diff --cached --check.
- Зачем:
- уточнены границы ответственности координатора и правила работы с effort.
- Что:
- добавлено принятие результата как обязанность координатора.
- уточнена рекомендация по смене effort внутри треда.
- сохранены выводы из прогона t2-ml-forecast.
- Проверка:
- git diff --check.
- Зачем:
- уточнены роли моделей и подход к их выбору в конвейере субагентов.
- Что:
- добавлена матрица цены, интеллекта, вкуса и качества текста.
- Terra назначена отправной точкой для технических задач.
- дополнены наблюдения о ревью и длительных сессиях Claude.
- Проверка:
- git diff --cached --check.
- Зачем:
- при делегировании нужно учитывать стоимость модели и явно задавать effort.
- Что:
- добавлена памятка о соотношении стоимости Astra, Sol, Terra и Luna.
- добавлено требование явно указывать уровень effort в поручении.
- Проверка:
- git diff --check.
- Зачем:
- устранено противоречивое разделение ролей в инструкции сопровождения субагентов.
- Что:
- закреплено использование одной Luna для механических работ и внешней линии.
- убраны устаревшие указания об отдельном помощнике и свободной роли.
- Проверка:
- git diff --check.
- Зачем:
- снизить стоимость внешнего сопровождения ревью без потери его роли.
- Что:
- указано, что отдельная Luna с effort medium для внешней линии очень предпочтительна.
- Проверка:
- git diff --check.
- Зачем:
- снизить ресурсоемкость внешнего сопровождения субагентов без потери его роли.
- Что:
- для Luna внешней линии указан уровень effort medium вместо high.
- Проверка:
- git diff --check.