Skip to main content
Glama
BrightbeamAI

@brightbeamai/chap-coordinator-mcp

Official
by BrightbeamAI

Протокол совместной работы человека и агента (CHAP)

Протокол для людей и агентов, выполняющих реальную работу вместе.

Когда ИИ-агент создаёт черновик, а человек его редактирует, где хранится эта правка? В CHAP она хранится в конверте, который можно запросить, воспроизвести и проверить через шесть месяцев.

Установка · Экскурсия на 90 секунд · Двенадцать сценариев · Об этом репозитории · Статья



У вас есть агенты, выполняющие реальную работу. Составляют ревью кода, триажат тикеты, предлагают урегулирования, проверяют контракты. Человек одобряет, редактирует или отклоняет каждое решение. Сейчас это решение живёт в вашем прикладном коде, в чатах, в комментариях к тикетам и в вашей голове. Когда через шесть недель что-то идёт не так, реконструкция произошедшего занимает сорок пять минут и наполовину состоит из догадок.

CHAP даёт вам одно место для этих решений и одну форму для них. Черновик агента — это артефакт. Правка человека — это структурированный override с diff, rationale и tags, которые вы контролируете. Всё связывается в цепочку по хешу содержимого. Вы запрашиваете цепочку вместо того, чтобы грепать логи в четырёх интерфейсах.

Цепочка переживает ротацию ключей, истечение логов и уход людей; один вызов audit.read возвращает всё целиком. Override'ы, которые ваши ревьюеры уже делают, накапливаются в данные супервизии, которые иначе пришлось бы заказывать отдельно. Когда одобрения должны быть неотказуемыми, security-signed/1.0 добавляет подписи, привязанные к OIDC, с определяемым вами signature_meaning, а audit-scitt/1.0 закрепляет цепочку во внешнем прозрачном журнале, проверяемом без доверия вашим серверам. И CHAP существует рядом с MCP и A2A, а не заменяет их: MCP — для инструментов, A2A — для других агентов, CHAP — для общей работы с людьми.

Вот и вся суть.

Экскурсия на 90 секунд

Один разработчик использует Cursor для ревью пул-реквестов. Бот помечает «warning», с которым разработчик не согласен. Вот весь обмен целиком, от начала до конца. Клип ниже длится около 23 секунд и состоит из шести подписанных шагов; соответствующий код находится прямо под ним.

А вот и код, каждая его строка. Одна непрерывная история на двух языках; выбирайте тот стек, который используете.

1. Создайте рабочее пространство. Встроенный координатор с SQLite-персистентностью, два участника, рабочее пространство:

import { Coordinator } from "@brightbeamai/chap-coordinator";
import { SqliteStore } from
  "@brightbeamai/chap-coordinator/storage/sqlite";

const coord = new Coordinator({
  store: new SqliteStore("./chap.db"),
});

coord.api.workspace.create({
  workspace: "wsp_pr_reviews",
  profiles:  ["core/1.0", "review/1.0"],
});

coord.api.participant.join({
  workspace: "wsp_pr_reviews",
  from:      "human:me@local",
  type:      "human",
});

coord.api.participant.join({
  workspace: "wsp_pr_reviews",
  from:      "agent:cursor#v1",
  type:      "agent",
});
from chap_coordinator import Coordinator
from chap_coordinator.storage.sqlite \
    import SqliteStore

coord = Coordinator(store=SqliteStore("./chap.db"))

def send(method, params):
    return coord.dispatch({
        "jsonrpc": "2.0", "id": method,
        "method": method, "params": params,
    })

send("workspace.create", {
    "workspace": "wsp_pr_reviews",
    "profiles":  ["core/1.0", "review/1.0"],
})

send("participant.join", {
    "workspace": "wsp_pr_reviews",
    "from":      "human:me@local",
    "type":      "human",
})

send("participant.join", {
    "workspace": "wsp_pr_reviews",
    "from":      "agent:cursor#v1",
    "type":      "agent",
})

2. Бот создаёт черновик, вы делаете override. Подключите вашу существующую интеграцию с Cursor к эмиссии конвертов:

// The bot's review is the output of a task.
const { task_id } = coord.api.task.create({
  workspace: "wsp_pr_reviews",
  from:      "agent:cursor#v1",
  assignee:  "agent:cursor#v1",
  kind:      "code_review",
  input:     { pr_id: "PR-482" },
});

coord.api.task.complete({
  workspace: "wsp_pr_reviews",
  from:      "agent:cursor#v1",
  task_id,
  output:    cursorReview,
});

coord.api.review.request({
  workspace: "wsp_pr_reviews",
  from:      "agent:cursor#v1",
  task_id,
  artefact:  cursorReview,
  to:        "human:me@local",
});

// You disagree with one comment. Override it.
coord.api.decide.override({
  workspace:        "wsp_pr_reviews",
  from:             "human:me@local",
  task_id,
  intent_preserved: true,
  diff: [{ op: "replace",
           path: "/comments/0/severity",
           value: "info" }],
  rationale: "False positive. Framework " +
             "convention, not a bug.",
  tags: ["false-positive",
         "framework-pattern-misread"],
});
# The bot's review is the output of a task.
r = send("task.create", {
    "workspace": "wsp_pr_reviews",
    "from":      "agent:cursor#v1",
    "assignee":  "agent:cursor#v1",
    "kind":      "code_review",
    "input":     {"pr_id": "PR-482"},
})
task_id = r["result"]["task_id"]

send("task.complete", {
    "workspace": "wsp_pr_reviews",
    "from":      "agent:cursor#v1",
    "task_id":   task_id,
    "output":    cursor_review,
})

send("review.request", {
    "workspace": "wsp_pr_reviews",
    "from":      "agent:cursor#v1",
    "task_id":   task_id,
    "artefact":  cursor_review,
    "to":        "human:me@local",
})

# You disagree with one comment. Override it.
send("decide.override", {
    "workspace":        "wsp_pr_reviews",
    "from":             "human:me@local",
    "task_id":          task_id,
    "intent_preserved": True,
    "diff": [{"op":    "replace",
              "path":  "/comments/0/severity",
              "value": "info"}],
    "rationale": "False positive. Framework "
                 "convention, not a bug.",
    "tags": ["false-positive",
             "framework-pattern-misread"],
})

О поверхностях. TypeScript поставляется с типизированной фасадной обёрткой (coord.api.*), так что каждый метод получает полное автодополнение и проверки на этапе компиляции. Python сохраняет форму JSON-RPC конверта на поверхности (coord.dispatch({...})), а потребители оборачивают её как удобно для места вызова; хелпер send() — это идиома, которую используют тесты на Python. Оба пути порождают идентичные байты на проводе; цепочка аудита побайтово одинакова независимо от того, какой клиент сделал вызов.

3. Через два месяца проанализируйте, что вы делали. В эталонном репозитории есть скрипт аналитики на обоих языках, который читает цепочку аудита (по HTTP или напрямую из вашего SQLite-файла) и группирует override'ы:

# TypeScript reference, against the SqliteStore from step 1:
$ npm --prefix reference/core-plus-review run analyze -- --db ./chap.db wsp_pr_reviews

# Python reference, same idea:
$ python3 reference/python/analyze_overrides.py --db ./chap.db wsp_pr_reviews

Override Learning Report
========================
Total overrides: 47

By tag:
  false-positive             ████████████████  31  (66%)
  framework-pattern-misread  ███████████       22  (47%)
  cosmetic-pref              ████              8   (17%)

Top file paths:
  src/handlers/                                    18 overrides
  src/components/                                  9  overrides

Ваша следующая ревизия промпта для Cursor ссылается на паттерн по имени, а не угадывает его.


Related MCP server: interlock-mcp

Конверт override, подробно

Если вы будете внимательно изучать одну форму, пусть это будет конверт override. У каждого поля есть своя задача:

Два поля, которые большинство пропускает при первом чтении, — это intent_preserved и tags.

intent_preserved отличает уточняющий override (человек согласился с решением агента, но переписал форму его выражения) от замещающего override (человек принял другое решение). Это два разных режима отказа, и им нужны разные исправления. Высокая доля уточнений по одному пункту политики означает, что у агента сбит поиск информации; высокая доля замещений по тому же пункту означает, что сама политика неоднозначна или контекст задачи агента неверен.

tags — это контролируемый словарь, о котором договаривается ваша команда. Держите его небольшим. Всё, что вы туда кладёте, — это измерение, по которому вы будете агрегировать через три месяца, отвечая на вопросы вроде какие промпты нужно доработать? или на каких путях бот стабильно ошибается?

Установка

TypeScript / Node:

npm install @brightbeamai/chap-coordinator

Python:

pip install chap-coordinator

Любой из путей даёт вам Core плюс профиль review/1.0 и запускаемый эталон. TypeScript-эталон находится в reference/; Python-эталон — в reference/python/. TypeScript-библиотека живёт в packages/coordinator/; Python-библиотека — в packages/coordinator-py/.

Пятиминутное практическое введение: examples/00-five-minute-start.md.

Статус

CHAP 0.2 — публичный черновик. Спецификация — это семь методов Core плюс одиннадцать опциональных профилей (SPECIFICATION.md), с двумя эталонными реализациями, TypeScript и Python, которые покрывают все профили и проходят конформанс-харнесс на одном и том же JSON-RPC 2.0 проводе. Координатор может представлять себя как MCP сервер или A2A агента, а пять фреймворк-мостов выводят решения human-in-the-loop из LangGraph, Pydantic AI, AG2, LlamaIndex Workflows и Google ADK в цепочку аудита. Полный перечень, структура репозитория и то, как CHAP соотносится с MCP и A2A, — в ABOUT.md.

Ломающие изменения следуют Semantic Versioning. Поверхности профилей движутся быстрее, чем Core, так что если вам нужна строгая стабильность, дождитесь 1.0.

Что читать дальше

Начните с IN_PRACTICE.md — двенадцать сценариев от соло-разработчика с Cursor до производства, регулируемого GMP; это самое полезное следующее чтение. ABOUT.md описывает, что в репозитории, как CHAP соотносится с MCP и A2A, какие стандарты он переиспользует и как внести вклад. core/SPEC.md умещает всю поверхность протокола на один экран. А технический отчёт на arXiv обосновывает проектные решения: архитектуру, семантику профилей, модель угроз и двенадцать сценариев в виде JSON-трейсов в приложении с разобранными примерами.

Цитирование

Если вы ссылаетесь на CHAP в академической или технической работе, пожалуйста, цитируйте технический отчёт:

@techreport{chap2026,
  author      = {Shahid, Arsalan and Suttie, Gordon and Black, Philip},
  title       = {Collaborative Human-Agent Protocol (CHAP): An open protocol for auditable, structured multi-human and multi-agent collaboration},
  institution = {Brightbeam AI},
  year        = {2026},
  type        = {Technical Report},
  number      = {arXiv:2606.09751},
  url         = {https://arxiv.org/abs/2606.09751}
}

CC-BY 4.0 (спецификация) · Apache 2.0 (код) · Без роялти, любой язык, любое развёртывание.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
2dResponse time
1wRelease cycle
7Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Runtime AI governance: decision gates, human approval, hash-chained audit, compliance mapping.

  • Runtime permission, approval, and audit layer for AI agent tool execution.

  • Bitcoin-anchored, tamper-evident audit log for AI agents — record, disclose and verify actions.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BrightbeamAI/chap'

If you have feedback or need assistance with the MCP directory API, please join our Discord server