Skip to main content
Glama
BrightbeamAI

@brightbeamai/chap-coordinator-mcp

Official
by BrightbeamAI

Collaborative Human-Agent Protocol (CHAP)

인간과 에이전트가 실제 작업을 함께 수행하기 위한 프로토콜입니다.

AI 에이전트가 무언가를 초안으로 작성하고 인간이 이를 수정할 때, 그 수정은 어디에 보관될까요? CHAP에서는 여섯 달 후에도 조회하고, 재생하고, 검증할 수 있는 엔벨로프 안에 보관됩니다.

설치 · 90초 둘러보기 · 열두 가지 시나리오 · 이 저장소 정보 · 논문



여러분은 실제 작업을 수행하는 에이전트를 두고 있습니다. 코드 리뷰 초안 작성, 티켓 분류, 합의안 제안, 계약 검토 같은 일입니다. 인간은 각각을 승인하거나 수정하거나 거절합니다. 지금 현재 그 결정은 여러분의 애플리케이션 코드, 채팅 스레드, 티켓 댓글, 그리고 머릿속에 흩어져 있습니다. 여섯 주 후에 무언가 잘못되었을 때, 무슨 일이 있었는지 재구성하는 데 45분이 걸리고 절반은 추측에 의존합니다.

CHAP은 그러한 결정을 담을 한 곳과 담을 한 형태를 제공합니다. 에이전트의 초안은 아티팩트(artefact)입니다. 인간의 수정은 diff, 근거(rationale), 그리고 여러분이 제어하는 태그를 포함한 구조화된 오버라이드입니다. 전체는 콘텐츠 해시로 서로 연결됩니다. 여러분은 네 개의 UI에 걸쳐 로그를 뒤지는 대신 체인을 질의합니다.

체인은 키 교체, 로그 만료, 사람의 이탈에도 살아남습니다. audit.read 호출 한 번으로 전체를 되돌릴 수 있습니다. 검토자들이 이미 만들고 있던 오버라이드는, 그렇지 않았다면 별도로 만들어야 했을 감독 데이터로 축적됩니다. 승인이 부인 불가능해야 하는 경우 security-signed/1.0은 여러분이 정의하는 signature_meaning과 함께 OIDC에 바인딩된 서명을 추가하고, audit-scitt/1.0은 여러분의 서버를 신뢰하지 않아도 검증할 수 있도록 체인을 외부 투명성 로그에 고정합니다. 또한 CHAP은 MCP와 A2A를 대체하지 않고 그 옆에 위치합니다. 도구에는 MCP, 다른 에이전트에는 A2A, 인간과의 공동 작업에는 CHAP입니다.

이것이 전체 요지입니다.

90초 둘러보기

Cursor를 사용해 Pull Request를 검토하는 개인 개발자입니다. 봇이 개발자가 동의하지 않는 "경고" 하나를 표시합니다. 다음은 그 전체 교류를 처음부터 끝까지 보여줍니다. 아래 클립은 여섯 개의 라벨이 붙은 단계로 약 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. 봇이 초안을 작성하면, 여러분이 오버라이드합니다. 기존 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"],
})

표면(surface)에 대하여. TypeScript는 타입화된 퍼사드(coord.api.*)를 제공하므로 모든 메서드에 전체 자동 완성과 컴파일 타임 검사가 적용됩니다. Python은 JSON-RPC 엔벨로프 형태를 표면에서 유지하고(coord.dispatch({...})), 소비자는 호출 지점에 맞게 이를 감쌀 수 있습니다. send() 헬퍼는 Python 테스트가 사용하는 관용구입니다. 두 경로 모두 동일한 와이어 바이트를 내보내며, 어떤 클라이언트가 호출했든 감사 체인은 바이트 단위로 동일합니다.

3. 두 달 후, 지금까지 해온 것을 분석하세요. 레퍼런스 저장소는 감사 체인을(HTTP를 통해 또는 SQLite 파일에서 직접) 읽고 오버라이드를 그룹화하는 분석 스크립트를 두 언어로 제공합니다:

# 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

오버라이드 엔벨로프 상세

하나의 형태만 자세히 본다면, 오버라이드 엔벨로프를 보십시오. 모든 필드에는 역할이 있습니다:

대부분의 사람들이 처음 읽을 때 놓치는 두 필드는 intent_preservedtags입니다.

intent_preserved정제(refining) 오버라이드(인간이 에이전트의 결정에는 동의했지만 표현 방식을 다시 쓴 경우)와 대체(substituting) 오버라이드(인간이 다른 결정에 도달한 경우)를 구분합니다. 이 둘은 서로 다른 실패 모드이며 서로 다른 수정이 필요합니다. 특정 정책 조항 주변에서 정제 비율이 높다면 에이전트의 검색이 잘못된 것이고, 같은 조항에서 대체 비율이 높다면 정책 자체가 모호하거나 에이전트의 작업 컨텍스트가 잘못된 것입니다.

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/에 있습니다.

5분 실습 둘러보기: examples/00-five-minute-start.md.

상태

CHAP 0.2는 공개 초안입니다. 사양은 7개의 Core 메서드와 11개의 선택적 프로파일(SPECIFICATION.md)로 구성되며, TypeScript와 Python 두 가지 레퍼런스 구현이 모든 프로파일을 다루고 동일한 JSON-RPC 2.0 와이어에서 적합성 테스트를 통과합니다. 코디네이터는 자신을 MCP 서버나 A2A 에이전트로 제공할 수 있으며, 다섯 개의 프레임워크 브리지가 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