oacp-cli 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/CHANGELOG.md +12 -0
  2. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/CONTRIBUTING.md +1 -0
  3. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/PKG-INFO +99 -6
  4. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/README.md +98 -5
  5. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/SPEC.md +46 -2
  6. oacp_cli-0.3.1/docs/img/oacp-cli-demo.png +0 -0
  7. oacp_cli-0.3.1/docs/img/oacp-filesystem-tree.png +0 -0
  8. oacp_cli-0.3.1/docs/img/oacp-fleet-thread.png +0 -0
  9. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/agent_safety_defaults.md +15 -0
  10. oacp_cli-0.3.1/docs/protocol/autonomy.md +210 -0
  11. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/dispatch_states.yaml +20 -0
  12. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/inbox_outbox.md +35 -3
  13. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/pyproject.toml +2 -1
  14. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/add_agent.py +12 -1
  15. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/init_project_workspace.py +10 -2
  16. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/oacp_doctor.py +192 -0
  17. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/send_inbox_message.py +17 -0
  18. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/update_workspace.sh +79 -3
  19. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/validate_message.py +12 -0
  20. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/inbox_message.template.yaml +11 -0
  21. oacp_cli-0.3.1/templates/receiver_config.template.yaml +15 -0
  22. oacp_cli-0.3.1/tests/conformance/autonomy/README.md +24 -0
  23. oacp_cli-0.3.1/tests/conformance/autonomy/configs/always_pause.yaml +13 -0
  24. oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_standard.yaml +13 -0
  25. oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_tight.yaml +13 -0
  26. oacp_cli-0.3.1/tests/conformance/autonomy/configs/malformed_config.yaml +7 -0
  27. oacp_cli-0.3.1/tests/conformance/autonomy/expected/always_pause_task.yaml +8 -0
  28. oacp_cli-0.3.1/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +9 -0
  29. oacp_cli-0.3.1/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +14 -0
  30. oacp_cli-0.3.1/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +15 -0
  31. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +9 -0
  32. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +9 -0
  33. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +9 -0
  34. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +9 -0
  35. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +9 -0
  36. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +9 -0
  37. oacp_cli-0.3.1/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +8 -0
  38. oacp_cli-0.3.1/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +8 -0
  39. oacp_cli-0.3.1/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +8 -0
  40. oacp_cli-0.3.1/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +8 -0
  41. oacp_cli-0.3.1/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +8 -0
  42. oacp_cli-0.3.1/tests/conformance/autonomy/messages/ambiguous_scope.yaml +20 -0
  43. oacp_cli-0.3.1/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +9 -0
  44. oacp_cli-0.3.1/tests/conformance/autonomy/messages/clean_task.yaml +21 -0
  45. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +20 -0
  46. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +21 -0
  47. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_force.yaml +20 -0
  48. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +20 -0
  49. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +20 -0
  50. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +20 -0
  51. oacp_cli-0.3.1/tests/conformance/autonomy/messages/missing_task_profile.yaml +10 -0
  52. oacp_cli-0.3.1/tests/conformance/autonomy/messages/threshold_breach.yaml +20 -0
  53. oacp_cli-0.3.1/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +12 -0
  54. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_add_agent.py +11 -6
  55. oacp_cli-0.3.1/tests/test_autonomy_conformance_fixtures.py +60 -0
  56. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_init_project_workspace.py +21 -0
  57. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_doctor.py +88 -2
  58. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_send_inbox_message.py +62 -0
  59. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_update_workspace.py +45 -0
  60. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_validate_message.py +17 -0
  61. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/.github/workflows/ci.yml +0 -0
  62. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/.github/workflows/release.yml +0 -0
  63. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/.gitignore +0 -0
  64. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/LICENSE +0 -0
  65. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/Makefile +0 -0
  66. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/QUICKSTART.md +0 -0
  67. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/SECURITY.md +0 -0
  68. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/adoption.md +0 -0
  69. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/doctor.md +0 -0
  70. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/prompt_caching.md +0 -0
  71. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/runtime_capability_matrix.md +0 -0
  72. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/setup.md +0 -0
  73. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/unified_skill_spec.md +0 -0
  74. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/guides/versioning.md +0 -0
  75. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/agent_profiles.md +0 -0
  76. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/credential_scoping.md +0 -0
  77. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/cross_runtime_sync.md +0 -0
  78. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/mcp_integration.md +0 -0
  79. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  80. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/org_memory.md +0 -0
  81. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/packet_states.yaml +0 -0
  82. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/review_loop.md +0 -0
  83. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/runtime_capabilities.md +0 -0
  84. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/session_init.md +0 -0
  85. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/skills_manifest.yaml +0 -0
  86. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/docs/protocol/task_negotiation.md +0 -0
  87. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/examples/quickstart/README.md +0 -0
  88. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/mcp_servers/oacp_coordinator.py +0 -0
  89. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/oacp/__init__.py +0 -0
  90. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/oacp/cli.py +0 -0
  91. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/_oacp_constants.py +0 -0
  92. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/_oacp_env.py +0 -0
  93. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/agent_profile.py +0 -0
  94. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/check_quality_gate.py +0 -0
  95. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/codex_session_init.py +0 -0
  96. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/create_handoff_packet.py +0 -0
  97. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/handoff_schema.py +0 -0
  98. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/init_org_memory.py +0 -0
  99. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/init_packet.sh +0 -0
  100. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/init_project_workspace.sh +0 -0
  101. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/memory_archive_common.py +0 -0
  102. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/memory_cli.py +0 -0
  103. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/memory_sync.py +0 -0
  104. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/normalize_findings.py +0 -0
  105. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/oacp_inbox.py +0 -0
  106. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/oacp_watch.py +0 -0
  107. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/preflight.py +0 -0
  108. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/promote_to_archive.py +0 -0
  109. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/restore_from_archive.py +0 -0
  110. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/session_lifecycle_hooks.py +0 -0
  111. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/setup_runtime.py +0 -0
  112. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/validate_agent_card.py +0 -0
  113. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/scripts/write_event.py +0 -0
  114. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/agent_card.template.yaml +0 -0
  115. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/agent_profile.template.yaml +0 -0
  116. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/agent_status.template.yaml +0 -0
  117. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/checkpoint.template.md +0 -0
  118. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/claude/agents/role_agent.template.md +0 -0
  119. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/claude/rules/guardrail.template.md +0 -0
  120. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/findings_packet.template.yaml +0 -0
  121. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/github_actions_quality_gate.yaml +0 -0
  122. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/guardrails/coding_standards.template.md +0 -0
  123. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/guardrails/safe_commands.template.md +0 -0
  124. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/guardrails/secrets_rules.template.md +0 -0
  125. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/handoff_packet.template.yaml +0 -0
  126. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/manual_validation.template.md +0 -0
  127. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/merge_decision.template.md +0 -0
  128. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/org-memory/decisions.md +0 -0
  129. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/org-memory/events/.gitkeep +0 -0
  130. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  131. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/org-memory/recent.md +0 -0
  132. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/org-memory/rules.md +0 -0
  133. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/review_packet.template.md +0 -0
  134. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/roles/role_baseline.template.md +0 -0
  135. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/roles/role_definition.template.yaml +0 -0
  136. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/runtime_capabilities.yaml +0 -0
  137. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/skills_manifest.template.yaml +0 -0
  138. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/templates/test_packet.template.md +0 -0
  139. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_agent_profile.py +0 -0
  140. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_codex_session_init.py +0 -0
  141. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_create_handoff_packet.py +0 -0
  142. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_github_workflows.py +0 -0
  143. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_handoff_schema.py +0 -0
  144. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_memory_archive.py +0 -0
  145. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_cli.py +0 -0
  146. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_constants.py +0 -0
  147. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_coordinator.py +0 -0
  148. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_env.py +0 -0
  149. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_inbox.py +0 -0
  150. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_oacp_watch.py +0 -0
  151. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_preflight.py +0 -0
  152. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_review_loop.py +0 -0
  153. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_session_lifecycle_hooks.py +0 -0
  154. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_setup_runtime.py +0 -0
  155. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_validate_agent_card.py +0 -0
  156. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_workspace_discovery.py +0 -0
  157. {oacp_cli-0.3.0 → oacp_cli-0.3.1}/tests/test_write_event.py +0 -0
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.1] - 2026-05-12
11
+
12
+ ### Added
13
+
14
+ - `auto_review` autonomy mode — an opt-in receiver-side autonomy profile that classifies inbound messages into auto-accept, pause, or hard-stop bands using clean / ambiguous / hard-stop trigger predicates. Configured via `receiver_config.autonomy_mode: auto_review` with `auto_review_profile` selecting `standard` or `tight`. Off by default; existing receivers continue to behave as `always_pause` unless they opt in. Ships with a conformance fixture suite under `tests/conformance/autonomy/` covering clean tasks, ambiguous scope, hard-stop triggers, and malformed config handling.
15
+
16
+ ### Changed
17
+
18
+ - README: refreshed with a hero image and three screenshots illustrating inbox flow, doctor output, and the multi-agent workspace layout. Hub README copy, install path, and command table aligned with the current CLI surface.
19
+ - Docs: link to companion oacp-skills repo from the README and onboarding pages so readers can find the skill library that pairs with the protocol.
20
+
10
21
  ## [0.3.0] - 2026-04-29
11
22
 
12
23
  ### Added
@@ -131,6 +142,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
131
142
  - Checkout step in github-release workflow job (#19)
132
143
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
133
144
 
145
+ [0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
134
146
  [0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
135
147
  [0.2.3]: https://github.com/kiloloop/oacp/compare/v0.2.2...v0.2.3
136
148
  [0.2.2]: https://github.com/kiloloop/oacp/compare/v0.2.1...v0.2.2
@@ -73,6 +73,7 @@ make preflight ARGS="--full"
73
73
  - Packet naming follows `<YYYYMMDD>_<topic>_<owner>_r<round>`.
74
74
  - Scripts use `python3` and avoid external dependencies beyond the standard library (exception: `pyyaml`).
75
75
  - Shell scripts use POSIX-compatible constructs where possible; bash-specific features require bash 3.2+.
76
+ - README images should stay under ~500KB each. Use `docs/img/` for all README assets.
76
77
 
77
78
  ## Commit Messages
78
79
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oacp-cli
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Open Agent Coordination Protocol CLI for file-based multi-agent workflows
5
5
  Project-URL: Homepage, https://github.com/kiloloop/oacp
6
6
  Project-URL: Repository, https://github.com/kiloloop/oacp
@@ -24,7 +24,7 @@ Requires-Python: >=3.9
24
24
  Requires-Dist: pyyaml>=6.0
25
25
  Description-Content-Type: text/markdown
26
26
 
27
- # OACP — Open Agent Coordination Protocol
27
+ # OACP
28
28
 
29
29
  [![PyPI](https://img.shields.io/pypi/v/oacp-cli)](https://pypi.org/project/oacp-cli/)
30
30
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
@@ -32,11 +32,92 @@ Description-Content-Type: text/markdown
32
32
  [![Codex](https://img.shields.io/badge/Runtime-Codex-74AA9C.svg)](https://openai.com/index/codex/)
33
33
  [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen)](https://github.com/kiloloop/oacp/pulls)
34
34
 
35
- > **[Try the quickstart →](examples/quickstart/)** — send your first message to an AI agent in 5 minutes.
35
+ > Coordinate agents *without* the chaos.
36
36
 
37
- **Coordinate agents without the chaos.**
37
+ A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent communication and persistent shared memory. Across runtimes, projects, and machines. No daemons. No central server. Just files.
38
38
 
39
- A file-based protocol for multi-agent engineering workflows. OACP defines the message formats, review processes, and safety rules that let AI agents on different runtimes collaborate through a shared filesystem. Not a framework or SDK — just conventions, YAML schemas, and scripts that any runtime can implement.
39
+ [Read the spec →](SPEC.md)
40
+
41
+ ```bash
42
+ $ pip install oacp-cli
43
+ ```
44
+
45
+ ## See it in action
46
+
47
+ <p align="center">
48
+ <img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
49
+ </p>
50
+
51
+ The CLI ships structured tasks between agents and lets you watch the conversation in real time.
52
+
53
+ ## Live agent fleet
54
+
55
+ <p align="center">
56
+ <img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
57
+ </p>
58
+
59
+ Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
60
+
61
+ <details>
62
+ <summary>Text version (terminal browsing / grep / a11y)</summary>
63
+
64
+ ```
65
+ PROJECT · my-app ● live
66
+
67
+ C claude code drafting PR #42
68
+ X codex cli reviewing
69
+ G gemini api idle
70
+
71
+ claude → review_request "auth refactor" [codex]
72
+ codex → review_feedback 2 minor, 0 blocking [claude]
73
+ claude → review_addressed [codex]
74
+ codex → review_lgtm [merge]
75
+
76
+ thread #42 · 4 msgs · 8m quality gate ✓
77
+ ```
78
+
79
+ </details>
80
+
81
+ ## Filesystem as protocol
82
+
83
+ <p align="center">
84
+ <img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
85
+ </p>
86
+
87
+ Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
88
+
89
+ <details>
90
+ <summary>Text version (terminal browsing / grep / a11y)</summary>
91
+
92
+ ```
93
+ $OACP_HOME/projects/my-app/ ● writing
94
+
95
+ agents/
96
+ claude/
97
+ inbox/ 3 msgs [in]
98
+ outbox/ 12 sent [out]
99
+ dead_letter/ empty [dl]
100
+ codex/
101
+ inbox/ +1 new [in]
102
+
103
+ memory/ shared durable
104
+ project_facts.md 2.4 kb [md]
105
+ decision_log.md edited 3s ago [md]
106
+ open_threads.md 1.1 kb [md]
107
+ known_debt.md 812 b [md]
108
+
109
+ artifacts/ build · research
110
+ checkpoints/ progress
111
+ packets/ review findings
112
+ workspace.json metadata [json]
113
+
114
+ $OACP_HOME/org-memory/ org-wide
115
+ recent.md auto-loaded [⌘]
116
+ rules.md 12 rules [⌘]
117
+ decisions.md org decisions [⌘]
118
+ ```
119
+
120
+ </details>
40
121
 
41
122
  ## Quick Start
42
123
 
@@ -47,7 +128,7 @@ oacp send my-project --from alice --to bob --type task_request \
47
128
  --subject "Implement feature X" --body "Details here..."
48
129
  ```
49
130
 
50
- When running inside a configured agent runtime, `--from` can be omitted — OACP infers the sender from `OACP_AGENT`, `AGENT_NAME`, or the agent card. See [QUICKSTART.md](QUICKSTART.md) for a full walkthrough.
131
+ When running inside a configured agent runtime, `--from` can be omitted — OACP infers the sender from `OACP_AGENT`, `AGENT_NAME`, or the agent card. See [QUICKSTART.md](QUICKSTART.md) for a full walkthrough. Or try the [5-minute quickstart →](examples/quickstart/) to send your first message to a real AI agent.
51
132
 
52
133
  ### What you get
53
134
 
@@ -67,6 +148,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
67
148
  oacp doctor
68
149
  ```
69
150
 
151
+ ## Agent Skills
152
+
153
+ OACP has companion agent skills that teach Claude, Codex, and other
154
+ runtimes how to use the CLI and protocol in real workflows.
155
+
156
+ Install or browse them here:
157
+
158
+ - https://github.com/kiloloop/oacp-skills
159
+
160
+ The core `oacp-cli` package remains the protocol/tooling kernel,
161
+ while `oacp-skills` contains runtime guidance and workflows.
162
+
70
163
  ## Why OACP?
71
164
 
72
165
  When multiple AI agents work on the same codebase, they need a way to:
@@ -1,4 +1,4 @@
1
- # OACP — Open Agent Coordination Protocol
1
+ # OACP
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/oacp-cli)](https://pypi.org/project/oacp-cli/)
4
4
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
@@ -6,11 +6,92 @@
6
6
  [![Codex](https://img.shields.io/badge/Runtime-Codex-74AA9C.svg)](https://openai.com/index/codex/)
7
7
  [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen)](https://github.com/kiloloop/oacp/pulls)
8
8
 
9
- > **[Try the quickstart →](examples/quickstart/)** — send your first message to an AI agent in 5 minutes.
9
+ > Coordinate agents *without* the chaos.
10
10
 
11
- **Coordinate agents without the chaos.**
11
+ A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent communication and persistent shared memory. Across runtimes, projects, and machines. No daemons. No central server. Just files.
12
12
 
13
- A file-based protocol for multi-agent engineering workflows. OACP defines the message formats, review processes, and safety rules that let AI agents on different runtimes collaborate through a shared filesystem. Not a framework or SDK — just conventions, YAML schemas, and scripts that any runtime can implement.
13
+ [Read the spec →](SPEC.md)
14
+
15
+ ```bash
16
+ $ pip install oacp-cli
17
+ ```
18
+
19
+ ## See it in action
20
+
21
+ <p align="center">
22
+ <img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
23
+ </p>
24
+
25
+ The CLI ships structured tasks between agents and lets you watch the conversation in real time.
26
+
27
+ ## Live agent fleet
28
+
29
+ <p align="center">
30
+ <img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
31
+ </p>
32
+
33
+ Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
34
+
35
+ <details>
36
+ <summary>Text version (terminal browsing / grep / a11y)</summary>
37
+
38
+ ```
39
+ PROJECT · my-app ● live
40
+
41
+ C claude code drafting PR #42
42
+ X codex cli reviewing
43
+ G gemini api idle
44
+
45
+ claude → review_request "auth refactor" [codex]
46
+ codex → review_feedback 2 minor, 0 blocking [claude]
47
+ claude → review_addressed [codex]
48
+ codex → review_lgtm [merge]
49
+
50
+ thread #42 · 4 msgs · 8m quality gate ✓
51
+ ```
52
+
53
+ </details>
54
+
55
+ ## Filesystem as protocol
56
+
57
+ <p align="center">
58
+ <img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
59
+ </p>
60
+
61
+ Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
62
+
63
+ <details>
64
+ <summary>Text version (terminal browsing / grep / a11y)</summary>
65
+
66
+ ```
67
+ $OACP_HOME/projects/my-app/ ● writing
68
+
69
+ agents/
70
+ claude/
71
+ inbox/ 3 msgs [in]
72
+ outbox/ 12 sent [out]
73
+ dead_letter/ empty [dl]
74
+ codex/
75
+ inbox/ +1 new [in]
76
+
77
+ memory/ shared durable
78
+ project_facts.md 2.4 kb [md]
79
+ decision_log.md edited 3s ago [md]
80
+ open_threads.md 1.1 kb [md]
81
+ known_debt.md 812 b [md]
82
+
83
+ artifacts/ build · research
84
+ checkpoints/ progress
85
+ packets/ review findings
86
+ workspace.json metadata [json]
87
+
88
+ $OACP_HOME/org-memory/ org-wide
89
+ recent.md auto-loaded [⌘]
90
+ rules.md 12 rules [⌘]
91
+ decisions.md org decisions [⌘]
92
+ ```
93
+
94
+ </details>
14
95
 
15
96
  ## Quick Start
16
97
 
@@ -21,7 +102,7 @@ oacp send my-project --from alice --to bob --type task_request \
21
102
  --subject "Implement feature X" --body "Details here..."
22
103
  ```
23
104
 
24
- When running inside a configured agent runtime, `--from` can be omitted — OACP infers the sender from `OACP_AGENT`, `AGENT_NAME`, or the agent card. See [QUICKSTART.md](QUICKSTART.md) for a full walkthrough.
105
+ When running inside a configured agent runtime, `--from` can be omitted — OACP infers the sender from `OACP_AGENT`, `AGENT_NAME`, or the agent card. See [QUICKSTART.md](QUICKSTART.md) for a full walkthrough. Or try the [5-minute quickstart →](examples/quickstart/) to send your first message to a real AI agent.
25
106
 
26
107
  ### What you get
27
108
 
@@ -41,6 +122,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
41
122
  oacp doctor
42
123
  ```
43
124
 
125
+ ## Agent Skills
126
+
127
+ OACP has companion agent skills that teach Claude, Codex, and other
128
+ runtimes how to use the CLI and protocol in real workflows.
129
+
130
+ Install or browse them here:
131
+
132
+ - https://github.com/kiloloop/oacp-skills
133
+
134
+ The core `oacp-cli` package remains the protocol/tooling kernel,
135
+ while `oacp-skills` contains runtime guidance and workflows.
136
+
44
137
  ## Why OACP?
45
138
 
46
139
  When multiple AI agents work on the same codebase, they need a way to:
@@ -79,7 +79,12 @@ Messages are YAML files. Filename convention: `<timestamp>_<from>_<type>.yaml`
79
79
  | `subject` | string | Subject line |
80
80
  | `body` | string | Message content (multi-line markdown) |
81
81
 
82
- **Optional fields:** `expires_at`, `channel`, `related_packet`, `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`
82
+ **Optional fields:** `expires_at`, `channel`, `autonomy_hint`, `related_packet`, `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`
83
+
84
+ `autonomy_hint` is an advisory sender hint, such as `auto_proceed`. Receivers
85
+ remain authoritative: local autonomy config, message content, safety defaults,
86
+ and runtime/tool permissions determine whether a message can be accepted without
87
+ interactive human confirmation.
83
88
 
84
89
  ### Message Types
85
90
 
@@ -164,7 +169,7 @@ received → accepted → working → pr_opened → in_review → done
164
169
 
165
170
  ### Key Transitions
166
171
 
167
- - **`received` → `accepted`**: Agent reads and accepts the task. Ack recommended for P0/P1.
172
+ - **`received` → `accepted`**: Agent reads and accepts the task. Ack recommended for P0/P1. When accepted by autonomy policy, this transition is preserved and records `accepted_by`, `human_confirmed`, `autonomy_mode`, `policy_ref`, `policy_hash`, and `reason_codes`.
168
173
  - **`working` → `pr_opened`**: Agent opens a PR. **Notification required** with `WIP:` subject prefix.
169
174
  - **`pr_opened` → `in_review`**: Agent requests cross-agent review via `review_request`.
170
175
  - **`in_review` → `done`**: PR merged after review approval. Guard: `pr_merged AND review_approved`.
@@ -202,6 +207,23 @@ The dispatcher (e.g., an orchestrator agent) tracks dispatches from its perspect
202
207
  - **Non-PR tasks**: done = deliverable provided or question answered
203
208
  - Final notification must include `merge_sha` (PR tasks) or `results_summary` (non-PR tasks)
204
209
 
210
+ ### Acceptance Metadata
211
+
212
+ Receivers must not collapse `received → accepted`, even when a task is
213
+ auto-accepted. Transition metadata records who or what accepted the task:
214
+
215
+ ```yaml
216
+ transition: received_to_accepted
217
+ accepted_by: autonomy_policy # human | autonomy_policy | --autonomous-flag
218
+ human_confirmed: false
219
+ autonomy_mode: auto_review
220
+ policy_ref: agents/codex/config.yaml
221
+ policy_hash: sha256:...
222
+ reason_codes:
223
+ - task_profile_present
224
+ - risk_threshold_passed
225
+ ```
226
+
205
227
  ### Brainstorm Lifecycle
206
228
 
207
229
  Brainstorm messages follow a simpler lifecycle: `received` → `researching` → `report_delivered`. No PR, no review loop. The dispatcher sees: `Sent` → `In progress` → `Responded`.
@@ -402,6 +424,27 @@ Credential scoping: [`docs/protocol/credential_scoping.md`](docs/protocol/creden
402
424
 
403
425
  These defaults apply to all agents (Claude, Codex, Gemini) unless a project-level config explicitly overrides a specific rule. Safety defaults can only be made **stricter** by project rules, never relaxed.
404
426
 
427
+ Autonomy introduces a separate receiver acceptance policy layer; it does not
428
+ relax the safety floor. OACP distinguishes three layers:
429
+
430
+ 1. **Safety defaults** — non-negotiable baseline constraints, such as no
431
+ unapproved push/deploy/merge/publish, no destructive commands, no secrets,
432
+ and disciplined staging. Projects may make these stricter, never looser.
433
+ 2. **Receiver acceptance policy** — configurable rules for whether a receiver
434
+ may move a message from `received` to `accepted` without interactive human
435
+ confirmation. This is governed by `agents/<receiver>/config.yaml` and
436
+ [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
437
+ 3. **Runtime/tool safety** — runtime-specific permission gates that still apply
438
+ after acceptance, such as editor edit approval, shell sandboxing, or Codex
439
+ approval modes. OACP acceptance never grants runtime tool permissions.
440
+
441
+ Regardless of autonomy mode, receivers must pause on any of: destructive command
442
+ tokens (`rm -rf`, `--force`, `--no-verify`,
443
+ `--dangerously-skip-permissions`), external side effects
444
+ (push/deploy/merge/publish/rotate/install), or modifications to auth, config,
445
+ secrets, dependencies, public repos, pricing/commercial content, or memory SSOT,
446
+ unless explicitly authorized by a separate safety-default exception.
447
+
405
448
  #### Git Safety
406
449
 
407
450
  - No push/deploy without explicit approval from the user or dispatcher
@@ -677,6 +720,7 @@ scripts/init_packet.sh <project> <packet_id> # (no CLI wrapper yet)
677
720
  | Shared workspace | [`docs/protocol/multi_agent_shared_workspace.md`](docs/protocol/multi_agent_shared_workspace.md) |
678
721
  | Cross-runtime sync | [`docs/protocol/cross_runtime_sync.md`](docs/protocol/cross_runtime_sync.md) |
679
722
  | Session init | [`docs/protocol/session_init.md`](docs/protocol/session_init.md) |
723
+ | Receiver autonomy | [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md) |
680
724
  | Safety defaults | [`docs/protocol/agent_safety_defaults.md`](docs/protocol/agent_safety_defaults.md) |
681
725
  | Credential scoping | [`docs/protocol/credential_scoping.md`](docs/protocol/credential_scoping.md) |
682
726
  | Runtime capabilities | [`docs/protocol/runtime_capabilities.md`](docs/protocol/runtime_capabilities.md) |
@@ -30,6 +30,21 @@ Follow `credential_scoping.md` in this directory for:
30
30
  - Per-agent credential boundaries
31
31
  - Rotation and revocation procedures
32
32
 
33
+ ## Autonomy Hard Stops
34
+
35
+ Receiver autonomy controls only whether a message can move from `received` to
36
+ `accepted` without interactive human confirmation. It does not relax this safety
37
+ floor.
38
+
39
+ Regardless of autonomy mode, receivers must pause on any of:
40
+
41
+ - Destructive command tokens: `rm -rf`, `--force`, `--no-verify`, `--dangerously-skip-permissions`
42
+ - External side effects: push, deploy, merge, publish, credential rotation, dependency install
43
+ - Sensitive scope: auth, config, secrets, dependencies, public repos, pricing/commercial content, memory SSOT
44
+
45
+ The only exception is an explicit, separate safety-default exception. The
46
+ Phase 1 autonomy RFC does not introduce any such exception.
47
+
33
48
  ## Scope Discipline
34
49
 
35
50
  - **Do not edit files outside the requested scope** — if a task says "fix X in file Y", do not refactor file Z.
@@ -0,0 +1,210 @@
1
+ # Receiver Autonomy Policy
2
+
3
+ ## Purpose
4
+
5
+ OACP autonomy controls whether a receiver may move an inbox message from
6
+ `received` to `accepted` without interactive human confirmation. It does not
7
+ grant runtime tool permissions, and it does not relax agent safety defaults.
8
+
9
+ Phase 1 ships two modes:
10
+
11
+ | Mode | Behavior |
12
+ |------|----------|
13
+ | `always_pause` | Default. Receiver pauses for human review before accepting work. |
14
+ | `auto_review` | Receiver may auto-accept only messages that pass the deterministic gates below. |
15
+
16
+ Sender trust is messenger-bound and is not part of OACP autonomy v1/v2. Sender
17
+ fields may be logged in audit events for traceability, but sender identity does
18
+ not gate Phase 1 decisions.
19
+
20
+ ## Receiver Config
21
+
22
+ Receiver policy lives at `agents/<receiver>/config.yaml`:
23
+
24
+ ```yaml
25
+ autonomy:
26
+ default_mode: always_pause
27
+ auto_review_thresholds:
28
+ max_estimated_minutes: 30
29
+ max_expected_files_touched: 5
30
+ destructive_ops: pause
31
+ external_side_effects: pause
32
+ auth_config_or_secrets: pause
33
+ dependency_changes: pause
34
+ public_visibility: pause
35
+ git_push_or_deploy: pause
36
+ allow_without_task_profile:
37
+ - brainstorm_request
38
+ ```
39
+
40
+ When config is absent, receivers behave as `always_pause`. Malformed config
41
+ causes a pause and should be surfaced by `oacp doctor`.
42
+
43
+ ## Message Fields
44
+
45
+ Messages may include top-level `autonomy_hint: auto_proceed`. This is advisory
46
+ only; the receiver's config and local evaluator are authoritative.
47
+
48
+ For `auto_review`, `task_request` and `question` messages require a
49
+ machine-parseable `task_profile` block in `body`:
50
+
51
+ ```yaml
52
+ task_profile:
53
+ estimated_minutes: 20
54
+ risk_tier: P3
55
+ expected_files_touched: 3
56
+ destructive_ops: false
57
+ external_side_effects: false
58
+ touches_auth_config_or_secrets: false
59
+ touches_dependencies: false
60
+ public_visibility: false
61
+ ```
62
+
63
+ Missing `task_profile` pauses with `task_profile_missing`. An unparsable or
64
+ schema-invalid profile pauses with `task_profile_unparsable`; it is not a fatal
65
+ message-schema error. Message types listed in `allow_without_task_profile`, such
66
+ as `brainstorm_request`, may auto-accept without the block.
67
+
68
+ ## Four-Gate Evaluator
69
+
70
+ If any required gate is missing or uncertain, the receiver pauses.
71
+
72
+ 1. **Message integrity**
73
+ - Message validates against OACP schema.
74
+ - Message is not expired.
75
+ - Raw YAML hash is recorded as `message_sha256` before processing.
76
+ - Message ID has not already been auto-accepted by this receiver.
77
+ - `autonomy_hint`, if present, remains advisory only.
78
+ 2. **Declared task profile**
79
+ - Required for `task_request` and `question`.
80
+ - Cross-checks `estimated_minutes`, `expected_files_touched`, and boolean
81
+ risk fields against `auto_review_thresholds`.
82
+ 3. **Receiver classification**
83
+ - Pause unconditionally on destructive command tokens: `rm -rf`, `--force`,
84
+ `--no-verify`, `--dangerously-skip-permissions`.
85
+ - Pause when the body asks for deploy, push to main, merge, publish,
86
+ credential rotation, or dependency install.
87
+ - Pause when the body touches auth, config, secrets, dependencies, public
88
+ repos, pricing/commercial content, or memory SSOT.
89
+ - Pause when file scope is ambiguous or broader than the declared profile.
90
+ 4. **Runtime/workspace**
91
+ - Worktree is clean or the task can be isolated to a fresh branch.
92
+ - No conflicting active task exists on the same repo.
93
+ - Required tools are available.
94
+
95
+ LLM judgment may reduce false positives after deterministic gates pass. It
96
+ cannot override hard stops.
97
+
98
+ ## Hard-Stop Override
99
+
100
+ Regardless of autonomy mode, receivers must pause on any of: destructive command
101
+ tokens (`rm -rf`, `--force`, `--no-verify`,
102
+ `--dangerously-skip-permissions`), external side effects
103
+ (push/deploy/merge/publish/rotate/install), or modifications to auth, config,
104
+ secrets, dependencies, public repos, pricing/commercial content, or memory SSOT,
105
+ unless explicitly authorized by a separate safety-default exception.
106
+
107
+ ## Audit Events
108
+
109
+ Every autonomy decision writes one YAML file:
110
+
111
+ `agents/<receiver>/audit/autonomy_decisions/YYYYMMDDTHHMMSSZ_<message-id>.yaml`
112
+
113
+ ```yaml
114
+ schema_version: 1
115
+ spec_version: "0.3.0"
116
+ created_at_utc: "2026-05-12T13:23:25Z"
117
+ receiver: codex
118
+ sender: iris
119
+ message_id: msg-20260512132325-iris-de62
120
+ message_type: task_request
121
+ message_subject: "Small docs cleanup"
122
+ message_path: agents/codex/inbox/20260512132325_iris_task_request.yaml
123
+ message_sha256: "..."
124
+ decision: auto_accepted
125
+ mode: auto_review
126
+ policy_path: agents/codex/config.yaml
127
+ policy_sha256: "..."
128
+ reason_codes:
129
+ - task_profile_present
130
+ - risk_threshold_passed
131
+ thresholds:
132
+ max_estimated_minutes: 30
133
+ max_expected_files_touched: 5
134
+ task_profile:
135
+ estimated_minutes: 20
136
+ expected_files_touched: 3
137
+ destructive_ops: false
138
+ runtime:
139
+ agent: codex
140
+ model: gpt-5
141
+ result:
142
+ final_state: done
143
+ reply_message_id: msg-...
144
+ artifacts: []
145
+ ```
146
+
147
+ `policy_path` and `policy_sha256` may be null when the pause is caused by
148
+ missing or malformed config. `sender` is logged only for traceability.
149
+
150
+ ## State Transition Metadata
151
+
152
+ Auto-acceptance preserves the `received -> accepted` transition and records why:
153
+
154
+ ```yaml
155
+ transition: received_to_accepted
156
+ accepted_by: autonomy_policy
157
+ human_confirmed: false
158
+ autonomy_mode: auto_review
159
+ policy_ref: agents/codex/config.yaml
160
+ policy_hash: sha256:...
161
+ reason_codes:
162
+ - task_profile_present
163
+ - risk_threshold_passed
164
+ ```
165
+
166
+ ## Mental Model
167
+
168
+ `auto_review` is OACP's analogue to Claude Code's `acceptEdits` mode: class-based
169
+ pre-approval within a local trust domain, bounded by bright-line hard stops.
170
+
171
+ The analogy is about user contract, not mechanism. OACP decides pre-execution
172
+ from message content and declared `task_profile`; runtime tools still enforce
173
+ their own permissions at action time.
174
+
175
+ ## Worked Example
176
+
177
+ A receiver configured with `default_mode: auto_review` receives:
178
+
179
+ ```markdown
180
+ ## Task
181
+ Clean up the build directory: `rm -rf dist/ && rebuild`.
182
+
183
+ task_profile:
184
+ estimated_minutes: 5
185
+ expected_files_touched: 1
186
+ destructive_ops: false
187
+ ```
188
+
189
+ Decision trace:
190
+
191
+ - Gate 1 passes: schema valid, not expired, hash recorded.
192
+ - Gate 2 passes: profile present and within thresholds.
193
+ - Gate 3 fails: body matches `rm -rf`.
194
+ - Decision: `paused`.
195
+ - Reason codes: `hard_stop_destructive_command`.
196
+ - Audit event includes `matched_pattern: "rm -rf"`.
197
+
198
+ The receiver must pause before any action runs. No autonomy mode can override
199
+ the hard stop.
200
+
201
+ ## Threshold-Exceeded Checkpoint
202
+
203
+ Receivers self-pause if work expands beyond the declared `task_profile` after
204
+ acceptance:
205
+
206
+ - `Blocked: autonomy threshold exceeded — files_touched expected 3, now 12`
207
+ - `Blocked: autonomy threshold exceeded — prompt was docs-only, now requires credential access`
208
+ - `Blocked: autonomy threshold exceeded — task expanded into untyped/unconfigured capability`
209
+
210
+ The canonical fixture set lives in `tests/conformance/autonomy/`.
@@ -109,6 +109,26 @@ agent_transitions:
109
109
  to: "accepted"
110
110
  trigger: "Agent reads and accepts the task_request"
111
111
  role: "agent"
112
+ metadata_fields:
113
+ transition: "received_to_accepted"
114
+ accepted_by:
115
+ description: "Acceptance actor: human | autonomy_policy | --autonomous-flag"
116
+ required: true
117
+ human_confirmed:
118
+ description: "Whether a human explicitly confirmed acceptance"
119
+ required: true
120
+ autonomy_mode:
121
+ description: "Receiver autonomy mode, e.g. always_pause or auto_review"
122
+ required: false
123
+ policy_ref:
124
+ description: "Receiver policy path, e.g. agents/codex/config.yaml"
125
+ required: false
126
+ policy_hash:
127
+ description: "sha256 of receiver policy when available"
128
+ required: false
129
+ reason_codes:
130
+ description: "List of acceptance or pause reason codes"
131
+ required: false
112
132
 
113
133
  - from: "received"
114
134
  to: "rejected"