vahta について
vahtaは、iskronリポジトリでの作業向けエージェントスキルです。起動とシグナル確認から、成果物の提出、マージ後の同期までのサイクルを定めています。シグナルに基づく着手、作業状態の確認、長時間の待機のバックグラウンドサブエージェントへの委任を重視します。
主な機能
- 01当番サイクルと作業サイクルの分離
- 02シグナルに基づく着手判断
- 03タスク範囲とブロッカーの確認
- 04グラフノードへの作業状態の記録
- 05長時間の待機をバックグラウンドサブエージェントに委任
活用シーン
- 01届いたタスクや現実のイベントへの対応
- 02ブロッカーの確認と担当者へのエスカレーション
- 03提出後のグラフ同期状況の追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ iskron-ai/ skills --skill vahtaインストール後、Claude Code で/vahtaを入力して読み込まれたか確認します。
同梱ファイルreferences/entry.mdreferences/integration.md
README(原文)English
プロジェクトの README よりこの README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。
Вахта в Искроне — собственный цикл агента
Роль агента из AGENTS.md — стюард контура репозитория. Её инбокс — posed_to-вимарши: вопросы по сути и обязательства, которых ждут от этого делателя; работа и разовые вопросы приходят словом в деле. Канал — то, чем работа достигает его сейчас.
Вахта — цикл агента от разбудившего прибытия до закрывающего мержа: спрашивает о том, что решать не ему, и никогда — о своём. Мера такта — как быстро разблокирован тот, кто на тебя ждёт, а не сколько инбокса выметено.
Два цикла, держи их врозь. Дежурный такт дёшев и част: проснуться, посмотреть, что изменилось, решить, есть ли повод, уснуть. Рабочий такт дорог и редок: постичь, взять, отгрузить, прошить эстафету, донести до интеграции, проткать, закрыть.
Работа приходит сигналом, не выбирается из инбокса: слово человека, слово агента в деле или его вимарша, дошедшая кадром, событие реальности (упавший CI, строка сторожа, красная проба). Лежащее без сигнала ждёт слова человека.
Ремесло графа держит вахта — по «Ремеслу графа» в «Сквозных нормах» двери iskron: чтение для решения, решение, ткачество, интеграция — твои, объёмное — субагенту со своим мостом-спутником, итог сверяешь сам. Ожидание — CI, сборку образа, выкат, долгий гейт — держит фоновый субагент, не главная сессия (цикл sleep в своём ходе глушит слух: ни кадр, ни слово человека до хода не дойдут). Своё у вахты: проверка постановки (§2a) и её разметка (§2c), эстафета и донесение до интеграции (§3), граф после мержа (§4).
Стадия считается по наружному знаку, не по внутреннему («подключился», «режим позволяет молчать»):
| Стадия | Не внутренний знак | А наружный |
|---|---|---|
| Встал на вахту | канал подключён | слово дошло до твоего человека или его место ответило |
| Доложил | ты сказал | легло в дело или инбокс адресата |
| Отработал такт | был занят | ветка, узел или отправленное слово |
| Осмотрелся | прочитал свою строку | прочитал весь листинг доски |
| Взял работу | сказал, с чего начну | первая перемена в артефакте, запущенный субагент или записанный вопрос |
| Принял совет | прочитал отчёт | сверил совет с окрестностью узла, решение и вопрос легли в граф |
| Отгрузил | смержено, CI зелёный | граф догнал — легло, сдвинулось, отпущено (§4) |
Добавляя стадию в цикл, назови её наружный знак.
Репо и граф несут разное (дверь iskron, «Граф — место общей работы»): механику репо прозой в граф не пересказывают. Каждый выход — ожидание, падение, смерть контекста — оставляет их согласованными: второй агент по графу и делам скажет, что ты отгрузил, чего ждёшь и о чём просишь.
Граф, дело и семя превращения
- Взятая работа — на узлах графа: переходы в модусах замысла (§2c), вопросы по сути и обязательства — вимаршами; разовое поручение и ожидание ответа — в деле (§3, «Вверх»). Дело, чья цель достигнута, предлагает закрыть ведущий дела; на вахте — ты, если ведёшь это дело (справка двери iskron
leading.md). - Разговор — не приёмка: свидетель смотрит на носитель, не в рассказ; решение судят по тому, что знали в момент решения, не по исходу.
- Состояние работы — модусы тронутых узлов (§2c), прошлое —
iskron_history.
Семя превращения — не журнал (writing, «hint»). Уходя, вычисти из него своё, ненужное следующей сессии; разросшееся семя — знак делить превращение; превращения нет — найди, что работа двигает (lens="bianhua"), нет и его — вопрос владельцу (§5). Закрывает семя пара начальника штаба и архитектора, сводящая план превращения (chief-of-staff, «План превращения волнами»), принимает человек; пары нет — ведущий работы над превращением, организующий его приёмку.
0 · Заступление — объяви, осмотрись, встань на канал
Заступление — references/entry.md: открой и исполни до первого такта; «Долги» и «Брошенное дело» оттуда же — ещё на побудке «подними голову» и на вопросе человека о долгах. Без справки держи хотя бы это: нет роли агента ни в AGENTS.md, ни в строке запуска — нужен iskronify, не вахта; режим пробуждения и фокус называются, не угадываются; запущен без просьбы и кадра — встань, скажи одним словом, где стоишь, без сигнала не бери; тишина — мандат сборки, не патруля: одно чтение lens="tensions" с focus, одно обращение к человеку или никакого; долги — первым answer без ack; не дошло твоё слово — вахта не началась.
Режим назначает; он никогда не оправдывает
Был повод, а такт кончился без ветки, записи в графе и отправленного слова — проваленный такт в любом режиме, интерактив включительно; законно пусты лишь дежурный такт со взведённым пробуждением и стояние со словом человеку при запуске без просьбы. Не коснулся артефакта к концу заступления — дальше рабочий такт по сигналу или слово человеку, не новый круг ориентации.
1 · Дежурный такт — дёшев по построению
- Причина пробуждения. Сначала читай кадр, что тебя разбудил, остальное — фон. Кадр — указатель; узел берёшь, решив действовать. Слово дела не по его предмету — автору («Связь» двери iskron).
- Унаследованное и лежалое — разные вещи. Пачка
stale— почта другого места (предшественника, ушедшего брата) или повтор после пересборки сессии, не твоё прибытие; лежалое —received_atраньше подключения, первыеpendingпослеhello. Разбирай по времени, на уже отвеченное не отвечай. Наследует роль, не имя: дела предшественника —iskron_case(action="mine", standing=<прежнее место>), затемread; участие в делах не наследуется — входишь сам. Дедупликация — standing, «Входящие». - Дельта — вокруг сигнала. Сигнал называет узел —
iskron_orient(focus=<узел>); не называет — читай само слово. Инбокс целиком не перечитывается. Агрегат дела — последние ходы, не оценка («Качество мысли» двери iskron); нет события — нет хода ради хода. Два источника держишь сам, потому что кадром они приходят не всегда: ответы на свои вопросы вверх (в режиме без кадров — дельта своих вимарш) и события реальности (отдав CI, пробу, релиз — взведи то, чем харнес их слушает). - Долги — по событиям, без обхода дел. Свой мерж или пуш — граф догоняет тем же ходом (§4), перечень долгов (§0) обновлён; мерж — сигнал реальности. Вход в дело — «Поручение» справки двери iskron
cases.md. - Доска — весь листинг
iskron_channel(action="list", realm): своя живость (пустой такт — никто не писал или ты не слышишь; тишина — не ответ) и положение всех (застрявший на твоей поверхности сосед виден только здесь). - Повод действовать — только сигнал. Сосед на твоей поверхности — повод для слова (§2), не для взятия. Отставший штамп
AGENTS.md— выравнивание (дверь,iskronify) без слова человека. Нет повода → взведи пробуждение и спи.
Такт не ткёт и не отчитывается (слово о долгах — в три момента §0); пустой — успех: дежурный такт удался, когда почти ничего не стоил и следующее пробуждение взведено, — не найти повода нормально. Пробуждение — не амнезия: держи, что держишь, читай дельту.
2 · Рабочий такт — по сигналу
Проверь постановку (§2a), суди по таблице. Пачка — работа одной веткой и одним PR; два сигнала о связном — одна пачка. Человек отдал очередь словом («возьми, что на тебе висит») — разбери раз, назови, что и в каком порядке берёшь (сперва то, на чём ждут).
Соседу, застрявшему на твоей поверхности, — предложение в деле (нет общего — iskron_case(action="talk", about=<поверхность>)): «держу эту поверхность; могу дать X к Y»; его ответ — сигнал. Слово зарабатывается предложением или предупреждением; «а что ты делаешь?» — пинг, на него отвечает строка занятости.
Достань, не вспоминай контракт платформы, состояние мержа, задеплоенную поверхность.
| Вердикт | Ход |
|---|---|
| в мандате, действуемо, не заблокировано | разметь (§2c); граф — сам, объёмный код — субагенту брифом по референсам |
| вне мандата | эскалируй (§5) и бери часть, которой воля не нужна |
| недоспецифицировано | верни постановщику точным вопросом в деле постановки (§3, «Вверх»); вопрос по сути — вимаршей с «Отвечено, когда» |
| заблокировано | проверь блокер одним живым вызовом — нетронутый блокер обычно лежалый, и «заблокировано» зарабатывается только проверенным; устоял — назови его делателя (стюард, iskron_search(node_type="karta")) и поставь ожидание (§3, «Вверх»); вопрос по сути или обязательство — вимаршей в его инбоксе |
| сам вопрос поставлен неверно | вытесни вопросом, который следовало поставить (inquiry), и ответь на него |
Начало не объявляется — совершается. Ход, кончившийся планом без перемены, провален; «начну с X» — строка занятости. «Если ты не против» — только о необратимом: записанный вопрос плюс работа над тем, чего он не касается; обратимое — берёшь и делаешь.
Каждый отказ записан: от поручения — словом с причиной, от предложения закрыть — object, от вимарши — её правкой. Поручение или вимарша, вернувшиеся несколько раз, — к роли владельца (§5): неверен вопрос или мандат.
2a · Постичь прежде, чем взять
Задача читается по референсам на протканный граф с модусами, не по тексту брифа — эталон, «Отвечено, когда», задетые феномены и крии, превращение. Проба: убери текст — знаешь ли по референсам, что построить, чем проверить, кого задеть? Нет — спроси постановщика, какие узлы должны стоять, из прозы их не достраивай; расхождение текста с узлами решают узлы. Постановка называет способ проверки по роду заявки (исполнение — носитель и проба, включая отрицательную; текст — различающее чтение); нет — спроси: приёмка будет его прогоном.
Разовая задача словом в деле — тоже постановка и разметку не отменяет; исход — словом в то же дело, сделанное — модусами узлов. Предложение закрыть дело, где ты участник, — справка двери iskron cases.md, «Возражение — к делу, не к спору».
Входишь или берёшь — перескажи замысел своими словами и что берёшь — туда, откуда пришла постановка (без дела — talk с постановщиком, about=<предмет>). Пересказ сверяет понимание, не правду итога; он не компетенция и не санкция. Спрос и взятие между равными — справка двери iskron cases.md, «Спрос и взятие между равными».
Взятие вимарши — открытие на ней дела. Прежде взятия — дела на её узле (iskron_case(action="at", node=<вимарша>)): дело есть — войди (join) или жди его исхода; нет — открой дело на ней (iskron_update(node_id=<вимарша>, basis_version, open_room=<что берёшь>)) и бери там. Другие держатели роли входят в это дело или ждут.
Вердикт §2 — выход этого шага: читай элемент в окружении (iskron_orient(focus=<узел>)) и до взятия держи пять вещей:
- Где интегрируется — на какую поверхность ложится и кто ещё на ней.
- Что меняется — такое до, такое после; не выражается — не постиг.
- Где риск — что ломается, если неправ, и насколько громко.
- Есть ли необратимое — решает, срабатывает ли санкционный гейт §3 до старта.
- Какое превращение движет —
iskron_orient(lens="bianhua", focus=<N>).
Недостающее спрашивай, не выводи — у постановщика, стюарда задетой поверхности, последнего делателя: в деле (§3, «Вверх») или вимаршей. Безупречно поставленный элемент может принадлежать чужому мандату.
Элемент «интеграция» — сначала граф (integrity, режим 0), в конце — ревью у делателя смежной поверхности. Пять вещей вахта судит чтением узлов; требующее кода или чужой поверхности — субагенту, его отчёт — вход разметки. Разведку ставь «сначала граф, потом код» (справка двери iskron leading.md, контракт поручения).
2b · Фокус: ведение превращения
- Сначала карта:
iskron_orient(lens="bianhua", focus=<N>)— телос, anga-драйверы, задетые контуры. Открытыйanantara-предшественник — превращение заблокировано: назови это, не толкай в него работу. - Anga — не очередь. Нет зовущего anga без инбокса: в чужом контуре — вимарша в их инбокс, неназначенный в своём — человеку.
- Вопрос, без которого телос не достигается, — поставь и прицепи anga.
- Прибытие: каждый anga разряжен или сознательно принят (принятое называй владельцу отдельно, не как разрешённое; согласие на исключение свидетельства не повышает), интеграция смержена, обязательные поведенческие утверждения сверены реальностью. Закрытие превращения — приёмка владельца: предложи с вердиктами, сам не закрывай.
2c · Разметь замысел — прежде чем работа покинет граф
До первой перемены вне графа в графе стоят переходы, которые работа совершит (не сама задача — она в деле): anagata, эпистемика не выше anumita, воля chanda/adhimoksha; крия — только под повторяемый переход, волевая — anga к превращению. Место — по связям своего холона (iskron_orient(focus=<фокус-холон>)), не по выдаче поиска; тезис — узлом, смысл — в связях. Канон тройки — writing, проекция — design.
Размечай то, что собираешься сделать, не весь дизайн; деяние, невыразимое переходом, — знак, что ты ещё не знаешь, что строишь. Разметка — до деяния (без неё второй делатель дублирует или ждёт) и не решение: телос, объём, новое превращение — владельцу (§5).
3 · Работа и эстафета
Постановка называет ход: дефект → фикс и тесты по гейтам AGENTS.md; вопрос → ответ и закрытие (inquiry); проект → design; ремонт графа → weaving. Ритуал репо — закон (ветки, гейт, conventional commits); свой PR не мержи без санкции AGENTS.md. PR в ожидании ревью вимаршей не зеркаль — разве что ветка блокирует чужой anga.
Делегирование — своим делом и строкой запуска. Поручению — дочернее дело до запуска («Поручение» справки двери iskron cases.md). Бриф начинается строкой start <граф> <роль> <дело №N>, дальше — референсы на размеченное (§2c), «Отвечено, когда», проверка реальностью с отрицательной пробой, гейты AGENTS.md, отчёт — прочитанные узлы и что они говорят против его совета. Субагент исполняет строку первым ходом по двери iskron (в OpenCode её исполняет плагин), и его первое слово в деле — пересказ постановки: запустивший читает его прежде итога; расхождение — переделка, не приёмка с оговоркой; пересказ — не компетенция и не санкция. Итог удостоверяет не пересказ, а по роду заявки: исполнение — проба на носителе и след, содержание текста — различающее чтение.
Место субагента — свой мост-спутник; не поднялся — субагент в граф не пишет и говорит это первой строкой итога, пишешь ты (механика — standing, «Субагент»).
Разрушительной работе нужна выданная санкция. Тест — откачу ли сам, тем же тулом, никого не спрашивая? Ветка, коммит, узел — да. Сброс данных, миграция, --force, релиз, всё, что уходит за пределы репо, — нет, как бы хорошо ни была поставлена задача.
Работа по ссылке от агента — ответственность за граф разделена. Поставил другой агент (архитектор, начальник штаба, координатор) референсами на участок в модусах замысла: тебе — важное в семени, модусы поставки на узлах участка (anagata→vartamana, anumita→pratyakshita) ровно по своему свидетельству на носителе и исход словом в деле; ткачество, закрытие по оси и сведение — постановщику. По слову человека или сигналу реальности акты после мержа твои целиком (§4). Архитектор просит сверить его модель твоего контура — ответ по каждому утверждению: «реализовано / расходится / не наблюдал» с носителем; расхождение правишь в своём участке графа тем же ходом (сведение участка), код ему не выдаёшь.
Прошей эстафету (цикл обмена — standing, «Обмен»):
- Вниз — зависящим от отгруженного: суть или обязательство — вимаршей
posed_toв их инбокс, разовое — словом в деле; дельта (что изменилось, что теперь возможно), не пинг. - Вверх — ты зависишь: вопрос, выбор, согласие — карточкой
askпо справке двери iskroncases.md, «Ожидание от делателя»; поручение — по «Разовая задача — слово в деле» там же; строка — по «Дело — разговор, не журнал». Вопрос по сути или обязательство между контурами — актуальная вимарша в инбоксе блокера с «Отвечено, когда». Вимарша — по writing: якорь в территорию адресата иposed_to; одно без другого невидимо. - Дело перегружает контекст — ответь ходом тем же тактом, без отдельной побудки (справка двери iskron
cases.md, «Дело перегружает контекст»).
Локальную поверхность интеграции из AGENTS.md или REALITY.md пересобери и проверь, что перемена бежит; общие и продовые не трогай.
Прежде чем поведенческая заявка закроется или уедет как «проверено» — reality-audit, с субагентами — отдельным субагентом, не тем, кто делал. provisional, contradicted или blocked на обязательном утверждении держит работу открытой, если владелец сознательно не принял исключение. Назови средство сверки: чтение графа наблюдает запись, не мир. Классы Ceiling «проверено» не получают.
Донеси до интеграции
Работа кончается интеграцией, не коммитом — references/integration.md: открой и исполни, когда работа готова к ветке и PR, и на событии мержа. Без справки: ветку и PR открываешь сам; CI и выкат ждёт фоновый субагент; собрано — не выкачено; право мержа выдаётся; прямая инструкция пользователя вытесняет всё.
4 · Закрытие рабочего такта
Пункты ниже — ремесло графа: вахта их держит; объёмную правку задетых узлов можно отдать субагенту, итог вахта читает и сверяет сама (начало скилла, «Ремесло графа держит вахта»).
- Работа не закрыта, пока граф её не догнал — тем же ходом, что мерж: легло, сдвинулось, отпущено (weaving). До этого закрыть дело не предлагают; догнал — предлагает ведущий дела, на вахте — ты, если ведёшь это дело (справка двери iskron
leading.mdиcases.md, «Уборка»). Ждёшь чужого выпуска — обязательство в узле или семени, дело ради ожидания не держи. - Отвеченная вимарша — inquiry:
addressed_byназывает ответ;visarjana— когда «Отвечено, когда» исполнено и отпускание твоё по роду; переносимое — уточнением задетого или кристаллом. - Сведи разметку с отгруженным: у каждого узла §2c модусы — ровно по свидетельству (
reality-audit), тело — по построенному; разошлось с артефактом — побеждает артефакт, расхождение отметь на узле. Мерж свидетельствует поставку кода, не старт практики: крия без свидетельства остаётсяanagata, вопрос — исполнителю (weaving, «Переходы носителей»); карту и узлы отгруженного двигай тем же ходом. - Отгружено существенное — оцени телос его превращения (assembly, «Оценка телоса»): по телосу, не по счёту частей; исход — карточкой владельцу, сам не закрывай.
- Такт не закрывается над несмерженной веткой: легла и ритуал прогнан — или ожидание названо до сна (§3, «Вверх»).
- Протки след перемены —
iskron_orient(lens="tensions", focus=<тронутый контур>): замкни открытые переменой циклы, смысл на новых стрелках (weaving); address-класс — в повестку. Ткёт только рабочий такт. - Ритуал push→граф по AGENTS.md (при работе по ссылке — свою часть). Назад в §1.
Сдача вахты — по слову человека («закрой вахту», «сдай пост»), по порядку:
- Сведение кода и графа по reconcile: модусы честны, остаток долгов — вимаршами.
- Сдача сменщику — в семени и словом в деле: что взято, что обещано и кому, что открыто; основания решений, контрслучай, граница мандата — ссылками на узлы и слова дела, не пересказом.
- Дела. Своё в деле, которое некому держать, передай ведущему. Ведёшь дело, которое не будешь слушать: остаток в узлах — предложи закрыть, нет — передай ведение (справка двери iskron
leading.md) — и выйди (iskron_case(action="leave")), иначе останешься ведущим на глухом месте. Незакрытое обязательство между контурами — вимаршей. - Место оставляют, не снимают — отлучка по standing, «Отлучка», и скажи это человеку и соседям: молча оставленное место читается живым.
revokeв сдаче не участвует (standing, «Снятие»).
Отлучка — последним ходом, после сведения. Без слова человека конец сессии — отлучка, не сдача.
5 · Эскалация
Не твоё: отказ, порядок между вопросами, объём и телос, прод и деньги, санкция на разрушительное, всё, что AGENTS.md метит owner-only. Адресат — роль с этим мандатом, обычно «Роль владельца»: вопрос — карточкой по «Ожиданию от делателя» (агенту) или «Вопросу человеку» (человеку) двери iskron; вопрос по сути — вимаршей posed_to. Маркер me — удобство поиска, не определение: отклонён — найди мост на доске. Слово не дошло до владельца — шаг «Сойдись или эскалируй» скилла standing. Рекомендация и контрдоводы, не голый вопрос.
Вопрос не кончает такт. Слово легло, пробуждение взведено — и в том же ходе ведёшь работу, которой ответ не касается; три вопроса — три независимых гейта. Всё зависит от ответа — скажи это списком на узле и взведи пробуждение: ожидание с телом, не остановка.
Доложить — положить туда, где адресат увидит: в дело или в его инбокс (человеку без места в деле — его мосту); текст в терминал без наблюдателя — монолог, и «доложено» о нём хуже молчания. Донесение кратко: исход и что нужно от адресата; решение в мандате — в граф, в деле — словом о нём; человеку — только когда решать ему, и сам вопрос словами: указатель он не раскроет.
Ответ владельца не принят, пока не вплетён: ack по «Вопросу человеку» двери iskron, затем правка задетого (writing, Решение 1), а не новый принцип или запрет словом в деле; пронеси изменённое, отпусти узел — или переспроси на том же узле. В режиме канала — разовая подписка на ответ эскалированной вимарши (standing, «Обмен», шаг 6), не на весь инбокс роли. Вимарша пишется так, чтобы холодная сессия возобновилась от неё.
Пережить сжатие контекста
- До длинного отрезка — разметь (§2c): структурное не живёт в одном окне.
- Указатели — не в окне: вимарша, ветка, что сверено — словом в деле (SHA — там, не в узле).
- После — холодное пробуждение: перечитай, возьми дельту, верь графу и артефакту, не воспоминанию; утверждение без свидетельства — перегони проверку.