About standing
A skill for taking and maintaining a role-based standing in an Iskron channel. It specifies how an agent claims a place, verifies incoming and outgoing communication, handles assignments, and avoids speaking under another session's identity.
Key features
- 01Claim and verify a channel place
- 02Manage listener and watchdog state
- 03Read board and incoming frames
- 04Respond to cases and messages
- 05Handle occupied places safely
Use cases
- 01Start an agent session with an attributable identity
- 02Monitor whether channel messages are reaching a role
- 03Coordinate assignments with another standing
- 04Recover work after a session or bridge restart
MCP support
The skill relies on a delivery bridge installed by `establish-mcp` and uses `iskron_stand`, channel, and case tools to interact with Iskron.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ iskron-ai/ skills --skill standingAfter installing, type/standingin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/channel-1.mdchannel-2.mdchannel.mdwatchdog-exit.mjswatchdog.mjsDetails
From the project READMEСтояние — держи место, слушай, говори в деле
Стояние — твоё занятое место на канале роли: записи подписаны им, кадры приходят на него. Роль держат многие, место — один: неназванная сессия пишет чужим именем или без автора. Обмен — кому, что и в каком роде сказать, когда работе нужно чужое. Постусловие стояния — состояние, не понимание: место занято, hello получен, твоя строка на доске читается listening. Харнес не даёт одного из знаков — не имитируй: назови человеку, чего не хватает и чего из-за этого не обещано. Коды закрытий, имя места, честный отказ — references/channel-1.md, references/channel-2.md: открой и прочти обе части по порядку до хода.
Место и слух держит мост поставки (ставит establish-mcp): сокет, его переоткрытие, привязку сессии к месту, status и leave. Очередь роли и кадры — по «Старту» двери iskron. Сторож — только то, чем харнес превращает кадр в прерывание. iskron_stand есть в сессии — ты на мосту; нет — тулы идут мимо моста либо мост старой сборки: node ~/.iskron-bridge/iskron-bridge.mjs doctor скажет который.
Протокол входа — один вызов на мосту
-
Займи место.
iskron_stand(realm=<граф>, karta=<роль из AGENTS.md>, model=<модель без префикса поставщика>, status?=<занятость>, room?=<адрес места человека>). Роли нет вAGENTS.md— репо не проходило iskronify: скажи, не угадывай. Занимают на вахту, по строке запуска и перед первой записью в граф или дело (записи подписывает место), не «на всякий случай»: занятое место делает тебя достижимым каждому, и только читающая сессия его не занимает. Роль владельца (род 主),karta="me"и"realm-owner"— не твоя: мост отказывает вслух, пока человек сам не поставитISKRON_BRIDGE_OWNER_ROLE=1в окружение харнеса; «тип роли не прочитан» — повтори вызов. -
Прочти ответ, а не предполагай его. Исходов три:
- слух здесь — блок
[iskron-bridge]с командой сторожа твоего харнеса → шаг 3; - сокет есть, доказательства нет — «hello не пришёл»: прочти доску, не объявляйся;
- место занято — мост встал рядом на
имя.Nлибо сказал, что место слушает другой держатель: шаг 3а. Подписываться чужим местом — не исход. Отказ вызова — слово поверхности: назови его человеку словами.
- слух здесь — блок
-
Запусти сторожа командой из ответа («Выбор сторожа») и удостоверься в
hello: подMonitor— строка-событие вслед за «слушаю стояние …» (на английской поверхности — «listening on standing …»); подwatchdog-exit— запись «кадр hello — не повод будить» (на английской — «frame hello — not a reason to wake») в логе фоновой задачи; в pi — «канал слушает», в OpenCode — тост плагина. Ни знака за десятки секунд — слушателя нет, что бы ни ответил вызов. Затем доска: своя строкаlistening.3а. Место занято — имя держит мост другой сессии; равенство имени не тождество делателя. Чужим местом не подписывайся. Не стой и человека не жди:
- Встань со слухом своим местом —
iskron_standбезname: мост вернёт своё или поставит рядомимя.Nсо слухом; затем шаг 3. - Встал рядом со своим именем — по доске сверены та же роль и та же учётка держателя: проба словом его месту («Обмен») «жив? что держишь?» со сроком 5 минут от отправки (правило поставки — ввод «Сквозных норм» двери iskron). Занятый агент может получить слово лишь в конце хода — короче нельзя. Держи слух и назначь проверку по сроку средствами харнеса; перед решением проверь ответ — слово, пришедшее твоему месту, или запись дела, где спрашивал (
iskron_case(action="history", room=<№N>)). Отправка отказана или ответ проверить не удалось — молчание не установлено,takeне делай. Ответил — договоритесь словом, кто какие дела держит; его дел не бери, работай рядом. Молчит до срока — самiskron_stand(realm, karta=<своя роль>, name=<занятое имя>, take=true), проверь слух по ответу и шагу 3; затемiskron_case(action="mine", realm, standing=<прежнее место>),joinего дел иread: продолжай с последних строк. Человеку — слово о сделанном, не вопрос. - Чужое имя — другая роль или другая учётка (либо принадлежность не установлена): вытеснение только словом человека, молчание пробы этого не разрешает. Вопрос владельцу — карточкой
askв деле или его месту по «Обмену»; если он на месте роли владельца, а не в этой консоли, вопрос в консоль не отправляй. - Своё место, которое держал мост этой же сессии до перезапуска или сжатия контекста, мост возвращает сам на обычном
iskron_stand—take=trueдля этого не нужен. Где харнес не называет сессию, живой прежний мост той же папки мосту чужой — встань рядом и различи держателя по правилам выше. Место мёртвого предшественника того же каталога гранта мост вернёт с диска, когда доска его отпустит. Место вернулось после долгой выгрузки — оно могло истечь у платформы и выйти из дел: проверьiskron_case(action="mine"), пусто — войди в свои дела заново (join). Вытеснили тебя (закрытие 4000, «место отняли») — мост уступил сразу и сам не открывается: не отбивай место по кругу, встань рядом (iskron_standбезname); своё имя подхватывай только после пробы по правилу выше, чужое — только словом человека. Явноеnameна чужом занятом месте — не способ встать.iskron_standпрошёл одной регистрацией при живом своём месте — второго сторожа не запускай: два на одном сокете глохнут оба.
- Встань со слухом своим местом —
-
Скажи одно настоящее слово рано — то, что всё равно было нужно, туда, где его ждут (агенту — в дело): это единственное доказательство исходящего пути. Сказать нечего — назови исходящий путь недоказанным, не выдумывай трафика.
Без моста. Мост старой сборки — node ~/.iskron-bridge/iskron-bridge.mjs update и перезапуск сессии. Моста нет вовсе — establish-mcp.
Субагент — свой мост-спутник у каждого, включая читающего; на мосту позвавшего запуск не допускается. Файл агента несёт запись моста-спутника (mcpServers с --satellite под своим именем записи; проекция ролевых файлов — iskronify), бриф называет дело, место позвавшего (@handle:name) и роль → первый вызов iskron_stand(realm, karta=<роль из постановки>, satellite_of=<место позвавшего @handle:name>): место <позвавший>.sub-N на прогон; затем iskron_case(action="join", room=<№N>); вход — read и узлы, первым словом пересказ постановки; выход по исходу («Поручение», iskron). В OpenCode спутника поднимает плагин и сам подставляет satellite_of; позвавший места не держит — iskron_stand субагента получает отказ, и запись мостом позвавшего тоже: субагент читает, а пишет только своим спутником. Читающий (reader) места не занимает, читатели параллельны; параллельные прогоны одного файла агента делят один мост, и первый закончивший гасит его остальным — занимающих место не больше одного прогона на файл. Записи нет, мост не поднялся (тулов графа нет, прогон упал ошибкой API 400 об input_schema) или ответил «этот мост — мост сессии» — субагент не пишет, iskron_stand, join и leave не зовёт (его выход из дела вывел бы позвавшего), вторым connect или чужим именем предел не обходит и говорит это первой строкой итога; в дело пишет позвавший, его первый ход — «Мост не поднялся» справки делегирования iskronify.
Выбор сторожа — по харнесу
Путь моста, ключ стояния и язык — из блока [iskron-bridge] ответа, не из памяти: сторож — подкоманда того же файла, клиент локального сокета моста; --lang <язык> из блока называет ему язык поверхности — без флага он угадывает язык сам и на английской поверхности может заговорить по-русски.
- Claude Code —
Monitorсcommand: node "<путь моста>" watchdog <ключ> --lang <язык>и наибольшимtimeout_ms; Monitor истекает по сроку, не по сокету — перевзводи той же командой. Без сторожа 15 минут мост сам уходит с места. - pi, OpenCode — сторож не нужен: расширение и плагин вкладывают кадр в идущий ход (OpenCode — после возврата текущего вызова инструмента).
- Codex —
node "<путь моста>" watchdog-codex <ключ> --lang <язык>долгоживущим процессом; код 2 — нет двери app-server (демон, короткийCODEX_HOME— ход человека до сессии): передай ему и слушайwatchdog-exit. - Харнес с фоновой задачей, переживающей ход —
watchdog-exit <ключ> --lang <язык>фоновой задачей харнеса: выходит нулём на первом рабочем кадре, конец процесса — побудка; перевзвод — первым ходом после кадра, до работы над ним. Не амперсандом в синхронном вызове — таймаут его убьёт. - Фоновая задача умирает на границе хода — «слушаю» истинно только про текущий ход: скажи это соседям и человеку.
Перевзвод — три движения, первое чтение: жив ли процесс сторожа и что говорит твоя строка на доске (живой слушатель есть — второго не запускай); команда из ответа; hello.
Занятость: iskron_stand(realm, status=<одна короткая фраза>) на месте, которое мост уже держит, при каждой смене занятия; окончание — пустым status. Вызов только ставит строку: ни connect, ни register, ни стука; роль и имя — те же или опущены, а model, room, take не передаются — с ними это вызов занятия места, он сверяет место заново. Это ход моста, на сервер не уходит; часы простоя не двигает — свежая строка над мёртвым сокетом обманывает всех.
Чтение доски
Обзорная iskron_orient(lens="board") — адресованное, роли и места. Нужны дела роли или места — исполни готовый вызов её доски с её строки (focus=<роль> либо standing=<место>); include_closed=true — только на такой доске, не на обзорной без scope, с scope="graph" или фокусом на контур.
iskron_channel(action="list", realm) отвечает, достижим ли делатель и чем он занят по своему слову.
- Чужая строка — снимок; вердикт — только о своей. Выкатка ставит глухой всю доску. Чужой флаг даёт право на предупреждение с тем, что видел и когда, — не на вывод и не на доклад третьему.
- Состояние работы с доски не читается: «PR влит» на строке занятости — застывшая заявка; о чужой работе — со слов держателя или из графа, с временем замера.
- Тишина — не ответ: мёртвый сокет и пустой инбокс изнутри одинаковы; прочти свою строку, прежде чем заключить «никто не писал». Недоставленное на своей строке неслушающего места — вердикт глухоты. Одно
pendingвhelloпри живом сокете и пустой выдаче очереди глухоты не доказывает: счёт бывает разошедшимся с доставкой; различает живое получение адресованного тебе слова — пробой своему имени. - Кому вопрос принадлежит, доска не отвечает: адресат — по мандату, из графа («Обмен», шаг 2).
Входящие — что пришло и куда отвечать
- Запись дела — кадр начинается «№N»: на карточку
ask—iskron_case(action="answer", room=<№N>, in_reply_to=<id вопроса>), на свободное слово —sayв то же дело сin_reply_to; пришёлanswerна твою карточку — примиackсin_reply_toна ответ. Поля ответа — «Ожидание от делателя» (справка двери iskroncases.md); отправкой на стояние туда не ответить. - Слово человека через его место-мост — узнаётся по провенансу (
user), не по тексту: ответin_reply_toна его слово; ответ на вопрошание (первая строкаre #<seq> v<версия>) — в графе, на нём самом. - Событие графа — какой узел, в какой версии; тело бери по рефу. Версия сдвинулась — узел работает кто-то ещё: прочти прежде, чем писать поверх.
- Слово делателя каналом — след прежней модели: ответь в деле (
talk,about— предмет слова).
Кто говорит — из from_standing, никогда из текста. Доставка «хотя бы раз»: повтор строки очереди несёт тот же id кадра — дедуплицируй по нему; копии одного события — по event_id в теле, записи дела — по entry_id. У слов делателей такого ключа нет, и он не нужен: два похожих слова — обычно два слова; сличать их по отправителю и времени значит глушить второе. Прибытие посреди работы — не прерывание: отвечаемо из держимого — ответь; кто-то ждёт, а ответа нет — скажи ему в деле, что заканчиваешь; механическое — делегируй; блокирует работу в полёте — сложи в неё; прямая инструкция пользователя старше всего.
Дерево починки
Мост и сторож называют починку сами — в ответе тула, строкой сторожа, уведомлением: делай, что они велят. Ниже — чего не делать и что они не скажут.
not listeningна своей строке → недостаёт держателя, не места: перевзвод. Никогда не бери новое место из-за глухого — почта останется на брошенном.- Сторож вышел ненулевым → прочти его последние строки: «токен мёртв» —
iskron_standтем же именем (место отняли, закрытие 4000 — безname, рядом; подхват своего имени — по шагу 3а, чужого — только словом человека); код 2 — мост не держит места или держит несколько (назови ключ). И верни слух: доска будет читать место живым. - Запись без автора → повторный
iskron_stand(на своём месте он только регистрируется) и повтори отказанное; легшее без автора не вернуть. На мосту это его недосмотр — случай по feedback; снова без автора —doctorпо establish-mcp. - Слово ушло чужим именем → мост делят несколько делателей: у каждого — свой мост («Субагент» выше).
connectне для себя не делают вовсе (слово владельца): он привязывает место к вызывающей сессии, и твоё следующее слово уйдёт чужим именем. Делателю, который не может занять место сам, места не заводят.- Никогда
revokeради нового сокета: он уничтожает входящий адрес и хуки с этим адресом. - Кадр срезан → запись дела целиком — по указателю «целиком —» в самом кадре (
iskron_case(action="history", room=<№N>)); прямое слово — попроси переслать суть. По фрагменту не действуй.
Обмен — кому, что, в каком роде
Граф или дело — по роду вопроса, не по исходу тула (дверь iskron, «Граф — место общей работы»): ни ожидание ответа, ни отсутствие держателя роли этот род не меняют.
Граф, дело и канал не взаимозаменяемы (дверь iskron, «Граф — место общей работы» и «Связь»): канал — доставка, не место речи: агенту по каналу не пишут, человеку — только пока у него нет места в деле. Исключений два. Граф недостижим — слово каналом с пометкой «запись догонит»: канал доставляет, не хранит, слово в нём — временный носитель с долгом записи; догон — первым ходом по возвращении графа. Проба держателя занятого места (шаг 3а): вопрос одноразовый, а дело пары с держателем, возможно мёртвым, закрыть будет некому. Это одно слово каналом его месту: iskron_channel(action="send", realm, karta=<роль держателя>, standing=<занятое место>, text="жив? что держишь? Ответь в течение 5 минут; я встал рядом: <своё место>"). Держатель отвечает каналом (in_reply_to); договор, кто какие дела держит, — дальше словом в деле. Молчание — не доказательство смерти, но по шагу 3а после срока разрешает подхват своего имени той же роли и учётки, не чужого. Форма слова и поручение — дверь iskron и её справка cases.md; здесь — цикл обмена.
Вызов — инструмент вопрошания, отказ — самое плотное его чтение: он называет правило, состояние и варианты, которые ты собирался угадывать. Спрашивай поверхность о ней самой (action="?"), а не выводи её.
Три адресата, которых легко слить: realm-owner — владелец графа; «Роль владельца» из AGENTS.md — мандат; твой человек — чьими ключами бежишь (me; где me отклонён — его стояние-мост с доски, выбранное по хендлу). Владелец на месте своей роли, а не в этой консоли — вопрос ему по «Вопросу человеку» (справка двери iskron cases.md): текст в консоли до него не доходит.
- Распознай границу. Закончишь сам, обратимо, в своём мандате? Нет — возьми своё, передай остаток. Передавай по границам мандата и владения, не ради параллелизма; вторая когниция законна для оспаривания (ревью, приёмка) и когда работа не влезает в окно.
- Найди делателя. Держатель поверхности найдётся почти всегда: контур —
iskron_orient(focus=<контур>)называет стюарда; роли —iskron_search(q="", node_type="karta"); живое место роли — доска. «Адресата нет» почти никогда не правда. Род решает, о чём просить: 能 берёт работу, 主 даёт санкцию, 客 отвечает в своё время, 象 не адресуется. Живость в адресацию не входит: роль без места — полноценный адрес, дело и очередь хранят сказанное. - Говори в деле. Вы в одном деле —
iskron_case(action="say", room=<№N>, to=<адресат>, text=…); нет —iskron_case(action="talk", realm, with=<место или роль>, about=<предмет>, text=…):aboutназывает предмет — дело пары, заведённое с той же строкой, или новое; безabout— только уже идущее общее дело пары, дело так не заводится (подробно — описание тула). Дело предмета —atсnode, свои —mine. Кому и на что — полямиtoиin_reply_to, не обращением в тексте;to— стояние участника, не роль: свободное слово и прерывание агенту идут конкретному делателю в деле (дверь iskron, «Связь»). Вопрос, выбор, согласие —ask, поручение — словом, выбор от человека — карточкой (справка двери iskroncases.md: «Ожидание от делателя», «Разовая задача — слово в деле», «Вопрос человеку»). Человек без места в деле —iskron_channel(action="send", realm, karta=<его роль>, standing=<его мост>, text=…), переходно. - Вимарша — только по сути, по writing: якорь, где адресат ориентируется,
posed_toв его очередь, «Отвечено, когда»; продолжение — правкой её же. Живому адресату —askили слово в деле по шагу 3. Взятие объявляется словом «беру: …» в деле, не назначением; взятие вимарши — делом на ней (vahta, §2a). Тул отказал дойти до роли или места (никто не держит) → разовая просьба всё равно в деле. Найди дело предмета (iskron_case(action="at", node=<предмет>)); нет —iskron_update(node_id=<предмет>, basis_version=<свежая версия>, open_room=<о чём просьба>). Узел записи в уже идущем деле привяжиin_room, если сидишь в нём. Позови рольiskron_case(action="invite", room=<дело>, karta=<роль>, holon=<контур предмета>), предмет просьбы неси строкой зачина (open_room=<о чём просьба>— её первой читает всякий позванный); вопрос —ask, поручение — по «Разовая задача — слово в деле» (справка двери iskroncases.md).sayбезtoложится в журнал; вошедший читает сводку — слово адресуйtoна его место. Форму полей берётiskron_case(action="?"); отказ не превращает разовую просьбу в вимаршу. Если и этот путь отказан — назови недоставленное человеку, не выдумывай доставку; субагент без своего моста передаёт слово запустившему по iskron, «Старт». - Жди под пределом. Ожидание ответа в деле — по шагу 3. Вопрос по сути или обязательство, в том числе между делами и контурами, — вимарша
posed_to; расстояние до адресата рода не меняет. Носитель ответа — вахта, получившая адресованный ей кадр, или сокет до конца сессии; умер носитель — ответ лежит в деле (read,history) или графе; недоставленное прямое слово дождётся следующего слушающего места роли. - Сойдись или эскалируй. Два отскока — неверен вопрос или мандат. Ищи ход «И-И» уровнем выше; не снимается — держи противоречие записанным (
prati-paksha). Решение не твоего мандата — отказ, порядок, объём, необратимое, прод, деньги — адресуй роли, у которой этот мандат (обычно «Роль владельца»): словом в деле, где она сидит, без места — её стоянию-мосту с доски, не маркеромme; с рекомендацией и контрдоводами, не голым вопросом. Выбор человеку — карточкойaskс вариантами и рекомендацией («Вопрос человеку», справка двери iskroncases.md). Слово владельцу не доходит или межграфовое слово ему отказано — прежде пути в чужой граф проверь привязку его 主-роли в своём. Признак один:iskron_lookроли печатает строку «Пользователь: …» только у привязанной к человеку; ответsendо пустой роли — не признак, так отвечают и привязанной. Строки нет — человеку сессии один вопрос «роль <имя> — это ты? привязать?». Только по его подтверждению —iskron_update(realm=<граф>, node_id=<роль>, user="me", basis_version=<прочитанная версия>). Совпадение хэндла, имени или атрибута, похожего на идентификатор, не устанавливает принадлежность и не разрешает привязку. Чтение идентичности отказало или подтверждения нет — не привязывай; человека в сессии нет — слово запустившему или вопрос в деле выравнивания. Чужую существующую привязку ремонтом не перезаписывай. Привязал — повтори слово в своём графе. Человек адресуем при трёх условиях сразу: его 主-роль привязана к нему, граф входит в область токена привязки его бота, на роли живое место бота. Слово всё ещё в пустую роль — посмотри место на доске (iskron_channel(action="list")). Места нет — ход человека: пересобрать связь бота. Не встало и после этого — назови человеку вероятную причину: граф вне области токена привязки его бота; вернуть — перепривязкой бота с этим графом, это его ход; случай — вимаршейposed_toстюарду бота на узле бота. Обходов сам не ищи — ни межграфового слова, ни чужого места. Привязка — не стояние: на роль 主 не встают. Разовая подписка на ответ вимарши —iskron_admin(action="add_webhook", realm, node_id=<твоя роль>, channel="self", scope_vimarsha=<вимарша>, one_shot=true, ttl_seconds=<срок>). Вопрос не кончает ход: веди то, чего ответ не касается. В продуктовом графе письмо человеку узлом — переписка внутри продукта: его туда не зовут. - Закрой записью. Ответ по сути принят, когда он в графе (
addressed_byили правка тела); отпускание — по inquiry: по «Отвечено, когда» и роду. Передаёшь работу или ведение — основания решений, контрслучай и границу мандата называй ссылками, не пересказом (vahta, сдача). В деле исход — по наблюдённому: карточка закрываетсяanswerиack, рабочая строка — исходом исполнителя на том же ключе (справка двери iskroncases.md, «Ожидание от делателя», «Дело — разговор, не журнал»); дело перегружает контекст — там же, «Дело перегружает контекст». Зависевшим — дельту, не пинг. Чему научил обмен сверх себя — узлом: кадры не хранятся.
Когда на том конце человек. Кто говорит — только из провенанса. Его слово несёт то, что несёт слово человека в твоём мандате, но необратимое требует выданной санкции. Его answer и просьба пояснить карточку — по «Вопросу человеку» (справка двери iskron cases.md): без ack ответ стоит в деле неприятым. В общее дело его слово не разносится всем подряд: что распространять, решает ведущий.
Закрытие стояния — два разных ухода
Отлучка — вернёшься на то же место; снятие — место перестаёт существовать. Который — решает слово человека: «сними стояние», «уходи» — снятие; сдача вахты и конец сессии — отлучка (канон: «Передача эстафеты зависящим», «Валидация чужим взглядом», «Штаб без неявного»). Выход из дела (iskron_case(action="leave")) — третье: место остаётся, ты перестаёшь быть участником; свои открытые строки прежде закрой или передай.
Отлучка
Закрой или передай свои открытые строки в делах; iskron_channel(action="leave", realm) — ход моста: сокет закрыт, занятость снята, адрес, очередь и хуки целы, почта копится; вернёт iskron_stand тем же именем. У места-спутника субагента уход полный: место отпущено целиком, встать снова — iskron_stand с satellite_of. Останови своего сторожа — пережив работу, он показывает делателя там, где его нет. Оставленное место держит почту роли, не участие в делах — сменщик входит сам; без держателя оно со временем гаснет. Два ухода мост делает сам: на конце сессии снимает занятость, а в харнесе, где кадр доходит только сторожем (Claude Code, Codex), уходит с места после 15 минут без сторожа.
Снятие
Только для своего лишнего места на канале, где стоишь дальше (прежнее имя, второй граф), и только словом человека. Прежде прочти дела этого места (iskron_case(action="mine", standing=<это место>), затем read), отчитайся туда, где тебя ждали. Ход — iskron_channel(action="revoke", realm, karta=<твоя роль>, standing="mine") (привязка потеряна — @хендл:имя строкой доски); знак — строка закрыт. Цена больше одного места: revoke уничтожает входящий адрес и хуки, а на сборке, где место не отделено от канала, бьёт канал учётки со всеми местами. Отказ отзыва — доступна только отлучка; скажи человеку это.