cc-agents-iterm-plugin/ARCHITECTURE.md
Andrey Epifancev df6e0bcbc1 docs: describe project in CLAUDE.md and ARCHITECTURE.md
Refs #1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:16:49 +04:00

3.0 KiB
Raw Blame History

Архитектура

Два процесса, связанные только файлами в ~/.cache/claude-agents/: хук внутри каждой сессии Claude Code пишет события, скрипт iTerm2 их читает и рисует панель.

claude (каждая сессия) ──hook──▶ agents_panel_hook.sh ──append──▶ ~/.cache/claude-agents/<sid>.jsonl
                                                                         │
iTerm2 AutoLaunch: claude_agents.py ◀───── read (poll 1.5 s) ────────────┘
   ├─ + iTerm2 API (вкладки, профиль), ps, tmux, транскрипты ~/.claude/projects, git
   ├─ + api.anthropic.com oauth/usage, prepaid/credits (OAuth из Keychain)
   └─ HTTP 127.0.0.1:8766 ──▶ web view tool «Claude» в Toolbelt

Модули

Модуль Ответственность Зависит от
files/agents_panel_hook.sh Событие хука → строка jsonl с PID, вкладкой iTerm2 или панелью tmux jq, ps
files/claude_agents.py — сессии load_sessions/replay: jsonl → состояние сессий и субагентов; build_tree сводит с живыми вкладками, процессами, tmux файлы хука, iTerm2 API, ps, tmux, транскрипты, git
files/claude_agents.py — лимиты fetch_usage/fetch_balance + parse_limits/parse_balance Keychain/~/.claude/.credentials.json, ~/.claude.json, api.anthropic.com, claude.ai
files/claude_agents.py — UI render_*, handle (HTTP), activate/open_worktree, theme_poller state, iTerm2 API
files/settings_hooks.py Идемпотентно добавить/убрать хуки в ~/.claude/settings.json —
install.sh / uninstall.sh Разложить/убрать файлы, включить Python API iTerm2, перезапустить панель settings_hooks.py

Границы

  • Хук не зависит от панели и не должен влиять на Claude Code: без вывода, всегда exit 0.
  • Панель только читает данные Claude Code (jsonl, транскрипты, ~/.claude.json) и ничего туда не пишет; её единственная запись — удаление собственных логов старше keep_logs_days.
  • claude_agents.py — только стандартная библиотека + iterm2; импорт без iTerm2 должен работать.
  • HTTP слушает только 127.0.0.1.

Открытые вопросы

  • Docstring claude_agents.py ссылается на несуществующий settings-hooks.json (теперь это settings_hooks.py + install.sh).
  • Автотестов нет; claude_agents.py — один файл на 1500 строк.