- Зачем: прокси для агента — выбор конкретной машины. Автоматическая
правка ~/.codex/.env и ~/.claude/settings.json оказалась слишком
навязчивой.
- Что: шаблоны перенесены в proxy-client/.config/proxy-client/examples/
(codex.env, claude-settings.json) и попадают на машину вместе с
остальными примерами. install.sh больше не трогает настройки Codex и
Claude, его тесты на это удалены. Инструкция по копированию — в README
proxy-client.
- Проверка: tests/test_install.sh и tests/test_proxy_client_install.sh
проходят.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Зачем: прокси из окружения запуска до 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>
Зачем: «перечитай свежим взглядом» стало двусмысленным с появлением
субагентов — то ли сам перечитай, то ли зови свежую сессию.
Что: claude/.claude/CLAUDE.md с осью «сколько авторского контекста несёт
ревьюер»: горячее (автор сам, глазами читателя), тёплое (агент с брифом),
холодное (свежая сессия без контекста). Линкуется install.sh в
~/.claude/CLAUDE.md тем же механизмом, что settings.local.json; файл внесён
в белый список .gitignore.
Проверка: симлинк создан на этой машине, содержимое читается.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- statusLine ссылался на ~/.claude/statusline-command.sh, которого install.sh
никогда не создавал, а сам скрипт не округлял проценты и резал путь по числу
сегментов вместо длины.
- Что:
- скрипт переписан: округление процентов до целых, порог длины пути в
переменной MAX_PATH_LEN (28), резервный разбор JSON без jq, USER/USERNAME и
HOSTNAME вместо hostname -s, нормализация обратных слэшей — для Git Bash.
- install.sh копирует statusline-command.sh в ~/.claude с правами 755.
- Проверка:
- printf '%s' "$json" | bash claude/.claude/statusline-command.sh на JSON с
дробными процентами, null в rate_limits и без блока rate_limits.
- Зачем:
- отображать в Claude Code текущий путь, ветку, модель и использование контекста/rate limits.
- Что:
- создан claude/.claude/statusline-command.sh с парсингом JSON и ANSI-форматированием.
- обновлён .gitignore для трекинга нового скрипта.
- Проверка:
- запуск скрипта в рабочей директории проекта: bash claude/.claude/statusline-command.sh.
- Зачем:
- codex-review дублировал adversarial-review с менее проработанными промптами,
а Codex CLI регулярно путался и пытался вызывать сам себя.
- Что:
- удалён скилл codex-review (SKILL.md).
- из TODO.md убраны завершённые задачи, актуальные перефокусированы на adversarial-review.
- в settings.local.json паттерны codex-review-* расширены до codex-* для adversarial-review.
- Проверка:
- git diff HEAD~1 --stat.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- в Plan Mode ревью плана вызывало ~5 permission prompts (git, Write, rm),
хотя для плана git не нужен, а план уже является файлом.
- Что:
- добавлен fast path: явный `plan` или Plan Mode пропускают git-проверки
- base branch определяется лениво (только для code/code-vs-plan)
- resume упрощён через `2>/dev/null` (stderr → /dev/null, stdout = чистое ревью)
- cleanup пропускается в Plan Mode, best-effort вне его
- удалены deprecated permissions claude-diff-* из settings.local.json
- Проверка:
- `/codex-review plan` в Plan Mode — 0 permission prompts
- `/codex-review code` вне Plan Mode — работает как раньше
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- Codex-ревью выявило permission bypass через Bash(timeout *) и
сохраняющиеся safety prompts на $() и > в bash-командах.
- Что:
- permission сужен до Bash(timeout 600 codex exec *), rm-паттерны конкретизированы.
- REVIEW_ID использует $RANDOM для энтропии, resume пишет в файл вместо pipe.
- добавлен TODO в AGENTS.md: план замены bash-паттернов на нативные инструменты.
- Проверка:
- /codex-review при следующем использовании.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- скилл генерировал множество промежуточных bash-команд, каждая из которых
требовала ручного подтверждения пользователя.
- poll-loop (while/sleep) мог зависнуть навсегда при сбое Codex.
- Что:
- добавлены permissions для типовых команд скилла (timeout, rm/Write для /tmp).
- uuidgen заменён на date +%s (меньше промптов).
- codex exec обёрнут в timeout 600 (10 мин) вместо poll-loop.
- resume оставлен как primary, свежий exec — fallback.
- добавлен захват session ID в Шаг 4.
- Проверка:
- /codex-review при следующем использовании.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- Claude Code перезаписывает settings.json при каждом «always allow», что создавало
конфликт с managed-копией из dotfiles при повторном запуске install.sh.
- Что:
- settings.json удалён из репозитория, Claude Code владеет им полностью.
- создан settings.local.json (базовые permissions + statusLine), деплоится через симлинк.
- install.sh: копирование + шаблон заменены на ln -sf с бэкапом и guard для edge cases.
- check.sh: проверка обновлена под симлинк вместо «файл + chmod 444».
- тесты: старый тест копирования заменён на 4 новых (симлинк, бэкап, директория, stow-миграция).
- Проверка:
- bash tests/test_install.sh (15 тестов).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- stow tree-folding создавал симлинк ~/.claude → dotfiles/claude/.claude/,
из-за чего Claude Code модифицировал settings.json прямо в репозитории,
а рантайм-данные (sessions, credentials) попадали в каталог dotfiles.
- Что:
- claude убран из stow-пакетов, установка через ручную секцию в install.sh.
- settings.json копируется в ~/.claude/ (оригинал защищён chmod 444).
- добавлена автомиграция: симлинк → директория с переносом рантайм-данных.
- грязный settings.json в репо автоматически сбрасывается через git checkout.
- добавлен .stow-local-ignore для защиты от случайного stow claude.
- check.sh дополнен проверками: ~/.claude — директория, settings.json — копия.
- Проверка:
- bash install.sh (на машине с симлинком — мигрирует, иначе — идемпотентно).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- нужен воспроизводимый способ установки на новую машину и защита от перезаписи tracked-файлов ИИ-инструментами.
- Что:
- добавлен install.sh: stow всех пакетов, создание settings.local.json, chmod 444 на settings.json, автопатч .bashrc.
- claude/settings.json разделён на базовый (permissions, statusLine) и локальный (model, effortLevel в settings.local.json).
- добавлен .concept-software.ru в NO_PROXY в server-env-setup и bash_functions.
- README переработан: install.sh как рекомендуемый способ, документация двухуровневых настроек Claude, Developer Mode hint, расширенное описание VS Code прокси.
- Проверка:
- git clone + ./install.sh на чистой машине.
- Зачем:
- расширены возможности AI-ассистентов для работы с документами и презентациями
- Что:
- добавлен skill pdf для работы с PDF файлами
- добавлен skill doc для работы с Word документами
- добавлен skill slides для создания презентаций PowerPoint
- добавлен skill jupyter-notebook для работы с Jupyter ноутбуками
- добавлен skill spreadsheet для работы с таблицами (Excel/CSV)
- изменена модель Claude с sonnet на opus
- Проверка:
- проверка доступности skills в AI-ассистентах
- Зачем:
- путь /home/dementev/ не работал на других машинах; модель была устаревшей.
- Что:
- команда statusline переведена на переносимый путь ~/.claude/statusline-command.sh.
- модель изменена с opus на sonnet.
- Проверка:
- stow claude && claude — статусбар должен отображаться корректно.
- Зачем:
- улучшена читаемость конфигурации за счет логического упорядочивания полей.
- Что:
- поля model, statusLine и effortLevel перемещены в конец файла.
- удалены лишние пустые строки между элементами массива permissions.allow.
- Проверка:
- git diff HEAD~1 -- claude/.claude/settings.json.
- Зачем:
- runtime-файлы Claude Code (cache, credentials, history) попадали в Git через симлинк Stow.
- Что:
- создан файл claude/.claude/.gitignore с исключением всех файлов кроме skills и .gitignore.
- создан симлинк claude/.claude/skills → agents/.agents/skills.
- Проверка:
- git status показывает только claude/.claude/.gitignore как untracked.
Зачем: Claude загружает user skills из ~/.claude/skills и не видел общий каталог ~/.agents/skills.
Что: добавлен пакет claude с symlink ~/.claude/skills на общие skills, исправлен YAML frontmatter skill conventional-commits, обновлен README с новой схемой и stow командой.
Проверка: stow -nvv claude и проверка лога rg "Loaded 1 unique skills" /tmp/claude-skills-check-2.log.