oacp-cli 0.3.4__tar.gz → 0.3.5__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 (267) hide show
  1. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/CHANGELOG.md +63 -0
  2. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/PKG-INFO +5 -3
  3. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/README.md +4 -2
  4. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/SECURITY.md +15 -0
  5. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/SPEC.md +6 -1
  6. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/from-claude-p.md +14 -14
  7. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/doctor.md +24 -2
  8. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/prompt_caching.md +0 -1
  9. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/runtime_capability_matrix.md +12 -8
  10. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/setup.md +0 -1
  11. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/unified_skill_spec.md +1 -1
  12. oacp_cli-0.3.5/docs/guides/versioning.md +65 -0
  13. oacp_cli-0.3.5/docs/protocol/autonomy.md +649 -0
  14. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/inbox_outbox.md +53 -9
  15. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/mcp_integration.md +2 -2
  16. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/review_loop.md +1 -1
  17. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/runtime_capabilities.md +5 -4
  18. oacp_cli-0.3.5/examples/demo-workspace/README.md +118 -0
  19. oacp_cli-0.3.5/examples/demo-workspace/org-memory/decisions.md +13 -0
  20. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +14 -0
  21. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +13 -0
  22. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +13 -0
  23. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +15 -0
  24. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +13 -0
  25. oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +13 -0
  26. oacp_cli-0.3.5/examples/demo-workspace/org-memory/recent.md +25 -0
  27. oacp_cli-0.3.5/examples/demo-workspace/org-memory/rules.md +17 -0
  28. oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +30 -0
  29. oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +21 -0
  30. oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +11 -0
  31. oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +23 -0
  32. oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +21 -0
  33. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/mcp_servers/oacp_coordinator.py +4 -0
  34. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/oacp/cli.py +7 -0
  35. oacp_cli-0.3.5/oacp/envelope_hook.py +24 -0
  36. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/pyproject.toml +5 -1
  37. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/_oacp_constants.py +1 -0
  38. oacp_cli-0.3.5/scripts/autonomy_gate.py +1350 -0
  39. oacp_cli-0.3.5/scripts/claude_envelope_hook.py +914 -0
  40. oacp_cli-0.3.5/scripts/envelope_compiler.py +361 -0
  41. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_sync.py +45 -10
  42. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_doctor.py +50 -11
  43. oacp_cli-0.3.5/scripts/record_autonomy_outcome.py +269 -0
  44. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/setup_runtime.py +15 -2
  45. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/update_workspace.sh +3 -2
  46. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/validate_message.py +55 -0
  47. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/inbox_message.template.yaml +6 -0
  48. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/receiver_config.template.yaml +7 -2
  49. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/README.md +7 -0
  50. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +2 -0
  51. oacp_cli-0.3.5/tests/conformance/autonomy/actuals/declaration_error.yaml +8 -0
  52. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +2 -0
  53. oacp_cli-0.3.5/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +48 -0
  54. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/always_pause.yaml +2 -2
  55. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +1 -1
  56. oacp_cli-0.3.4/tests/conformance/autonomy/configs/auto_review_standard.yaml → oacp_cli-0.3.5/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +1 -1
  57. oacp_cli-0.3.5/tests/conformance/autonomy/configs/auto_review_standard.yaml +17 -0
  58. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +1 -0
  59. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +1 -0
  60. oacp_cli-0.3.5/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +25 -0
  61. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +1 -1
  62. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +3 -0
  63. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +4 -0
  64. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +6 -1
  65. oacp_cli-0.3.5/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +24 -0
  66. oacp_cli-0.3.5/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +23 -0
  67. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +1 -1
  68. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +1 -1
  69. oacp_cli-0.3.5/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +19 -0
  70. oacp_cli-0.3.4/tests/conformance/autonomy/expected/clean_auto_review_task.yaml → oacp_cli-0.3.5/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +2 -2
  71. oacp_cli-0.3.5/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +10 -0
  72. oacp_cli-0.3.5/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +20 -0
  73. oacp_cli-0.3.5/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +15 -0
  74. oacp_cli-0.3.5/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +10 -0
  75. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +1 -1
  76. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +1 -0
  77. oacp_cli-0.3.5/tests/conformance/autonomy/messages/guardrails_fence.yaml +24 -0
  78. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +1 -1
  79. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +1 -1
  80. oacp_cli-0.3.5/tests/conformance/autonomy/messages/lexical_declared_false.yaml +21 -0
  81. oacp_cli-0.3.5/tests/conformance/autonomy/messages/minutes_45.yaml +20 -0
  82. oacp_cli-0.3.5/tests/conformance/autonomy/messages/minutes_46.yaml +20 -0
  83. oacp_cli-0.3.5/tests/conformance/autonomy/messages/negated_guardrails.yaml +21 -0
  84. oacp_cli-0.3.5/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +25 -0
  85. oacp_cli-0.3.5/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +25 -0
  86. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +5 -1
  87. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_config.yaml +1 -1
  88. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +1 -1
  89. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +1 -1
  90. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_secret.yaml +1 -1
  91. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +2 -2
  92. oacp_cli-0.3.5/tests/conformance/envelope/README.md +47 -0
  93. oacp_cli-0.3.5/tests/conformance/envelope/configs/auto_review_standard.yaml +17 -0
  94. oacp_cli-0.3.5/tests/conformance/envelope/configs/malformed.yaml +2 -0
  95. oacp_cli-0.3.5/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +29 -0
  96. oacp_cli-0.3.5/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +29 -0
  97. oacp_cli-0.3.5/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +6 -0
  98. oacp_cli-0.3.5/tests/conformance/envelope/expected/malformed_config_fails.yaml +6 -0
  99. oacp_cli-0.3.5/tests/conformance/envelope/expected/missing_profile_fails.yaml +6 -0
  100. oacp_cli-0.3.5/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +6 -0
  101. oacp_cli-0.3.5/tests/conformance/envelope/messages/clean_pr_task.yaml +25 -0
  102. oacp_cli-0.3.5/tests/conformance/envelope/messages/docs_only_task.yaml +20 -0
  103. oacp_cli-0.3.5/tests/conformance/envelope/messages/invalid_numeric.yaml +20 -0
  104. oacp_cli-0.3.5/tests/conformance/envelope/messages/missing_profile.yaml +10 -0
  105. oacp_cli-0.3.5/tests/conformance/envelope/messages/unparsable_profile.yaml +14 -0
  106. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_autonomy_conformance_fixtures.py +11 -0
  107. oacp_cli-0.3.5/tests/test_autonomy_gate.py +434 -0
  108. oacp_cli-0.3.5/tests/test_claude_envelope_hook.py +661 -0
  109. oacp_cli-0.3.5/tests/test_envelope_compiler.py +305 -0
  110. oacp_cli-0.3.5/tests/test_envelope_conformance_fixtures.py +97 -0
  111. oacp_cli-0.3.5/tests/test_memory_sync.py +274 -0
  112. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_cli.py +35 -0
  113. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_coordinator.py +28 -0
  114. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_doctor.py +84 -0
  115. oacp_cli-0.3.5/tests/test_record_autonomy_outcome.py +288 -0
  116. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_setup_runtime.py +22 -0
  117. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_validate_message.py +51 -0
  118. oacp_cli-0.3.4/docs/guides/versioning.md +0 -34
  119. oacp_cli-0.3.4/docs/protocol/autonomy.md +0 -323
  120. oacp_cli-0.3.4/scripts/autonomy_gate.py +0 -822
  121. oacp_cli-0.3.4/tests/test_autonomy_gate.py +0 -177
  122. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.github/workflows/ci.yml +0 -0
  123. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.github/workflows/release.yml +0 -0
  124. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.gitignore +0 -0
  125. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/CONTRIBUTING.md +0 -0
  126. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/LICENSE +0 -0
  127. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/Makefile +0 -0
  128. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/QUICKSTART.md +0 -0
  129. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/adoption.md +0 -0
  130. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-cli-demo.png +0 -0
  131. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-filesystem-tree.png +0 -0
  132. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-fleet-thread.png +0 -0
  133. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/agent_profiles.md +0 -0
  134. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/agent_safety_defaults.md +0 -0
  135. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/credential_scoping.md +0 -0
  136. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/cross_runtime_sync.md +0 -0
  137. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/dispatch_states.yaml +0 -0
  138. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  139. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/org_memory.md +0 -0
  140. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/packet_states.yaml +0 -0
  141. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/session_init.md +0 -0
  142. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/skills_manifest.yaml +0 -0
  143. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/task_negotiation.md +0 -0
  144. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/examples/quickstart/README.md +0 -0
  145. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/oacp/__init__.py +0 -0
  146. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/_oacp_env.py +0 -0
  147. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/add_agent.py +0 -0
  148. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/agent_profile.py +0 -0
  149. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/check_quality_gate.py +0 -0
  150. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/codex_session_init.py +0 -0
  151. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/create_handoff_packet.py +0 -0
  152. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/handoff_schema.py +0 -0
  153. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_org_memory.py +0 -0
  154. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_packet.sh +0 -0
  155. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_project_workspace.py +0 -0
  156. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_project_workspace.sh +0 -0
  157. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_archive_common.py +0 -0
  158. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_cli.py +0 -0
  159. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/normalize_findings.py +0 -0
  160. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_inbox.py +0 -0
  161. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_watch.py +0 -0
  162. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/preflight.py +0 -0
  163. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/promote_to_archive.py +0 -0
  164. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/restore_from_archive.py +0 -0
  165. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/send_inbox_message.py +0 -0
  166. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/session_lifecycle_hooks.py +0 -0
  167. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/validate_agent_card.py +0 -0
  168. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/write_event.py +0 -0
  169. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_card.template.yaml +0 -0
  170. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_profile.template.yaml +0 -0
  171. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_status.template.yaml +0 -0
  172. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/checkpoint.template.md +0 -0
  173. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/claude/agents/role_agent.template.md +0 -0
  174. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/claude/rules/guardrail.template.md +0 -0
  175. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/findings_packet.template.yaml +0 -0
  176. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/github_actions_quality_gate.yaml +0 -0
  177. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/coding_standards.template.md +0 -0
  178. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/safe_commands.template.md +0 -0
  179. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/secrets_rules.template.md +0 -0
  180. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/handoff_packet.template.yaml +0 -0
  181. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/manual_validation.template.md +0 -0
  182. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/merge_decision.template.md +0 -0
  183. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/decisions.md +0 -0
  184. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/events/.gitkeep +0 -0
  185. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  186. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/recent.md +0 -0
  187. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/rules.md +0 -0
  188. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/review_packet.template.md +0 -0
  189. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/roles/role_baseline.template.md +0 -0
  190. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/roles/role_definition.template.yaml +0 -0
  191. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/runtime_capabilities.yaml +0 -0
  192. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/skills_manifest.template.yaml +0 -0
  193. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/test_packet.template.md +0 -0
  194. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
  195. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
  196. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
  197. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  198. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  199. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  200. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
  201. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
  202. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
  203. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
  204. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  205. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  206. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  207. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  208. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
  209. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  210. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
  211. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
  212. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
  213. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
  214. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  215. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
  216. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
  217. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
  218. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  219. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  220. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
  221. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
  222. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
  223. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
  224. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  225. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  226. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
  227. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
  228. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  229. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  230. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
  231. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
  232. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
  233. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
  234. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  235. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  236. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  237. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
  238. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  239. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
  240. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  241. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
  242. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
  243. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
  244. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
  245. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
  246. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  247. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  248. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_add_agent.py +0 -0
  249. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_agent_profile.py +0 -0
  250. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_codex_session_init.py +0 -0
  251. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_create_handoff_packet.py +0 -0
  252. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_github_workflows.py +0 -0
  253. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_handoff_schema.py +0 -0
  254. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_init_project_workspace.py +0 -0
  255. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_memory_archive.py +0 -0
  256. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_constants.py +0 -0
  257. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_env.py +0 -0
  258. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_inbox.py +0 -0
  259. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_watch.py +0 -0
  260. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_preflight.py +0 -0
  261. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_review_loop.py +0 -0
  262. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_send_inbox_message.py +0 -0
  263. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_session_lifecycle_hooks.py +0 -0
  264. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_update_workspace.py +0 -0
  265. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_validate_agent_card.py +0 -0
  266. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_workspace_discovery.py +0 -0
  267. {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_write_event.py +0 -0
@@ -5,6 +5,68 @@ 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
+ ## [0.3.5] - 2026-07-11
9
+
10
+ ### Added
11
+
12
+ - Receiver autonomy supports sender-marked `oacp-guardrails` fences, negation
13
+ fallback, declaration-aware lexical advisories, and a pinned reason-code
14
+ taxonomy backed by executable conformance fixtures.
15
+ - `external_side_effects: allow_pr_artifacts` permits declared PR, review, and
16
+ issue-comment artifacts only for receiver-allowlisted private repositories,
17
+ while retaining pre-approval for public/unlisted artifacts, direct main
18
+ pushes, merges, deploys, and publishes.
19
+ - Autonomy audit output records the full declared task profile, an explicit
20
+ breach list, a semantic policy hash, and a shared outcome block including
21
+ completion time and materialized-risk telemetry.
22
+ - Default-off standing continuation grants now resolve from an explicit prior
23
+ human approval in the same conversation thread; sender-declared grant data
24
+ alone cannot authorize follow-up scope.
25
+ - `oacp autonomy-outcome` atomically records structured approval, modification,
26
+ decline, latency, and grant-decision telemetry in schema-v2 autonomy audits.
27
+ The subcommand is exposed by the installed CLI starting with this release.
28
+ - Envelope compilation: `oacp envelope compile|show|clear`
29
+ turns an admitted message's `task_profile` plus receiver config into a
30
+ runtime envelope (`active_envelope.json`), enforced at the tool-call layer
31
+ by a static Claude PreToolUse hook (`oacp-envelope-hook`, registered once
32
+ by `oacp setup claude`). Compilation is fail-closed
33
+ (`envelope_compile_error`), envelope drift denies with the canonical
34
+ threshold-checkpoint opener, unclassifiable calls escalate to `ask`, and
35
+ the audit outcome block records `envelope_enforcement: hooks | none`.
36
+ Contract pinned by executable fixtures under `tests/conformance/envelope/`.
37
+ - The security policy documents the Tier-1.5 trust ceiling for single-OS-user
38
+ hosts: `from` fields are unauthenticated traceability today, future optional
39
+ signing would add tamper-evidence and provenance but not same-host
40
+ anti-impersonation, and hard isolation requires separate OS users,
41
+ containers, or hosts.
42
+
43
+ ### Changed
44
+
45
+ - The versioning guide documents the staged release pipeline end to end,
46
+ replacing the retired single-repo flow.
47
+ - Documentation examples and conformance fixtures use neutral example
48
+ repository slugs.
49
+ - The standard `auto_review` estimate cap is 45 minutes; estimates above 45
50
+ still pause and the five-file cap remains unchanged.
51
+ - Pricing and commercial matches remain hard pauses but now use the separate
52
+ `hard_stop_content_sensitivity` category.
53
+ - Follow-up declarations outside a standing grant's time, file, or side-effect
54
+ scope re-pause before work begins.
55
+
56
+ ### Fixed
57
+
58
+ - `doctor --memory` now forwards bounded network timeouts to remote Git fetches
59
+ without breaking custom runners that implement the original command interface.
60
+ - The MCP stdio coordinator now converts unexpected request exceptions into
61
+ structured `-32603` responses instead of crashing the server.
62
+ - Undeclared runtime side effects now produce `declaration_error` at the
63
+ threshold checkpoint instead of silently completing outside the profile.
64
+ - Message validation now accepts and type-checks the six documented
65
+ review-loop telemetry fields: `model`, `turns`, `input_tokens`,
66
+ `output_tokens`, `wall_time_s`, and `est_cost_usd`.
67
+ - Receiver config and doctor validation share one repository-slug regex instead
68
+ of maintaining duplicate definitions.
69
+
8
70
  ## [0.3.4] - 2026-06-11
9
71
 
10
72
  ### Fixed
@@ -192,6 +254,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
192
254
  - Checkout step in github-release workflow job (#19)
193
255
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
194
256
 
257
+ [0.3.5]: https://github.com/kiloloop/oacp/compare/v0.3.4...v0.3.5
195
258
  [0.3.4]: https://github.com/kiloloop/oacp/compare/v0.3.3...v0.3.4
196
259
  [0.3.3]: https://github.com/kiloloop/oacp/compare/v0.3.2...v0.3.3
197
260
  [0.3.2]: https://github.com/kiloloop/oacp/compare/v0.3.1...v0.3.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oacp-cli
3
- Version: 0.3.4
3
+ Version: 0.3.5
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
@@ -120,6 +120,8 @@ $OACP_HOME/org-memory/ org-wide
120
120
 
121
121
  </details>
122
122
 
123
+ Want to see these files populated? Browse [`examples/demo-workspace/`](examples/demo-workspace/) — what a fictional team's project remembers after a month of agent sessions (debt with origins, threads opened and closed, decisions with rationale), plus the org-memory layer mid-curation.
124
+
123
125
  ## Quick Start
124
126
 
125
127
  ```bash
@@ -146,9 +148,9 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
146
148
 
147
149
  ## Coming from `claude -p`?
148
150
 
149
- `claude -p` runs an agent synchronously and headless — your script blocks while it works, and as of June 15 programmatic usage draws from a separate metered credit.
151
+ `claude -p` runs an agent synchronously and headless — your script blocks while it works, and there's no session to glance at, attach to, or steer mid-run.
150
152
 
151
- OACP routes the same work to a **standing interactive Claude Code session** instead: `oacp send` queues the task, the session picks it up and runs it async, you're not blocked — and because it's a real interactive session, it stays on your subscription.
153
+ OACP routes the same work to a **standing interactive Claude Code session** instead: `oacp send` queues the task, the session picks it up and runs it async, you're not blocked — and the session is right there to watch and steer. Once tasks are messages, review loops, handoffs, and multi-agent coordination come with the shape.
152
154
 
153
155
  **[From `claude -p` to an interactive Claude Code session →](docs/from-claude-p.md)** — paste-into-your-agent setup, the honest tradeoffs, and where it fits.
154
156
 
@@ -94,6 +94,8 @@ $OACP_HOME/org-memory/ org-wide
94
94
 
95
95
  </details>
96
96
 
97
+ Want to see these files populated? Browse [`examples/demo-workspace/`](examples/demo-workspace/) — what a fictional team's project remembers after a month of agent sessions (debt with origins, threads opened and closed, decisions with rationale), plus the org-memory layer mid-curation.
98
+
97
99
  ## Quick Start
98
100
 
99
101
  ```bash
@@ -120,9 +122,9 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
120
122
 
121
123
  ## Coming from `claude -p`?
122
124
 
123
- `claude -p` runs an agent synchronously and headless — your script blocks while it works, and as of June 15 programmatic usage draws from a separate metered credit.
125
+ `claude -p` runs an agent synchronously and headless — your script blocks while it works, and there's no session to glance at, attach to, or steer mid-run.
124
126
 
125
- OACP routes the same work to a **standing interactive Claude Code session** instead: `oacp send` queues the task, the session picks it up and runs it async, you're not blocked — and because it's a real interactive session, it stays on your subscription.
127
+ OACP routes the same work to a **standing interactive Claude Code session** instead: `oacp send` queues the task, the session picks it up and runs it async, you're not blocked — and the session is right there to watch and steer. Once tasks are messages, review loops, handoffs, and multi-agent coordination come with the shape.
126
128
 
127
129
  **[From `claude -p` to an interactive Claude Code session →](docs/from-claude-p.md)** — paste-into-your-agent setup, the honest tradeoffs, and where it fits.
128
130
 
@@ -29,6 +29,21 @@ OACP is a file-based coordination protocol. Security considerations include:
29
29
  - **Script injection** — Report any case where user-controlled input in message fields can lead to command injection via OACP scripts.
30
30
  - **Path traversal** — Report any case where message fields or script arguments can read or write files outside the intended directories.
31
31
 
32
+ ### Trust ceiling on shared hosts (Tier 1.5)
33
+
34
+ On a single-OS-user host, OACP cannot *cryptographically prevent* one agent
35
+ from impersonating another, because key-read access and inbox-write access
36
+ collapse to the same uid. Today, `from` fields are unauthenticated and provide
37
+ traceability only — not identity assurance. Message signing (an optional
38
+ extension under design, not yet implemented) would add tamper-evidence and
39
+ third-party-verifiable identity provenance for honest agents; it would still
40
+ not provide same-host anti-impersonation. Hard inter-agent isolation requires
41
+ one OS user per agent (Tier-2), containers, or separate hosts with enforced
42
+ access controls. Hardware-backed keys can strengthen future signing identity
43
+ assurance, but they do not isolate a shared filesystem or process space. Treat
44
+ any `from` field on a shared host as **provenance, not an anti-spoofing
45
+ guarantee.**
46
+
32
47
  ## Acknowledgments
33
48
 
34
49
  We appreciate responsible disclosure and will credit reporters in release notes (unless you prefer to remain anonymous).
@@ -79,7 +79,10 @@ 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`, `autonomy_hint`, `related_packet`, `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`
82
+ **Optional fields:** `expires_at`, `channel`, `autonomy_hint`, `related_packet`,
83
+ `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`, plus the
84
+ review-loop telemetry fields `model`, `turns`, `input_tokens`, `output_tokens`,
85
+ `wall_time_s`, and `est_cost_usd`
83
86
 
84
87
  `autonomy_hint` is an advisory sender hint, such as `auto_proceed`. Receivers
85
88
  remain authoritative: local autonomy config, message content, safety defaults,
@@ -88,6 +91,8 @@ interactive human confirmation.
88
91
 
89
92
  Receiver autonomy is defined by `agents/<receiver>/config.yaml` and the
90
93
  scope-envelope contract in [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
94
+ Sender-marked `oacp-guardrails` body fences and the 45-minute standard
95
+ `auto_review` cap are defined there as well.
91
96
 
92
97
  ### Message Types
93
98
 
@@ -1,12 +1,12 @@
1
1
  # From `claude -p` to an interactive Claude Code session
2
2
 
3
- On June 15, programmatic Claude usage — `claude -p`, the Agent SDK, Claude Code GitHub Actions, third-party tools — moves onto a separate metered monthly credit. Interactive Claude Code and chat stay on your subscription, unchanged.
3
+ `claude -p` is how most people first script a Claude agent. It works — but if you run agents in automation, it's worth asking a question the one-liner never forces: **why is the agent headless and synchronous in the first place?**
4
4
 
5
- It's a reasonable change: programmatic usage is heavier and burstier than a person typing. But if you run agents in automation, it's worth asking a different question than "how do I dodge the meter" — **why is the agent headless and synchronous in the first place?**
5
+ (A pricing footnote, since earlier versions of this page led with it: Anthropic explored moving programmatic usage — `claude -p`, the Agent SDK, Claude Code GitHub Actions — onto a separate metered credit, but paused that change before it took effect; per the June 15 announcement no such credit exists, subscription limits are unchanged, and advance notice is promised before any future version.)
6
6
 
7
7
  This guide is built to be handed to your agent. Read the first half for the *why*; paste the setup block into your Claude Code session for the *how*.
8
8
 
9
- > **Setup is a one-time ~5 minutes. Every task after that is one `oacp send` — async, non-blocking, on your subscription.**
9
+ > **Setup is a one-time ~5 minutes. Every task after that is one `oacp send` — async, non-blocking, observable.**
10
10
 
11
11
  ## The shape of `claude -p`
12
12
 
@@ -14,7 +14,7 @@ This guide is built to be handed to your agent. Read the first half for the *why
14
14
 
15
15
  - it **blocks** — your script waits for the agent to finish
16
16
  - it runs **headless** — no session to glance at, attach to, or steer mid-run
17
- - after June 15, it's **metered** — programmatic usage draws from the separate credit pool
17
+ - it's **one-shot** — one prompt in, one result out; there's no queue behind it, and coordinating several calls is your script's problem
18
18
 
19
19
  That shape was always a compromise. You wanted to script an agent, and `claude -p` was the way to do it from a shell. Synchronous-and-headless came along for the ride.
20
20
 
@@ -24,10 +24,10 @@ Run the agent as a **standing interactive Claude Code session**, and *send* it w
24
24
 
25
25
  ```
26
26
  Before: claude -p "do X"
27
- blocks · headless · metered after Jun 15
27
+ blocks · headless · one-shot
28
28
 
29
29
  After: oacp send → a standing interactive session picks it up
30
- async · you're not blocked · on your subscription
30
+ async · you're not blocked · a session you can watch
31
31
  ```
32
32
 
33
33
  Concretely — the call that replaces `claude -p "do X"`:
@@ -39,23 +39,23 @@ oacp send my-project --from sender --to claude --type task_request \
39
39
 
40
40
  Same prompt, different delivery. The text you'd have handed to `claude -p` becomes the message `--body`; `oacp send` drops it in the interactive session's inbox, and the session picks it up and runs it. Sending the prompt as an OACP message is the whole trick — it routes the work into a session running in interactive mode instead of a headless `claude -p` call.
41
41
 
42
- The session is a real interactive Claude Code session — so it stays on your subscription. You're not spoofing interactive mode; you're using it, and feeding it a queue.
42
+ The session is a real interactive Claude Code session — you're not spoofing interactive mode; you're using it, and feeding it a queue.
43
43
 
44
- This isn't only about the credit. Async is the right shape for most automation — a build, an overnight refactor, a research job — none of it needs your script to sit and wait. And once tasks are messages in an inbox, you get real multi-agent coordination — review loops, handoffs, several agents on one project — instead of a pile of blocking shell calls.
44
+ Async is the right shape for most automation — a build, an overnight refactor, a research job — none of it needs your script to sit and wait. And once tasks are messages in an inbox, you get real multi-agent coordination — review loops, handoffs, several agents on one project — instead of a pile of blocking shell calls.
45
45
 
46
46
  ## Your options, honestly
47
47
 
48
- Two real choices if June 15 affects you.
48
+ Two real choices.
49
49
 
50
- **1. Pay the metered credit (or API rates).** Simplest. Low programmatic volume — the included credit may cover you; past that it's API pricing. Already on the API — nothing changes. No new tooling; it just costs money at scale.
50
+ **1. Keep `claude -p`.** Simplest. It's one line, it works, and nothing about your setup changes. If your automation is a single blocking call and you never need to see inside it, this is fine.
51
51
 
52
- **2. OACP — run interactive for real, feed it a queue.** Run a real interactive Claude Code session and send it work. It stays on your subscription because it genuinely *is* an interactive session. Not a one-liner — it's a workflow change. In exchange you get real agent coordination, not just a credit workaround.
52
+ **2. OACP — run interactive for real, feed it a queue.** Run a real interactive Claude Code session and send it work. Not a one-liner — it's a workflow change. In exchange you get async dispatch, a session you can watch and steer, and real agent coordination.
53
53
 
54
- Option 1 is the no-effort path that costs money at volume. Option 2 is a one-time workflow change that doesn't. Pick on that.
54
+ Option 1 is zero effort and stays synchronous, headless, one-shot. Option 2 is a one-time workflow change that removes all three. Pick on that.
55
55
 
56
56
  ## What OACP is
57
57
 
58
- OACP isn't a June-15 tool. It's a file-based protocol for coordinating AI agents — inbox/outbox messaging, structured review loops, shared memory — no server, no daemon, just files in a directory. It was built to run a multi-agent fleet; the `claude -p` transition is **one usage** of it. Full picture: the [README](../README.md) and [SPEC](../SPEC.md). The companion [oacp-skills](https://github.com/kiloloop/oacp-skills) repo packages the runtime guidance — skills that teach Claude, Codex, and other agents to operate the protocol.
58
+ OACP isn't a `claude -p` replacement tool. It's a file-based protocol for coordinating AI agents — inbox/outbox messaging, structured review loops, shared memory — no server, no daemon, just files in a directory. It was built to run a multi-agent fleet; the `claude -p` swap is **one usage** of it. Full picture: the [README](../README.md) and [SPEC](../SPEC.md). The companion [oacp-skills](https://github.com/kiloloop/oacp-skills) repo packages the runtime guidance — skills that teach Claude, Codex, and other agents to operate the protocol.
59
59
 
60
60
  ## Set it up — paste this into your agent
61
61
 
@@ -142,7 +142,7 @@ oacp-do() {
142
142
 
143
143
  **Request-response callers** — CI doing `RESULT=$(claude -p ...)` and using the output inline. Works too, but not a one-liner: the caller also arms `oacp watch --agent sender` to catch the reply. Worth it for a real pipeline — just know it's more than a swap.
144
144
 
145
- **If you just want zero workflow change** and don't care about coordination — keep `claude -p` and pay the meter (option 1). OACP earns its setup cost when you have more than one agent, recurring work, or you want to see and steer what the agent is doing. If that's not you, we'd rather say so.
145
+ **If you just want zero workflow change** and don't care about coordination — keep `claude -p` (option 1). OACP earns its setup cost when you have more than one agent, recurring work, or you want to see and steer what the agent is doing. If that's not you, we'd rather say so.
146
146
 
147
147
  ## Try it
148
148
 
@@ -13,7 +13,7 @@ No project, no config, no commit required — just install and run.
13
13
 
14
14
  ## What doctor checks
15
15
 
16
- Doctor organizes its output into five categories. When run without `--project`, only the first category (Environment) runs. With `--project <name>`, all five categories are evaluated.
16
+ Doctor organizes its output into six categories. When run without `--project`, only the first category (Environment) runs. With `--project <name>`, all six categories are evaluated.
17
17
 
18
18
  ### 1. Environment
19
19
 
@@ -50,7 +50,19 @@ Validates YAML files against protocol expectations.
50
50
  - **packets/** — parses all `.yaml`/`.yml` files and reports syntax errors
51
51
  - **status.yaml** — checks required fields (`runtime`, `status`, `capabilities`, `updated_at`), validates enum values, and verifies timestamp format
52
52
 
53
- ### 5. Agent Status
53
+ ### 5. Autonomy
54
+
55
+ Validates each agent's receiver-autonomy setup (see `docs/protocol/autonomy.md`).
56
+
57
+ - **config.yaml** — validates `autonomy.default_mode`, `auto_review_thresholds`
58
+ (numeric + policy keys, including `external_side_effects: pause |
59
+ allow_pr_artifacts | allow`), `allow_without_task_profile` entries, and
60
+ receiver-controlled `private_repo_allowlist` entries, and
61
+ `continuation_grants`; an absent config is fine (defaults to `always_pause`)
62
+ - **audit directory** — warns if `agents/<agent>/audit/autonomy_decisions/` is missing
63
+ - **orphaned policy refs** — warns when an audit event's `policy_path` points at a config file that no longer exists
64
+
65
+ ### 6. Agent Status
54
66
 
55
67
  Checks each agent's `status.yaml` for presence and freshness.
56
68
 
@@ -104,6 +116,14 @@ $ oacp doctor --project my-project
104
116
  [+] claude/status.yaml — valid
105
117
  [+] codex/status.yaml — valid
106
118
 
119
+ [!] Autonomy
120
+ [+] claude/audit/autonomy_decisions — present
121
+ [+] claude/config.yaml — valid
122
+ [+] claude/autonomy audit — no orphaned policy refs
123
+ [!] codex/audit/autonomy_decisions — missing
124
+ mkdir -p $OACP_HOME/projects/my-project/agents/codex/audit/autonomy_decisions
125
+ [+] codex/config.yaml — absent; defaults to always_pause
126
+
107
127
  [!] Agent Status
108
128
  [+] claude/status.yaml — present
109
129
  [!] codex/status.yaml — stale (updated 26h ago)
@@ -179,6 +199,8 @@ oacp doctor # environment checks only
179
199
  oacp doctor --project <name> # full workspace + agent checks
180
200
  oacp doctor --json # machine-readable JSON output
181
201
  oacp doctor --project <name> --json # full checks in JSON format
202
+ oacp doctor --project <name> --fix # auto-fix safe issues (missing inbox dirs, missing/stale status.yaml)
203
+ oacp doctor --memory # advisory checks for OACP_HOME memory git sync
182
204
  oacp doctor -o report.txt # save report to file
183
205
  ```
184
206
 
@@ -94,7 +94,6 @@ Codex CLI sends the full prompt to the Codex API on each invocation. There is no
94
94
 
95
95
  4. **Lean on diff-only context**
96
96
  - For PR fix loops, pass the diff + findings rather than full file contents
97
- - `run_agent_task.sh` already scopes context to changed files
98
97
 
99
98
  ## Gemini
100
99
 
@@ -1,12 +1,12 @@
1
1
  # Cross-Runtime Parity Matrix
2
2
 
3
- **Date**: 2026-06-09
3
+ **Date**: 2026-06-26
4
4
 
5
5
  This is a capability comparison across the currently profiled agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Cursor support is scaffold-only until Cursor-owned onboarding lands, so Cursor is intentionally excluded from this comparison table; see `docs/protocol/runtime_capabilities.md` for its conservative scaffold defaults.
6
6
 
7
7
  Claude was last checked against Claude Code `v2.1.170` with Claude Fable 5 (`claude-fable-5`, serving model verified in-session on the 1M-context variant). Fable 5 (released 2026-06-09, first Mythos-class model) is included at no extra cost on Pro/Max/Team/Enterprise plans Jun 9–22, 2026, with usage credits required after; Opus 4.8 remains available and serves as Fable 5's safeguard-fallback model.
8
8
 
9
- Codex was last checked against app update `26.602`, CLI `0.137.0`, OpenAI's GPT-5.5 launch note from 2026-04-23, and the June 2026 Codex/API entries for Sites and Amazon Bedrock.
9
+ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local desktop app `26.623.31921`, OpenAI's GPT-5.5 launch note from 2026-04-23, and the June 2026 Codex/API entries for Sites, Amazon Bedrock, Remote, and Record & Replay.
10
10
 
11
11
  ---
12
12
 
@@ -17,16 +17,16 @@ Codex was last checked against app update `26.602`, CLI `0.137.0`, OpenAI's GPT-
17
17
  | Spawn background tasks | Yes — Task tool + Bash `run_in_background` | Yes — shell background processes | Yes — `run_command` async mode |
18
18
  | Spawn subagents | Yes — typed agents (Explore, Plan, general-purpose, code-reviewer, etc.) | Yes — native multi-agent lifecycle with runtime metadata and follow-up defaults | Partial — `browser_subagent` only |
19
19
  | Parallel agent teams | Yes — TeamCreate, task lists, SendMessage, broadcast | Partial — parallel spawned agents are supported, but there is no team/task-list primitive | No — parallel tool calls but no independent agent instances |
20
- | MCP tools | Yes — extensible via MCP servers | Yes — MCP/plugin support with `/mcp verbose`, per-server environment targeting, read-only MCP parallelism, and scriptable plugin inventory | Yes — MCP server support |
20
+ | MCP tools | Yes — extensible via MCP servers | Yes — MCP/plugin support with `/mcp verbose`, per-server environment targeting, read-only MCP parallelism, scriptable plugin inventory, and default tool-search exposure where supported | Yes — MCP server support |
21
21
  | Web search | Yes — native WebSearch tool | Yes — web search/fetch tools; hosted web tools are expanding in code-mode flows | Yes — native `search_web` tool |
22
22
  | Browser interaction | Partial — WebFetch (read-only, HTML→markdown) | Partial — in-app browser and Chrome extension can inspect local/public and approved browser contexts, with faster asset extraction and read-only JS structured-data extraction; not full browser automation | Yes — full browser control (click, type, navigate, screenshot, video) |
23
23
  | File system access | Sandboxed — configurable read/write allowlists | Policy-dependent per session; named permission profiles can include deny-read rules and managed requirements | Full — unrestricted |
24
24
  | Git operations | Yes — via Bash (may need sandbox configuration) | Yes — native | Yes — via shell |
25
25
  | GitHub CLI (gh) | Yes — via Bash (may need sandbox configuration) | Yes — authenticated | Yes — native |
26
26
  | Session memory | Strong — auto-loaded MEMORY.md + optional MCP memory | Partial — app memories where available plus OACP file memory; app memories are not protocol SSOT | Partial — Knowledge Items (not directly writable), conversation logs |
27
- | Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan Mode, Goal mode, side conversations, and archive/unarchive flows | Yes — chat with task UI, artifacts |
27
+ | Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan Mode, Goal mode, side conversations, archive/unarchive/delete flows, and token-budget-aware long-running work | Yes — chat with task UI, artifacts |
28
28
  | Context window | ~1M with Fable 5 or Opus 4.8 (auto-compaction extends indefinitely) | Model-dependent; GPT-5.5 in Codex is documented at 400K, with no auto-compaction guarantee | ~1M tokens |
29
- | Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× Opus 4.8's $5/$25) | Not surfaced per session; GPT-5.5 Fast mode trades 2.5x cost for 1.5x token generation speed | Token-based |
29
+ | Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× Opus 4.8's $5/$25) | Not surfaced per session; GPT-5.5 Fast mode trades 2.5x cost for 1.5x token generation speed, and newer CLI builds add explicit token budgets for bounded work | Token-based |
30
30
  | Sandbox restrictions | Yes — configurable allowlists | Session-dependent; supports deny-read policies, isolated `codex exec`, named permission profiles, managed requirements, and explicit approval policies | None — full system access |
31
31
 
32
32
  ---
@@ -57,6 +57,8 @@ Codex was last checked against app update `26.602`, CLI `0.137.0`, OpenAI's GPT-
57
57
  | Hosted site deployment | Codex | Sites preview can create, deploy, inspect, and manage hosted websites or internal tools through the Codex app |
58
58
  | Plugin marketplace inventory | Codex | Plugin directory plus `codex plugin list --json` for installed plugin inventory and marketplace-aware diagnostics |
59
59
  | Goal mode | Codex | Stable long-running objective mode with dedicated state; candidate for OACP wait/review-loop experiments |
60
+ | Record & Replay | Codex | Mac desktop workflows can be recorded and converted into reusable skills; candidate for private skill capture after privacy review |
61
+ | Current-time reminders | Codex | CLI can remind agents of current time/date context; useful for protocol work with relative dates and scheduled waits |
60
62
 
61
63
  ---
62
64
 
@@ -97,6 +99,7 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
97
99
  | Context limits | Auto-compaction mitigates | Model-dependent; GPT-5.5 in Codex is 400K, but there is no documented auto-compaction behavior | Large but finite |
98
100
  | No terminal stdin | Yes | — | — |
99
101
  | Cost not surfaced | — | Yes | — |
102
+ | Permanent session delete | — | `codex delete` is available; use archive/unarchive for routine cleanup and reserve delete for explicit destructive cleanup | — |
100
103
  | Serving model can change mid-session | Yes (Fable 5 only — cyber/bio-chem/distillation classifiers fall back to Opus 4.8; default and non-configurable in Claude interfaces incl. Claude Code, with a session event emitted; <5% of sessions — system card §1.5) | — | — |
101
104
 
102
105
  ---
@@ -135,16 +138,17 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
135
138
  | Workflow file format | SKILL.md with YAML frontmatter | SKILL.md with YAML frontmatter | Markdown with YAML frontmatter |
136
139
  | Policy visibility at runtime | Partial (sandbox config visible) | Yes (session policy, approval policy, sandbox, and named permission profiles) | Yes (`SafeToAutoRun` flags) |
137
140
  | Long-running shell sessions | Bash tool (no stdin) | Yes (PTY + stdin; multiple terminals in app) | Yes (`send_command_input`) |
138
- | App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, archive/thread APIs, schema generation) | No |
141
+ | App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, archive/thread APIs, schema generation, remote execution improvements, and multi-agent continuation surfaces) | No |
139
142
  | Hosted site deployment | No | Yes (Sites preview, app-only/cloud-hosted with separate secret management) | No |
143
+ | Desktop workflow capture | No | Yes (Record & Replay on Mac; privacy-sensitive and best treated as private-skill capture until reviewed) | No |
140
144
 
141
145
  ---
142
146
 
143
147
  ## 8. Source Notes
144
148
 
145
149
  - GPT-5.5 Codex availability, 400K context, Fast mode, token-efficiency, and API timing come from OpenAI's 2026-04-23 release note: <https://openai.com/index/introducing-gpt-5-5/>.
146
- - Codex app/CLI capability changes through app `26.602` and CLI `0.137.0` come from OpenAI's Codex changelog: <https://developers.openai.com/codex/changelog>.
147
- - Sites, Amazon Bedrock, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
150
+ - Codex app/CLI capability changes through app `26.616`, CLI `0.142.3`, and the local desktop app `26.623.31921` come from OpenAI's Codex changelog and local Codex runtime checks: <https://developers.openai.com/codex/changelog>.
151
+ - Sites, Amazon Bedrock, Remote, Record & Replay, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
148
152
  - Claude Fable 5 release date, pricing, and plan-inclusion window come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>. Safeguard-fallback behavior comes from the Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards"): client apps and Claude interfaces auto-fall back to Opus 4.8 (default and non-configurable in interfaces, session event emitted), while the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback. The serving model in the header was verified in-session by the Claude runtime.
149
153
 
150
154
  ---
@@ -80,7 +80,6 @@ For Claude Code projects, copy templates into the repo's `.claude/` directory:
80
80
  # From the oacp repo root:
81
81
  cp templates/claude/agents/role_agent.template.md /path/to/repo/.claude/agents/<role>.md
82
82
  cp templates/claude/rules/guardrail.template.md /path/to/repo/.claude/rules/guardrails.md
83
- cp templates/claude/skills/session_lifecycle.template.md /path/to/repo/.claude/skills/lifecycle/SKILL.md
84
83
  ```
85
84
 
86
85
  ## 5) Initialize packet files (source checkout only)
@@ -179,7 +179,7 @@ Once both runtimes can resolve a shared skill path (e.g., `shared/skills/<name>/
179
179
 
180
180
  ## Example: check-inbox (unified)
181
181
 
182
- See the current Claude and Codex implementations:
182
+ See the current Claude and Codex implementations in the [oacp-skills](https://github.com/kiloloop/oacp-skills) repo:
183
183
  - `claude/skills/check-inbox/SKILL.md`
184
184
  - `codex/skills/check-inbox/SKILL.md`
185
185
 
@@ -0,0 +1,65 @@
1
+ # Versioning Guide
2
+
3
+ The `oacp-cli` package follows semantic versioning:
4
+
5
+ - `v0.x.y` while the CLI surface and protocol are still stabilizing.
6
+ - `v1.0.0` once format fields and loop controls are stable.
7
+
8
+ ## Change Types
9
+
10
+ - Patch (`x.y.Z`): wording fixes, non-breaking docs improvements.
11
+ - Minor (`x.Y.0`): new optional fields/templates/scripts.
12
+ - Major (`X.0.0`): breaking template/protocol changes.
13
+
14
+ ## Where the Version Lives
15
+
16
+ `pyproject.toml` is the single source of truth. `oacp/__init__.py` resolves
17
+ `__version__` at runtime via `importlib.metadata`, so `oacp --version` always
18
+ reports the installed package version — the version number itself is edited in
19
+ exactly one file (the release-bump PR also adds the matching `CHANGELOG.md`
20
+ section, see below).
21
+
22
+ ## Release Pipeline
23
+
24
+ Releases flow through a staged promotion: development repo → private staging
25
+ repo (soak) → public repo (`kiloloop/oacp`) → PyPI. Every repository content
26
+ change lands via a reviewed pull request (branch protection enforces squash
27
+ merges and rejects direct pushes); the one non-PR step is the release tag
28
+ itself, which triggers the publish workflow.
29
+
30
+ 1. **Pre-export audit** — run `make preflight ARGS="--full"` (conflict-marker
31
+ scan, Makefile checks, YAML validation, ruff, shellcheck, full test suite),
32
+ then scan for leaks: hardcoded user paths, private repository references,
33
+ secret patterns, and SPDX headers on all tracked Python files. All checks
34
+ must pass before anything is exported.
35
+ 2. **Version bump PR** — update the `version` in `pyproject.toml` and add a
36
+ `CHANGELOG.md` section in [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
37
+ format. Gather the changes with `git log --oneline <last-tag>..HEAD`.
38
+ 3. **Export to staging** — open a staging PR mirroring the development branch.
39
+ The export copies the tracked tree only (`git archive`), so gitignored
40
+ local files never leave the development machine; rerun the leak audit on
41
+ the staged tree before merging. Non-urgent releases soak here before
42
+ promotion; urgent fixes may skip the soak.
43
+ 4. **Promote to public** — open a promotion PR into `kiloloop/oacp` under the
44
+ release automation identity; a human reviews and merges it. The squash
45
+ commit message becomes permanent public history — keep it free of internal
46
+ references (the PR description alone is not what gets published).
47
+ 5. **Tag and publish** — push an annotated `vX.Y.Z` tag to the public repo
48
+ (a direct tag push, not a PR). The tag-triggered release workflow reruns
49
+ the checks, builds the sdist/wheel, publishes `oacp-cli` to PyPI via
50
+ [Trusted Publishing](https://docs.pypi.org/trusted-publishers/) (OIDC — no
51
+ long-lived API tokens), and creates the GitHub Release with notes from the
52
+ CHANGELOG section.
53
+ 6. **Verify** — check the version-pinned endpoint
54
+ `https://pypi.org/pypi/oacp-cli/<version>/json` first; the unversioned
55
+ "latest" endpoint and the pip simple index can lag a few minutes behind it.
56
+ Then install and confirm `oacp --version` prints the new version. On a
57
+ machine with an existing uv-managed install, replace it explicitly —
58
+ `uv cache prune`, `uv tool uninstall oacp-cli`, then
59
+ `uv tool install oacp-cli==<version> --no-cache`; the short
60
+ `uv tool install` form is only reliable in a clean tool environment.
61
+
62
+ ## Doc-Only Changes
63
+
64
+ Documentation-only updates promote through the same two-PR staging path
65
+ (staging PR plus public PR) with no version bump, no tag, and no PyPI publish.