From b130f3638ec0eb0711b0bcc84cc003daf852a7e5 Mon Sep 17 00:00:00 2001 From: Mc_Smog Date: Tue, 14 Jul 2026 00:26:08 +0500 Subject: [PATCH] chore: back up Pi environment --- .gitattributes | 2 + .omx/hud-config.json | 3 + .omx/logs/notify-fallback-2026-05-01.jsonl | 2 + .omx/logs/notify-fallback-2026-07-12.jsonl | 2 + .omx/logs/omx-2026-05-01.jsonl | 3 + .omx/logs/omx-2026-07-12.jsonl | 1 + .omx/logs/omx-2026-07-13.jsonl | 2 + .omx/logs/session-history.jsonl | 1 + .omx/logs/tmux-hook-2026-07-12.jsonl | 1 + .omx/logs/tmux-hook-2026-07-13.jsonl | 2 + .omx/logs/turns-2026-07-12.jsonl | 1 + .omx/logs/turns-2026-07-13.jsonl | 2 + .omx/logs/update-2026-07-12T19-57-02-767Z.log | 69 +++ .omx/metrics.json | 10 + .omx/runtime/bin/omx | 2 + .omx/setup-scope.json | 5 + .omx/state/native-stop-state.json | 24 + .../notify-fallback-authority-owner.json | 14 + .../notify-fallback-authority-state.json | 14 + .omx/state/notify-fallback-state.json | 88 +++ .omx/state/session.json | 10 + .../hud-state.json | 6 + .../notify-hook-state.json | 6 + .../prompt-routing-state.json | 12 + .../hud-state.json | 6 + .../notify-hook-state.json | 6 + .../omx-1783886220848-ugrwhe/AGENTS.md | 463 +++++++++++++++ .../omx-1783886220848-ugrwhe/hud-state.json | 6 + .../notify-hook-state.json | 6 + .omx/state/subagent-tracking.json | 50 ++ .omx/state/team-leader-nudge.json | 5 + .../tmp-tmux-1000-default.json | 11 + .omx/state/tmux-hook-state.json | 9 + .omx/state/update-check.json | 4 + PI-BACKUP-README.md | 544 ++++++++++++++++++ pi-backup-20260714-002452.tar.zst | 3 + pi-backup-20260714-002452.tar.zst.sha256 | 1 + pi-env-backup.sh | 215 +++++++ 38 files changed, 1611 insertions(+) create mode 100644 .gitattributes create mode 100644 .omx/hud-config.json create mode 100644 .omx/logs/notify-fallback-2026-05-01.jsonl create mode 100644 .omx/logs/notify-fallback-2026-07-12.jsonl create mode 100644 .omx/logs/omx-2026-05-01.jsonl create mode 100644 .omx/logs/omx-2026-07-12.jsonl create mode 100644 .omx/logs/omx-2026-07-13.jsonl create mode 100644 .omx/logs/session-history.jsonl create mode 100644 .omx/logs/tmux-hook-2026-07-12.jsonl create mode 100644 .omx/logs/tmux-hook-2026-07-13.jsonl create mode 100644 .omx/logs/turns-2026-07-12.jsonl create mode 100644 .omx/logs/turns-2026-07-13.jsonl create mode 100644 .omx/logs/update-2026-07-12T19-57-02-767Z.log create mode 100644 .omx/metrics.json create mode 100755 .omx/runtime/bin/omx create mode 100644 .omx/setup-scope.json create mode 100644 .omx/state/native-stop-state.json create mode 100644 .omx/state/notify-fallback-authority-owner.json create mode 100644 .omx/state/notify-fallback-authority-state.json create mode 100644 .omx/state/notify-fallback-state.json create mode 100644 .omx/state/session.json create mode 100644 .omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/hud-state.json create mode 100644 .omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/notify-hook-state.json create mode 100644 .omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/prompt-routing-state.json create mode 100644 .omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/hud-state.json create mode 100644 .omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/notify-hook-state.json create mode 100644 .omx/state/sessions/omx-1783886220848-ugrwhe/AGENTS.md create mode 100644 .omx/state/sessions/omx-1783886220848-ugrwhe/hud-state.json create mode 100644 .omx/state/sessions/omx-1783886220848-ugrwhe/notify-hook-state.json create mode 100644 .omx/state/subagent-tracking.json create mode 100644 .omx/state/team-leader-nudge.json create mode 100644 .omx/state/tmux-extended-keys/tmp-tmux-1000-default.json create mode 100644 .omx/state/tmux-hook-state.json create mode 100644 .omx/state/update-check.json create mode 100644 PI-BACKUP-README.md create mode 100644 pi-backup-20260714-002452.tar.zst create mode 100644 pi-backup-20260714-002452.tar.zst.sha256 create mode 100755 pi-env-backup.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ed1ed10 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +pi-backup-*.tar.zst filter=lfs diff=lfs merge=lfs -text +pi-backup-*.tar.gz filter=lfs diff=lfs merge=lfs -text diff --git a/.omx/hud-config.json b/.omx/hud-config.json new file mode 100644 index 0000000..e20bc4a --- /dev/null +++ b/.omx/hud-config.json @@ -0,0 +1,3 @@ +{ + "preset": "focused" +} \ No newline at end of file diff --git a/.omx/logs/notify-fallback-2026-05-01.jsonl b/.omx/logs/notify-fallback-2026-05-01.jsonl new file mode 100644 index 0000000..ca6556a --- /dev/null +++ b/.omx/logs/notify-fallback-2026-05-01.jsonl @@ -0,0 +1,2 @@ +{"timestamp":"2026-05-01T19:13:22.486Z","type":"watcher_start","cwd":"/home/smog/main","notify_script":"/usr/lib/node_modules/oh-my-codex/dist/scripts/notify-hook.js","authority_only":false,"poll_ms":250,"effective_poll_ms":250,"idle_max_poll_ms":1000,"once":false,"parent_pid":1337975,"pid_file":"/home/smog/main/.omx/state/notify-fallback.pid","max_lifetime_ms":21600000} +{"timestamp":"2026-05-01T19:13:37.674Z","type":"watcher_stop","signal":"SIGTERM","reason":"signal","parent_pid":1337975,"pid_file":"/home/smog/main/.omx/state/notify-fallback.pid"} diff --git a/.omx/logs/notify-fallback-2026-07-12.jsonl b/.omx/logs/notify-fallback-2026-07-12.jsonl new file mode 100644 index 0000000..7504b62 --- /dev/null +++ b/.omx/logs/notify-fallback-2026-07-12.jsonl @@ -0,0 +1,2 @@ +{"timestamp":"2026-07-12T19:57:02.897Z","type":"watcher_start","cwd":"/home/smog/main","notify_script":"/home/smog/.local/lib/node_modules/oh-my-codex/dist/scripts/notify-hook.js","authority_only":false,"poll_ms":250,"effective_poll_ms":1000,"idle_max_poll_ms":1000,"once":false,"parent_pid":68688,"pid_file":"/home/smog/main/.omx/state/notify-fallback.pid","max_lifetime_ms":21600000} +{"timestamp":"2026-07-12T21:15:25.051Z","type":"watcher_stop","signal":null,"reason":"parent_gone","parent_pid":68688,"pid_file":"/home/smog/main/.omx/state/notify-fallback.pid"} diff --git a/.omx/logs/omx-2026-05-01.jsonl b/.omx/logs/omx-2026-05-01.jsonl new file mode 100644 index 0000000..47931f2 --- /dev/null +++ b/.omx/logs/omx-2026-05-01.jsonl @@ -0,0 +1,3 @@ +{"event":"session_start","session_id":"omx-1777662801842-unhxxn","pid":1337975,"timestamp":"2026-05-01T19:13:22.411Z","_ts":"2026-05-01T19:13:22.411Z"} +{"event":"session_start","session_id":"omx-1777662801842-unhxxn","pid":1337975,"timestamp":"2026-05-01T19:13:37.564Z","_ts":"2026-05-01T19:13:37.673Z"} +{"event":"session_end","session_id":"omx-1777662801842-unhxxn","timestamp":"2026-05-01T19:13:37.675Z","_ts":"2026-05-01T19:13:37.675Z"} diff --git a/.omx/logs/omx-2026-07-12.jsonl b/.omx/logs/omx-2026-07-12.jsonl new file mode 100644 index 0000000..1bc4a9a --- /dev/null +++ b/.omx/logs/omx-2026-07-12.jsonl @@ -0,0 +1 @@ +{"event":"session_start","session_id":"omx-1783886220848-ugrwhe","pid":68688,"timestamp":"2026-07-12T19:57:02.811Z","_ts":"2026-07-12T19:57:02.811Z"} diff --git a/.omx/logs/omx-2026-07-13.jsonl b/.omx/logs/omx-2026-07-13.jsonl new file mode 100644 index 0000000..39b9fdb --- /dev/null +++ b/.omx/logs/omx-2026-07-13.jsonl @@ -0,0 +1,2 @@ +{"event":"session_start","session_id":"019f57e4-d006-76e2-b9bf-99950205bb6d","native_session_id":"019f57e4-d006-76e2-b9bf-99950205bb6d","pid":12549,"timestamp":"2026-07-13T16:20:18.642Z","_ts":"2026-07-13T16:20:18.643Z"} +{"event":"session_start","session_id":"019f5c48-1130-7663-b700-14621eff9671","native_session_id":"019f5c48-1130-7663-b700-14621eff9671","pid":12549,"timestamp":"2026-07-13T16:21:02.350Z","_ts":"2026-07-13T16:21:02.350Z"} diff --git a/.omx/logs/session-history.jsonl b/.omx/logs/session-history.jsonl new file mode 100644 index 0000000..f0f7cef --- /dev/null +++ b/.omx/logs/session-history.jsonl @@ -0,0 +1 @@ +{"session_id":"omx-1777662801842-unhxxn","started_at":"2026-05-01T19:13:37.564Z","ended_at":"2026-05-01T19:13:37.675Z","cwd":"/home/smog/main","pid":1337975} diff --git a/.omx/logs/tmux-hook-2026-07-12.jsonl b/.omx/logs/tmux-hook-2026-07-12.jsonl new file mode 100644 index 0000000..7eb42d0 --- /dev/null +++ b/.omx/logs/tmux-hook-2026-07-12.jsonl @@ -0,0 +1 @@ +{"timestamp":"2026-07-12T20:05:19.980Z","type":"auto_nudge_skipped","reason":"unmanaged_session"} diff --git a/.omx/logs/tmux-hook-2026-07-13.jsonl b/.omx/logs/tmux-hook-2026-07-13.jsonl new file mode 100644 index 0000000..1556041 --- /dev/null +++ b/.omx/logs/tmux-hook-2026-07-13.jsonl @@ -0,0 +1,2 @@ +{"timestamp":"2026-07-13T16:20:24.480Z","type":"auto_nudge_skipped","reason":"unmanaged_session"} +{"timestamp":"2026-07-13T16:21:43.956Z","type":"auto_nudge_skipped","reason":"unmanaged_session"} diff --git a/.omx/logs/turns-2026-07-12.jsonl b/.omx/logs/turns-2026-07-12.jsonl new file mode 100644 index 0000000..7d7b5d3 --- /dev/null +++ b/.omx/logs/turns-2026-07-12.jsonl @@ -0,0 +1 @@ +{"timestamp":"2026-07-12T20:05:19.929Z","type":"agent-turn-complete","thread_id":"019f57e4-d006-76e2-b9bf-99950205bb6d","turn_id":"019f57ee-f2d7-7392-b4c5-421e31f54265","input_preview":"Как перенести полностью не только pi coding agent как мы уже сделали в этой папке создали перенос pi, надо теперь тоже самое сделать с codex + ohmycodex установленный на этом pc надо перенести списки ","input_message_count":1,"output_preview":"Готов продолжить, но в этой сессии мне недоступен терминальный инструмент для просмотра и изменения файлов. Чтобы сделать перенос корректно, нужен доступ к содержимому `/home/smog/main` и каталогам `~"} diff --git a/.omx/logs/turns-2026-07-13.jsonl b/.omx/logs/turns-2026-07-13.jsonl new file mode 100644 index 0000000..22865dc --- /dev/null +++ b/.omx/logs/turns-2026-07-13.jsonl @@ -0,0 +1,2 @@ +{"timestamp":"2026-07-13T16:20:24.426Z","type":"agent-turn-complete","thread_id":"019f57e4-d006-76e2-b9bf-99950205bb6d","turn_id":"019f5c47-837d-7491-84c8-6e32542b3ec2","input_preview":"Как мне дать доступ?","input_message_count":2,"output_preview":"В этом чате доступ к инструментам не был выдан вообще — поэтому я не могу открыть даже файлы рабочей папки. Дать его можно, начав новый агентский сеанс в Codex с включённым доступом к терминалу/файлов"} +{"timestamp":"2026-07-13T16:21:43.904Z","type":"agent-turn-complete","thread_id":"019f5c48-1130-7663-b700-14621eff9671","turn_id":"019f5c48-2c0f-7102-9710-8f60fbe7db48","input_preview":"Как перенести полностью не только pi coding agent как мы уже сделали в этой папке создали перенос pi, надо теперь тоже самое сделать с\n codex + ohmycodex установленный на этом pc надо перенести списк","input_message_count":1,"output_preview":"Сделай отдельный переносимый архив рядом с переносом Pi. Копировать нужно конфигурацию, skills/plugins/MCP, но **не** `auth.json`, токены и ключи.\n\n```bash\ncd /home/smog/main\nmkdir -p codex-ohmycodex-"} diff --git a/.omx/logs/update-2026-07-12T19-57-02-767Z.log b/.omx/logs/update-2026-07-12T19-57-02-767Z.log new file mode 100644 index 0000000..f5a1484 --- /dev/null +++ b/.omx/logs/update-2026-07-12T19-57-02-767Z.log @@ -0,0 +1,69 @@ + +added 1 package, and changed 94 packages in 5s + +31 packages are looking for funding + run `npm fund` for details +npm warn install-scripts 1 package had install scripts blocked because they are not covered by allowScripts: +npm warn install-scripts oh-my-codex@0.20.1 (postinstall: node -e "const fs=require('fs');const p='./dist/scripts/postinstall.js';if(fs.existsSync(p))import(p).then(m=>m.main?.()).catch(e=>console.warn('[omx] Postinstall skipped after a non-fatal error: '+(e?.message??e)))") +npm warn install-scripts +npm warn install-scripts Run `npm install -g --allow-scripts=oh-my-codex` to allow these scripts once, or `npm config set allow-scripts=oh-my-codex --location=user` to allow them for all global installs. +oh-my-codex setup +================= + +Using setup scope: user + +Using setup install mode: legacy + +Using setup MCP mode: none + +Using setup Team mode: enabled + +[1/8] Creating directories... + Done. + +[2/8] Installing agent prompts... + Prompt refresh complete (catalog baseline: 22). + +[3/8] Installing skills... + Skill refresh complete (catalog baseline: 29). + +[4/8] Installing native agent configs... + Native agent refresh complete (/home/smog/.codex/agents). + +[5/8] Updating config.toml... + Config refresh complete (/home/smog/.codex/config.toml). + + Native Codex hooks refresh complete (/home/smog/.codex/hooks.json). + +[5.5/8] Verifying Team CLI API interop... + omx team api command detected (CLI-first interop ready) + +[6/8] Generating AGENTS.md... + Refreshed AGENTS.md model capability table in /home/smog/.codex. + User scope leaves project AGENTS.md unchanged. + +[7/8] Configuring notification hook... + Done. + +[8/8] Configuring HUD... + HUD config created (preset: focused). + StatusLine configured in config.toml via [tui] section. + +Setup refresh summary: + prompts: updated=1, unchanged=36, backed_up=1, skipped=0, removed=0 + skills: updated=12, unchanged=18, backed_up=12, skipped=17, removed=0 + native_agents: updated=0, unchanged=0, backed_up=0, skipped=22, removed=0 + agents_md: updated=1, unchanged=0, backed_up=1, skipped=0, removed=0 + config: updated=2, unchanged=0, backed_up=2, skipped=0, removed=0 + +Migration hint: Legacy ~/.agents/skills still exists (2 skills) alongside canonical /home/smog/.codex/skills. Codex may still discover both roots; archive or remove ~/.agents/skills if Enable/Disable Skills shows duplicates. + +Setup complete! Run "omx doctor" to verify installation. + +Next steps: + 1. Start Codex CLI in your project directory + 2. Use role/workflow keywords like $architect, $executor, and $plan in Codex + 3. Browse skills with /skills; AGENTS keyword routing can also activate them implicitly + 4. The AGENTS.md orchestration brain is loaded automatically + 5. Native agent role TOML files written to .codex/agents/; use explicit agent_type when spawning OMX roles + 6. "omx explore" and "omx sparkshell" can hydrate native release binaries on first use; source installs still allow repo-local fallbacks and OMX_EXPLORE_BIN / OMX_SPARKSHELL_BIN overrides diff --git a/.omx/metrics.json b/.omx/metrics.json new file mode 100644 index 0000000..451506d --- /dev/null +++ b/.omx/metrics.json @@ -0,0 +1,10 @@ +{ + "total_turns": 3, + "session_turns": 3, + "last_activity": "2026-07-13T16:21:43.907Z", + "session_input_tokens": 0, + "session_output_tokens": 0, + "session_total_tokens": 0, + "five_hour_limit_pct": 0, + "weekly_limit_pct": 0 +} \ No newline at end of file diff --git a/.omx/runtime/bin/omx b/.omx/runtime/bin/omx new file mode 100755 index 0000000..cfae591 --- /dev/null +++ b/.omx/runtime/bin/omx @@ -0,0 +1,2 @@ +#!/bin/sh +exec '/usr/bin/node' '/home/smog/.local/lib/node_modules/oh-my-codex/dist/cli/omx.js' "$@" diff --git a/.omx/setup-scope.json b/.omx/setup-scope.json new file mode 100644 index 0000000..55c8eed --- /dev/null +++ b/.omx/setup-scope.json @@ -0,0 +1,5 @@ +{ + "scope": "user", + "mcpMode": "none", + "installMode": "legacy" +} diff --git a/.omx/state/native-stop-state.json b/.omx/state/native-stop-state.json new file mode 100644 index 0000000..d1fff81 --- /dev/null +++ b/.omx/state/native-stop-state.json @@ -0,0 +1,24 @@ +{ + "sessions": { + "019f57e4-d006-76e2-b9bf-99950205bb6d": { + "ordinary_no_progress_guard": { + "fingerprint": "ordinary|в этом чате доступ к инструментам не был выдан вообще — поэтому я не могу открыть даже файлы рабочей папки. дать его можно, начав новый агентский сеанс в codex с включённым доступом к терминалу/файловой системе и выбрав `/home/smog/main` как workspace. после этого напишите, например: «сделай перенос codex и oh-my-codex по образцу pi». я сам: - найду существующий перенос pi; - создам экспорт/импорт для `~/.codex` и omx; - перенесу skills, plugins и mcp-конфигурации; - исключу секреты из обычного архива; - добавлю проверку восстановленной установки.", + "first_seen_at": "2026-07-13T16:20:24.324Z", + "last_seen_at": "2026-07-13T16:20:24.324Z", + "repeat_count": 1, + "last_turn_id": "019f5c47-837d-7491-84c8-6e32542b3ec2", + "last_thread_id": null + } + }, + "019f5c48-1130-7663-b700-14621eff9671": { + "ordinary_no_progress_guard": { + "fingerprint": "ordinary|сделай отдельный переносимый архив рядом с переносом pi. копировать нужно конфигурацию, skills/plugins/mcp, но **не** `auth.json`, токены и ключи. ```bash cd /home/smog/main mkdir -p codex-ohmycodex-transfer/{codex,agents,omx,shell,meta} # codex: настройки, skills, plugins, роли и prompts rsync -a ~/.codex/config.toml codex-ohmycodex-transfer/codex/ 2>/dev/null || true rsync -a ~/.codex/{skills,plugins,agents,prompts} codex-ohmycodex-transfer/codex/ 2>/dev/null || true # дополнительные локальные skills (у тебя они используются) rsync -a ~/.agents/skills codex-ohmycodex-transfer/agents/ 2>/dev/null || true # конфигурация oh-my-codex, если существует rsync -a ~/.config/oh-my-codex codex-ohmycodex-transfer/omx/ 2>/dev/null || true rsync -a ~/.oh-my-codex codex-ohmycodex-transfer/omx/ 2>/dev/null || true # shell-настройки: aliases/functions для codex/omx/yolo grep -nei 'codex|omx|yolo' ~/.zshrc ~/.zprofile ~/.bashrc ~/.profile \\ > codex-ohmycodex-transfer/shell/codex-omx-yolo-lines.txt 2>/dev/null || true # инвентарь: поможет поставить ровно те же cli-пакеты на новом пк { echo '== versions ==' codex --version 2>&1 || true omx --version 2>&1 || true node --version 2>&1 || true npm --version 2>&1 || true echo echo '== global npm ==' npm -g ls --depth=0 2>&1 || true echo echo '== mcp in config ==' grep -nei 'mcp|approval_policy|sandbox_mode|yolo' ~/.codex/config.toml 2>/dev/null || true } > codex-ohmycodex-transfer/meta/inventory.txt # контрольная сумма и архив tar -czf codex-ohmycodex-transfer.tar.gz codex-ohmycodex-transfer sha256sum codex-ohmycodex-transfer.tar.gz \\ > codex-ohmycodex-transfer.tar.gz.sha256 ``` на новом пк: ```bash tar -xzf codex-ohmycodex-transfer.tar.gz cd codex-ohmycodex-transfer mkdir -p ~/.codex ~/.agents ~/.config rsync -a codex/ ~/.codex/ rsync -a agents/ ~/.agents/ rsync -a omx/ ~/.config/ # только если в архиве есть конфиг omx # установить codex/omx той же версией из meta/inventory.txt, # затем восстановить/проверить интеграцию omx setup omx doctor # авторизация намеренно выполняется на новом пк codex login ``` для постоянного yolo-профиля проверь `~/.codex/config.toml`; при необходимости добавь: ```toml [profiles.yolo] approval_policy = \"never\" sandbox_mode = \"danger-full-access\" ``` запуск: ```bash codex --profile yolo ``` важно: - mcp-серверы обычно перенесутся через `~/.codex/config.toml`. - значения переменных окружения, api-ключи, oauth-сессии и `~/.codex/auth.json` переносить не следует; на новой машине их нужно задать заново. - если mcp использует локальные пути к бинарникам, после переноса проверь их установку и пути в `config.toml`. - после восстановления полезно проверить: `codex mcp list` (если поддерживается версией cli), `omx doctor`, затем открыть codex и убедиться, что skills/plugins видны.", + "first_seen_at": "2026-07-13T16:21:43.806Z", + "last_seen_at": "2026-07-13T16:21:43.806Z", + "repeat_count": 1, + "last_turn_id": "019f5c48-2c0f-7102-9710-8f60fbe7db48", + "last_thread_id": null + } + } + } +} \ No newline at end of file diff --git a/.omx/state/notify-fallback-authority-owner.json b/.omx/state/notify-fallback-authority-owner.json new file mode 100644 index 0000000..c452d4c --- /dev/null +++ b/.omx/state/notify-fallback-authority-owner.json @@ -0,0 +1,14 @@ +{ + "owner": "hud", + "pid": 68742, + "cwd": "/home/smog/main", + "heartbeat_at": "2026-07-13T13:19:21.920Z", + "cooldown_ms": 5000, + "jitter_ms": 26, + "skip_count": 52024, + "last_status": "skipped", + "last_reason": "rate_limited", + "last_spawn_at": "2026-07-13T13:19:16.916Z", + "last_skip_at": "2026-07-13T13:19:21.920Z", + "next_allowed_at": "2026-07-13T13:19:21.942Z" +} \ No newline at end of file diff --git a/.omx/state/notify-fallback-authority-state.json b/.omx/state/notify-fallback-authority-state.json new file mode 100644 index 0000000..c452d4c --- /dev/null +++ b/.omx/state/notify-fallback-authority-state.json @@ -0,0 +1,14 @@ +{ + "owner": "hud", + "pid": 68742, + "cwd": "/home/smog/main", + "heartbeat_at": "2026-07-13T13:19:21.920Z", + "cooldown_ms": 5000, + "jitter_ms": 26, + "skip_count": 52024, + "last_status": "skipped", + "last_reason": "rate_limited", + "last_spawn_at": "2026-07-13T13:19:16.916Z", + "last_skip_at": "2026-07-13T13:19:21.920Z", + "next_allowed_at": "2026-07-13T13:19:21.942Z" +} \ No newline at end of file diff --git a/.omx/state/notify-fallback-state.json b/.omx/state/notify-fallback-state.json new file mode 100644 index 0000000..7ffb258 --- /dev/null +++ b/.omx/state/notify-fallback-state.json @@ -0,0 +1,88 @@ +{ + "pid": 890434, + "parent_pid": 68742, + "started_at": "2026-07-13T13:19:17.004Z", + "cwd": "/home/smog/main", + "notify_script": "/home/smog/.local/lib/node_modules/oh-my-codex/dist/scripts/notify-hook.js", + "authority_only": true, + "poll_ms": 75, + "effective_poll_ms": 1000, + "idle_max_poll_ms": 1000, + "pid_file": null, + "max_lifetime_ms": 0, + "tracked_files": 0, + "seen_turns": 0, + "dispatch_drain": { + "enabled": true, + "max_per_tick": 5, + "run_count": 1, + "leader_only": true, + "last_tick_at": "2026-07-13T13:19:17.007Z", + "last_result": { + "processed": 0, + "skipped": 0, + "failed": 0 + }, + "last_error": null + }, + "leader_nudge": { + "enabled": true, + "leader_only": true, + "stale_threshold_ms": 180000, + "precomputed_leader_stale": false, + "last_tick_at": "2026-07-13T13:19:17.008Z", + "last_error": null, + "run_count": 1 + }, + "ralph_continue_steer": { + "enabled": true, + "cadence_ms": 60000, + "message": "Ralph loop active continue", + "active": false, + "last_state_check_at": "2026-07-12T21:15:24.049Z", + "last_sent_at": "", + "cooldown_anchor_at": "", + "last_reason": "blocked_by_current_session", + "last_error": null, + "state_path": "", + "pane_id": "", + "pane_current_command": "", + "current_phase": "", + "subagent_session_id": "", + "active_subagent_thread_ids": [], + "shared_timestamp_path": "/home/smog/main/.omx/state/ralph-last-steer-at", + "shared_last_sent_at": "", + "singleton_lock_path": "/home/smog/main/.omx/state/ralph-continue-steer.lock" + }, + "fallback_auto_nudge": { + "enabled": true, + "stall_ms": 5000, + "last_tick_at": "2026-07-13T13:19:17.016Z", + "last_turn_at": "2026-07-12T20:05:19.938Z", + "last_turn_count": 1, + "last_message": "Готов продолжить, но в этой сессии мне недоступен терминальный инструмент для просмотра и изменения ", + "last_reason": "eligible_but_not_sent", + "last_error": null, + "last_nudged_signature": "", + "last_nudged_at": "" + }, + "authority_backoff": { + "active": false, + "reason": "pid_missing", + "primary_pid": null, + "primary_last_tick_at": "", + "freshness_ms": null, + "threshold_ms": null + }, + "adaptive_poll": { + "enabled": true, + "base_ms": 75, + "max_ms": 1000, + "current_ms": 1000, + "idle_streak": 14307, + "last_tick_at": "2026-07-13T13:19:17.019Z", + "last_activity_at": null, + "last_activity_reason": "eligible_but_not_sent" + }, + "last_cycle_activity": "eligible_but_not_sent" +} \ No newline at end of file diff --git a/.omx/state/session.json b/.omx/state/session.json new file mode 100644 index 0000000..9af0f54 --- /dev/null +++ b/.omx/state/session.json @@ -0,0 +1,10 @@ +{ + "session_id": "019f5c48-1130-7663-b700-14621eff9671", + "native_session_id": "019f5c48-1130-7663-b700-14621eff9671", + "started_at": "2026-07-13T16:21:02.350Z", + "cwd": "/home/smog/main", + "pid": 12549, + "platform": "linux", + "pid_start_ticks": 15454, + "pid_cmdline": "/home/smog/.local/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex" +} \ No newline at end of file diff --git a/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/hud-state.json b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/hud-state.json new file mode 100644 index 0000000..b2bbec7 --- /dev/null +++ b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/hud-state.json @@ -0,0 +1,6 @@ +{ + "last_turn_at": "2026-07-13T16:20:24.435Z", + "turn_count": 1, + "last_progress_at": "2026-07-13T16:20:24.435Z", + "last_agent_output": "В этом чате доступ к инструментам не был выдан вообще — поэтому я не могу открыть даже файлы рабочей" +} \ No newline at end of file diff --git a/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/notify-hook-state.json b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/notify-hook-state.json new file mode 100644 index 0000000..32b163f --- /dev/null +++ b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/notify-hook-state.json @@ -0,0 +1,6 @@ +{ + "recent_turns": { + "019f57e4-d006-76e2-b9bf-99950205bb6d|019f5c47-837d-7491-84c8-6e32542b3ec2|agent-turn-complete": 1783959624423 + }, + "last_event_at": "2026-07-13T16:20:24.424Z" +} \ No newline at end of file diff --git a/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/prompt-routing-state.json b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/prompt-routing-state.json new file mode 100644 index 0000000..bcac39a --- /dev/null +++ b/.omx/state/sessions/019f57e4-d006-76e2-b9bf-99950205bb6d/prompt-routing-state.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "last_triage": { + "lane": "LIGHT", + "destination": "explore", + "reason": "question_or_explanation", + "prompt_signature": "sha256:c5f5f045c12bc21710208cc1b1aca1777feb832118391c1c6d53e99b0d23abdc", + "turn_id": "019f5c47-837d-7491-84c8-6e32542b3ec2", + "created_at": "2026-07-13T16:20:18.788Z" + }, + "suppress_followup": true +} \ No newline at end of file diff --git a/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/hud-state.json b/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/hud-state.json new file mode 100644 index 0000000..f994fa0 --- /dev/null +++ b/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/hud-state.json @@ -0,0 +1,6 @@ +{ + "last_turn_at": "2026-07-13T16:21:43.913Z", + "turn_count": 1, + "last_progress_at": "2026-07-13T16:21:43.913Z", + "last_agent_output": "Сделай отдельный переносимый архив рядом с переносом Pi. Копировать нужно конфигурацию, skills/plugi" +} \ No newline at end of file diff --git a/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/notify-hook-state.json b/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/notify-hook-state.json new file mode 100644 index 0000000..4807b12 --- /dev/null +++ b/.omx/state/sessions/019f5c48-1130-7663-b700-14621eff9671/notify-hook-state.json @@ -0,0 +1,6 @@ +{ + "recent_turns": { + "019f5c48-1130-7663-b700-14621eff9671|019f5c48-2c0f-7102-9710-8f60fbe7db48|agent-turn-complete": 1783959703902 + }, + "last_event_at": "2026-07-13T16:21:43.902Z" +} \ No newline at end of file diff --git a/.omx/state/sessions/omx-1783886220848-ugrwhe/AGENTS.md b/.omx/state/sessions/omx-1783886220848-ugrwhe/AGENTS.md new file mode 100644 index 0000000..9e2634f --- /dev/null +++ b/.omx/state/sessions/omx-1783886220848-ugrwhe/AGENTS.md @@ -0,0 +1,463 @@ + +YOU ARE AN AUTONOMOUS CODING AGENT. EXECUTE TASKS TO COMPLETION WITHOUT ASKING FOR PERMISSION. +DO NOT STOP TO ASK "SHOULD I PROCEED?" — PROCEED. DO NOT WAIT FOR CONFIRMATION ON OBVIOUS NEXT STEPS. +IF BLOCKED, TRY AN ALTERNATIVE APPROACH. ONLY ASK WHEN TRULY AMBIGUOUS OR DESTRUCTIVE. +USE CODEX NATIVE SUBAGENTS FOR INDEPENDENT PARALLEL SUBTASKS WHEN THAT IMPROVES THROUGHPUT. THIS IS COMPLEMENTARY TO OMX TEAM MODE. + + + +# oh-my-codex - Intelligent Multi-Agent Orchestration + +You are running with oh-my-codex (OMX), a coordination layer for Codex CLI. +This AGENTS.md is the top-level operating contract for the workspace. +Role prompts under `prompts/*.md` are narrower execution surfaces. They must follow this file, not override it. +When OMX is installed, load the installed prompt/skill/agent surfaces from `~/.codex/prompts`, `~/.codex/skills`, and `~/.codex/agents` (or the project-local `./.codex/...` equivalents when project scope is active). + + +Canonical guidance schema for this template is defined in `docs/guidance-schema.md`. + +Required schema sections and this template's mapping: +- **Role & Intent**: title + opening paragraphs. +- **Operating Principles**: ``. +- **Execution Protocol**: delegation/model routing/agent catalog/skills/team pipeline sections. +- **Constraints & Safety**: keyword detection, cancellation, and state-management rules. +- **Verification & Completion**: `` + continuation checks in ``. +- **Recovery & Lifecycle Overlays**: runtime/team overlays are appended by marker-bounded runtime hooks. + +Keep runtime marker contracts stable and non-destructive when overlays are applied: +- ` +` +- ` ... ` + + + +- Solve the task directly when you can do so safely and well. +- Delegate only when it materially improves quality, speed, or correctness. +- Keep progress short, concrete, and useful. +- Prefer evidence over assumption; verify before claiming completion. +- Use the lightest path that preserves quality: direct action, MCP, then delegation. +- Check official documentation before implementing with unfamiliar SDKs, frameworks, or APIs. +- Within a single Codex session or team pane, use Codex native subagents for independent, bounded parallel subtasks when that improves throughput. + +- Default to quality-first, intent-deepening responses; think one more step before replying or asking for clarification, and use as much detail as needed for a strong result without empty verbosity. +- Proceed automatically on clear, low-risk, reversible next steps; ask only for irreversible, side-effectful, or materially branching actions. +- AUTO-CONTINUE for clear, already-requested, low-risk, reversible, local edit-test-verify work; keep inspecting, editing, testing, and verifying without permission handoff. +- ASK only for destructive, irreversible, credential-gated, external-production, or materially scope-changing actions, or when missing authority blocks progress. +- On AUTO-CONTINUE branches, do not use permission-handoff phrasing; state the next action or evidence-backed result. +- Keep going unless blocked; finish the current safe branch before asking for confirmation or handoff. +- Ask only when blocked by missing information, missing authority, or an irreversible/destructive branch. +- Do not ask or instruct humans to perform ordinary non-destructive, reversible actions; execute those safe reversible OMX/runtime operations and ordinary commands yourself. +- Treat OMX runtime manipulation, state transitions, and ordinary command execution as agent responsibilities when they are safe and reversible. +- Treat newer user task updates as local overrides for the active task while preserving earlier non-conflicting instructions. +- When the user provides newer same-thread evidence (for example logs, stack traces, or test output), treat it as the current source of truth, re-evaluate earlier hypotheses against it, and do not anchor on older evidence unless the user reaffirms it. +- Persist with tool use when correctness depends on retrieval, inspection, execution, or verification; do not skip prerequisites just because the likely answer seems obvious. +- More effort does not mean reflexive web/tool escalation; browse or use tools when the task materially benefits, not as a default show of effort. + + + +## Working agreements +- Write a cleanup plan before modifying code for cleanup/refactor/deslop work. +- Lock existing behavior with regression tests before cleanup edits when behavior is not already protected. +- Prefer deletion over addition. +- Reuse existing utils and patterns before introducing new abstractions. +- No new dependencies without explicit request. +- Keep diffs small, reviewable, and reversible. +- Run lint, typecheck, tests, and static analysis after changes. +- Final reports must include changed files, simplifications made, and remaining risks. + + +## Lore Commit Protocol + +Every commit message must follow the Lore protocol — structured decision records using native git trailers. +Commits are not just labels on diffs; they are the atomic unit of institutional knowledge. + +### Format + +``` + + + + +Constraint: +Rejected: | +Confidence: +Scope-risk: +Directive: +Tested: +Not-tested: +``` + +### Rules + +1. **Intent line first.** The first line describes *why*, not *what*. The diff already shows what changed. +2. **Trailers are optional but encouraged.** Use the ones that add value; skip the ones that don't. +3. **`Rejected:` prevents re-exploration.** If you considered and rejected an alternative, record it so future agents don't waste cycles re-discovering the same dead end. +4. **`Directive:` is a message to the future.** Use it for "do not change X without checking Y" warnings. +5. **`Constraint:` captures external forces.** API limitations, policy requirements, upstream bugs — things not visible in the code. +6. **`Not-tested:` is honest.** Declaring known verification gaps is more valuable than pretending everything is covered. +7. **All trailers use git-native trailer format** (key-value after a blank line). No custom parsing required. + +### Example + +``` +Prevent silent session drops during long-running operations + +The auth service returns inconsistent status codes on token +expiry, so the interceptor catches all 4xx responses and +triggers an inline refresh. + +Constraint: Auth service does not support token introspection +Constraint: Must not add latency to non-expired-token paths +Rejected: Extend token TTL to 24h | security policy violation +Rejected: Background refresh on timer | race condition with concurrent requests +Confidence: high +Scope-risk: narrow +Directive: Error handling is intentionally broad (all 4xx) — do not narrow without verifying upstream behavior +Tested: Single expired token refresh (unit) +Not-tested: Auth service cold-start > 500ms behavior +``` + +### Trailer Vocabulary + +| Trailer | Purpose | +|---------|---------| +| `Constraint:` | External constraint that shaped the decision | +| `Rejected:` | Alternative considered and why it was rejected | +| `Confidence:` | Author's confidence level (low/medium/high) | +| `Scope-risk:` | How broadly the change affects the system (narrow/moderate/broad) | +| `Reversibility:` | How easily the change can be undone (clean/messy/irreversible) | +| `Directive:` | Forward-looking instruction for future modifiers | +| `Tested:` | What verification was performed | +| `Not-tested:` | Known gaps in verification | +| `Related:` | Links to related commits, issues, or decisions | + +Teams may introduce domain-specific trailers without breaking compatibility. + + +--- + + +Default posture: work directly. + +Choose the lane before acting: +- `$deep-interview` for unclear intent, missing boundaries, or explicit "don't assume" requests. This mode clarifies and hands off; it does not implement. +- `$ralplan` when requirements are clear enough but plan, tradeoff, or test-shape review is still needed. +- `$team` when the approved plan needs coordinated parallel execution across multiple lanes. +- `$ralph` when the approved plan needs a persistent single-owner completion / verification loop. +- **Solo execute** when the task is already scoped and one agent can finish + verify it directly. + +Delegate only when it materially improves quality, speed, or safety. Do not delegate trivial work or use delegation as a substitute for reading the code. +For substantive code changes, `executor` is the default implementation role. +Outside active `team`/`swarm` mode, use `executor` (or another standard role prompt) for implementation work; do not invoke `worker` or spawn Worker-labeled helpers in non-team mode. +Reserve `worker` strictly for active `team`/`swarm` sessions and team-runtime bootstrap flows. +Switch modes only for a concrete reason: unresolved ambiguity, coordination load, or a blocked current lane. + + + +Leader responsibilities: +1. Pick the mode and keep the user-facing brief current. +2. Delegate only bounded, verifiable subtasks with clear ownership. +3. Integrate results, decide follow-up, and own final verification. + +Worker responsibilities: +1. Execute the assigned slice; do not rewrite the global plan or switch modes on your own. +2. Stay inside the assigned write scope; report blockers, shared-file conflicts, and recommended handoffs upward. +3. Ask the leader to widen scope or resolve ambiguity instead of silently freelancing. + +Rules: +- Max 6 concurrent child agents. +- Child prompts stay under AGENTS.md authority. +- `worker` is a team-runtime surface, not a general-purpose child role. +- Child agents should report recommended handoffs upward. +- Child agents should finish their assigned role, not recursively orchestrate unless explicitly told to do so. +- Prefer inheriting the leader model by omitting `spawn_agent.model` unless a task truly requires a different model. +- Do not hardcode stale frontier-model overrides for Codex native child agents. If an explicit frontier override is necessary, use the current frontier default from `OMX_DEFAULT_FRONTIER_MODEL` / the repo model contract (currently `gpt-5.4`), not older values such as `gpt-5.2`. +- Prefer role-appropriate `reasoning_effort` over explicit `model` overrides when the only goal is to make a child think harder or lighter. + + + +- `$name` — invoke a workflow skill +- `/skills` — browse available skills +- Prefer skill invocation and keyword routing as the primary user-facing workflow surface + + + +Match role to task shape: +- Low complexity: `explore`, `style-reviewer`, `writer` +- Research/discovery: `explore` for repo lookup, `researcher` for official docs/reference gathering, `dependency-expert` for SDK/API/package evaluation +- Standard: `executor`, `debugger`, `test-engineer` +- High complexity: `architect`, `executor`, `critic` + +For Codex native child agents, model routing defaults to inheritance/current repo defaults unless the caller has a concrete reason to override it. + + + +Leader/workflow routing contract: + +- Route to `explore` for repo-local file / symbol / pattern / relationship lookup, current implementation discovery, or mapping how this repo currently uses a dependency. `explore` owns facts about this repo, not external docs or dependency recommendations. +- Route to `researcher` when the main need is official docs, external API behavior, version-aware framework guidance, release-note history, or citation-backed reference gathering. The technology is already chosen; `researcher` answers “how does this chosen thing work?” and is not the default dependency-comparison role. +- Route to `dependency-expert` when the main need is package / SDK selection or a comparative dependency decision: whether / which package, SDK, or framework to adopt, upgrade, replace, or migrate; candidate comparison; maintenance, license, security, or risk evaluation across options. +- Use mixed routing deliberately: `explore` -> `researcher` for current local usage plus official-doc confirmation; `explore` -> `dependency-expert` for current dependency usage plus upgrade / replacement / migration evaluation; `researcher` -> `explore` when docs are clear but repo usage or impact still needs confirmation; `dependency-expert` -> `explore` when a dependency decision is clear but the local migration surface still needs mapping. +- Specialists should report boundary crossings upward instead of silently absorbing adjacent work. +- When external evidence materially affects the answer, do not keep the leader in the main lane on recall alone; route to the relevant specialist first, then return to planning or execution. + + + +--- + + +Key roles: +- `explore` — fast codebase search and mapping +- `planner` — work plans and sequencing +- `architect` — read-only analysis, diagnosis, tradeoffs +- `debugger` — root-cause analysis +- `executor` — implementation and refactoring +- `verifier` — completion evidence and validation + +Research/discovery specialists: +- `explore` — first-stop repository lookup and symbol/file mapping +- `researcher` — official docs, references, and external fact gathering +- `dependency-expert` — SDK/API/package evaluation before adopting or changing dependencies + +Specialists remain available through the role catalog and native child-agent surfaces when the task clearly benefits from them. + + +--- + + +Keyword routing is implemented primarily by native `UserPromptSubmit` hooks and the generated keyword registry. Treat hook-injected routing context as authoritative for the current turn, then load the named `SKILL.md` or prompt file as instructed. + +Fallback behavior when hook context is unavailable: +- Explicit `$name` invocations run left-to-right and override implicit keywords. +- Bare skill names do not activate skills by themselves; skill-name activation requires explicit `$skill` invocation. Natural-language routing phrases may still map to a workflow when they are not just the bare skill name. Examples: `analyze` / `investigate` → `$analyze` for read-only deep analysis with ranked synthesis, explicit confidence, and concrete file references; `deep interview`, `interview`, `don't assume`, or `ouroboros` → `$deep-interview`; `ralplan` / `consensus plan` → `$ralplan`; `cancel`, `stop`, or `abort` → `$cancel`. +- Keep the detailed keyword list in `src/hooks/keyword-registry.ts`; do not duplicate that table here. + +Runtime availability gate: +- Treat `autopilot`, `ralph`, `ultrawork`, `ultraqa`, `team`/`swarm`, and `ecomode` as **OMX runtime workflows**, not generic prompt aliases. +- Auto-activate runtime workflows only when the current session is actually running under OMX CLI/runtime (for example, launched via `omx`, with OMX session overlay/runtime state available, or when the user explicitly asks to run `omx ...` in the shell). +- In Codex App or plain Codex sessions without OMX runtime, do **not** treat those keywords alone as activation. Explain that they require OMX CLI runtime support, and continue with the nearest App-safe surface (`deep-interview`, `ralplan`, `plan`, or native subagents) unless the user explicitly wants you to launch OMX from the shell. +- When deep-interview is active in OMX CLI/runtime, ask interview rounds via `omx question`; do not substitute `request_user_input` or ad hoc plain-text questioning, and respect Stop-hook blocking while a deep-interview question obligation is pending. + + +## Triage: advisory prompt-routing context + +The keyword detector is the first and deterministic routing surface. Triage runs only when no keyword matches. + +When active, triage emits **advisory prompt-routing context** — a developer-context string that the model may follow. It does not activate a skill or workflow by itself. It is a best-effort hint, not a guarantee. + +Note: `explore`, `executor`, and `designer` are agent role-prompt files under `prompts/`, not workflow skills. + +Explicit keywords remain the deterministic control surface when you want explicit, guaranteed routing — use them whenever exact behavior matters. + +To opt out per prompt with phrases such as `no workflow`, `just chat`, or `plain answer` — the triage layer will suppress context injection for that prompt. + + +Ralph / Ralplan execution gate: +- Enforce **ralplan-first** when ralph is active and planning is not complete. +- Planning is complete only after both `.omx/plans/prd-*.md` and `.omx/plans/test-spec-*.md` exist. +- Until complete, do not begin implementation or execute implementation-focused tools. + + +--- + + +Skills are workflow commands. +Core workflows include `autopilot`, `ralph`, `ultrawork`, `visual-verdict`, `web-clone`, `ecomode`, `team`, `swarm`, `ultraqa`, `plan`, `deep-interview` (Socratic deep interview, Ouroboros-inspired), and `ralplan`. +Utilities include `cancel`, `note`, `doctor`, `help`, and `trace`. + + +--- + + +Common team compositions remain available when explicit team orchestration is warranted, for example feature development, bug investigation, code review, and UX audit. + + +--- + + +Team mode is the structured multi-agent surface. +Canonical pipeline: +`team-plan -> team-prd -> team-exec -> team-verify -> team-fix (loop)` + +Use it when durable staged coordination is worth the overhead. Otherwise, stay direct. +Terminal states: `complete`, `failed`, `cancelled`. + + +--- + + +Team/Swarm workers currently share one `agentType` and one launch-arg set. +Model precedence: +1. Explicit model in `OMX_TEAM_WORKER_LAUNCH_ARGS` +2. Inherited leader `--model` +3. Low-complexity default model from `OMX_DEFAULT_SPARK_MODEL` (legacy alias: `OMX_SPARK_MODEL`) + +Normalize model flags to one canonical `--model ` entry. +Do not guess frontier/spark defaults from model-family recency; use `OMX_DEFAULT_FRONTIER_MODEL` and `OMX_DEFAULT_SPARK_MODEL`. + + + +## Model Capability Table + +Auto-generated by `omx setup` from the current `config.toml` plus OMX model overrides. + +| Role | Model | Reasoning Effort | Use Case | +| --- | --- | --- | --- | +| Frontier (leader) | `gpt-5.5` | high | Primary leader/orchestrator for planning, coordination, and frontier-class reasoning. | +| Spark (explorer/fast) | `gpt-5.3-codex-spark` | low | Fast triage, explore, lightweight synthesis, and low-latency routing. | +| Standard (subagent default) | `gpt-5.5` | high | Default standard-capability model for installable specialists and secondary worker lanes unless a role is explicitly frontier or spark. | +| `explore` | `gpt-5.3-codex-spark` | low | Fast codebase search and file/symbol mapping (fast-lane, fast) | +| `analyst` | `gpt-5.5` | medium | Requirements clarity, acceptance criteria, hidden constraints (frontier-orchestrator, frontier) | +| `planner` | `gpt-5.4-mini` | high | Task sequencing, execution plans, risk flags (frontier-orchestrator, frontier) | +| `architect` | `gpt-5.4-mini` | high | System design, boundaries, interfaces, long-horizon tradeoffs (frontier-orchestrator, frontier) | +| `debugger` | `gpt-5.5` | high | Root-cause analysis, regression isolation, failure diagnosis (deep-worker, standard) | +| `executor` | `gpt-5.5` | medium | Code implementation, refactoring, feature work (deep-worker, standard) | +| `team-executor` | `gpt-5.5` | medium | Supervised team execution for conservative delivery lanes (deep-worker, frontier) | +| `verifier` | `gpt-5.5` | high | Completion evidence, claim validation, test adequacy (frontier-orchestrator, standard) | +| `code-reviewer` | `gpt-5.5` | high | Comprehensive review across all concerns (frontier-orchestrator, frontier) | +| `dependency-expert` | `gpt-5.5` | high | External SDK/API/package evaluation (frontier-orchestrator, standard) | +| `test-engineer` | `gpt-5.5` | medium | Test strategy, coverage, flaky-test hardening (deep-worker, frontier) | +| `designer` | `gpt-5.5` | high | UX/UI architecture, interaction design (deep-worker, standard) | +| `writer` | `gpt-5.5` | high | Documentation, migration notes, user guidance (fast-lane, standard) | +| `git-master` | `gpt-5.5` | high | Commit strategy, history hygiene, rebasing (deep-worker, standard) | +| `code-simplifier` | `gpt-5.5` | high | Simplifies recently modified code for clarity and consistency without changing behavior (deep-worker, frontier) | +| `researcher` | `gpt-5.4-mini` | high | External documentation and reference research (fast-lane, standard) | +| `prometheus-strict-metis` | `gpt-5.5` | high | Prometheus Strict requirements interviewer and ambiguity mapper (frontier-orchestrator, frontier) | +| `prometheus-strict-momus` | `gpt-5.5` | high | Prometheus Strict adversarial plan critic and risk challenger (frontier-orchestrator, frontier) | +| `prometheus-strict-oracle` | `gpt-5.5` | high | Prometheus Strict implementation readiness verifier and handoff judge (frontier-orchestrator, standard) | +| `critic` | `gpt-5.5` | high | Plan/design critical challenge and review (frontier-orchestrator, frontier) | +| `scholastic` | `gpt-5.5` | high | Ontology-first reasoning reviewer: category mistakes, hidden assumptions, modality separation, scholastic critique, and minimal-repair proposals (frontier-orchestrator, frontier) | +| `vision` | `gpt-5.5` | low | Image/screenshot/diagram analysis (fast-lane, frontier) | + + +--- + + +Verify before claiming completion. + +Sizing guidance: +- Small changes: lightweight verification +- Standard changes: standard verification +- Large or security/architectural changes: thorough verification + + +Verification loop: identify what proves the claim, run the verification, read the output, then report with evidence. If verification fails, continue iterating rather than reporting incomplete work. Default to quality-first evidence summaries: think one more step before declaring completion, and include enough detail to make the proof actionable without padding. + +- Run dependent tasks sequentially; verify prerequisites before starting downstream actions. +- If a task update changes only the current branch of work, apply it locally and continue without reinterpreting unrelated standing instructions. +- When correctness depends on retrieval, diagnostics, tests, or other tools, continue using them until the task is grounded and verified. + + + + +Mode selection: +- Use `$deep-interview` first when the request is broad, intent/boundaries are unclear, or the user says not to assume. +- Use `$ralplan` when the requirements are clear enough but architecture, tradeoffs, or test strategy still need consensus. +- Use `$team` when the approved plan has multiple independent lanes, shared blockers, or durable coordination needs. +- Use `$ralph` when the approved plan should stay in a persistent completion / verification loop with one owner. +- Otherwise execute directly in solo mode. +- Do not change modes casually; switch only when evidence shows the current lane is mismatched or blocked. + +Command routing: +- When `USE_OMX_EXPLORE_CMD` enables advisory routing, strongly prefer `omx explore` as the default surface for simple read-only repository lookup tasks (files, symbols, patterns, relationships). +- For simple file/symbol lookups, use `omx explore` FIRST before attempting full code analysis. + +When to use what: +- Use `omx explore --prompt ...` for simple read-only lookups. +- Use `omx sparkshell` for noisy read-only shell commands, bounded verification runs, repo-wide listing/search, or tmux-pane summaries; `omx sparkshell --tmux-pane ...` is explicit opt-in. +- Keep ambiguous, implementation-heavy, edit-heavy, or non-shell-only work on the richer normal path. +- `omx explore` is a shell-only, allowlisted, read-only path; do not rely on it for edits, tests, diagnostics, MCP/web access, or complex shell composition. +- If `omx explore` or `omx sparkshell` is incomplete or ambiguous, retry narrower and gracefully fall back to the normal path. + +Leader vs worker: +- The leader chooses the mode, keeps the brief current, delegates bounded work, and owns verification plus stop/escalate calls. +- Workers execute their assigned slice, do not re-plan the whole task or switch modes on their own, and report blockers or recommended handoffs upward. +- Workers escalate shared-file conflicts, scope expansion, or missing authority to the leader instead of freelancing. + +Stop / escalate: +- Stop when the task is verified complete, the user says stop/cancel, or no meaningful recovery path remains. +- Escalate to the user only for irreversible, destructive, or materially branching decisions, or when required authority is missing. +- Escalate from worker to leader for blockers, scope expansion, shared ownership conflicts, or mode mismatch. +- `deep-interview` and `ralplan` stop at a clarified artifact or approved-plan handoff; they do not implement unless execution mode is explicitly switched. + +Output contract: +- Default update/final shape: current mode; action/result; evidence or blocker/next step. +- Keep rationale once; do not restate the full plan every turn. +- Expand only for risk, handoff, or explicit user request. + +Parallelization: +- Run independent tasks in parallel. +- Run dependent tasks sequentially. +- Use background execution for builds and tests when helpful. +- Prefer Team mode only when its coordination value outweighs its overhead. +- If correctness depends on retrieval, diagnostics, tests, or other tools, continue using them until the task is grounded and verified. + +Anti-slop workflow: +- Cleanup/refactor/deslop work still follows the same `$deep-interview` -> `$ralplan` -> `$team`/`$ralph` path; use `$ai-slop-cleaner` as a bounded helper inside the chosen execution lane, not as a competing top-level workflow. +- Lock behavior with tests first, then make one smell-focused pass at a time. +- Prefer deletion, reuse, and boundary repair over new layers. +- Keep writer/reviewer pass separation for cleanup plans and approvals. + +Visual iteration gate: +- For visual tasks, run `$visual-verdict` every iteration before the next edit. +- Persist verdict JSON in `.omx/state/{scope}/ralph-progress.json`. + +Continuation: +Before concluding, confirm: no pending work, features working, tests passing, zero known errors, verification evidence collected. If not, continue. + +Ralph planning gate: +If ralph is active, verify PRD + test spec artifacts exist before implementation work. + + + +Use the `cancel` skill to end execution modes. +Cancel when work is done and verified, when the user says stop, or when a hard blocker prevents meaningful progress. +Do not cancel while recoverable work remains. + + +--- + + +Hooks own normal skill-active and workflow-state persistence under `.omx/state/`. + +OMX persists runtime state under `.omx/`: +- `.omx/state/` — mode state +- `.omx/notepad.md` — session notes +- `.omx/project-memory.json` — cross-session memory +- `.omx/plans/` — plans +- `.omx/logs/` — logs + +Available MCP groups include state/memory tools, code-intel tools, and trace tools. + +Agents may use OMX state/MCP tools for explicit lifecycle transitions, recovery, checkpointing, cancellation cleanup, or compaction resilience. +Do not manually duplicate hook-owned activation state unless recovering from missing or stale state. + + +--- + +## Setup + +Execute `omx setup` to install all components. Execute `omx doctor` to verify installation. + +@/home/smog/.codex/RTK.md + + + +**Session:** omx-1783886220848-ugrwhe | 2026-07-12T19:57:02.802Z + +**Native Subagent Routing:** +When spawning Codex native subagents, always set `agent_type` to an installed OMX role. +Use the most specific role (`architect`, `code-reviewer`, `critic`, `planner`, `debugger`, etc.); use `executor` only for generic implementation work. +Never omit `agent_type` for OMX work: untyped Task subagents appear as default subagents and lose role-specific prompts/routing. + +**Repository Lookup Routing:** use normal Codex repository inspection tools/subagents as the default surface for simple read-only repository lookup and implementation context. +- Use `omx sparkshell -- ` only for explicit shell-native read-only evidence or `--tmux-pane` summaries; it does not replace raw evidence capture. + +**Compaction Protocol:** +Before context compaction, preserve critical state: +1. Write progress checkpoint via `omx state write --input '' --json` +2. Save key decisions via `omx notepad write-working --input '' --json` +3. Before large Team work near compaction, reload `.omx/state/team//preflight-context.json` +4. If context is >80% full, proactively checkpoint state + + diff --git a/.omx/state/sessions/omx-1783886220848-ugrwhe/hud-state.json b/.omx/state/sessions/omx-1783886220848-ugrwhe/hud-state.json new file mode 100644 index 0000000..13f7737 --- /dev/null +++ b/.omx/state/sessions/omx-1783886220848-ugrwhe/hud-state.json @@ -0,0 +1,6 @@ +{ + "last_turn_at": "2026-07-12T20:05:19.938Z", + "last_progress_at": "2026-07-12T20:05:19.938Z", + "turn_count": 1, + "last_agent_output": "Готов продолжить, но в этой сессии мне недоступен терминальный инструмент для просмотра и изменения " +} \ No newline at end of file diff --git a/.omx/state/sessions/omx-1783886220848-ugrwhe/notify-hook-state.json b/.omx/state/sessions/omx-1783886220848-ugrwhe/notify-hook-state.json new file mode 100644 index 0000000..9a88f8f --- /dev/null +++ b/.omx/state/sessions/omx-1783886220848-ugrwhe/notify-hook-state.json @@ -0,0 +1,6 @@ +{ + "recent_turns": { + "019f57e4-d006-76e2-b9bf-99950205bb6d|019f57ee-f2d7-7392-b4c5-421e31f54265|agent-turn-complete": 1783886719927 + }, + "last_event_at": "2026-07-12T20:05:19.928Z" +} \ No newline at end of file diff --git a/.omx/state/subagent-tracking.json b/.omx/state/subagent-tracking.json new file mode 100644 index 0000000..9127346 --- /dev/null +++ b/.omx/state/subagent-tracking.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "sessions": { + "omx-1783886220848-ugrwhe": { + "session_id": "omx-1783886220848-ugrwhe", + "leader_thread_id": "019f57e4-d006-76e2-b9bf-99950205bb6d", + "updated_at": "2026-07-12T20:05:19.929Z", + "threads": { + "019f57e4-d006-76e2-b9bf-99950205bb6d": { + "thread_id": "019f57e4-d006-76e2-b9bf-99950205bb6d", + "kind": "leader", + "first_seen_at": "2026-07-12T20:05:19.929Z", + "last_seen_at": "2026-07-12T20:05:19.929Z", + "last_turn_id": "019f57ee-f2d7-7392-b4c5-421e31f54265", + "turn_count": 1 + } + } + }, + "019f57e4-d006-76e2-b9bf-99950205bb6d": { + "session_id": "019f57e4-d006-76e2-b9bf-99950205bb6d", + "leader_thread_id": "019f57e4-d006-76e2-b9bf-99950205bb6d", + "updated_at": "2026-07-13T16:20:24.425Z", + "threads": { + "019f57e4-d006-76e2-b9bf-99950205bb6d": { + "thread_id": "019f57e4-d006-76e2-b9bf-99950205bb6d", + "kind": "leader", + "first_seen_at": "2026-07-13T16:20:24.425Z", + "last_seen_at": "2026-07-13T16:20:24.425Z", + "last_turn_id": "019f5c47-837d-7491-84c8-6e32542b3ec2", + "turn_count": 1 + } + } + }, + "019f5c48-1130-7663-b700-14621eff9671": { + "session_id": "019f5c48-1130-7663-b700-14621eff9671", + "leader_thread_id": "019f5c48-1130-7663-b700-14621eff9671", + "updated_at": "2026-07-13T16:21:43.903Z", + "threads": { + "019f5c48-1130-7663-b700-14621eff9671": { + "thread_id": "019f5c48-1130-7663-b700-14621eff9671", + "kind": "leader", + "first_seen_at": "2026-07-13T16:21:43.903Z", + "last_seen_at": "2026-07-13T16:21:43.903Z", + "last_turn_id": "019f5c48-2c0f-7102-9710-8f60fbe7db48", + "turn_count": 1 + } + } + } + } +} diff --git a/.omx/state/team-leader-nudge.json b/.omx/state/team-leader-nudge.json new file mode 100644 index 0000000..96f0509 --- /dev/null +++ b/.omx/state/team-leader-nudge.json @@ -0,0 +1,5 @@ +{ + "last_nudged_by_team": {}, + "last_idle_nudged_by_team": {}, + "progress_by_team": {} +} \ No newline at end of file diff --git a/.omx/state/tmux-extended-keys/tmp-tmux-1000-default.json b/.omx/state/tmux-extended-keys/tmp-tmux-1000-default.json new file mode 100644 index 0000000..68b61b9 --- /dev/null +++ b/.omx/state/tmux-extended-keys/tmp-tmux-1000-default.json @@ -0,0 +1,11 @@ +{ + "originalMode": "off", + "holders": [ + { + "id": "68736-1783886223054-29cab331337a6", + "pid": 68736, + "platform": "linux", + "linuxStartTicks": 1155192 + } + ] +} \ No newline at end of file diff --git a/.omx/state/tmux-hook-state.json b/.omx/state/tmux-hook-state.json new file mode 100644 index 0000000..a3d53d0 --- /dev/null +++ b/.omx/state/tmux-hook-state.json @@ -0,0 +1,9 @@ +{ + "total_injections": 0, + "pane_counts": {}, + "session_counts": {}, + "recent_keys": {}, + "last_injection_ts": 0, + "last_reason": "disabled", + "last_event_at": "2026-07-13T16:21:43.917Z" +} \ No newline at end of file diff --git a/.omx/state/update-check.json b/.omx/state/update-check.json new file mode 100644 index 0000000..9bc7480 --- /dev/null +++ b/.omx/state/update-check.json @@ -0,0 +1,4 @@ +{ + "last_checked_at": "2026-07-12T19:57:00.848Z", + "last_seen_latest": "0.20.1" +} \ No newline at end of file diff --git a/PI-BACKUP-README.md b/PI-BACKUP-README.md new file mode 100644 index 0000000..f2d733e --- /dev/null +++ b/PI-BACKUP-README.md @@ -0,0 +1,544 @@ +# Бэкап среды Pi Coding Agent + +Файлы рядом: + +- `pi-env-backup.sh` — скрипт создания, проверки и восстановления бэкапа; +- `PI-BACKUP-README.md` — эта инструкция. + +Скрипт переносит именно среду Pi, а не проекты. + +## Что сохраняется + +- `~/.pi/agent/settings.json` — глобальные настройки Pi; +- `~/.pi/agent/auth.json` — авторизация и API-ключи; +- `~/.pi/agent/mcp.json` и `~/.pi/agent/mcp-oauth/` — MCP; +- `~/.pi/agent/models.json`, `models.yml` — настройки моделей; +- `~/.pi/agent/extensions/`, `skills/`, `npm/`, `git/` — плагины и Pi packages; +- `~/.pi/agent/AGENTS.md`, `keybindings.json`, `trust.json`; +- `~/.pi/agent/sessions/` — история сессий (**по умолчанию не сохраняется**); +- `~/.pi/agent/pi-hermes-memory/` и `projects-memory/` — память; +- `~/.pi/context-mode/` — индексы и локальные данные context-mode (**по умолчанию не сохраняются**); +- `~/.pi/agent/ayu/checkpoints/` — checkpoints (**по умолчанию не сохраняются**); +- `~/.agents/` — дополнительные пользовательские skills; +- `~/.pi/local-docs/`, если каталог существует. + +Архив также содержит манифест версий установленных программ и копию самого скрипта для восстановления. + +> **Внимание:** архив содержит секреты из `auth.json`, MCP OAuth и других конфигов. Не выкладывай его в публичное хранилище. + +--- + +## 1. Создать полный бэкап + +Закрой все запущенные Pi: + +```bash +pkill -f pi-coding-agent || true +``` + +Создай каталог для архивов и запусти: + +```bash +mkdir -p ~/pi-backups +cd /home/smog/main +./pi-env-backup.sh backup ~/pi-backups +``` + +Или сразу на внешний диск: + +```bash +./pi-env-backup.sh backup /media/smog/SSD +``` + +На выходе будут два файла: + +```text +pi-backup-YYYYMMDD-HHMMSS.tar.zst +pi-backup-YYYYMMDD-HHMMSS.tar.zst.sha256 +``` + +По умолчанию архив НЕ включает `ayu/checkpoints`, историю Pi-сессий и `context-mode`: это кэш/история, не нужные для работы плагинов. Поэтому архив обычно будет порядка **0.8–1 ГБ до сжатия** и ориентировочно **0.4–0.8 ГБ после zstd**. Точный размер скрипт покажет в конце. + +--- + +## 2. Проверить архив + +Посмотреть содержимое: + +```bash +./pi-env-backup.sh list ~/pi-backups/pi-backup-*.tar.zst +``` + +Проверить контрольную сумму: + +```bash +sha256sum -c ~/pi-backups/pi-backup-*.tar.zst.sha256 +``` + +--- + +## 3. Дополнительные варианты бэкапа + +По умолчанию уже создаётся облегчённый бэкап: плагины, настройки, auth, MCP, memory и skills сохраняются, а checkpoints/сессии/context-mode — нет. + +Включить историю старых Pi-сессий: + +```bash +PI_BACKUP_INCLUDE_SESSIONS=1 \ + ./pi-env-backup.sh backup ~/pi-backups +``` + +Включить context-mode индексы: + +```bash +PI_BACKUP_INCLUDE_CONTEXT=1 \ + ./pi-env-backup.sh backup ~/pi-backups +``` + +Включить старые ayu checkpoints (обычно не нужно): + +```bash +PI_BACKUP_INCLUDE_AYU=1 \ + ./pi-env-backup.sh backup ~/pi-backups +``` + +Включить всё сразу: + +```bash +PI_BACKUP_INCLUDE_SESSIONS=1 \ +PI_BACKUP_INCLUDE_CONTEXT=1 \ +PI_BACKUP_INCLUDE_AYU=1 \ + ./pi-env-backup.sh backup ~/pi-backups +``` + +Настройки, auth, MCP, memory, плагины и skills сохраняются во всех вариантах. + +--- + +## 4. Восстановить на ноутбуке в WSL + +На ноутбуке установи базовые инструменты: + +```bash +sudo apt update +sudo apt install -y zstd nodejs npm +``` + +Передай на ноутбук архив и `.sha256` рядом с ним. Если бэкап был скачан из этого Git-репозитория, сначала забери LFS-архив: + +```bash +git lfs pull +``` + +Проверь архив: + +```bash +sha256sum -c pi-backup-YYYYMMDD-HHMMSS.tar.zst.sha256 +``` + +Извлеки встроенную копию restore-скрипта: + +```bash +zstd -dc pi-backup-YYYYMMDD-HHMMSS.tar.zst \ + | tar -xOf - meta/pi-env-backup.sh > pi-env-restore.sh + +chmod +x pi-env-restore.sh +``` + +Запусти восстановление: + +```bash +./pi-env-restore.sh restore pi-backup-YYYYMMDD-HHMMSS.tar.zst +``` + +Скрипт распакует Pi-среду в домашний каталог текущего пользователя WSL. Если `~/.pi/agent` уже существует, он сначала переименует его в каталог вида: + +```text +~/.pi/agent.before-restore-YYYYMMDD-HHMMSS +``` + +Если Pi ещё не установлен, скрипт установит его так: + +```bash +npm install -g --ignore-scripts @earendil-works/pi-coding-agent +``` + +--- + +## 5. Проверить восстановление + +```bash +pi --version +pi list +``` + +Запусти Pi в одном из своих проектов: + +```bash +cd ~/main/имя-проекта +pi +``` + +Проверь: + +```text +/mcp +/login # только если OAuth/API-ключ не восстановился +``` + +Если какие-то внешние программы нужны плагинам, установи их отдельно: `bun`, `pnpm`, `uv`, `gh`, `jj`, `docker` и т.п. Их бинарники не копируются архивом — архив переносит состояние Pi и список обнаруженных инструментов в `meta/MANIFEST.txt`. + +--- + +## 6. Важные замечания + +1. Перед созданием архива закрывай Pi, чтобы не копировать активные session/SQLite-файлы. +2. Не используй `PI_BACKUP_ALLOW_RUNNING=1`, если нет особой причины. +3. Архив — это переносимая копия пользовательской Pi-среды, но не копия всей ОС. +4. Проекты не входят в этот архив: они уже есть в WSL отдельно. +5. Project-local файлы вроде `project/.pi/`, `project/.agents/`, `AGENTS.md` и `CLAUDE.md` не входят в глобальный архив, если находятся внутри проектов. Их нужно хранить вместе с проектами или отдельно скопировать. +6. Некоторые OAuth-провайдеры могут потребовать повторный `/login` на новом ноутбуке. + +--- + + +## 7. Восстановление Pi без бэкап-архива + +Снимок конфигурации создан автоматически **2026-07-14**. В нём нет `auth.json`, OAuth-токенов и API-ключей: после ручной установки потребуется выполнить `/login` или задать свои ключи. + +### Базовая установка + +```bash +sudo apt update && sudo apt install -y nodejs npm git +npm install -g --ignore-scripts @earendil-works/pi-coding-agent +pi --version +``` + +Текущая версия Pi: `0.80.6`. + +### Pi-пакеты и плагины + +Установить каждый источник через `pi install` (команда добавит его в глобальные настройки Pi): + +```bash +pi install npm:@upstash/context7-pi +``` +```bash +pi install npm:pi-obsidian +``` +```bash +pi install npm:context-mode +``` +```bash +pi install npm:pi-subagents +``` +```bash +pi install npm:pi-mcp-adapter +``` +```bash +pi install npm:@juicesharp/rpiv-ask-user-question +``` +```bash +pi install npm:pi-simplify +``` +```bash +pi install npm:@juicesharp/rpiv-btw +``` +```bash +pi install npm:@plannotator/pi-extension +``` +```bash +pi install npm:pi-chrome +``` +```bash +pi install git:github.com/rawwerks/ypi@07560b9a0045d6ddbfc142dc02f9eaf58f18eeac +``` +```bash +pi install npm:@tmustier/pi-ralph-wiggum +``` +```bash +pi install npm:pi-hermes-memory +``` +```bash +pi install npm:@hypabolic/pi-hypa +``` +```bash +pi install npm:@ayulab/pi-rewind +``` +```bash +pi install npm:bigpowers +``` +```bash +pi install npm:pi-web-access +``` +```bash +pi install npm:@mjasnikovs/pi-task +``` +```bash +pi install npm:@sting8k/pi-vcc +``` + +Зафиксированные версии, установленные на момент создания документа: + +| Источник | Версия | +| --- | --- | +| `npm:@upstash/context7-pi` | `0.1.1` | +| `npm:pi-obsidian` | `0.2.3` | +| `npm:context-mode` | `1.0.169` | +| `npm:pi-subagents` | `0.34.0` | +| `npm:pi-mcp-adapter` | `2.11.0` | +| `npm:@juicesharp/rpiv-ask-user-question` | `1.20.0` | +| `npm:pi-simplify` | `0.2.2` | +| `npm:@juicesharp/rpiv-btw` | `1.20.0` | +| `npm:@plannotator/pi-extension` | `0.23.1` | +| `npm:pi-chrome` | `0.15.46` | +| `git:github.com/rawwerks/ypi@07560b9a0045d6ddbfc142dc02f9eaf58f18eeac` | `0.6.0` | +| `npm:@tmustier/pi-ralph-wiggum` | `0.2.2` | +| `npm:pi-hermes-memory` | `0.8.0` | +| `npm:@hypabolic/pi-hypa` | `0.1.11` | +| `npm:@ayulab/pi-rewind` | `0.4.5` | +| `npm:bigpowers` | `2.76.3` | +| `npm:pi-web-access` | `0.13.0` | +| `npm:@mjasnikovs/pi-task` | `0.18.14` | +| `npm:@sting8k/pi-vcc` | `0.4.0` | + +### Локальные extensions + +Эти extensions не публикуются как Pi-пакеты — их надо отдельно скопировать из исходной машины/резервной копии в `~/.pi/agent/extensions/`: + +- `codex-limit-watcher.ts` +- `herdr-agent-state.ts` +- `pi-permission-system` +- `rtk.ts` + +### MCP + +Текущий MCP-конфиг (`~/.pi/agent/mcp.json`) содержит один сервер: + +| Имя | Тип | Команда / адрес | +| --- | --- | --- | +| `chrome-devtools` | stdio | `/home//.local/bin/chrome-devtools-mcp-hard` | + +На ноутбуке создай `~/.pi/agent/mcp.json` без секретов, например: + +```json +{ + "mcpServers": { + "chrome-devtools": { + "command": "/home//.local/bin/chrome-devtools-mcp-hard" + } + } +} +``` + +Указанный wrapper `chrome-devtools-mcp-hard` — локальный бинарник; его также нужно установить/скопировать и сделать исполняемым. + +### Skills + +Всего найдено: **187**. Skills, поставляемые Pi-пакетами, вернутся после установки соответствующего пакета выше. Skills с источником `local` нужно отдельно скопировать из `~/.agents/skills` или `~/.pi/agent/skills`. + +| Skill | Источник | Описание | +| --- | --- | --- | +| `caveman` | `local ~/.agents` | > | +| `find-skills` | `local ~/.agents` | Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill. | +| `brandkit` | `local ~/.agents` | Premium brand-kit image generation skill for creating high-end brand-guidelines boards, logo systems, identity decks, and visual-world presentations. Trained for minimalist, cinematic, editorial, dark-tech, luxury, cultural, security, gaming, developer-tool, and consumer-app brand systems. Optimized for intentional logo concepting, refined composition, sparse typography, strong symbolic meaning, premium mockups, art-directed imagery, and flexible grid layouts. | +| `industrial-brutalist-ui` | `local ~/.agents` | Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints. | +| `gpt-taste` | `local ~/.agents` | Elite UX/UI & Advanced GSAP Motion Engineer. Enforces Python-driven true randomization for layout variance, strict AIDA page structure, wide editorial typography (bans 6-line wraps), gapless bento grids, strict GSAP ScrollTriggers (pinning, stacking, scrubbing), inline micro-images, and massive section spacing. | +| `image-to-code` | `local ~/.agents` | Elite website image-to-code skill for Codex. For visually important web tasks, it must first generate the design image(s) itself, deeply analyze them, then implement the website to match them as closely as possible. In Codex, it must prefer large, readable, section-specific images instead of tiny compressed boards, generate fresh standalone images for sections or detail views instead of cropping old ones, avoid lazy under-generation, avoid cards-inside-cards-inside-cards UI, and keep the hero clean, spacious, readable, and visible on a small laptop. | +| `imagegen-frontend-mobile` | `local ~/.agents` | Elite mobile app image-generation skill for creating premium, app-native screen concepts and flows. Designed for iOS, Android, and cross-platform mobile products. Prioritizes clean hierarchy, comfortably readable text, strong multi-screen consistency, controlled color palettes, non-generic creative direction, textured surfaces, image-led composition, tasteful custom iconography, and clean phone mockup framing. By default, screens should be shown inside a subtle premium iPhone or similar phone mockup with a visible frame, while the main focus stays on the app content itself. This skill generates images only. It does not write code. | +| `imagegen-frontend-web` | `local ~/.agents` | Elite frontend image-direction skill for generating premium, conversion-aware website design references. CRITICAL OUTPUT RULE — generate ONE separate horizontal image FOR EVERY section. A landing page with 8 sections produces 8 images. Never compress multiple sections into one image. Enforces composition variety (not always left-text / right-image), background-image freedom, varied CTAs, varied hero scales (giant / mid / mini minimalist), narrative concept spine, second-read moments, and a single consistent palette across all images. Optimized for landing pages, marketing sites, and product comps that developers or coding models can accurately recreate. | +| `minimalist-ui` | `local ~/.agents` | Clean editorial-style interfaces. Warm monochrome palette, typographic contrast, flat bento grids, muted pastels. No gradients, no heavy shadows. | +| `full-output-enforcement` | `local ~/.agents` | Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output. | +| `redesign-existing-projects` | `local ~/.agents` | Upgrades existing websites and apps to premium quality. Audits current design, identifies generic AI patterns, and applies high-end design standards without breaking functionality. Works with any CSS framework or vanilla CSS. | +| `high-end-visual-design` | `local ~/.agents` | Teaches the AI to design like a high-end agency. Defines the exact fonts, spacing, shadows, card structures, and animations that make a website feel expensive. Blocks all the common defaults that make AI designs look cheap or generic. | +| `stitch-design-taste` | `local ~/.agents` | Semantic Design System Skill for Google Stitch. Generates agent-friendly DESIGN.md files that enforce premium, anti-generic UI standards — strict typography, calibrated color, asymmetric layouts, perpetual micro-motion, and hardware-accelerated performance. | +| `design-taste-frontend-v1` | `local ~/.agents` | The original v1 taste-skill, preserved for projects depending on its exact behavior. The current default is \`design-taste-frontend\` (v2 experimental), which is a substantial rewrite. Use this v1 install name only if you need exact backward compatibility. | +| `design-taste-frontend` | `local ~/.agents` | Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check. | +| `context7-docs` | `npm:@upstash/context7-pi` | >- | +| `align-grid` | `npm:bigpowers` | Build editorial/magazine/report webpages on a GENUINE Müller-Brockmann modular grid (International Typographic Style) — not a decorative one. Encodes the discipline (columns + modules + baseline, grotesque type, flush-left, restrained black/white/red palette) AND the hard-won front-end engineering to make the grid real, visible, and verified: one CSS-variable source of truth, an interactive grid-toggle overlay that lives in the SAME content box as the content, subgrid \"bands\" so every element snaps to a column line, an 8px baseline lock, and runtime OPTICAL ALIGNMENT that puts display type's ink (not its box) on the line. Ships with a scaffold generator and a Puppeteer verification harness that proves 0px adherence. | +| `assess-impact` | `npm:bigpowers` | Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks \"what does this break?\". | +| `audit-code` | `npm:bigpowers` | Self-review checklist for the coding agent to run before dispatching a reviewer. Checks CONVENTIONS.md compliance, Boy Scout Rule, test coverage, types, and SOLID. Produces a pass/fail checklist. Use before request-review, before committing, or when user asks for a code quality check. | +| `audit-plan` | `npm:bigpowers` | Evaluate an incoming project plan against bigpowers principles and conventions, surface gaps, and produce a READY/NOT READY verdict before engagement begins. Use when a new project arrives, when adapting a foreign plan, or before running seed-conventions on an unfamiliar codebase. | +| `build-epic` | `npm:bigpowers` | Eight-step epic build cycle — reads state.yaml, execution-status.yaml, and one epic capsule; updates status via bp-yaml-set or direct edit. Resume mode runs one step per invocation. Use instead of ad-hoc execute-plan for release work. | +| `change-request` | `npm:bigpowers` | Add a new requirement or reorder epics by WSJF against specs/release-plan.yaml and epic capsule directories. Modes Add and Reorder. Use when a new requirement arrives mid-release or the plan needs prioritization. | +| `commit-message` | `npm:bigpowers` | Reviews working-tree changes, then drafts a Conventional Commits title/body and states the semantic-release version bump a single such commit would imply. Also notes which defensive-code categories were touched. Use when the user wants to commit recent work, prepare a Conventional Commits message, or asks for semantic-release / semver-consistent messaging before git commit. | +| `compose-workflow` | `npm:bigpowers` | Chain multiple bigpowers skills into a custom workflow recipe saved in specs/. Use when a project repeats a non-standard skill sequence, or user wants a documented playbook beyond orchestrate-project modes. | +| `context7-mcp` | `npm:bigpowers` | Fetch current library docs via Context7 MCP instead of training data. Use when user asks about frameworks, APIs, setup, or code examples for React, Next.js, Prisma, etc. | +| `craft-skill` | `npm:bigpowers` | Create new bigpowers skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill for the bigpowers lifecycle. | +| `deepen-architecture` | `npm:bigpowers` | Find deepening opportunities in a codebase, informed by the domain language in specs/tech-architecture/tech-stack.md and the decisions in specs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. | +| `define-language` | `npm:bigpowers` | Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\". | +| `define-success` | `npm:bigpowers` | Convert an imperative task statement into explicit \"step → verify: \" pairs before implementation begins. Use before plan-work when success criteria are unclear, when a task lacks verifiable checkpoints, or when user says \"how will we know this is done?\". | +| `delegate-task` | `npm:bigpowers` | Delegate one complex task to a single subagent, review its work in two stages before merging back. Sequential — one agent at a time, with oversight. Use when a task is complex and requires careful review before the result is accepted. Distinct from dispatch-agents (no parallelism here; reviewer sees full diff before proceeding). | +| `deploy` | `npm:bigpowers` | Build → verify artifact → deploy → wait → smoke deployment pipeline. Platform-agnostic (MCP or CLI), with configurable timeout, retry with exponential backoff, and integrated health-check. The deploy half of CI/CD: run after build to push to production. | +| `design-interface` | `npm:bigpowers` | Generate multiple radically different interface designs for a module using parallel sub-agents, then compare trade-offs. Based on \"Design It Twice\" from A Philosophy of Software Design. Use when user wants to design an API, explore interface options, compare module shapes, or mentions \"design it twice\". | +| `develop-tdd` | `npm:bigpowers` | Test-driven development with red-green-refactor loop using vertical slices. Use for features (epic tasks) or bugs (specs/bugs/BUG-*.md). | +| `diagnose-root` | `npm:bigpowers` | Run 4-phase root cause analysis — reproduce, isolate, hypothesize, verify. Use when a bug is confirmed but root cause is unclear, after investigate-bug, or when user mentions root cause analysis. | +| `diagnose-stall` | `npm:bigpowers` | Diagnose why agent orchestration stopped producing progress — silent stalls in /loop, dispatch-agents, or execute-plan. Use when work appears hung, no output for several minutes, or a subagent never returned. | +| `dispatch-agents` | `npm:bigpowers` | Dispatch multiple subagents in parallel on independent tasks. No waiting between them — all run concurrently. Use when tasks are truly decoupled and speed matters. Distinct from delegate-task (concurrent here, no inter-task review gate). | +| `edit-document` | `npm:bigpowers` | Edit and improve documents by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, restructure, or improve any document — including specs/ files, articles, READMEs, or technical writing. | +| `elaborate-spec` | `npm:bigpowers` | Refine a rough idea into a clear, detailed specification through dialogue. Does not produce code. Use when user has a vague idea, wants to think through a feature before planning, or needs to turn \"I want X\" into a concrete spec. | +| `enforce-first` | `npm:bigpowers` | Apply the F.I.R.S.T test quality rubric (per CONVENTIONS.md §Tests) to a test suite or individual tests. Use when develop-tdd is writing tests, when test quality needs to be checked, or when user mentions F.I.R.S.T or \"test quality\". | +| `evolve-skill` | `npm:bigpowers` | Benchmark-gated skill evolution — consume bigpowers-benchmark report, propose plan-work change, edit skill via craft-skill, re-run benchmark, record ADR. Use when a skill underperforms on benchmark or stocktake finds systemic gap. | +| `execute-plan` | `npm:bigpowers` | Batch-execute tasks from the active epic capsule sequentially, with a human checkpoint after each step. Use when user has an approved plan and wants step-by-step oversight. | +| `extract-design` | `npm:bigpowers` | Extract a Google DESIGN.md file from an HTML prototype (claude.ai/design or any styled page) using Puppeteer, producing machine-readable tokens and AI-generated prose. Use when the user has an HTML prototype and wants a DESIGN.md to anchor their project's visual identity, or when seed-conventions has just scaffolded a new project. | +| `fix-bug` | `npm:bigpowers` | Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains investigate-bug, develop-tdd, validate-fix. Use when user reports a defect. | +| `gate-trace` | `npm:bigpowers` | Deterministic traceability quality gate — reads coverage matrix + blind-spot data, applies decision rules with oracle confidence downgrade, emits PASS/CONCERNS/FAIL/WAIVED verdict. Use before release-branch to gate merges on traceability. | +| `grill-me` | `npm:bigpowers` | Interactive assumption-surfacing Q&A that stress-tests a plan through relentless questioning until every decision is resolved. Use when user wants to challenge a plan, validate decisions from conversation/context, or mentions \"grill me\". For doc-grounded variant, use grill-with-docs. | +| `grill-with-docs` | `npm:bigpowers` | Doc-grounded variant of grill-me — stress-tests plan assumptions by fetching and citing real library or API documentation. Every challenge must cite a real URL. Use when the plan depends on a specific library or external API. | +| `guard-git` | `npm:bigpowers` | Block dangerous git commands (push, force push, reset --hard, clean, branch -D, checkout/restore .) and enforce Conventional Commits & Branch Protection before an AI agent runs them. Installs hook scripts for Claude Code, Cursor, Cursor CLI, and Gemini CLI; documents Google Antigravity Terminal deny lists. Use when the user wants git safety hooks, to block git push or destructive git in agents, or to mirror the same policy across AI coding tools. | +| `hook-commits` | `npm:bigpowers` | Set up pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing. | +| `inspect-quality` | `npm:bigpowers` | Interactive QA session where user reports bugs or issues conversationally, and the agent logs them to specs/bugs/registry.yaml with a structured audit schema. Explores the codebase in the background for context and domain language. Use when user wants to report bugs, do QA, or mentions \"QA session\". | +| `investigate-bug` | `npm:bigpowers` | Investigate a bug or issue by exploring the codebase to find root cause, then write a TDD-based fix plan to specs/bugs/BUG-*.md. Use when user reports a bug, wants to investigate a problem, mentions \"triage\", or wants to plan a fix. | +| `kickoff-branch` | `npm:bigpowers` | Create a git worktree and feature branch, then verify a clean test baseline before any code is written. Use when starting a new feature or task, when user wants to work in isolation from main, or mentions \"start a branch\" or \"new worktree\". | +| `maintain-wiki` | `npm:bigpowers` | Agent-maintained OKF wiki — INGEST source docs, LINT for issues, QUERY across concept pages. Run as part of build-epic Step 8 and verify-work Phase 3. | +| `map-codebase` | `npm:bigpowers` | Derives the tech-stack doc from scratch by scanning the codebase — analyzes stack, architecture, and gray areas (error handling, API shapes) and persists findings into specs/tech-architecture/tech-stack.md. Run when the tech doc doesn't exist yet; use survey-context to consume it once it does. | +| `migrate-spec` | `npm:bigpowers` | Detect GSD, spec-kit, or BMAD spec artifacts and transform them into bigpowers YAML layout (state.yaml, release-plan.yaml, epics/, requirements/, plans/, ADRs). Use when migrating foreign spec docs. | +| `model-domain` | `npm:bigpowers` | Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates specs/tech-architecture/tech-stack.md and specs/adr/ inline as decisions crystallise. Use when user wants to stress-test a plan against their project's domain language and documented decisions. | +| `orchestrate-project` | `npm:bigpowers` | Meta-skill that enforces the 6-phase core loop (discover → elaborate → plan → build → verify → release) with hard gates. Use to coordinate multi-phase projects with guaranteed quality checkpoints. One-time command for the entire project lifecycle. | +| `organize-workspace` | `npm:bigpowers` | Scans the active workspace for disposable artifacts—logs, caches, stale build output, and stray draft markdown—and proposes consolidation of scattered assets. Produces a reviewable list, asks for explicit confirmation before any delete or move, and optionally revises .gitignore. Use when the user says \"clean my room\", \"organize workspace\", \"workspace cleanup\", \"remove temp files\", \"organize assets\", \"gitignore\", or wants a safe tidy pass. | +| `plan-refactor` | `npm:bigpowers` | Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps. | +| `plan-release` | `npm:bigpowers` | RELEASE-INDEX BUILDER — Sequence elaborated epics into specs/release-plan.yaml with WSJF ordering and BCP baselines. NOT a planning-spine substitute: it does not scope work (scope-work) or write story tasks (plan-work). Use after elaborate-spec when the user wants a versioned release index of epics. | +| `plan-tests` | `npm:bigpowers` | Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles. | +| `plan-work` | `npm:bigpowers` | PLANNING SPINE STEP 3 of 3 — Plan the work: write detailed implementation tasks into the active epic capsule (specs/epics/eNN-slug/). Produces countable-story-format .md specs and runnable -tasks.yaml files. Use after slice-tasks (step 2). Not a substitute for scope-work (step 1) or slice-tasks (step 2). | +| `publish-package` | `npm:bigpowers` | Package registry publishing for npm, crates.io, PyPI, and Homebrew. Verifies prerequisites, runs the publish command, confirms success, and surfaces actionable error hints on failure. | +| `quick-fix` | `npm:bigpowers` | Streamlined fast-path for trivial data-only fixes — no TDD, no branching ceremony. Collapses 6 skills into 2 for changes that are purely data with no logic risk. Aborts with fallback to investigate-bug if guardrails trigger. | +| `release-branch` | `npm:bigpowers` | Make the merge/PR/keep/discard decision for a feature branch, verify coverage gates, create the PR with gh, and clean up the worktree. Use when a feature is done and ready to ship, or when user says \"release\", \"merge\", or \"open a PR\". | +| `request-review` | `npm:bigpowers` | Dispatch a fresh reviewer agent with a clean context to critique the code after audit-code passes. The reviewer has no shared state with the coding agent and gives a genuine second opinion. Use after audit-code passes, before committing, or when user wants an independent code review. | +| `research-first` | `npm:bigpowers` | Look-before-build — search registries, repo, existing skills, and web for prior art before implementing. Appends Prior Art to the spec. Use after survey-context and before elaborate-spec, when adding dependencies, or when the task may already be solved. | +| `reset-baseline` | `npm:bigpowers` | Restore the project to a known clean state between agent runs or experiments. Use between benchmark runs, after a failed spike, or when user wants a clean working tree. | +| `respond-review` | `npm:bigpowers` | Act on a reviewer agent's feedback systematically — categorize findings, apply fixes, verify tests still pass. Use after request-review returns a report, or when user wants to work through code review findings. | +| `run-benchmark` | `npm:bigpowers` | Run skill quality benchmarks from specs/benchmarks/ definitions — N-run with/without-skill delta grading, train/validation split, pass@k + benchmark.json reports. Use before and after evolve-skill to prove quality changes are improvements, not regressions. | +| `run-evals` | `npm:bigpowers` | Eval-Driven Development — define capability and regression evals before building; code graders use verify commands, model graders use explicit rubrics; log pass@k. Use before develop-tdd on new features, or when measuring agent capability over runs. | +| `run-planning` | `npm:bigpowers` | DISCOVER-PHASE ADVANCER — Drive the discover-phase checklist (specs/planning-status.yaml) through survey-context → scope-work → research-first → elaborate-spec → plan-release → slice-tasks. NOT a duplicate of plan-work or the planning spine; it orchestrates the pre-coding discover phase only. | +| `scope-work` | `npm:bigpowers` | PLANNING SPINE STEP 1 of 3 — Scope the work: define what is in and out of scope and save as specs/product/SCOPE_LATEST.yaml. Use before slice-tasks or plan-release on any new initiative. Not a substitute for slice-tasks (step 2) or plan-work (step 3). | +| `search-skills` | `npm:bigpowers` | Find the right bigpowers skill from natural-language intent using a local lexical index over SKILL.md frontmatter. Use when unsure which skill to invoke, or at start of research-first. | +| `security-review` | `npm:bigpowers` | AI-powered security analysis of code changes — traces data flow, detects injection, auth bypass, secrets exposure, and unsafe deserialization across files. Use when reviewing pending changes, before release-branch, during verify-work Phase 5, during build-epic Step 0 threat modeling, or when the user says \"security review\" or \"scan for vulns\". | +| `seed-conventions` | `npm:bigpowers` | Generate CLAUDE.md and CONVENTIONS.md for a brand-new project through a brief interview, and create the specs/ directory with evolved bigpowers structure (product/, tech-architecture/, verifications/, epics/archive/). Entry point for greenfield projects. Use when starting a new project from scratch, when user asks to set up AI agent conventions, or when there is no CLAUDE.md yet. | +| `session-state` | `npm:bigpowers` | Track implementation decisions and progress in specs/state.yaml to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached. | +| `setup-environment` | `npm:bigpowers` | Pre-install dependencies and configure tools before development work begins. Use at session start on a fresh clone, before kickoff-branch, or when user says setup environment or install deps. | +| `simulate-agents` | `npm:bigpowers` | Run Mock User and Auditor agents against a feature in fresh contexts before human review. Use after verify-work, before request-review, when user wants pre-review simulation. | +| `slice-tasks` | `npm:bigpowers` | PLANNING SPINE STEP 2 of 3 — Slice the work: break a scoped PRD into vertical-slice stories in specs/epics/. Use after scope-work (step 1), before plan-work (step 3). Not a substitute for scope-work or plan-work. | +| `smoke-test` | `npm:bigpowers` | Post-deploy health-check against a live URL. Validates HTTP status, response content, and critical endpoints. Runnable standalone OR as the final step of the deploy skill. | +| `spike-prototype` | `npm:bigpowers` | Throw-away prototype for unknown problem spaces. Output is learning notes in specs/archive/spikes/SPIKE-.md, not production code. Use when the domain or technology is unexplored, when estimates are impossible without experimentation, or when user says \"spike\", \"prototype\", or \"proof of concept\". | +| `stocktake-skills` | `npm:bigpowers` | Sequential subagent batch audit of the bigpowers skill catalog — Quick Scan (changed only) or Full (all skills). Use during sustain phase, before a major release, or when catalog drift is suspected. | +| `survey-context` | `npm:bigpowers` | Per-task context bootstrap — reads existing specs/ and tech-architecture docs to map the current lifecycle phase and suggest the next skill. Use at the start of any task, when returning after a break, or when unsure what to do next. For deriving a tech-stack doc from scratch, use map-codebase first. | +| `terse-mode` | `npm:bigpowers` | Fallback ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use ONLY when context is critically long and compressing output is necessary to continue. Not a strategy — token discipline comes from code shape (small functions, unique names, headless tests), not terser prompts. Use when user says \"caveman mode\", \"terse mode\", \"less tokens\", \"be brief\", or invokes /terse-mode. | +| `trace-requirement` | `npm:bigpowers` | Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code. | +| `using-bigpowers` | `npm:bigpowers` | One-time bootstrap that introduces the bigpowers skills system, the PMBOK lifecycle arc, and tells you which skill to call first for your situation. Use when starting with bigpowers for the first time, when user asks \"where do I start?\", or when the skills system needs to be explained. | +| `validate-contracts` | `npm:bigpowers` | Assert data shape consistency across system boundaries — live API responses against JSON Schema, key-set comparison across layers, data shape validation for migrations and exports. Catches silent data corruption before deploy. | +| `validate-fix` | `npm:bigpowers` | Prove a fix works before declaring done — re-run the failing test, run the full suite, typecheck, lint, and harden against recurrence. Use after implementing a bug fix, when user says \"is this fixed?\", or before closing an investigation. | +| `verify-work` | `npm:bigpowers` | Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code. | +| `visual-dashboard` | `npm:bigpowers` | Start a browser-based dashboard that visualizes architecture, implementation plans, and project status. Persists artifacts in .bigpowers/dashboard/. Reads specs/state.yaml, release-plan.yaml, epics, and planning-status via HTTP API or opencode panel. | +| `wire-ci` | `npm:bigpowers` | CI pipeline setup with pre-built templates and local validation. Generates GitHub Actions workflows, validates YAML syntax and permissions, supports dry-run via act/gh. The CI equivalent of wire-observability. | +| `wire-observability` | `npm:bigpowers` | Add structured JSON logging, observability commands, and idempotent setup scripts to a project. Use when a project needs production-readiness instrumentation, when user wants structured logging, or as a production-readiness gate at any phase of development. | +| `write-document` | `npm:bigpowers` | Write, organize, and sync high-integrity technical documents using the BMAD methodology. Ensures every document is Bold, Minimal, Actionable, and Durable. Use when creating architectural docs, technical guides, or organizing the specs/ directory. | +| `broken-link` | `npm:bigpowers` | Fixture with broken skill link. | +| `missing-verify` | `npm:bigpowers` | Fixture missing verify command. | +| `valid-skill` | `npm:bigpowers` | A valid fixture skill for parser tests. | +| `align-grid` | `npm:bigpowers` | Build editorial/magazine/report webpages on a GENUINE Müller-Brockmann modular grid (International Typographic Style) — not a decorative one. Encodes the discipline (columns + modules + baseline, grotesque type, flush-left, restrained black/white/red palette) AND the hard-won front-end engineering to make the grid real, visible, and verified: one CSS-variable source of truth, an interactive grid-toggle overlay that lives in the SAME content box as the content, subgrid \"bands\" so every element snaps to a column line, an 8px baseline lock, and runtime OPTICAL ALIGNMENT that puts display type's ink (not its box) on the line. Ships with a scaffold generator and a Puppeteer verification harness that proves 0px adherence. | +| `assess-impact` | `npm:bigpowers` | Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks "what does this break?". | +| `story: e51s04` | `npm:bigpowers` | Описание в SKILL.md | +| `audit-plan` | `npm:bigpowers` | Evaluate an incoming project plan against bigpowers principles and conventions, surface gaps, and produce a READY/NOT READY verdict before engagement begins. Use when a new project arrives, when adapting a foreign plan, or before running seed-conventions on an unfamiliar codebase. | +| `build-epic` | `npm:bigpowers` | Eight-step epic build cycle — reads state.yaml, execution-status.yaml, and one epic capsule; updates status via bp-yaml-set or direct edit. Resume mode runs one step per invocation. Use instead of ad-hoc execute-plan for release work. | +| `change-request` | `npm:bigpowers` | Add a new requirement or reorder epics by WSJF against specs/release-plan.yaml and epic capsule directories. Modes Add and Reorder. Use when a new requirement arrives mid-release or the plan needs prioritization. | +| `commit-message` | `npm:bigpowers` | Reviews working-tree changes, then drafts a Conventional Commits title/body and states the semantic-release version bump a single such commit would imply. Also notes which defensive-code categories were touched. Use when the user wants to commit recent work, prepare a Conventional Commits message, or asks for semantic-release / semver-consistent messaging before git commit. | +| `compose-workflow` | `npm:bigpowers` | Chain multiple bigpowers skills into a custom workflow recipe saved in specs/. Use when a project repeats a non-standard skill sequence, or user wants a documented playbook beyond orchestrate-project modes. | +| `context7-mcp` | `npm:bigpowers` | Fetch current library docs via Context7 MCP instead of training data. Use when user asks about frameworks, APIs, setup, or code examples for React, Next.js, Prisma, etc. | +| `story: e45s02` | `npm:bigpowers` | Описание в SKILL.md | +| `story: e45s31` | `npm:bigpowers` | Описание в SKILL.md | +| `define-language` | `npm:bigpowers` | Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD". | +| `Define Success` | `npm:bigpowers` | Описание в SKILL.md | +| `delegate-task` | `npm:bigpowers` | Delegate one complex task to a single subagent, review its work in two stages before merging back. Sequential — one agent at a time, with oversight. Use when a task is complex and requires careful review before the result is accepted. Distinct from dispatch-agents (no parallelism here; reviewer sees full diff before proceeding). | +| `Deploy` | `npm:bigpowers` | Описание в SKILL.md | +| `design-interface` | `npm:bigpowers` | Generate multiple radically different interface designs for a module using parallel sub-agents, then compare trade-offs. Based on "Design It Twice" from A Philosophy of Software Design. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice". | +| `story: e51s04` | `npm:bigpowers` | Описание в SKILL.md | +| `diagnose-root` | `npm:bigpowers` | Run 4-phase root cause analysis — reproduce, isolate, hypothesize, verify. Use when a bug is confirmed but root cause is unclear, after investigate-bug, or when user mentions root cause analysis. | +| `story: e45s38` | `npm:bigpowers` | Описание в SKILL.md | +| `dispatch-agents` | `npm:bigpowers` | Dispatch multiple subagents in parallel on independent tasks. No waiting between them — all run concurrently. Use when tasks are truly decoupled and speed matters. Distinct from delegate-task (concurrent here, no inter-task review gate). | +| `edit-document` | `npm:bigpowers` | Edit and improve documents by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, restructure, or improve any document — including specs/ files, articles, READMEs, or technical writing. | +| `elaborate-spec` | `npm:bigpowers` | Refine a rough idea into a clear, detailed specification through dialogue. Does not produce code. Use when user has a vague idea, wants to think through a feature before planning, or needs to turn "I want X" into a concrete spec. | +| `enforce-first` | `npm:bigpowers` | Apply the F.I.R.S.T test quality rubric (per CONVENTIONS.md §Tests) to a test suite or individual tests. Use when develop-tdd is writing tests, when test quality needs to be checked, or when user mentions F.I.R.S.T or "test quality". | +| `evolve-skill` | `npm:bigpowers` | Benchmark-gated skill evolution — consume bigpowers-benchmark report, propose plan-work change, edit skill via craft-skill, re-run benchmark, record ADR. Use when a skill underperforms on benchmark or stocktake finds systemic gap. | +| `execute-plan` | `npm:bigpowers` | Batch-execute tasks from the active epic capsule sequentially, with a human checkpoint after each step. Use when user has an approved plan and wants step-by-step oversight. | +| `extract-design` | `npm:bigpowers` | Extract a Google DESIGN.md file from an HTML prototype (claude.ai/design or any styled page) using Puppeteer, producing machine-readable tokens and AI-generated prose. Use when the user has an HTML prototype and wants a DESIGN.md to anchor their project's visual identity, or when seed-conventions has just scaffolded a new project. | +| `story: e51s04` | `npm:bigpowers` | Описание в SKILL.md | +| `story: e45s05` | `npm:bigpowers` | Описание в SKILL.md | +| `grill-me` | `npm:bigpowers` | Interactive assumption-surfacing Q&A that stress-tests a plan through relentless questioning until every decision is resolved. Use when user wants to challenge a plan, validate decisions from conversation/context, or mentions "grill me". For doc-grounded variant, use grill-with-docs. | +| `grill-with-docs` | `npm:bigpowers` | Doc-grounded variant of grill-me — stress-tests plan assumptions by fetching and citing real library or API documentation. Every challenge must cite a real URL. Use when the plan depends on a specific library or external API. | +| `guard-git` | `npm:bigpowers` | Block dangerous git commands (push, force push, reset --hard, clean, branch -D, checkout/restore .) and enforce Conventional Commits & Branch Protection before an AI agent runs them. Installs hook scripts for Claude Code, Cursor, Cursor CLI, and Gemini CLI; documents Google Antigravity Terminal deny lists. Use when the user wants git safety hooks, to block git push or destructive git in agents, or to mirror the same policy across AI coding tools. | +| `hook-commits` | `npm:bigpowers` | Set up pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing. | +| `inspect-quality` | `npm:bigpowers` | Interactive QA session where user reports bugs or issues conversationally, and the agent logs them to specs/bugs/registry.yaml with a structured audit schema. Explores the codebase in the background for context and domain language. Use when user wants to report bugs, do QA, or mentions "QA session". | +| `investigate-bug` | `npm:bigpowers` | Investigate a bug or issue by exploring the codebase to find root cause, then write a TDD-based fix plan to specs/bugs/BUG-*.md. Use when user reports a bug, wants to investigate a problem, mentions "triage", or wants to plan a fix. | +| `kickoff-branch` | `npm:bigpowers` | Create a git worktree and feature branch, then verify a clean test baseline before any code is written. Use when starting a new feature or task, when user wants to work in isolation from main, or mentions "start a branch" or "new worktree". | +| `maintain-wiki` | `npm:bigpowers` | Agent-maintained OKF wiki — INGEST source docs, LINT for issues, QUERY across concept pages. Run as part of build-epic Step 8 and verify-work Phase 3. | +| `map-codebase` | `npm:bigpowers` | Derives the tech-stack doc from scratch by scanning the codebase — analyzes stack, architecture, and gray areas (error handling, API shapes) and persists findings into specs/tech-architecture/tech-stack.md. Run when the tech doc doesn't exist yet; use survey-context to consume it once it does. | +| `migrate-spec` | `npm:bigpowers` | Detect GSD, spec-kit, or BMAD spec artifacts and transform them into bigpowers YAML layout (state.yaml, release-plan.yaml, epics/, requirements/, plans/, ADRs). Use when migrating foreign spec docs. | +| `model-domain` | `npm:bigpowers` | Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates specs/tech-architecture/tech-stack.md and specs/adr/ inline as decisions crystallise. Use when user wants to stress-test a plan against their project's domain language and documented decisions. | +| `orchestrate-project` | `npm:bigpowers` | Meta-skill that enforces the 6-phase core loop (discover → elaborate → plan → build → verify → release) with hard gates. Use to coordinate multi-phase projects with guaranteed quality checkpoints. One-time command for the entire project lifecycle. | +| `organize-workspace` | `npm:bigpowers` | Scans the active workspace for disposable artifacts—logs, caches, stale build output, and stray draft markdown—and proposes consolidation of scattered assets. Produces a reviewable list, asks for explicit confirmation before any delete or move, and optionally revises .gitignore. Use when the user says "clean my room", "organize workspace", "workspace cleanup", "remove temp files", "organize assets", "gitignore", or wants a safe tidy pass. | +| `plan-refactor` | `npm:bigpowers` | Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps. | +| `plan-release` | `npm:bigpowers` | RELEASE-INDEX BUILDER — Sequence elaborated epics into specs/release-plan.yaml with WSJF ordering and BCP baselines. NOT a planning-spine substitute: it does not scope work (scope-work) or write story tasks (plan-work). Use after elaborate-spec when the user wants a versioned release index of epics. | +| `plan-tests` | `npm:bigpowers` | Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles. | +| `story: e45s04` | `npm:bigpowers` | Описание в SKILL.md | +| `publish-package` | `npm:bigpowers` | Package registry publishing for npm, crates.io, PyPI, and Homebrew. Verifies prerequisites, runs the publish command, confirms success, and surfaces actionable error hints on failure. | +| `story: e51s04` | `npm:bigpowers` | Описание в SKILL.md | +| `release-branch` | `npm:bigpowers` | Make the merge/PR/keep/discard decision for a feature branch, verify coverage gates, create the PR with gh, and clean up the worktree. Use when a feature is done and ready to ship, or when user says "release", "merge", or "open a PR". | +| `story: e45s07` | `npm:bigpowers` | Описание в SKILL.md | +| `research-first` | `npm:bigpowers` | Look-before-build — search registries, repo, existing skills, and web for prior art before implementing. Appends Prior Art to the spec. Use after survey-context and before elaborate-spec, when adding dependencies, or when the task may already be solved. | +| `reset-baseline` | `npm:bigpowers` | Restore the project to a known clean state between agent runs or experiments. Use between benchmark runs, after a failed spike, or when user wants a clean working tree. | +| `respond-review` | `npm:bigpowers` | Act on a reviewer agent's feedback systematically — categorize findings, apply fixes, verify tests still pass. Use after request-review returns a report, or when user wants to work through code review findings. | +| `run-benchmark` | `npm:bigpowers` | Run skill quality benchmarks from specs/benchmarks/ definitions — N-run with/without-skill delta grading, train/validation split, pass@k + benchmark.json reports. Use before and after evolve-skill to prove quality changes are improvements, not regressions. | +| `story: e45s37` | `npm:bigpowers` | Описание в SKILL.md | +| `run-planning` | `npm:bigpowers` | DISCOVER-PHASE ADVANCER — Drive the discover-phase checklist (specs/planning-status.yaml) through survey-context → scope-work → research-first → elaborate-spec → plan-release → slice-tasks. NOT a duplicate of plan-work or the planning spine; it orchestrates the pre-coding discover phase only. | +| `scope-work` | `npm:bigpowers` | PLANNING SPINE STEP 1 of 3 — Scope the work: define what is in and out of scope and save as specs/product/SCOPE_LATEST.yaml. Use before slice-tasks or plan-release on any new initiative. Not a substitute for slice-tasks (step 2) or plan-work (step 3). | +| `search-skills` | `npm:bigpowers` | Find the right bigpowers skill from natural-language intent using a local lexical index over SKILL.md frontmatter. Use when unsure which skill to invoke, or at start of research-first. | +| `security-review` | `npm:bigpowers` | > | +| `seed-conventions` | `npm:bigpowers` | Generate CLAUDE.md and CONVENTIONS.md for a brand-new project through a brief interview, and create the specs/ directory with evolved bigpowers structure (product/, tech-architecture/, verifications/, epics/archive/). Entry point for greenfield projects. Use when starting a new project from scratch, when user asks to set up AI agent conventions, or when there is no CLAUDE.md yet. | +| `session-state` | `npm:bigpowers` | Track implementation decisions and progress in specs/state.yaml to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached. | +| `setup-environment` | `npm:bigpowers` | Pre-install dependencies and configure tools before development work begins. Use at session start on a fresh clone, before kickoff-branch, or when user says setup environment or install deps. | +| `simulate-agents` | `npm:bigpowers` | Run Mock User and Auditor agents against a feature in fresh contexts before human review. Use after verify-work, before request-review, when user wants pre-review simulation. | +| `slice-tasks` | `npm:bigpowers` | PLANNING SPINE STEP 2 of 3 — Slice the work: break a scoped PRD into vertical-slice stories in specs/epics/. Use after scope-work (step 1), before plan-work (step 3). Not a substitute for scope-work or plan-work. | +| `smoke-test` | `npm:bigpowers` | Post-deploy health-check against a live URL. Validates HTTP status, response content, and critical endpoints. Runnable standalone OR as the final step of the deploy skill. | +| `spike-prototype` | `npm:bigpowers` | Throw-away prototype for unknown problem spaces. Output is learning notes in specs/archive/spikes/SPIKE-.md, not production code. Use when the domain or technology is unexplored, when estimates are impossible without experimentation, or when user says "spike", "prototype", or "proof of concept". | +| `stocktake-skills` | `npm:bigpowers` | Sequential subagent batch audit of the bigpowers skill catalog — Quick Scan (changed only) or Full (all skills). Use during sustain phase, before a major release, or when catalog drift is suspected. | +| `survey-context` | `npm:bigpowers` | Per-task context bootstrap — reads existing specs/ and tech-architecture docs to map the current lifecycle phase and suggest the next skill. Use at the start of any task, when returning after a break, or when unsure what to do next. For deriving a tech-stack doc from scratch, use map-codebase first. | +| `terse-mode` | `npm:bigpowers` | Fallback ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use ONLY when context is critically long and compressing output is necessary to continue. Not a strategy — token discipline comes from code shape (small functions, unique names, headless tests), not terser prompts. Use when user says "caveman mode", "terse mode", "less tokens", "be brief", or invokes /terse-mode. | +| `trace-requirement` | `npm:bigpowers` | Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code. | +| `using-bigpowers` | `npm:bigpowers` | One-time bootstrap that introduces the bigpowers skills system, the PMBOK lifecycle arc, and tells you which skill to call first for your situation. Use when starting with bigpowers for the first time, when user asks "where do I start?", or when the skills system needs to be explained. | +| `validate-contracts` | `npm:bigpowers` | Assert data shape consistency across system boundaries — live API responses against JSON Schema, key-set comparison across layers, data shape validation for migrations and exports. Catches silent data corruption before deploy. | +| `story: e45s08` | `npm:bigpowers` | Описание в SKILL.md | +| `verify-work` | `npm:bigpowers` | Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code. | +| `visual-dashboard` | `npm:bigpowers` | Start a browser-based dashboard that visualizes architecture, implementation plans, and project status. Persists artifacts in .bigpowers/dashboard/. Reads specs/state.yaml, release-plan.yaml, epics, and planning-status via HTTP API or opencode panel. | +| `wire-ci` | `npm:bigpowers` | CI pipeline setup with pre-built templates and local validation. Generates GitHub Actions workflows, validates YAML syntax and permissions, supports dry-run via act/gh. The CI equivalent of wire-observability. | +| `wire-observability` | `npm:bigpowers` | Add structured JSON logging, observability commands, and idempotent setup scripts to a project. Use when a project needs production-readiness instrumentation, when user wants structured logging, or as a production-readiness gate at any phase of development. | +| `write-document` | `npm:bigpowers` | Write, organize, and sync high-integrity technical documents using the BMAD methodology. Ensures every document is Bold, Minimal, Actionable, and Durable. Use when creating architectural docs, technical guides, or organizing the specs/ directory. | +| `context-mode` | `npm:context-mode` | Mandatory routing rules for Antigravity CLI. Invoke when exploring a codebase, reading files for analysis, listing context-mode tools, searching, parsing, counting, comparing, summarizing, fetching web content, or running data-heavy commands. | +| `context-mode` | `npm:context-mode` | MANDATORY routing rules for context-mode. Invoke whenever you analyze, count, filter, compare, search, parse, or transform data; fetch a URL; or run a data-heavy command — so raw bytes stay out of the context window. | +| `context-mode` | `npm:context-mode` | \| | +| `ctx-doctor` | `npm:context-mode` | \| | +| `ctx-index` | `npm:context-mode` | \| | +| `ctx-insight` | `npm:context-mode` | \| | +| `ctx-purge` | `npm:context-mode` | \| | +| `ctx-search` | `npm:context-mode` | \| | +| `ctx-stats` | `npm:context-mode` | \| | +| `ctx-upgrade` | `npm:context-mode` | \| | +| `obsidian` | `npm:pi-obsidian` | You have access to tools for reading, writing, searching, visualizing, and managing projects in Obsidian vaults. Use these tools to help the user build and maintain their knowledge base. | +| `pi-subagents` | `npm:pi-subagents` | \| | +| `librarian` | `npm:pi-web-access` | Research open-source libraries with evidence-backed answers and GitHub permalinks. Use when the user asks about library internals, needs implementation details with source code references, wants to understand why something was changed, or needs authoritative answers backed by actual code. Excels at navigating large open-source repos and providing citations to exact lines of code. | +| `graphify` | `local ~/.pi/agent` | Use for any question about a codebase, its architecture, file relationships, or project content — especially when graphify-out/ exists, where the question should be treated as a graphify query first. Turns any input (code, docs, papers, images, videos) into a persistent knowledge graph with god nodes, community detection, and query/path/explain tools. | + +### Текущие глобальные настройки + +- Provider по умолчанию: `codex-lb` +- Model по умолчанию: `gpt-5.6-terra` +- Thinking: `high` +- Theme: `dark` + +После установки проверь состояние: + +```bash +pi list +pi config +``` + + diff --git a/pi-backup-20260714-002452.tar.zst b/pi-backup-20260714-002452.tar.zst new file mode 100644 index 0000000..2ef8086 --- /dev/null +++ b/pi-backup-20260714-002452.tar.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec111d74ed5283e6fefb6e395259576429b113baf04ab050ffea4673c409ed3 +size 188911013 diff --git a/pi-backup-20260714-002452.tar.zst.sha256 b/pi-backup-20260714-002452.tar.zst.sha256 new file mode 100644 index 0000000..d9e039e --- /dev/null +++ b/pi-backup-20260714-002452.tar.zst.sha256 @@ -0,0 +1 @@ +3ec111d74ed5283e6fefb6e395259576429b113baf04ab050ffea4673c409ed3 ./pi-backup-20260714-002452.tar.zst diff --git a/pi-env-backup.sh b/pi-env-backup.sh new file mode 100755 index 0000000..4070cae --- /dev/null +++ b/pi-env-backup.sh @@ -0,0 +1,215 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Portable backup/restore for Pi Coding Agent. +# Usage: +# ./pi-env-backup.sh backup [destination-dir] +# ./pi-env-backup.sh list +# ./pi-env-backup.sh restore + +PROGRAM=${0##*/} +SELF_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) + +log() { printf '[pi-backup] %s\n' "$*"; } +fail() { printf '[pi-backup] ERROR: %s\n' "$*" >&2; exit 1; } +need() { command -v "$1" >/dev/null 2>&1 || fail "Не найдено: $1"; } + +usage() { + cat <<'EOF' +Portable Pi Coding Agent backup + +Создать бэкап: + ./pi-env-backup.sh backup [папка-для-архива] + +Посмотреть содержимое: + ./pi-env-backup.sh list + +Восстановить на ноутбуке/WSL: + ./pi-env-backup.sh restore <архив> + +Переменные: + PI_BACKUP_INCLUDE_SESSIONS=1 включить историю Pi-сессий (по умолчанию 0) + PI_BACKUP_INCLUDE_CONTEXT=1 включить context-mode index/cache (по умолчанию 0) + PI_BACKUP_INCLUDE_AYU=1 включить ayu/checkpoints (по умолчанию 0; обычно не нужно) + PI_BACKUP_ALLOW_RUNNING=1 не предупреждать о запущенном Pi +EOF +} + +running_processes() { + pgrep -af '(^|/)(pi|pi-coding-agent)( |$)' 2>/dev/null || true +} + +make_manifest() { + local file=$1 + { + echo "created_at=$(date -Is)" + echo "source_user=$USER" + echo "source_home=$HOME" + echo "hostname=$(hostname)" + echo "uname=$(uname -srmo)" + echo "pi_version=$(pi --version 2>/dev/null || echo unavailable)" + echo "node_version=$(node --version 2>/dev/null || echo unavailable)" + echo "npm_version=$(npm --version 2>/dev/null || echo unavailable)" + echo "shell=${SHELL:-unknown}" + echo + echo '[installed-pi-packages]' + pi list 2>/dev/null || true + echo + echo '[external-tools]' + for tool in pi node npm npx bun pnpm python3 pipx git gh jj rg fd docker zstd; do + if command -v "$tool" >/dev/null 2>&1; then + printf '%s: ' "$tool" + case "$tool" in + pi) pi --version 2>&1 || true ;; + node|bun|pnpm|python3|git|gh|jj|rg|fd|docker|zstd) "$tool" --version 2>&1 || true ;; + npm|npx|pipx) "$tool" --version 2>&1 || true ;; + esac + fi + done + echo + echo '[paths]' + find "$HOME/.pi/agent" "$HOME/.agents" -maxdepth 2 -type d 2>/dev/null | sort || true + } > "$file" +} + +backup() { + local dest=${1:-$PWD} + mkdir -p "$dest" + need tar + need pi + + if [[ "${PI_BACKUP_ALLOW_RUNNING:-0}" != 1 ]] && [[ -n "$(running_processes)" ]]; then + fail "Pi запущен. Закрой Pi и повтори. Для принудительного режима: PI_BACKUP_ALLOW_RUNNING=1" + fi + + local stamp archive ext compressor tmp root + stamp=$(date +%Y%m%d-%H%M%S) + tmp=$(mktemp -d) + trap 'rm -rf "$tmp"' RETURN + root="$tmp/pi-backup" + mkdir -p "$root/meta" + + make_manifest "$root/meta/MANIFEST.txt" + cp "$SELF_DIR/pi-env-backup.sh" "$root/meta/pi-env-backup.sh" + chmod 755 "$root/meta/pi-env-backup.sh" + cat > "$root/meta/RESTORE.md" <<'EOF' +# Pi Coding Agent backup + +Этот архив содержит пользовательское состояние Pi Coding Agent: + +- `~/.pi/agent/settings.json` — настройки, модели и список packages; +- `~/.pi/agent/auth.json` — авторизация/API keys; +- `~/.pi/agent/mcp.json` и `mcp-oauth/` — MCP; +- `~/.pi/agent/extensions/`, `skills/`, `npm/`, `git/` — плагины и пакеты; +- `~/.pi/agent/AGENTS.md`, `keybindings.json`, `trust.json`; +- `~/.pi/agent/sessions/` — история Pi; +- `~/.pi/agent/pi-hermes-memory/`, `projects-memory/` — память; +- `~/.pi/context-mode/` — локальный индекс context-mode; +- `~/.agents/` — внешние пользовательские skills. + +## Восстановление + +Внутри WSL установите Node.js/npm, затем выполните из распакованного архива: + +```bash +bash meta/pi-env-backup.sh restore pi-backup.tar.zst +``` + +Или передайте архив и этот скрипт на ноутбук: + +```bash +bash pi-env-backup.sh restore pi-backup.tar.zst +``` + +Скрипт НЕ переносит бинарник Pi и внешние системные программы. После восстановления +он переустанавливает Pi через npm и проверяет состояние. Авторизация из `auth.json` +переносится, но некоторые OAuth-провайдеры могут попросить повторный `/login`. +EOF + + # Store paths relative to $HOME. Never archive unrelated parts of the home directory. + local -a paths=(.pi/agent .agents) + [[ -d "$HOME/.pi/local-docs" ]] && paths+=(.pi/local-docs) + [[ "${PI_BACKUP_INCLUDE_CONTEXT:-0}" == 1 && -d "$HOME/.pi/context-mode" ]] && paths+=(.pi/context-mode) + if [[ "${PI_BACKUP_INCLUDE_SESSIONS:-0}" != 1 ]]; then + # handled after copying by tar exclusions + log 'История сессий будет исключена (PI_BACKUP_INCLUDE_SESSIONS=0)' + fi + + if command -v zstd >/dev/null 2>&1; then + archive="$dest/pi-backup-$stamp.tar.zst" + compressor=(zstd -T0 -19 -q) + else + archive="$dest/pi-backup-$stamp.tar.gz" + compressor=(gzip -9) + log 'zstd не найден; используется gzip. Для меньшего архива установи zstd.' + fi + + log "Архивирую: ${paths[*]}" + # Build one tar with relative paths only, then compress it. No absolute paths leak. + # По умолчанию не переносим историю, context-mode cache и ayu checkpoints. + # Они не нужны для работы плагинов, но могут занимать десятки гигабайт. + tar_args=(--exclude=.pi/agent/.locks --exclude=.pi/agent/*.lock) + [[ "${PI_BACKUP_INCLUDE_SESSIONS:-0}" != 1 ]] && tar_args+=(--exclude=.pi/agent/sessions) + [[ "${PI_BACKUP_INCLUDE_CONTEXT:-0}" != 1 ]] && tar_args+=(--exclude=.pi/context-mode) + [[ "${PI_BACKUP_INCLUDE_AYU:-0}" != 1 ]] && tar_args+=(--exclude=.pi/agent/ayu) + tar -C "$root" -cf "$tmp/all.tar" meta + tar "${tar_args[@]}" -C "$HOME" -rf "$tmp/all.tar" "${paths[@]}" 2>/dev/null || true + if [[ "$archive" == *.zst ]]; then + zstd -T0 -19 -q "$tmp/all.tar" -o "$archive" + else + gzip -9 -c "$tmp/all.tar" > "$archive" + fi + + chmod 600 "$archive" + sha256sum "$archive" | tee "$archive.sha256" + log "Готово: $archive" + log "Размер: $(du -h "$archive" | awk '{print $1}')" + log 'Архив содержит секреты. Передавай его только по защищённому каналу.' +} + +list_archive() { + local archive=$1 + [[ -f "$archive" ]] || fail "Архив не найден: $archive" + if [[ "$archive" == *.zst ]]; then + need zstd; zstd -dc "$archive" | tar -tvf - + else + tar -tzvf "$archive" + fi +} + +restore() { + local archive=$1 + [[ -f "$archive" ]] || fail "Архив не найден: $archive" + need tar + if [[ "$archive" == *.zst ]]; then need zstd; fi + if [[ -e "$HOME/.pi/agent/settings.json" ]]; then + log 'Обнаружен существующий ~/.pi/agent. Будет создан backup перед заменой.' + mv "$HOME/.pi/agent" "$HOME/.pi/agent.before-restore-$(date +%Y%m%d-%H%M%S)" + fi + mkdir -p "$HOME" + log 'Распаковываю состояние Pi в домашний каталог...' + if [[ "$archive" == *.zst ]]; then + zstd -dc "$archive" | tar -xpf - -C "$HOME" + else + tar -xpf "$archive" -C "$HOME" + fi + chmod 700 "$HOME/.pi" "$HOME/.pi/agent" "$HOME/.agents" 2>/dev/null || true + chmod 600 "$HOME/.pi/agent/auth.json" "$HOME/.pi/agent/mcp.json" 2>/dev/null || true + + if ! command -v pi >/dev/null 2>&1; then + need npm + log 'Pi не найден; устанавливаю текущую версию через npm...' + npm install -g --ignore-scripts @earendil-works/pi-coding-agent + fi + log "Pi: $(pi --version 2>/dev/null || echo 'не удалось определить версию')" + log 'Проверка настроек и установленных packages:' + pi list 2>&1 || true + log 'Восстановление завершено. Если OAuth не подхватился, запусти Pi и выполни /login.' +} + +case "${1:-}" in + backup) backup "${2:-$PWD}" ;; + list) [[ $# -ge 2 ]] || { usage; exit 2; }; list_archive "$2" ;; + restore) [[ $# -ge 2 ]] || { usage; exit 2; }; restore "$2" ;; + *) usage; exit 2 ;; +esac