$npx -y skills add TserenTserenov/FMT-exocortex-template --skill kimi-peer-writerPeer-сессия DP.SC.154 где Kimi = писатель, Claude = напарник. Запускается простой фразой. Включает ОРЗ Opening и Closing, turn-loop, эскалации, Decision Gate (зафиксировать vs реализовать → ревью → проверить → задеплоить), отложенную финализацию и верификацию.
| 1 | # Kimi Peer Writer (DP.SC.154) |
| 2 | |
| 3 | Задача: $ARGUMENTS |
| 4 | |
| 5 | > **Архитектура:** я (Kimi) = писатель, Claude = напарник. |
| 6 | > Claude вызывается через `claude-peer-adapter.sh` напрямую — Bash tool, stdin pipe. |
| 7 | > `list_peer_statuses` (Local Gateway) — координация файлов, **не** проверка доступности Claude CLI. |
| 8 | > Gateway offline ≠ Claude недоступен. |
| 9 | |
| 10 | --- |
| 11 | |
| 12 | ## When to use |
| 13 | |
| 14 | Peer-сессия DP.SC.154 где Kimi = писатель, Claude = напарник. Запускается простой фразой. Включает ОРЗ Opening и Closing, turn-loop, эскалации, Decision Gate (зафиксировать vs реализовать → ревью → проверить → задеплоить), отложенную финализацию и верификацию. |
| 15 | |
| 16 | ## Scope boundary — не подменяет решения, зарезервированные за пилотом (найдено 2026-07-07) |
| 17 | |
| 18 | > Peer-сессия пригодна для: технических решений, дизайна, code review, поиска компромисса между подходами, подготовки кандидатов к решению. |
| 19 | > **НЕ пригодна** для решений, которые процесс явно закрепляет за человеком (например, R15 Валидатор в `/apply-captures` — accept/reject/defer кандидатов знания; R1 Стратег — приоритеты месяца). Согласие двух агентов между собой — не решение пилота, даже единогласное и хорошо обоснованное. |
| 20 | > |
| 21 | > Если задача внутри пир-сессии требует такого решения — писатель обязан остановиться и спросить пилота напрямую в текущем чате (не через turn-файл), прежде чем фиксировать результат. См. `.claude/skills/apply-captures/SKILL.md` раздел «R15 = живой пилот, не агент» и `${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/bugs/bug-2026-07-07-r15-decisions-bypassed-pilot.md` — прецедент, из-за которого добавлено это ограничение. |
| 22 | |
| 23 | ## Шаг 0. Режим |
| 24 | |
| 25 | Определить режим из `$ARGUMENTS`: |
| 26 | |
| 27 | - `--list` → прочитать `${IWE_GOVERNANCE_REPO:-DS-strategy}/sessions/00-index.md`, вывести таблицу. Стоп. |
| 28 | - `--interrupt <id>` → перейти к **Шагу 5 (interrupt-режим)**. Стоп после. |
| 29 | - `--finalize <id>` → перейти к **Шагу 6 (finalize-режим)**. Стоп после. |
| 30 | - Иначе → новая сессия, продолжать к Шагу 0б. |
| 31 | |
| 32 | --- |
| 33 | |
| 34 | ## Шаг 0б. Открытие (WP Gate — только для новой сессии) |
| 35 | |
| 36 | Найти WP по задаче: прочитать `${IWE_GOVERNANCE_REPO:-DS-strategy}/WP-REGISTRY.md` (grep по ключевым словам) и `${IWE_GOVERNANCE_REPO:-DS-strategy}/current/WeekPlan W{N}.md`. |
| 37 | |
| 38 | Анонс пилоту: |
| 39 | ``` |
| 40 | Открываю peer-сессию (DP.SC.154) |
| 41 | Роль: Писатель (Kimi) | Напарник: Claude |
| 42 | Задача: <задача> |
| 43 | РП: WP-NNN «<название>» | или: не найден в плане |
| 44 | Метод: turn-loop ≤10 ходов | Модель напарника: Sonnet |
| 45 | ``` |
| 46 | |
| 47 | Если РП **не найден** в плане недели → полный WP Gate Ритуал (`memory/protocol-open.md §Сессия`): |
| 48 | объявить артефакт + дождаться подтверждения пилота → **только после «да» переходить к Шагу 1**. |
| 49 | |
| 50 | Если РП найден → продолжать без ожидания. |
| 51 | |
| 52 | --- |
| 53 | |
| 54 | ## Шаг 1. Инициализация |
| 55 | |
| 56 | ```bash |
| 57 | SESSIONS_DIR="$HOME/IWE/${IWE_GOVERNANCE_REPO:-DS-strategy}/sessions" |
| 58 | TODAY=$(date +%Y-%m-%d) |
| 59 | MONTH=$(date +%Y-%m) |
| 60 | MONTH_DIR="$SESSIONS_DIR/$MONTH" |
| 61 | mkdir -p "$MONTH_DIR" |
| 62 | NUM=$(printf "%02d" $(( $(find "$MONTH_DIR" -maxdepth 1 -type d -name "${TODAY}-[0-9][0-9]-*" 2>/dev/null | wc -l | tr -d ' ') + 1 ))) |
| 63 | ``` |
| 64 | |
| 65 | Slug = первые 4 латинских слова из задачи строчными буквами через дефис (не-латиница и дата убираются). Никакой даты в slug — она уже в SESSION_ID. Если латиницы нет → `session`. |
| 66 | |
| 67 | `SESSION_ID="${TODAY}-${NUM}-${SLUG}"` |
| 68 | `SESSION_DIR="${MONTH_DIR}/${SESSION_ID}"` |
| 69 | |
| 70 | **1.1 Создать папку:** |
| 71 | ```bash |
| 72 | mkdir -p "$SESSION_DIR" |
| 73 | ``` |
| 74 | |
| 75 | **1.2 Записать `meta.yaml`** (Write): |
| 76 | ```yaml |
| 77 | task_id: "" |
| 78 | date: "<TODAY>" |
| 79 | session_id: "<SESSION_ID>" |
| 80 | start_time: "<ISO-8601 UTC>" |
| 81 | end_time: "" |
| 82 | writer_agent: "kimi-headless" |
| 83 | peer_agent: "claude-code" |
| 84 | peer_cmd: "claude-peer-adapter" |
| 85 | peer_model: "sonnet" |
| 86 | status: "started" |
| 87 | turns_count: 0 |
| 88 | turns_limit: 10 |
| 89 | escalations_count: 0 |
| 90 | extensions: [] |
| 91 | result_path: "" |
| 92 | task_description: "<задача>" |
| 93 | implementation_pipeline: false |
| 94 | review_iterations: 0 |
| 95 | verify_status: "" |
| 96 | deploy_shas: {} |
| 97 | # Двухосная модель (WP-367 Ф5, DP.SC.154 v4): |
| 98 | roles: {} # {agent_id: [DP.ROLE.NNN, ...]} после consensus в Opening |
| 99 | discovery_turns: 0 # сколько ходов ушло на role-discovery (не считается в turns_limit) |
| 100 | ad_hoc_roles: {} # {role_name: {agent_id, rationale, first_used_turn}} — для каскада audit |
| 101 | swap_history: [] # [{turn, from, to, reason}] — журнал SWAP_WRITER переходов |
| 102 | ``` |
| 103 | |
| 104 | **Если пи |