Skip to main content
Glama
ianf-ai
by ianf-ai

TUT — Бери свою очередь

English | 简体中文

Несколько агентов кодирования — разные модели, разные CLI-инструменты — совместно работают в одном проекте: контекст передаётся автоматически, рабочий процесс продвигается самостоятельно, а человек вмешивается только на точках утверждения.

TUT — это многопользовательская система коллаборации агентов, работающая на вашем локальном компьютере. Её ядром является Context Hub — локальный MCP-сервер, выступающий в роли общей памяти для агентов (журнал задач с только добавлением записей). Состояние задачи выводится из последовательности записей с помощью чистой функции; Notifier опрашивает изменения состояния и управляет циклом проектирование → реализация → ревью → доработка в ручном или автоматическом режиме; человек принимает решение только на точках утверждения.

Проблема

Традиционный способ координации нескольких агентов — передача файлов (передача design.md / review.md). Он имеет три недостатка:

  • Контекст передаётся через файлы: файлы передают только выводы — обоснование и отвергнутые альтернативы теряются. Следующий агент получает «что», но не «почему»

  • Рабочий процесс управляется вручную: цикл ревью–доработка обычно проходит 2-3 раунда, каждый из которых запускается вручную, с повторной настройкой запросов и контекста каждый раз

  • Инструменты изолированы друг от друга: сессии агентов не видят друг друга; нет единого состояния или точки входа для оркестрации

Ответ TUT: поместить память процесса в Hub (записи никогда не отклоняются по причинам рабочего процесса), превратить состояние рабочего процесса в производное представление журнала (никогда не сохраняется, никогда не принудительно), и сделать «кто нажимает кнопку пуска» двухрежимным выбором — ручной / автоматический. Люди — критический шлюз рабочего процесса, а не его маршрутизатор.

Related MCP server: kitty-hive

Основные механизмы

  • Только добавление записей: агенты добавляют записи в журнал задач через 5 MCP-инструментов (create / publish / read / list / decide) — design, code_changes, review, revision, note, decision. Записи никогда не удаляются; любой, начинающий с нуля, может восстановить каждое решение и его обоснование только из журнала

  • Производное состояние: состояние задачи (где мы находимся, чей ход) не сохраняется и не принуждается — это представление, вычисляемое из последовательности записей чистой функцией. Комбинации вне таблицы состояний (например, публикация ревью в задаче solo) всё равно попадают на диск, но устанавливают needs_attention, чтобы человек мог с ними разобраться

  • Шлюз утверждения: после прохождения ревью производное состояние становится pending_approval, и человек должен опубликовать запись решения (approve / reject), прежде чем что-либо продолжится. close допустим в любом состоянии — человек сохраняет право завершить задачу в любой момент

  • Варианты потока: выберите --flow full|direct|solo при создании задачи — full выполняет полный цикл; direct пропускает этап проектирования (в репозитории уже есть дизайн); solo пропускает ревью для небольших изменений — без ревью, но не без утверждения (сразу к шлюзу утверждения)

  • Ручное / автоматическое продвижение: в ручном режиме (по умолчанию) человек уведомляется, когда чей-то ход, и запускает следующий шаг; в автоматическом режиме Notifier запускает следующего агента напрямую через лаунчер (с градуированным доверием через белый список ролей), и человек принимает только решения

Архитектура

┌─────────────────────────────── local machine ────────────────────────────────┐
│                                                                              │
│  coding agent ──MCP read/write──► Context Hub ──► storage (local JSON)       │
│       ▲                            (memory + state projection)               │
│       │ launch                          ▲                                    │
│  Agent Host ──state events──► Notifier ─┘                                    │
│  (signal source + launcher, pluggable)   │ reads derived state (GET /state)  │
│                                          │                                   │
└──────────────────────────────────────────┼───────────────────────────────────┘
                                           ▼ notifications
                                        Channel ──► human
     manual: the human starts the next one | auto: the Notifier starts it via the launcher

Модуль

Ответственность

Context Hub

Общая память (журнал с только добавлением) + проекция состояния (производное представление). Предоставляет MCP-инструменты агентам и доступный только для чтения GET /state для Notifier. Отвечает только за память — без принуждения рабочего процесса

coding agent

Несколько агентов, трёх ролей (Architect / Executor / Reviewer); роль — это назначение (привязка роли на задачу), а не фиксированная привязка

Agent Host

Среда хоста для локальных агентов, с двумя подключаемыми частями: источник сигналов (события состояния агента) + лаунчер; текущая реализация: Herdr

Notifier

Хаб уведомлений и продвижения: опрашивает производное состояние, уведомляет человека, когда чей-то ход, проверяет, доставили ли агенты результат

Channel

Выход уведомлений (локальное уведомление рабочего стола / webhook)

Состояние задачи выводится из последовательности записей:

designing → implementing → reviewing ─┬─ pass       → pending_approval → human decide(approve) → approved → closed
                                       ├─ fail_code  → revising → revision → back to reviewing
                                       └─ fail_design → sent back to designing

Быстрый старт

Предварительные требования: Node.js ≥ 20, Herdr (Agent Host, предоставляющий панели терминала, в которых живут агенты; установка через brew install herdr, домашняя страница проекта https://github.com/herdrdev/herdr), и хотя бы один CLI-инструмент агента кодирования. Платформы: только macOS / Linux (лаунчер — это POSIX-шелл; поддержка Windows в Herdr ещё в стадии бета).

git clone https://github.com/ianf-ai/take-ur-turn.git
cd take-ur-turn
npm install
npm run build

Результат сборки: dist/cli.js. Используйте npm link, чтобы поместить команду tut в PATH; если вы не хотите создавать ссылку, node dist/cli.js <subcommand> всегда работает (далее упоминается как tut).

Запустите workspace (главный выключатель, идемпотентен — две системные панели: панель хаба + панель уведомлений):

tut up

Запустите задачу (отправляет одно предложение с требованием в панель Architect; затем опрашивайте tut list, пока задача не появится):

tut new "add a --url flag to the CLI's mode subcommand"

Оттуда агенты продвигают задачу, читая и записывая Hub через MCP-инструменты из своих панелей; tut status показывает обзор, Notifier уведомляет вас, когда требуется утверждение, и вы принимаете решение с помощью tut decide <task_id> --decision approve --by <your-name>.

Побочные каналы Notifier (мгновенные оповещения о блокировках, проверки завершения) полагаются на то, что Herdr перенаправляет изменения состояния агента каждой панели в scripts/on-agent-event.sh — одноразовая настройка окружения (плагин Herdr); см. инструкции по подключению в разделе 7.2 design/system-design.md.

Подключение CLI-агентов (одноразово)

Hub предоставляет свои MCP-инструменты через Streamable HTTP по адресу http://127.0.0.1:3001/mcp (доступен, как только tut serve запущен; без сохранения сессии, без потока). Настройте один раз для каждого CLI-агента, который будет участвовать:

Codex CLI (~/.codex/config.toml):

[mcp_servers.tut]
url = "http://127.0.0.1:3001/mcp"

Другие MCP-клиенты, поддерживающие Streamable HTTP: укажите им тот же URL.

После настройки агент видит 5 инструментов: context.create / context.publish / context.read / context.list / context.decide.

CLI без поддержки MCP через HTTP: используйте эквивалентный канал CLI — подкоманды tut create / publish / read / list / decide отображаются один к одному на MCP-инструменты, так что агент может просто вызывать их из оболочки (созданные для таких CLI «шпаргалки по инструментам» для каждой роли — отображение MCP | CLI — именно для этого; два канала можно смешивать; в одной задаче каждая роль может использовать свой канал — это полностью совместимо).

Среды без возможности настроить MCP (например, ограничения песочницы в некоторых сессиях): используйте резервный канал CLI, как указано выше.

Обзор команд

Вызов tut без аргументов выводит полное использование. Цитата дословно:

tut serve [--port <n>] [--root <dir>]
tut notify [--url <u>] [--interval <s>] [--event-port <p>] [--stall-timeout <m>]
tut mode <manual|auto> [--url <u>]
tut start-next [<task_id>] [--url <u>] [--force]
tut create --title <t> --description <d> --creator <c> --role <r> [--flow <full|direct|solo>] [--cast <role=agent,...>] [--url <u>]
tut publish <task_id> --role <r> --content-type <t> --summary <s>
             (--body <text> | --payload-file <md>)
             [--verdict <pass|fail_code|fail_design>] [--commits <a,b>]
             [--ref-version <n>] [--expected-version <n>] [--agent <a>] [--model <m>] [--url <u>]
tut read <task_id> [--since-version <n>] [--json] [--url <u>]
tut list [--status <s>] [--json] [--url <u>]
tut decide <task_id> --decision <approve|reject|close> --by <b> [--reason <text>] [--url <u>]
tut new "<one-sentence requirement>" [--pane <label>]
tut assign <role> <agent>
tut up [--url <u>] [--dry-run]
tut ack <task_id> [--note <text>] [--url <u>]
tut status [--json] [--url <u>]

Эквивалентный канал на стороне агента — 5 MCP-инструментов (context.create / context.publish / context.read / context.list / context.decide); подкоманды CLI отображаются на них один к одному.

Типичный рабочий процесс

Architect publishes design
    ↓ derived: designing → implementing
Executor reads context → codes the implementation (runs tests) → publishes code_changes
    ↓ derived: implementing → reviewing
Reviewer reads context → reviews (each finding carries a closing condition) → publishes review
    ├─ pass        → pending_approval → human decide(approve) → approved
    └─ fail_code   → revising → Executor publishes revision → back to reviewing
(The Notifier polls state changes: in manual mode it notifies the human to start the next step; in auto mode it can advance automatically)

Диаграмма выше — это поток по умолчанию, full. Варианты выбираются при создании задачи (фиксируются при создании, неизменяемы после сохранения):

  • direct: в репозитории уже есть дизайн, поэтому этап проектирования пропускается — задача начинается с реализации; ревью и утверждение человеком выполняются как обычно

  • solo: небольшие изменения пропускают ревью — code_changes переводит в pending_approval напрямую для утверждения/отклонения человеком. Без ревью, но не без утверждения: approve всё ещё является шлюзом человека

Конфигурация

Три поверхности конфигурации, различные по природе и расположению:

① Конфигурация времени выполнения проекта — .context-hub/config.json (в gitignore, один на проект)

Управляет поведением Hub и Notifier. Изменения вступают в силу в следующем цикле опроса — перезапуск не требуется:

Ключ

Назначение

По умолчанию

flow_mode

"manual" / "auto" — кто нажимает кнопку пуска при передаче раундов (человек, или Notifier, автоматически запускающий через лаунчер). Предпочтительно переключать с помощью tut mode <manual|auto>

manual

notify

Каналы уведомлений: channels (desktop / webhook и т.д.) и webhook_url

не задано = звонок терминала плюс лог в панели уведомлений

auto.launch_roles

Белый список запуска для автоматического режима (с ключом по роли, например ["executor","reviewer"]). Пусто по умолчанию = каждый раунд возвращается к уведомлению человека — раунды, не входящие в белый список, никогда не запускаются автоматически и не оставляют следов; ручные запуски человеком не затрагиваются

[]

② Конфигурация workspace — scripts/workspace.json (поставляется с репозиторием)

Стандартная расстановка: роль → { label, agent } (метка панели + CLI-агент, занимающий это место). Применяется для задач, созданных без явного назначения; редактируйте с помощью tut assign <role> <agent>. routes.json остаётся как резервный формат старого образца.

③ Параметры вызова — флаги CLI и переменные окружения

Параметр

Применение

По умолчанию

--port <n>

порт прослушивания для tut serve

3001

--url <u>

переопределение адреса хаба (для tut up и команд контекста/утверждения; принимает только адреса обратной петли с явным портом)

http://127.0.0.1:3001

--interval <s> / --event-port <p> / --stall-timeout <m>

интервал опроса / порт событий агента / тайм-ут ожидания для tut notify

5s / 3002 / 30min

--root <dir>

корень хранилища для tut serve

текущая директория

env TUT_UP_CLI_SELF

путь к самому CLI tut, используется, когда tut up выделяет панели

автоопределение (расположение дистрибутива)

env TUT_SPLIT_BASE

базовая панель для динамического выделения сплитов

автоопределение

Также есть одноразовая настройка окружения: плагин Herdr для привязки событий (см. примечание о подключении в конце раздела Быстрый старт).

Разработка

Зависимости перечислены в package.json: зависимости времени выполнения — @modelcontextprotocol/sdk + zod (zod объявлен явно, чтобы он разделял один экземпляр с SDK); других зависимостей времени выполнения нет.

npm install        # install dependencies
npm test           # run tests (vitest)
npm run typecheck  # type-check
npm run build      # compile to dist/

Поведенческие инструкции для ролей агентов находятся в skills/ (архитектор / исполнитель / рецензент / хост — шаблоны поведения, не привязки к личности: любой агент, загружающий один из них, может выполнять соответствующую работу).

Документация

  • design/system-design.md — Системный дизайн (в настоящее время авторитетный): архитектура, правила вывода состояний, схемы MCP-инструментов, контракты модулей, технологические решения

  • design/context-design.md — Дизайн контекста: что входит (область / типы записей / шаблоны полезной нагрузки и тела) и как это управляется

Документы по дизайну и навыки в настоящее время на китайском языке; код, вывод CLI и соглашения о коммитах — на английском.

Устранение неполадок и известные ограничения

Устранение неполадок:

  • Агент сообщает, что не видит инструменты context.*: убедитесь, что tut serve запущен (curl http://127.0.0.1:3001/state отвечает — значит, жив); проверьте, что конфигурация MCP в CLI указывает на конечную точку /mcp; некоторые сессии CLI могут быть изолированы от обратной петли localhost — в этом случае пусть агент использует канал CLI (tut read / tut publish) вместо этого; поведение полностью эквивалентно

  • Порт 3001 уже занят (EADDRINUSE): переключите порты с помощью tut serve --port <n> и укажите остальным командам новый адрес через --url (включая зонд выделения в tut up)

  • Пользовательская конфигурация потеряна после npm i -g: tut assign записывает внутренний scripts/workspace.json (внутри node_modules), который сбрасывается при обновлении — если вам нужна настраиваемая конфигурация/расположение, клонируйте репозиторий и устанавливайте из него

Известные ограничения (компромиссы в дизайне, не ошибки):

  • Панель агента — это одна сессия: когда несколько задач одновременно ожидают одного и того же агента, раундовые запросы поступают один за другим в одной сессии (последовательное выполнение, общий контекст)

  • Notifier наблюдает состояние с гранулярностью опроса: промежуточные состояния внутри окна опроса остаются незамеченными (можно видеть, как номера версий «перескакивают»); воспроизведение записей является источником истины, и любое промежуточное состояние может быть восстановлено из лога

  • В автоматическом режиме нет криптографического способа проверить, что запись решения «действительно пришла от человека» — текущее запасное решение — аудит уведомлений плюс трассировка через поле by; более структурированное решение оставлено для сценария развёртывания на нескольких машинах

Благодарности

Хостинг агентов обеспечивается Herdr — отдельно устанавливаемый компонент времени выполнения; этот пакет не распространяет его код.

Лицензия

Apache-2.0

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    Not graded
    maintenance
    An MCP server for managing work logs, research results, and task checkpoints to enable seamless collaboration and state recovery between AI agents. It provides a persistent memory layer for tracking project history and resuming workflows across different sessions or tools.
    7
    3
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for multi-agent collaboration enabling AI agents to communicate, delegate tasks, and share artifacts across clients and machines with federation support.
    28 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An event-driven MCP server that enables agents to share context streams, publish and subscribe to events, manage tasks, and follow protocols, keeping a fleet of agents mutually context-aware in real time.
    1
    MIT