oacp-cli 0.3.1__tar.gz → 0.3.3__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 (187) hide show
  1. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/CHANGELOG.md +41 -1
  2. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/PKG-INFO +17 -5
  3. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/QUICKSTART.md +57 -16
  4. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/README.md +16 -4
  5. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/SPEC.md +21 -9
  6. oacp_cli-0.3.3/docs/from-claude-p.md +151 -0
  7. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/prompt_caching.md +8 -6
  8. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/runtime_capability_matrix.md +35 -22
  9. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/setup.md +7 -1
  10. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/agent_safety_defaults.md +6 -4
  11. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/autonomy.md +115 -6
  12. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/credential_scoping.md +1 -1
  13. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/cross_runtime_sync.md +1 -1
  14. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/inbox_outbox.md +16 -4
  15. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/review_loop.md +1 -1
  16. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/runtime_capabilities.md +19 -19
  17. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/session_init.md +1 -1
  18. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/skills_manifest.yaml +2 -2
  19. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/task_negotiation.md +4 -1
  20. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/pyproject.toml +2 -1
  21. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/_oacp_constants.py +2 -2
  22. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/agent_profile.py +1 -1
  23. oacp_cli-0.3.3/scripts/autonomy_gate.py +691 -0
  24. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_project_workspace.py +1 -1
  25. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_doctor.py +10 -0
  26. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_inbox.py +8 -4
  27. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_watch.py +24 -1
  28. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/send_inbox_message.py +29 -6
  29. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/setup_runtime.py +63 -5
  30. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_card.template.yaml +1 -1
  31. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_profile.template.yaml +1 -1
  32. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_status.template.yaml +1 -1
  33. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/secrets_rules.template.md +1 -1
  34. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/receiver_config.template.yaml +4 -0
  35. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/roles/role_baseline.template.md +1 -1
  36. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/runtime_capabilities.yaml +7 -0
  37. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/skills_manifest.template.yaml +3 -3
  38. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/README.md +7 -0
  39. oacp_cli-0.3.3/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +6 -0
  40. oacp_cli-0.3.3/tests/conformance/autonomy/actuals/continuation_drift.yaml +6 -0
  41. oacp_cli-0.3.3/tests/conformance/autonomy/actuals/continuation_within.yaml +6 -0
  42. oacp_cli-0.3.3/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +5 -0
  43. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/always_pause.yaml +2 -0
  44. oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_standard.yaml → oacp_cli-0.3.3/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +2 -0
  45. oacp_cli-0.3.3/tests/conformance/autonomy/configs/auto_review_standard.yaml +15 -0
  46. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/auto_review_tight.yaml +2 -0
  47. oacp_cli-0.3.3/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +9 -0
  48. oacp_cli-0.3.3/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +18 -0
  49. oacp_cli-0.3.3/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +16 -0
  50. oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +9 -0
  51. oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +14 -0
  52. oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +18 -0
  53. oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +26 -0
  54. oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +10 -0
  55. oacp_cli-0.3.3/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +9 -0
  56. oacp_cli-0.3.3/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +15 -0
  57. oacp_cli-0.3.3/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +8 -0
  58. oacp_cli-0.3.3/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +11 -0
  59. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +2 -1
  60. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +1 -1
  61. oacp_cli-0.3.3/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +27 -0
  62. oacp_cli-0.3.3/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +9 -0
  63. oacp_cli-0.3.3/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +10 -0
  64. oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant.yaml +33 -0
  65. oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +33 -0
  66. oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +33 -0
  67. oacp_cli-0.3.3/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +20 -0
  68. oacp_cli-0.3.3/tests/conformance/autonomy/messages/path_like_deploy.yaml +20 -0
  69. oacp_cli-0.3.3/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +9 -0
  70. oacp_cli-0.3.3/tests/conformance/autonomy/messages/side_effect_booleans.yaml +24 -0
  71. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_add_agent.py +16 -0
  72. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_agent_profile.py +1 -1
  73. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_autonomy_conformance_fixtures.py +6 -0
  74. oacp_cli-0.3.3/tests/test_autonomy_gate.py +83 -0
  75. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_init_project_workspace.py +14 -2
  76. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_memory_archive.py +2 -0
  77. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_doctor.py +36 -0
  78. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_inbox.py +37 -0
  79. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_watch.py +63 -0
  80. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_send_inbox_message.py +133 -0
  81. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_session_lifecycle_hooks.py +24 -0
  82. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_setup_runtime.py +92 -0
  83. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_validate_agent_card.py +1 -1
  84. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.github/workflows/ci.yml +0 -0
  85. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.github/workflows/release.yml +0 -0
  86. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.gitignore +0 -0
  87. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/CONTRIBUTING.md +0 -0
  88. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/LICENSE +0 -0
  89. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/Makefile +0 -0
  90. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/SECURITY.md +0 -0
  91. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/adoption.md +0 -0
  92. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/doctor.md +0 -0
  93. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/unified_skill_spec.md +0 -0
  94. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/versioning.md +0 -0
  95. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-cli-demo.png +0 -0
  96. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-filesystem-tree.png +0 -0
  97. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-fleet-thread.png +0 -0
  98. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/agent_profiles.md +0 -0
  99. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/dispatch_states.yaml +0 -0
  100. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/mcp_integration.md +0 -0
  101. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  102. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/org_memory.md +0 -0
  103. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/packet_states.yaml +0 -0
  104. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/examples/quickstart/README.md +0 -0
  105. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/mcp_servers/oacp_coordinator.py +0 -0
  106. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/oacp/__init__.py +0 -0
  107. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/oacp/cli.py +0 -0
  108. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/_oacp_env.py +0 -0
  109. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/add_agent.py +0 -0
  110. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/check_quality_gate.py +0 -0
  111. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/codex_session_init.py +0 -0
  112. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/create_handoff_packet.py +0 -0
  113. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/handoff_schema.py +0 -0
  114. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_org_memory.py +0 -0
  115. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_packet.sh +0 -0
  116. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_project_workspace.sh +0 -0
  117. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_archive_common.py +0 -0
  118. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_cli.py +0 -0
  119. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_sync.py +0 -0
  120. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/normalize_findings.py +0 -0
  121. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/preflight.py +0 -0
  122. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/promote_to_archive.py +0 -0
  123. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/restore_from_archive.py +0 -0
  124. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/session_lifecycle_hooks.py +0 -0
  125. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/update_workspace.sh +0 -0
  126. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/validate_agent_card.py +0 -0
  127. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/validate_message.py +0 -0
  128. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/write_event.py +0 -0
  129. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/checkpoint.template.md +0 -0
  130. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/claude/agents/role_agent.template.md +0 -0
  131. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/claude/rules/guardrail.template.md +0 -0
  132. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/findings_packet.template.yaml +0 -0
  133. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/github_actions_quality_gate.yaml +0 -0
  134. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/coding_standards.template.md +0 -0
  135. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/safe_commands.template.md +0 -0
  136. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/handoff_packet.template.yaml +0 -0
  137. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/inbox_message.template.yaml +0 -0
  138. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/manual_validation.template.md +0 -0
  139. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/merge_decision.template.md +0 -0
  140. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/decisions.md +0 -0
  141. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/events/.gitkeep +0 -0
  142. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  143. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/recent.md +0 -0
  144. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/rules.md +0 -0
  145. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/review_packet.template.md +0 -0
  146. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/roles/role_definition.template.yaml +0 -0
  147. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/test_packet.template.md +0 -0
  148. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  149. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  150. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  151. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
  152. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
  153. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  154. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  155. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  156. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  157. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  158. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  159. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  160. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  161. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  162. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  163. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  164. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  165. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  166. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
  167. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  168. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  169. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  170. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
  171. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  172. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  173. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  174. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_codex_session_init.py +0 -0
  175. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_create_handoff_packet.py +0 -0
  176. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_github_workflows.py +0 -0
  177. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_handoff_schema.py +0 -0
  178. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_cli.py +0 -0
  179. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_constants.py +0 -0
  180. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_coordinator.py +0 -0
  181. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_env.py +0 -0
  182. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_preflight.py +0 -0
  183. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_review_loop.py +0 -0
  184. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_update_workspace.py +0 -0
  185. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_validate_message.py +0 -0
  186. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_workspace_discovery.py +0 -0
  187. {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_write_event.py +0 -0
@@ -5,7 +5,45 @@ 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]
8
+ ## [0.3.3] - 2026-06-11
9
+
10
+ ### Added
11
+
12
+ - `oacp watch --state-id <id>` for per-subscriber cursor files, allowing
13
+ concurrent watchers of the same agent inbox to receive the same new-message
14
+ events without sharing a cursor.
15
+
16
+ ### Changed
17
+
18
+ - Docs: refreshed the runtime capability matrix and prompt-caching guidance
19
+ for current runtime releases.
20
+
21
+ ### Fixed
22
+
23
+ - `oacp send --oacp-dir` and `oacp inbox --oacp-dir` now expand `~` through the
24
+ shared OACP home resolver instead of treating it as a literal path component.
25
+ - Inbox and outbox delivery writes now use same-directory temp files plus
26
+ atomic replace so readers do not observe partial `.yaml` messages.
27
+ - Memory archive tests now isolate git config while preserving test identities,
28
+ so local commit-signing settings do not break the suite.
29
+
30
+ ## [0.3.2] - 2026-05-26
31
+
32
+ ### Added
33
+
34
+ - Receiver autonomy scope-envelope evaluator with side-effect booleans,
35
+ threshold-checkpoint instrumentation, taxonomy pinning, and default-off
36
+ continuation grants.
37
+ - `cursor` runtime support for agent profiles, agent cards, status validation, sender inference via `OACP_RUNTIME=cursor`, `oacp add-agent --runtime cursor`, and `oacp setup cursor`.
38
+ - `oacp setup cursor --project <project>` now provisions the project-side Cursor agent directory and writes a repo-local `.cursor/rules/oacp.todo.mdc` placeholder while Cursor-owned rules and memory hooks remain deferred.
39
+
40
+ ### Changed
41
+
42
+ - `oacp init` now defaults to `claude,codex,cursor`; Gemini remains supported through `--agents` and `oacp setup gemini`.
43
+ - Receiver autonomy docs and templates now use the current
44
+ `agents/<receiver>/config.yaml` schema.
45
+ - Docs: added an asynchronous `claude -p` on-ramp guide and refreshed the
46
+ quickstart for the current CLI surface.
9
47
 
10
48
  ## [0.3.1] - 2026-05-12
11
49
 
@@ -142,6 +180,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
142
180
  - Checkout step in github-release workflow job (#19)
143
181
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
144
182
 
183
+ [0.3.3]: https://github.com/kiloloop/oacp/compare/v0.3.2...v0.3.3
184
+ [0.3.2]: https://github.com/kiloloop/oacp/compare/v0.3.1...v0.3.2
145
185
  [0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
146
186
  [0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
147
187
  [0.2.3]: https://github.com/kiloloop/oacp/compare/v0.2.2...v0.2.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oacp-cli
3
- Version: 0.3.1
3
+ Version: 0.3.3
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
@@ -30,6 +30,7 @@ Description-Content-Type: text/markdown
30
30
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
31
31
  [![Claude Code](https://img.shields.io/badge/Runtime-Claude_Code-6B4FBB.svg)](https://claude.ai/code)
32
32
  [![Codex](https://img.shields.io/badge/Runtime-Codex-74AA9C.svg)](https://openai.com/index/codex/)
33
+ [![Cursor](https://img.shields.io/badge/Runtime-Cursor-222222.svg)](https://cursor.com/)
33
34
  [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen)](https://github.com/kiloloop/oacp/pulls)
34
35
 
35
36
  > Coordinate agents *without* the chaos.
@@ -39,7 +40,7 @@ A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent
39
40
  [Read the spec →](SPEC.md)
40
41
 
41
42
  ```bash
42
- $ pip install oacp-cli
43
+ $ uv tool install oacp-cli
43
44
  ```
44
45
 
45
46
  ## See it in action
@@ -122,12 +123,15 @@ $OACP_HOME/org-memory/ org-wide
122
123
  ## Quick Start
123
124
 
124
125
  ```bash
125
- pip install oacp-cli
126
+ uv tool install oacp-cli
126
127
  oacp init my-project --agents alice,bob
127
128
  oacp send my-project --from alice --to bob --type task_request \
128
129
  --subject "Implement feature X" --body "Details here..."
129
130
  ```
130
131
 
132
+ By default, `oacp init my-project` creates `claude`, `codex`, and `cursor`
133
+ agents. Pass `--agents` to include Gemini or custom agent names.
134
+
131
135
  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.
132
136
 
133
137
  ### What you get
@@ -140,6 +144,14 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
140
144
  - **Agent safety defaults** — baseline rules for git, credentials, and scope discipline
141
145
  - **Runtime-agnostic** — works with any runtime that reads/writes files
142
146
 
147
+ ## Coming from `claude -p`?
148
+
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.
150
+
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.
152
+
153
+ **[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
+
143
155
  ## Try It Now
144
156
 
145
157
  After installing, run `oacp doctor` to verify your environment is wired up:
@@ -241,7 +253,7 @@ uv tool install .
241
253
  |---------|-------------|
242
254
  | `oacp init` | Create a project workspace under `$OACP_HOME/projects/` |
243
255
  | `oacp add-agent` | Add an agent to an existing project workspace |
244
- | `oacp setup` | Generate runtime-specific config files (Claude, Codex, etc.) |
256
+ | `oacp setup` | Generate runtime-specific config files (Claude, Codex, Cursor, Gemini) |
245
257
  | `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
246
258
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
247
259
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
@@ -258,7 +270,7 @@ uv tool install .
258
270
 
259
271
  **`oacp send`**: `--in-reply-to`, `--expires`, `--body-file`, `--channel`, `--dry-run`, `--json`, `--quiet`
260
272
 
261
- **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
273
+ **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--state-id <id>` for per-subscriber cursors, `--show-archived`
262
274
 
263
275
  **`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
264
276
 
@@ -34,10 +34,10 @@ pipx install oacp-cli
34
34
  Every project gets its own workspace with agent inboxes, shared memory, and packet directories.
35
35
 
36
36
  ```bash
37
- oacp init my-first-project --agents claude,codex,gemini --repo /path/to/repo
37
+ oacp init my-first-project --agents claude,codex,cursor --repo /path/to/repo
38
38
  ```
39
39
 
40
- Or with defaults (agents: claude, codex, gemini):
40
+ Or with defaults (agents: claude, codex, cursor):
41
41
 
42
42
  ```bash
43
43
  oacp init my-first-project
@@ -54,7 +54,7 @@ $OACP_HOME/projects/my-first-project/
54
54
  │ ├── codex/
55
55
  │ │ ├── inbox/
56
56
  │ │ └── outbox/
57
- │ └── gemini/
57
+ │ └── cursor/
58
58
  │ ├── inbox/
59
59
  │ └── outbox/
60
60
  ├── memory/
@@ -72,24 +72,37 @@ $OACP_HOME/projects/my-first-project/
72
72
 
73
73
  ## 4. Connect Your Runtime
74
74
 
75
- Tell your agent runtime where the OACP workspace lives.
75
+ Run the runtime setup command from the repo you want the agent to work in:
76
76
 
77
- **Claude Code** — add the OACP workspace path to your project's `CLAUDE.md`:
77
+ ```bash
78
+ cd /path/to/repo
79
+ oacp setup <runtime> --project my-first-project
80
+ ```
81
+
82
+ For Claude Code:
78
83
 
79
- ```markdown
80
- ## OACP
81
- OACP workspace: $OACP_HOME/projects/my-first-project/
82
- Check inbox: ls $OACP_HOME/projects/my-first-project/agents/claude/inbox/
84
+ ```bash
85
+ oacp setup claude --project my-first-project
83
86
  ```
84
87
 
85
- **Codex** — add the workspace path to your repo's `AGENTS.md`:
88
+ This creates or updates:
89
+
90
+ - `.claude/agents/my-first-project.md`
91
+ - `.claude/skills/`
92
+ - `.claude/hooks/oacp-memory-pull.sh`
93
+ - `.claude/hooks/oacp-memory-push.sh`
94
+ - `.claude/settings.json`
86
95
 
87
- ```markdown
88
- ## OACP
89
- OACP workspace: $OACP_HOME/projects/my-first-project/
96
+ For other supported runtimes, use the same shape:
97
+
98
+ ```bash
99
+ oacp setup codex --project my-first-project
100
+ oacp setup cursor --project my-first-project
101
+ oacp setup gemini --project my-first-project
90
102
  ```
91
103
 
92
- **Other runtimes** — point your agent's system prompt at the workspace path and instruct it to read the standard `memory/` files at session start.
104
+ Cursor support is scaffold-only until Cursor-owned rules land. Cursor sessions
105
+ must set `OACP_RUNTIME=cursor` or pass `--from` explicitly when sending messages.
93
106
 
94
107
  For full runtime setup (role templates, guardrails, skills), see [docs/guides/setup.md](docs/guides/setup.md).
95
108
 
@@ -112,6 +125,12 @@ This writes a YAML file to `agents/codex/inbox/` and a copy to `agents/claude/ou
112
125
 
113
126
  See what's waiting for an agent:
114
127
 
128
+ ```bash
129
+ oacp inbox my-first-project --agent codex
130
+ ```
131
+
132
+ Or inspect the inbox directory directly:
133
+
115
134
  ```bash
116
135
  ls "$OACP_HOME/projects/my-first-project/agents/codex/inbox/"
117
136
  ```
@@ -136,6 +155,20 @@ body: |
136
155
  Add POST /login with JWT auth. See docs/api-spec.md for details.
137
156
  ```
138
157
 
158
+ To watch for new messages from a standing runtime or Monitor, use `oacp watch`.
159
+ A single `oacp watch` run scans once and exits, so keep re-running it when you
160
+ want a persistent worker. If more than one watcher follows the same agent
161
+ inbox, give each watcher a stable `--state-id` so each subscriber has its own
162
+ cursor:
163
+
164
+ ```bash
165
+ OACP_WATCH_STATE_ID="${OACP_WATCH_STATE_ID:-$(uuidgen 2>/dev/null || python3 -c 'import uuid; print(uuid.uuid4())')}"
166
+ while true; do
167
+ oacp watch --project my-first-project --agent codex --state-id "$OACP_WATCH_STATE_ID" || true
168
+ sleep 120
169
+ done
170
+ ```
171
+
139
172
  ## 7. Reply
140
173
 
141
174
  Send a response back:
@@ -146,7 +179,7 @@ oacp send my-first-project \
146
179
  --type notification \
147
180
  --subject "Re: Implement login endpoint" \
148
181
  --body "Accepted. Starting implementation on branch codex/login-endpoint." \
149
- --parent-message-id "msg-20260311T120000Z-claude-a1b2"
182
+ --in-reply-to "msg-20260311T120000Z-claude-a1b2"
150
183
  ```
151
184
 
152
185
  ## 8. Validate Messages
@@ -160,13 +193,21 @@ oacp validate \
160
193
 
161
194
  ## 9. Run Health Checks
162
195
 
163
- Verify your environment and workspace are set up correctly:
196
+ Verify your environment first:
164
197
 
165
198
  ```bash
166
199
  oacp doctor
200
+ ```
201
+
202
+ Then check the workspace you just created:
203
+
204
+ ```bash
167
205
  oacp doctor --project my-first-project
168
206
  ```
169
207
 
208
+ Plain `oacp doctor` checks global environment health. The `--project` form also
209
+ checks the project workspace, inboxes, schemas, and agent status files.
210
+
170
211
  ## What's Next?
171
212
 
172
213
  - **Review loop** — Set up structured code review between agents. See [docs/protocol/review_loop.md](docs/protocol/review_loop.md).
@@ -4,6 +4,7 @@
4
4
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
5
5
  [![Claude Code](https://img.shields.io/badge/Runtime-Claude_Code-6B4FBB.svg)](https://claude.ai/code)
6
6
  [![Codex](https://img.shields.io/badge/Runtime-Codex-74AA9C.svg)](https://openai.com/index/codex/)
7
+ [![Cursor](https://img.shields.io/badge/Runtime-Cursor-222222.svg)](https://cursor.com/)
7
8
  [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen)](https://github.com/kiloloop/oacp/pulls)
8
9
 
9
10
  > Coordinate agents *without* the chaos.
@@ -13,7 +14,7 @@ A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent
13
14
  [Read the spec →](SPEC.md)
14
15
 
15
16
  ```bash
16
- $ pip install oacp-cli
17
+ $ uv tool install oacp-cli
17
18
  ```
18
19
 
19
20
  ## See it in action
@@ -96,12 +97,15 @@ $OACP_HOME/org-memory/ org-wide
96
97
  ## Quick Start
97
98
 
98
99
  ```bash
99
- pip install oacp-cli
100
+ uv tool install oacp-cli
100
101
  oacp init my-project --agents alice,bob
101
102
  oacp send my-project --from alice --to bob --type task_request \
102
103
  --subject "Implement feature X" --body "Details here..."
103
104
  ```
104
105
 
106
+ By default, `oacp init my-project` creates `claude`, `codex`, and `cursor`
107
+ agents. Pass `--agents` to include Gemini or custom agent names.
108
+
105
109
  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.
106
110
 
107
111
  ### What you get
@@ -114,6 +118,14 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
114
118
  - **Agent safety defaults** — baseline rules for git, credentials, and scope discipline
115
119
  - **Runtime-agnostic** — works with any runtime that reads/writes files
116
120
 
121
+ ## Coming from `claude -p`?
122
+
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.
124
+
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.
126
+
127
+ **[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
+
117
129
  ## Try It Now
118
130
 
119
131
  After installing, run `oacp doctor` to verify your environment is wired up:
@@ -215,7 +227,7 @@ uv tool install .
215
227
  |---------|-------------|
216
228
  | `oacp init` | Create a project workspace under `$OACP_HOME/projects/` |
217
229
  | `oacp add-agent` | Add an agent to an existing project workspace |
218
- | `oacp setup` | Generate runtime-specific config files (Claude, Codex, etc.) |
230
+ | `oacp setup` | Generate runtime-specific config files (Claude, Codex, Cursor, Gemini) |
219
231
  | `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
220
232
  | `oacp inbox` | List pending messages across agents (table or `--json`) |
221
233
  | `oacp watch` | Emit inbox delta events for one agent across selected projects |
@@ -232,7 +244,7 @@ uv tool install .
232
244
 
233
245
  **`oacp send`**: `--in-reply-to`, `--expires`, `--body-file`, `--channel`, `--dry-run`, `--json`, `--quiet`
234
246
 
235
- **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
247
+ **`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--state-id <id>` for per-subscriber cursors, `--show-archived`
236
248
 
237
249
  **`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
238
250
 
@@ -3,7 +3,7 @@
3
3
  **Version**: 0.2.0
4
4
  **License**: Apache-2.0
5
5
 
6
- This document is the protocol specification for OACP (Open Agent Coordination Protocol) — a file-based coordination layer for multi-agent engineering workflows. It defines the message formats, state machines, review processes, and safety rules that enable agents on different runtimes (Claude, Codex, Gemini, or any future runtime) to collaborate asynchronously through a shared filesystem.
6
+ This document is the protocol specification for OACP (Open Agent Coordination Protocol) — a file-based coordination layer for multi-agent engineering workflows. It defines the message formats, state machines, review processes, and safety rules that enable agents on different runtimes (Claude, Codex, Cursor, Gemini, or any future runtime) to collaborate asynchronously through a shared filesystem.
7
7
 
8
8
  OACP is not a framework or SDK. It is a set of conventions, YAML schemas, and shell scripts that any agent runtime can implement.
9
9
 
@@ -47,7 +47,7 @@ $OACP_HOME/
47
47
  │ │ ├── inbox/
48
48
  │ │ ├── outbox/
49
49
  │ │ └── ...
50
- │ └── gemini/
50
+ │ └── cursor/
51
51
  │ └── ...
52
52
  ├── memory/ # Shared durable memory
53
53
  │ ├── project_facts.md
@@ -86,6 +86,9 @@ remain authoritative: local autonomy config, message content, safety defaults,
86
86
  and runtime/tool permissions determine whether a message can be accepted without
87
87
  interactive human confirmation.
88
88
 
89
+ Receiver autonomy is defined by `agents/<receiver>/config.yaml` and the
90
+ scope-envelope contract in [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
91
+
89
92
  ### Message Types
90
93
 
91
94
  | Type | Purpose | Response Expected |
@@ -224,6 +227,12 @@ reason_codes:
224
227
  - risk_threshold_passed
225
228
  ```
226
229
 
230
+ Autonomy audit results use a stable terminal-state taxonomy
231
+ (`done`, `paused`, `blocked`, `superseded`, `error`) plus
232
+ `completion_kind` for detailed outcomes. Post-acceptance scope drift is recorded
233
+ through the threshold checkpoint described in
234
+ [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
235
+
227
236
  ### Brainstorm Lifecycle
228
237
 
229
238
  Brainstorm messages follow a simpler lifecycle: `received` → `researching` → `report_delivered`. No PR, no review loop. The dispatcher sees: `Sent` → `In progress` → `Responded`.
@@ -422,7 +431,7 @@ Credential scoping: [`docs/protocol/credential_scoping.md`](docs/protocol/creden
422
431
 
423
432
  ### Baseline Rules
424
433
 
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.
434
+ These defaults apply to all agents (Claude, Codex, Cursor, Gemini) unless a project-level config explicitly overrides a specific rule. Safety defaults can only be made **stricter** by project rules, never relaxed.
426
435
 
427
436
  Autonomy introduces a separate receiver acceptance policy layer; it does not
428
437
  relax the safety floor. OACP distinguishes three layers:
@@ -438,12 +447,14 @@ relax the safety floor. OACP distinguishes three layers:
438
447
  after acceptance, such as editor edit approval, shell sandboxing, or Codex
439
448
  approval modes. OACP acceptance never grants runtime tool permissions.
440
449
 
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.
450
+ Regardless of autonomy mode, receivers must pause on destructive command tokens
451
+ (`rm -rf`, `--force`, `--no-verify`, `--dangerously-skip-permissions`) and on
452
+ actual requests for external side effects or sensitive scope: push, deploy,
453
+ merge, publish, credential rotation, dependency install, auth/config/secrets,
454
+ public repos, pricing/commercial content, or memory SSOT. Profileless message
455
+ types that are explicitly allowed for auto-review may log incidental
456
+ side-effect verb mentions as notes instead of hard stops, but destructive tokens
457
+ and real side-effect requests still pause.
447
458
 
448
459
  #### Git Safety
449
460
 
@@ -639,6 +650,7 @@ Scripts marked **CLI** are exposed as `oacp` subcommands. Scripts marked **scrip
639
650
  | `init_org_memory.py` | Scaffold org-level memory directory | CLI: `oacp org-memory` |
640
651
  | `write_event.py` | Write timestamped events to org-memory | CLI: `oacp write-event` |
641
652
  | `oacp_doctor.py` | Environment and workspace health check (flutter-doctor-style) | CLI: `oacp doctor` |
653
+ | `autonomy_gate.py` | Evaluates receiver autonomy scope-envelope decisions and checkpoint drift | script-only |
642
654
  | `validate_message.py` | Validates inbox/outbox message YAML | CLI: `oacp validate` |
643
655
  | `session_lifecycle_hooks.py` | Session init and close hooks (`init_session`, `close_session`) | CLI-wrapped |
644
656
  | `codex_session_init.py` | Codex startup protocol loader | CLI-wrapped |
@@ -0,0 +1,151 @@
1
+ # From `claude -p` to an interactive Claude Code session
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.
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?**
6
+
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
+
9
+ > **Setup is a one-time ~5 minutes. Every task after that is one `oacp send` — async, non-blocking, on your subscription.**
10
+
11
+ ## The shape of `claude -p`
12
+
13
+ `claude -p "do X"` is synchronous and headless:
14
+
15
+ - it **blocks** — your script waits for the agent to finish
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
18
+
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
+
21
+ ## The other shape
22
+
23
+ Run the agent as a **standing interactive Claude Code session**, and *send* it work.
24
+
25
+ ```
26
+ Before: claude -p "do X"
27
+ blocks · headless · metered after Jun 15
28
+
29
+ After: oacp send → a standing interactive session picks it up
30
+ async · you're not blocked · on your subscription
31
+ ```
32
+
33
+ Concretely — the call that replaces `claude -p "do X"`:
34
+
35
+ ```bash
36
+ oacp send my-project --from sender --to claude --type task_request \
37
+ --subject "do X" --body "...details..."
38
+ ```
39
+
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
+
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.
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.
45
+
46
+ ## Your options, honestly
47
+
48
+ Two real choices if June 15 affects you.
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.
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.
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.
55
+
56
+ ## What OACP is
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.
59
+
60
+ ## Set it up — paste this into your agent
61
+
62
+ Open Claude Code in the repo you want the agent to work in, and paste this in:
63
+
64
+ ~~~
65
+ Set me up as an async OACP worker for this repo.
66
+
67
+ 1. Install the oacp-cli tool if it isn't already installed — check with
68
+ oacp --version. Package and docs: https://github.com/kiloloop/oacp
69
+ 2. Create an OACP project workspace for this repo, named after the repo.
70
+ Give it two agents: "claude" (you, the worker) and "sender" (whoever
71
+ dispatches tasks — my shell, my CI, or another agent).
72
+ 3. Wire this repo for the Claude Code runtime against that project (the
73
+ oacp setup command for the claude runtime).
74
+ 4. Install the companion OACP agent skills from
75
+ https://github.com/kiloloop/oacp-skills — at minimum the check-inbox
76
+ skill, so you know how to process a task when it lands in your inbox.
77
+ 5. Run oacp doctor --project <the project name> and confirm there are
78
+ no issues — plain oacp doctor only checks the environment; the
79
+ --project form checks this workspace's inbox, schema, and status.
80
+ 6. Start a Monitor that keeps oacp watch re-running for the claude
81
+ agent on this project. A single oacp watch does one scan and exits,
82
+ so it has to run on a loop. Use a stable --state-id for that Monitor
83
+ so concurrent watchers each keep their own cursor. Then tell me the
84
+ exact oacp send command I use to dispatch a task to you.
85
+
86
+ Protocol reference: https://github.com/kiloloop/oacp/blob/main/QUICKSTART.md
87
+ ~~~
88
+
89
+ When it finishes, that session is a standing worker, and it has told you your send command. It looks like this (swap `my-project` for whatever it named the project):
90
+
91
+ ```bash
92
+ oacp send my-project --from sender --to claude --type task_request \
93
+ --subject "do X" --body "...details..."
94
+ ```
95
+
96
+ Run that from your shell, your CI, or another agent — anywhere `claude -p` ran. The watcher fires, the session picks up the task, it runs async while you move on.
97
+
98
+ <details>
99
+ <summary>Manual setup — no agent, or you want the exact commands</summary>
100
+
101
+ ```bash
102
+ # install
103
+ uv tool install oacp-cli # or: pipx install oacp-cli
104
+
105
+ # create a workspace — "claude" does the work, "sender" dispatches
106
+ oacp init my-project --agents claude,sender
107
+
108
+ # wire this repo for Claude Code
109
+ oacp setup claude --project my-project
110
+
111
+ # verify the workspace is wired (not just the environment)
112
+ oacp doctor --project my-project
113
+ ```
114
+
115
+ Then, in a Claude Code session, arm the watcher in a Monitor. `oacp watch` does one scan and exits, so it has to run on a loop:
116
+
117
+ ```
118
+ OACP_WATCH_STATE_ID="${OACP_WATCH_STATE_ID:-$(uuidgen 2>/dev/null || python3 -c 'import uuid; print(uuid.uuid4())')}"
119
+ while true; do
120
+ oacp watch --project my-project --agent claude --state-id "$OACP_WATCH_STATE_ID" || true
121
+ sleep 120
122
+ done
123
+ ```
124
+
125
+ Keep that loop running — it's now a standing worker, picking up tasks as they land. Send work with the `oacp send` command above.
126
+
127
+ </details>
128
+
129
+ **On verbosity.** `oacp send` is explicit by design — typed messages, priorities, threading. If you miss `claude -p "X"`, a shell alias closes the gap:
130
+
131
+ ```bash
132
+ oacp-do() {
133
+ oacp send my-project --from sender --to claude --type task_request \
134
+ --subject "$1" --body "${2:-$1}"
135
+ }
136
+ # now: oacp-do "refactor the auth module"
137
+ ```
138
+
139
+ ## Where it fits — and where it doesn't
140
+
141
+ **Fire-and-forget callers** — "build this," "refactor that," an overnight job, a research task. Clean fit. The caller never needed to block; async is strictly better.
142
+
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
+
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.
146
+
147
+ ## Try it
148
+
149
+ Do the setup above in a repo you actually work in, send one real task, watch the session pick it up.
150
+
151
+ If something breaks, the setup is rougher than it should be, or the docs are wrong — **[open an issue](https://github.com/kiloloop/oacp/issues)**. That feedback is what we're after; it's more useful than a star.
@@ -5,8 +5,8 @@ How to maximize prompt cache hits across Claude, Codex, and Gemini to reduce cos
5
5
  ## Why It Matters
6
6
 
7
7
  Prompt caching avoids reprocessing static context (system prompts, CLAUDE.md, project facts) on every turn. In practice:
8
- - **Cache read**: 10x cheaper than uncached input ($1.50/MTok vs $15/MTok for Opus)
9
- - **Cache write**: 1.25x input price (one-time cost, amortized over subsequent reads)
8
+ - **Cache read**: 10x cheaper than uncached input ($0.50/MTok vs $5.00/MTok for Opus 4.8)
9
+ - **Cache write**: 1.25x input price for the default 5-minute TTL, 2x for the 1-hour TTL (one-time cost, amortized over subsequent reads)
10
10
  - **Observed savings**: 83-95% cost reduction on cached input in multi-turn agent sessions
11
11
 
12
12
  ## Claude
@@ -127,13 +127,14 @@ Gemini supports implicit context caching for large prompts. The API automaticall
127
127
 
128
128
  ## Cost Comparison
129
129
 
130
- Approximate pricing as of early 2026 (per million tokens). Check each provider's current pricing page for up-to-date rates:
130
+ Approximate pricing as of June 2026 (per million tokens). Cache read is 0.1x input; cache write is shown at the default 5-minute TTL (1.25x input) — the 1-hour TTL costs 2x input. Check each provider's current pricing page for up-to-date rates:
131
131
 
132
132
  | Runtime | Input | Cached Read | Cache Write | Output |
133
133
  |---------|------:|------------:|------------:|-------:|
134
- | Claude Opus | $15.00 | $1.50 | $18.75 | $75.00 |
135
- | Claude Sonnet | $3.00 | $0.30 | $3.75 | $15.00 |
136
- | Claude Haiku | $0.80 | $0.08 | $1.00 | $4.00 |
134
+ | Claude Fable 5 | $10.00 | $1.00 | $12.50 | $50.00 |
135
+ | Claude Opus (4.6/4.7/4.8) | $5.00 | $0.50 | $6.25 | $25.00 |
136
+ | Claude Sonnet 4.6 | $3.00 | $0.30 | $3.75 | $15.00 |
137
+ | Claude Haiku 4.5 | $1.00 | $0.10 | $1.25 | $5.00 |
137
138
  | Codex | varies | N/A | N/A | varies |
138
139
  | Gemini Pro | $1.25 | $0.31 | — | $10.00 |
139
140
 
@@ -146,3 +147,4 @@ Approximate pricing as of early 2026 (per million tokens). Check each provider's
146
147
  - Injecting timestamps or random IDs into system prompts
147
148
  - Reordering tool definitions between turns
148
149
  - Changing the user message prefix frequently
150
+ 5. **Mind the minimum cacheable prefix** — prefixes below the model minimum silently don't cache (no error; `cache_creation_input_tokens` stays 0). The minimum is 2,048 tokens on Fable 5 and Sonnet 4.6, and 4,096 tokens on Opus 4.8/4.7/4.6 and Haiku 4.5.