{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2606-09751","title":"Collaborative Human-Agent Protocol (CHAP)","arxiv_id":"2606.09751","date":"2026-06-08","proceeding":null,"authors":["Arsalan Shahid","Gordon Suttie","Philip Black"],"abstract":"Foundation models are moving from response generation into operational roles. They plan across steps, call tools, request human input, coordinate with other agents, and increasingly carry responsibility for work that affects customers, claims, code, contracts, and clinical decisions. Production deployments are no longer one human supervising one model. They are multi-human, multi-agent collaborations that cross teams, time zones, and trust boundaries. The technical surface for this collaboration remains weakly specified. When an agent drafts a response and a human edits it before it ships, the moment of human judgement is the most valuable signal in the system. In current practice it is recorded, if at all, in application code, chat threads, ticket comments, and tribal memory. Two protocol standards address adjacent concerns: MCP standardises agent access to tools and data, and A2A standardises agent-to-agent interoperability. Neither defines the shared workspace in which humans and agents perform accountable work together. This paper presents CHAP, the Collaborative Human-Agent Protocol. Under CHAP, the override that used to vanish into a chat thread becomes a structured event carrying a diff, a rationale, and a content hash. The handoff between shifts becomes a portable envelope rather than a pinned message. The human approval of an agent's draft becomes a non-repudiable signed decision that can be replayed years later. The protocol achieves this through a small Core (workspaces, participants, tasks, artefacts, and an append-only evidence log) together with composable profiles that add review, modes, routing, deliberation, handoff, identity, signatures, and transparency-backed audit as deployments require them. Specification, reference implementation, conformance suite, and worked examples are available at: https://github.com/BrightbeamAI/chap","url_abs":"https://arxiv.org/abs/2606.09751","url_pdf":"https://arxiv.org/pdf/2606.09751","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":null,"mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2606.09751"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/BrightbeamAI/chap","reach":null}],"summary":{"ran":10,"unverified":7},"by_repo_kind":{"found_in_text":{"samples":17,"ran":10,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"6acbbc7990828852","entry":"apply_json_patch","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/chap-analytics/chap_analytics/_patch.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/chap-analytics/chap_analytics/_patch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"6acbbc7990828852"}},{"code_sha256_prefix":"1176fbada736f8d1","entry":"ask_in_terminal","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"start-here/chap_starter.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/start-here/chap_starter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1176fbada736f8d1"}},{"code_sha256_prefix":"2f1073c3823b9aea","entry":"canonicalize","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/canonical.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/canonical.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2f1073c3823b9aea"}},{"code_sha256_prefix":"feec9349999bf3a9","entry":"content_hash","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/canonical.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/canonical.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"feec9349999bf3a9"}},{"code_sha256_prefix":"eb738b573c7a6cc5","entry":"is_valid_envelope","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/jsonrpc.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/jsonrpc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"eb738b573c7a6cc5"}},{"code_sha256_prefix":"87571a2106f20ebe","entry":"make_response","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/jsonrpc.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/jsonrpc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"87571a2106f20ebe"}},{"code_sha256_prefix":"e379bc6cd0e22289","entry":"mode_le","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/coordinator.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/coordinator.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e379bc6cd0e22289"}},{"code_sha256_prefix":"9f4d5b550e4f5183","entry":"rpc_error","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/jsonrpc.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/jsonrpc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9f4d5b550e4f5183"}},{"code_sha256_prefix":"46ec1cabc5db2794","entry":"sha256_hex","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/canonical.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/canonical.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"46ec1cabc5db2794"}},{"code_sha256_prefix":"e5996c400ed86e87","entry":"sign","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/crypto.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/crypto.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e5996c400ed86e87"}},{"code_sha256_prefix":"51109f9861792e82","entry":"derive_private_key","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/crypto.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/crypto.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"51109f9861792e82"}},{"code_sha256_prefix":"f2d7b046a65e6891","entry":"from_json","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/chap-analytics/chap_analytics/load.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/chap-analytics/chap_analytics/load.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f2d7b046a65e6891"}},{"code_sha256_prefix":"e0ed1a8f7e2ca028","entry":"from_sqlite","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/chap-analytics/chap_analytics/load.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/chap-analytics/chap_analytics/load.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e0ed1a8f7e2ca028"}},{"code_sha256_prefix":"202bbbc80e86c4a8","entry":"json_diff","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"start-here/chap_starter.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/start-here/chap_starter.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"202bbbc80e86c4a8"}},{"code_sha256_prefix":"9670c593bdae50c2","entry":"public_jwk","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/coordinator-py/chap_coordinator/crypto.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/coordinator-py/chap_coordinator/crypto.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9670c593bdae50c2"}},{"code_sha256_prefix":"610d7dc076730169","entry":"redact_artefacts","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/chap-analytics/chap_analytics/load.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/chap-analytics/chap_analytics/load.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"610d7dc076730169"}},{"code_sha256_prefix":"a7359391c2bd5f7e","entry":"support_desk_coordinator","repo":"BrightbeamAI/chap","repo_kind":"found_in_text","path":"packages/chap-analytics/chap_analytics/sample.py","file_url":"https://github.com/BrightbeamAI/chap/blob/HEAD/packages/chap-analytics/chap_analytics/sample.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a7359391c2bd5f7e"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":null,"prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,264 of the 9,581 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9581,"papers_checked":6264},"entries":[],"not_placed":{"boards":0,"rejected_by_independent_check":0,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}