oacp-cli 0.2.3__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 (158) hide show
  1. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/CHANGELOG.md +23 -0
  2. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/CONTRIBUTING.md +1 -0
  3. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/PKG-INFO +103 -10
  4. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/README.md +102 -9
  5. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/SPEC.md +108 -5
  6. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/runtime_capability_matrix.md +2 -2
  7. oacp_cli-0.3.1/docs/img/oacp-cli-demo.png +0 -0
  8. oacp_cli-0.3.1/docs/img/oacp-filesystem-tree.png +0 -0
  9. oacp_cli-0.3.1/docs/img/oacp-fleet-thread.png +0 -0
  10. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/agent_safety_defaults.md +15 -0
  11. oacp_cli-0.3.1/docs/protocol/autonomy.md +210 -0
  12. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/dispatch_states.yaml +20 -0
  13. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/inbox_outbox.md +35 -3
  14. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/oacp/cli.py +2 -1
  15. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/pyproject.toml +3 -1
  16. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/add_agent.py +12 -1
  17. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_project_workspace.py +10 -2
  18. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/memory_cli.py +91 -7
  19. oacp_cli-0.3.1/scripts/memory_sync.py +547 -0
  20. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_doctor.py +619 -0
  21. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/send_inbox_message.py +17 -0
  22. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/setup_runtime.py +159 -2
  23. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/update_workspace.sh +79 -3
  24. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/validate_message.py +12 -0
  25. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/inbox_message.template.yaml +11 -0
  26. oacp_cli-0.3.1/templates/receiver_config.template.yaml +15 -0
  27. oacp_cli-0.3.1/tests/conformance/autonomy/README.md +24 -0
  28. oacp_cli-0.3.1/tests/conformance/autonomy/configs/always_pause.yaml +13 -0
  29. oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_standard.yaml +13 -0
  30. oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_tight.yaml +13 -0
  31. oacp_cli-0.3.1/tests/conformance/autonomy/configs/malformed_config.yaml +7 -0
  32. oacp_cli-0.3.1/tests/conformance/autonomy/expected/always_pause_task.yaml +8 -0
  33. oacp_cli-0.3.1/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +9 -0
  34. oacp_cli-0.3.1/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +14 -0
  35. oacp_cli-0.3.1/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +15 -0
  36. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +9 -0
  37. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +9 -0
  38. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +9 -0
  39. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +9 -0
  40. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +9 -0
  41. oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +9 -0
  42. oacp_cli-0.3.1/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +8 -0
  43. oacp_cli-0.3.1/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +8 -0
  44. oacp_cli-0.3.1/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +8 -0
  45. oacp_cli-0.3.1/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +8 -0
  46. oacp_cli-0.3.1/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +8 -0
  47. oacp_cli-0.3.1/tests/conformance/autonomy/messages/ambiguous_scope.yaml +20 -0
  48. oacp_cli-0.3.1/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +9 -0
  49. oacp_cli-0.3.1/tests/conformance/autonomy/messages/clean_task.yaml +21 -0
  50. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +20 -0
  51. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +21 -0
  52. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_force.yaml +20 -0
  53. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +20 -0
  54. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +20 -0
  55. oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +20 -0
  56. oacp_cli-0.3.1/tests/conformance/autonomy/messages/missing_task_profile.yaml +10 -0
  57. oacp_cli-0.3.1/tests/conformance/autonomy/messages/threshold_breach.yaml +20 -0
  58. oacp_cli-0.3.1/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +12 -0
  59. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_add_agent.py +11 -6
  60. oacp_cli-0.3.1/tests/test_autonomy_conformance_fixtures.py +60 -0
  61. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_init_project_workspace.py +21 -0
  62. oacp_cli-0.3.1/tests/test_memory_archive.py +443 -0
  63. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_doctor.py +194 -2
  64. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_send_inbox_message.py +62 -0
  65. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_setup_runtime.py +57 -0
  66. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_update_workspace.py +45 -0
  67. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_validate_message.py +17 -0
  68. oacp_cli-0.2.3/tests/test_memory_archive.py +0 -222
  69. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.github/workflows/ci.yml +0 -0
  70. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.github/workflows/release.yml +0 -0
  71. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.gitignore +0 -0
  72. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/LICENSE +0 -0
  73. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/Makefile +0 -0
  74. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/QUICKSTART.md +0 -0
  75. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/SECURITY.md +0 -0
  76. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/adoption.md +0 -0
  77. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/doctor.md +0 -0
  78. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/prompt_caching.md +0 -0
  79. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/setup.md +0 -0
  80. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/unified_skill_spec.md +0 -0
  81. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/versioning.md +0 -0
  82. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/agent_profiles.md +0 -0
  83. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/credential_scoping.md +0 -0
  84. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/cross_runtime_sync.md +0 -0
  85. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/mcp_integration.md +0 -0
  86. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  87. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/org_memory.md +0 -0
  88. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/packet_states.yaml +0 -0
  89. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/review_loop.md +0 -0
  90. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/runtime_capabilities.md +0 -0
  91. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/session_init.md +0 -0
  92. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/skills_manifest.yaml +0 -0
  93. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/task_negotiation.md +0 -0
  94. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/examples/quickstart/README.md +0 -0
  95. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/mcp_servers/oacp_coordinator.py +0 -0
  96. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/oacp/__init__.py +0 -0
  97. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/_oacp_constants.py +0 -0
  98. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/_oacp_env.py +0 -0
  99. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/agent_profile.py +0 -0
  100. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/check_quality_gate.py +0 -0
  101. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/codex_session_init.py +0 -0
  102. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/create_handoff_packet.py +0 -0
  103. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/handoff_schema.py +0 -0
  104. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_org_memory.py +0 -0
  105. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_packet.sh +0 -0
  106. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_project_workspace.sh +0 -0
  107. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/memory_archive_common.py +0 -0
  108. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/normalize_findings.py +0 -0
  109. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_inbox.py +0 -0
  110. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_watch.py +0 -0
  111. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/preflight.py +0 -0
  112. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/promote_to_archive.py +0 -0
  113. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/restore_from_archive.py +0 -0
  114. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/session_lifecycle_hooks.py +0 -0
  115. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/validate_agent_card.py +0 -0
  116. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/write_event.py +0 -0
  117. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_card.template.yaml +0 -0
  118. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_profile.template.yaml +0 -0
  119. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_status.template.yaml +0 -0
  120. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/checkpoint.template.md +0 -0
  121. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/claude/agents/role_agent.template.md +0 -0
  122. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/claude/rules/guardrail.template.md +0 -0
  123. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/findings_packet.template.yaml +0 -0
  124. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/github_actions_quality_gate.yaml +0 -0
  125. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/coding_standards.template.md +0 -0
  126. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/safe_commands.template.md +0 -0
  127. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/secrets_rules.template.md +0 -0
  128. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/handoff_packet.template.yaml +0 -0
  129. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/manual_validation.template.md +0 -0
  130. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/merge_decision.template.md +0 -0
  131. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/decisions.md +0 -0
  132. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/events/.gitkeep +0 -0
  133. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  134. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/recent.md +0 -0
  135. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/rules.md +0 -0
  136. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/review_packet.template.md +0 -0
  137. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/roles/role_baseline.template.md +0 -0
  138. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/roles/role_definition.template.yaml +0 -0
  139. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/runtime_capabilities.yaml +0 -0
  140. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/skills_manifest.template.yaml +0 -0
  141. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/test_packet.template.md +0 -0
  142. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_agent_profile.py +0 -0
  143. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_codex_session_init.py +0 -0
  144. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_create_handoff_packet.py +0 -0
  145. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_github_workflows.py +0 -0
  146. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_handoff_schema.py +0 -0
  147. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_cli.py +0 -0
  148. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_constants.py +0 -0
  149. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_coordinator.py +0 -0
  150. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_env.py +0 -0
  151. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_inbox.py +0 -0
  152. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_watch.py +0 -0
  153. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_preflight.py +0 -0
  154. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_review_loop.py +0 -0
  155. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_session_lifecycle_hooks.py +0 -0
  156. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_validate_agent_card.py +0 -0
  157. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_workspace_discovery.py +0 -0
  158. {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_write_event.py +0 -0
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
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
+
21
+ ## [0.3.0] - 2026-04-29
22
+
23
+ ### Added
24
+
25
+ - `oacp memory init|clone|pull|push|disable` subcommands for opt-in cross-machine sync of `$OACP_HOME/org-memory/**` and `$OACP_HOME/projects/*/memory/**` via a plain git repo rooted at `$OACP_HOME`. Three-state activation model: Disabled (no marker), Local-only (`init` without `--remote`), and Synced (`init --remote <url>` or `clone <url>`).
26
+ - `oacp doctor --memory` advisory checks (10 checks covering marker presence, allowlist coverage, remote configuration, fetch/divergence state, and signing setup).
27
+ - `oacp setup claude` now installs memory pull/push hook scripts and registers them in `.claude/settings.json` for Claude SessionStart and SessionEnd lifecycle events. Hooks are marker-gated and no-op silently unless `$OACP_HOME/.oacp-memory-repo` is present, so existing workflows are unaffected on machines that have not opted in.
28
+
8
29
  ## [0.2.3] - 2026-04-26
9
30
 
10
31
  ### Changed
@@ -121,6 +142,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
121
142
  - Checkout step in github-release workflow job (#19)
122
143
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
123
144
 
145
+ [0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
146
+ [0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
124
147
  [0.2.3]: https://github.com/kiloloop/oacp/compare/v0.2.2...v0.2.3
125
148
  [0.2.2]: https://github.com/kiloloop/oacp/compare/v0.2.1...v0.2.2
126
149
  [0.2.1]: https://github.com/kiloloop/oacp/compare/v0.2.0...v0.2.1
@@ -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.2.3
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:
@@ -152,7 +245,7 @@ uv tool install .
152
245
  | `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
153
246
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
154
247
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
155
- | `oacp memory` | Archive or restore project memory files |
248
+ | `oacp memory` | Archive, restore, or git-sync project/org memory files |
156
249
  | `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
157
250
  | `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
158
251
  | `oacp write-event` | Write an event to `org-memory/events/` |
@@ -167,9 +260,9 @@ uv tool install .
167
260
 
168
261
  **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
169
262
 
170
- **`oacp doctor`**: `--fix` (auto-fix safe issues), `--json`, `-o/--output`
263
+ **`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
171
264
 
172
- **`oacp memory`**: `oacp memory archive <project> <file>`, `oacp memory restore <project> <file>`
265
+ **`oacp memory`**: `init [--remote URL]`, `clone <URL> [--force]`, `pull`, `push`, `disable`, `archive <project> <file>`, `restore <project> <file>`
173
266
 
174
267
  </details>
175
268
 
@@ -182,7 +275,7 @@ If `OACP_HOME` is unset, workspace commands default to `~/oacp`.
182
275
  | **Inbox/Outbox** | Async messaging between agents via YAML files in `agents/<name>/inbox/` |
183
276
  | **Review Loop** | Structured code review: `review_request` → `review_feedback` → `review_addressed` → `review_lgtm` |
184
277
  | **Quality Gate** | Merge-readiness criteria: no unresolved P0/P1 findings, deferred nits tracked |
185
- | **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory |
278
+ | **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory; optional `$OACP_HOME` git sync tracks only `org-memory/**` and `projects/*/memory/**` |
186
279
  | **Dispatch States** | Task lifecycle: `received` → `accepted` → `working` → `pr_opened` → `in_review` → `done` |
187
280
  | **Safety Defaults** | Baseline rules all agents follow: no force push, no secrets in commits, stage hygiene |
188
281
 
@@ -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:
@@ -126,7 +219,7 @@ uv tool install .
126
219
  | `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
127
220
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
128
221
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
129
- | `oacp memory` | Archive or restore project memory files |
222
+ | `oacp memory` | Archive, restore, or git-sync project/org memory files |
130
223
  | `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
131
224
  | `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
132
225
  | `oacp write-event` | Write an event to `org-memory/events/` |
@@ -141,9 +234,9 @@ uv tool install .
141
234
 
142
235
  **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
143
236
 
144
- **`oacp doctor`**: `--fix` (auto-fix safe issues), `--json`, `-o/--output`
237
+ **`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
145
238
 
146
- **`oacp memory`**: `oacp memory archive <project> <file>`, `oacp memory restore <project> <file>`
239
+ **`oacp memory`**: `init [--remote URL]`, `clone <URL> [--force]`, `pull`, `push`, `disable`, `archive <project> <file>`, `restore <project> <file>`
147
240
 
148
241
  </details>
149
242
 
@@ -156,7 +249,7 @@ If `OACP_HOME` is unset, workspace commands default to `~/oacp`.
156
249
  | **Inbox/Outbox** | Async messaging between agents via YAML files in `agents/<name>/inbox/` |
157
250
  | **Review Loop** | Structured code review: `review_request` → `review_feedback` → `review_addressed` → `review_lgtm` |
158
251
  | **Quality Gate** | Merge-readiness criteria: no unresolved P0/P1 findings, deferred nits tracked |
159
- | **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory |
252
+ | **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory; optional `$OACP_HOME` git sync tracks only `org-memory/**` and `projects/*/memory/**` |
160
253
  | **Dispatch States** | Task lifecycle: `received` → `accepted` → `working` → `pr_opened` → `in_review` → `done` |
161
254
  | **Safety Defaults** | Baseline rules all agents follow: no force push, no secrets in commits, stage hygiene |
162
255
 
@@ -16,7 +16,7 @@ OACP is not a framework or SDK. It is a set of conventions, YAML schemas, and sh
16
16
  3. [Review Loop Protocol](#3-review-loop-protocol)
17
17
  4. [Cross-Runtime Sync](#4-cross-runtime-sync)
18
18
  5. [Agent Safety Defaults](#5-agent-safety-defaults)
19
- 6. [Org-Level Memory](#6-org-level-memory)
19
+ 6. [Org-Level Memory and Sync](#6-org-level-memory-and-sync)
20
20
  7. [Kernel Script Inventory](#7-kernel-script-inventory)
21
21
 
22
22
  ---
@@ -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
@@ -451,7 +494,7 @@ Agents operate under least-privilege credentials:
451
494
 
452
495
  ---
453
496
 
454
- ## 6. Org-Level Memory
497
+ ## 6. Org-Level Memory and Sync
455
498
 
456
499
  Full specification: [`docs/protocol/org_memory.md`](docs/protocol/org_memory.md)
457
500
 
@@ -459,6 +502,16 @@ Full specification: [`docs/protocol/org_memory.md`](docs/protocol/org_memory.md)
459
502
 
460
503
  Shared, cross-project memory for multi-agent organizations. Agents across projects read org-wide decisions, conventions, and events from a single location. Complements per-project memory — does not replace it.
461
504
 
505
+ OACP can optionally sync curated memory across machines using one plain git
506
+ repository rooted at `$OACP_HOME`. This feature is opt-in and tracks only:
507
+
508
+ - `$OACP_HOME/org-memory/**`
509
+ - `$OACP_HOME/projects/<project>/memory/**`
510
+
511
+ Cross-machine inbox delivery, `agents/` runtime state, `status.yaml`, concurrent
512
+ writer protocols, encrypted transport, and runtime-specific memory outside
513
+ `$OACP_HOME` are out of scope.
514
+
462
515
  ### Directory Structure
463
516
 
464
517
  ```
@@ -470,6 +523,28 @@ $OACP_HOME/org-memory/
470
523
  └── YYYYMMDD-HHMMSS-short-slug.md
471
524
  ```
472
525
 
526
+ When memory sync is enabled, `$OACP_HOME` also contains:
527
+
528
+ ```text
529
+ $OACP_HOME/
530
+ ├── .gitignore # positive allowlist
531
+ ├── .oacp-memory-repo # tracked marker; activates hooks
532
+ ├── org-memory/ # tracked
533
+ └── projects/*/memory/ # tracked
534
+ ```
535
+
536
+ Canonical root `.gitignore`:
537
+
538
+ ```gitignore
539
+ *
540
+ !*/
541
+ !.gitignore
542
+ !.oacp-memory-repo
543
+ !org-memory/**
544
+ !projects/*/memory/**
545
+ projects/*/memory/.cache/
546
+ ```
547
+
473
548
  ### Key Concepts
474
549
 
475
550
  - **`recent.md`** is the always-loaded cross-project context. Agents read it at session start via session-init hooks. Kept concise (~150 lines) as a rolling summary of current state, not full history.
@@ -506,11 +581,37 @@ Agents write events only (append-only). The coordinator curates topical files an
506
581
 
507
582
  - **`oacp org-memory init`** — scaffold `$OACP_HOME/org-memory/` with default files
508
583
  - **`oacp write-event`** — create an event file with proper frontmatter
584
+ - **`oacp memory init [--remote URL]`** — initialize the `$OACP_HOME` memory git repo, marker, canonical allowlist, optional remote, and initial commit
585
+ - **`oacp memory clone <URL> [--force]`** — clone a memory repo into `$OACP_HOME`; refuses non-empty targets unless `--force` moves the existing directory aside
586
+ - **`oacp memory pull`** — advisory fetch plus fast-forward-only pull; warns loudly on dirty, ahead, behind, diverged, or fetch-failed states and never auto-merges
587
+ - **`oacp memory push`** — stages only the memory allowlist, commits as `memory: <agent>@<host> <date> (N files)`, then pushes when a remote is configured
588
+ - **`oacp memory disable`** — removes `.oacp-memory-repo` locally while leaving `.git/` intact
589
+ - **`oacp doctor --memory`** — runs advisory memory sync checks for marker state, allowlist drift, tracked/untracked leakage, clean/ahead/behind/diverged state, remote reachability, commit staleness, `agents/` leakage, and per-project memory overlay safety
509
590
 
510
591
  ### Integration with Session Init
511
592
 
512
593
  Agents can read `org-memory/recent.md` at session start for cross-project context. This integration is runtime-specific — for example, Claude Code loads it via a session-init hook, while other runtimes may read it explicitly. Topical files and `events/` are available for on-demand reading when agents need deeper org context.
513
594
 
595
+ Memory sync has three activation states:
596
+
597
+ | State | Trigger | Behavior |
598
+ |-------|---------|----------|
599
+ | Disabled | No `.oacp-memory-repo` marker | Hooks no-op silently; `oacp doctor --memory` reports not configured |
600
+ | Local-only | `oacp memory init` | Wrap-up commits memory locally for audit history; no push |
601
+ | Synced | `oacp memory init --remote URL` or `oacp memory clone <URL>` | Session start pulls fast-forward updates; wrap-up commits and pushes |
602
+
603
+ Lifecycle hooks must check for `$OACP_HOME/.oacp-memory-repo` first and exit
604
+ without output when it is absent. Claude runtime setup installs hook scripts for
605
+ `SessionStart` pull and wrap-up/session-end push:
606
+
607
+ 1. Session start runs `oacp memory pull`. It exits advisory-successfully, pulls
608
+ only clean behind states with `--ff-only`, and warns loudly when memory is
609
+ dirty, ahead, diverged, behind, or remote fetch fails.
610
+ 2. Wrap-up runs `oacp memory push`. It stages only `.gitignore`,
611
+ `.oacp-memory-repo`, `org-memory/**`, and `projects/*/memory/**`; commits
612
+ with the fixed terse message format; pushes when a remote exists; and warns
613
+ loudly when memory is dirty, behind, diverged, or push fails.
614
+
514
615
  ---
515
616
 
516
617
  ## 7. Kernel Script Inventory
@@ -532,7 +633,8 @@ Scripts marked **CLI** are exposed as `oacp` subcommands. Scripts marked **scrip
532
633
  | `agent_profile.py` | Two-tier agent profile management | CLI: `oacp agent` |
533
634
  | `send_inbox_message.py` | Compose and send inbox messages | CLI: `oacp send` |
534
635
  | `oacp_inbox.py` | List pending inbox messages | CLI: `oacp inbox` |
535
- | `memory_cli.py` | Archive or restore project memory files | CLI: `oacp memory` |
636
+ | `memory_cli.py` | Archive, restore, or git-sync project/org memory files | CLI: `oacp memory` |
637
+ | `memory_sync.py` | Shared git allowlist and memory sync helpers | imported by CLI/doctor |
536
638
  | `setup_runtime.py` | Generate runtime-specific config files | CLI: `oacp setup` |
537
639
  | `init_org_memory.py` | Scaffold org-level memory directory | CLI: `oacp org-memory` |
538
640
  | `write_event.py` | Write timestamped events to org-memory | CLI: `oacp write-event` |
@@ -618,6 +720,7 @@ scripts/init_packet.sh <project> <packet_id> # (no CLI wrapper yet)
618
720
  | Shared workspace | [`docs/protocol/multi_agent_shared_workspace.md`](docs/protocol/multi_agent_shared_workspace.md) |
619
721
  | Cross-runtime sync | [`docs/protocol/cross_runtime_sync.md`](docs/protocol/cross_runtime_sync.md) |
620
722
  | Session init | [`docs/protocol/session_init.md`](docs/protocol/session_init.md) |
723
+ | Receiver autonomy | [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md) |
621
724
  | Safety defaults | [`docs/protocol/agent_safety_defaults.md`](docs/protocol/agent_safety_defaults.md) |
622
725
  | Credential scoping | [`docs/protocol/credential_scoping.md`](docs/protocol/credential_scoping.md) |
623
726
  | Runtime capabilities | [`docs/protocol/runtime_capabilities.md`](docs/protocol/runtime_capabilities.md) |
@@ -1,10 +1,10 @@
1
1
  # Cross-Runtime Parity Matrix
2
2
 
3
- **Date**: 2026-04-24
3
+ **Date**: 2026-04-29
4
4
 
5
5
  This is a capability comparison across 3 agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Use this as a reference when deciding which agent to assign for a given task.
6
6
 
7
- Claude was last checked against Claude Code `v2.1.118`.
7
+ Claude was last checked against Claude Code `v2.1.123`.
8
8
 
9
9
  Codex was last checked against app update `26.415`, CLI `0.123.0`, and OpenAI's GPT-5.5 launch note from 2026-04-23.
10
10
 
@@ -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.