oacp-cli 0.4.0__tar.gz → 0.4.2__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 (366) hide show
  1. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.github/workflows/release.yml +1 -1
  2. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/CHANGELOG.md +167 -0
  3. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/PKG-INFO +1 -1
  4. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/doctor.md +4 -0
  5. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/runtime_capability_matrix.md +35 -30
  6. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/autonomy.md +196 -20
  7. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/inbox_outbox.md +5 -3
  8. oacp_cli-0.4.2/docs/protocol/message_signing.md +383 -0
  9. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/pyproject.toml +2 -1
  10. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/_oacp_constants.py +6 -1
  11. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/agent_profile.py +9 -3
  12. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/autonomy_gate.py +423 -29
  13. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/claude_envelope_hook.py +650 -30
  14. oacp_cli-0.4.2/scripts/envelope_compiler.py +736 -0
  15. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/message_signing.py +67 -19
  16. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/message_verify.py +313 -31
  17. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_doctor.py +275 -12
  18. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_inbox.py +108 -25
  19. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_watch.py +67 -13
  20. oacp_cli-0.4.2/scripts/policy_signing.py +643 -0
  21. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/send_inbox_message.py +48 -10
  22. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/trust_cli.py +120 -6
  23. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/trust_root.py +234 -31
  24. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +1 -0
  25. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +1 -0
  26. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/negated_guardrails.yaml +9 -3
  27. oacp_cli-0.4.2/tests/conformance/intake/README.md +26 -0
  28. oacp_cli-0.4.2/tests/conformance/intake/configs/enforce.yaml +17 -0
  29. oacp_cli-0.4.2/tests/conformance/intake/configs/off.yaml +17 -0
  30. oacp_cli-0.4.2/tests/conformance/intake/configs/warn.yaml +17 -0
  31. oacp_cli-0.4.2/tests/conformance/intake/expected/signed_basic__enforce.yaml +9 -0
  32. oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__enforce.yaml +9 -0
  33. oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__off.yaml +9 -0
  34. oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__warn.yaml +9 -0
  35. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +9 -0
  36. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__off.yaml +9 -0
  37. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +9 -0
  38. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +9 -0
  39. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +9 -0
  40. oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +9 -0
  41. oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +9 -0
  42. oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__off.yaml +9 -0
  43. oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__warn.yaml +9 -0
  44. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_autonomy_gate.py +375 -0
  45. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_claude_envelope_hook.py +706 -1
  46. oacp_cli-0.4.2/tests/test_default_envelope.py +173 -0
  47. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_envelope_compiler.py +150 -0
  48. oacp_cli-0.4.2/tests/test_envelope_public_admission.py +394 -0
  49. oacp_cli-0.4.2/tests/test_inbox_verify.py +424 -0
  50. oacp_cli-0.4.2/tests/test_intake_conformance.py +133 -0
  51. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_message_verify.py +2 -2
  52. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_constants.py +23 -1
  53. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_doctor.py +305 -2
  54. oacp_cli-0.4.2/tests/test_policy_signing.py +555 -0
  55. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_trust_root.py +21 -0
  56. oacp_cli-0.4.0/docs/protocol/message_signing.md +0 -212
  57. oacp_cli-0.4.0/scripts/envelope_compiler.py +0 -373
  58. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.gitattributes +0 -0
  59. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.github/workflows/ci.yml +0 -0
  60. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.gitignore +0 -0
  61. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/CONTRIBUTING.md +0 -0
  62. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/LICENSE +0 -0
  63. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/Makefile +0 -0
  64. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/QUICKSTART.md +0 -0
  65. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/README.md +0 -0
  66. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/SECURITY.md +0 -0
  67. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/SPEC.md +0 -0
  68. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/from-claude-p.md +0 -0
  69. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/adoption.md +0 -0
  70. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/prompt_caching.md +0 -0
  71. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/setup.md +0 -0
  72. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/unified_skill_spec.md +0 -0
  73. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/versioning.md +0 -0
  74. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-cli-demo.png +0 -0
  75. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-filesystem-tree.png +0 -0
  76. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-fleet-thread.png +0 -0
  77. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/agent_profiles.md +0 -0
  78. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/agent_safety_defaults.md +0 -0
  79. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/credential_scoping.md +0 -0
  80. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/cross_runtime_sync.md +0 -0
  81. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/dispatch_states.yaml +0 -0
  82. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/mcp_integration.md +0 -0
  83. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/multi_agent_shared_workspace.md +0 -0
  84. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/org_memory.md +0 -0
  85. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/packet_states.yaml +0 -0
  86. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/review_loop.md +0 -0
  87. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/runtime_capabilities.md +0 -0
  88. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/session_init.md +0 -0
  89. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/skills_manifest.yaml +0 -0
  90. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/task_negotiation.md +0 -0
  91. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/README.md +0 -0
  92. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/decisions.md +0 -0
  93. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
  94. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
  95. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
  96. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
  97. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
  98. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
  99. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/recent.md +0 -0
  100. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/rules.md +0 -0
  101. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
  102. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
  103. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
  104. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
  105. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
  106. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/quickstart/README.md +0 -0
  107. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/mcp_servers/oacp_coordinator.py +0 -0
  108. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/__init__.py +0 -0
  109. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/cli.py +0 -0
  110. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/envelope_hook.py +0 -0
  111. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/_oacp_env.py +0 -0
  112. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/add_agent.py +0 -0
  113. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/check_quality_gate.py +0 -0
  114. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/codex_session_init.py +0 -0
  115. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/create_handoff_packet.py +0 -0
  116. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/handoff_schema.py +0 -0
  117. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_org_memory.py +0 -0
  118. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_packet.sh +0 -0
  119. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_project_workspace.py +0 -0
  120. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_project_workspace.sh +0 -0
  121. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/key_cli.py +0 -0
  122. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_archive_common.py +0 -0
  123. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_cli.py +0 -0
  124. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_sync.py +0 -0
  125. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/normalize_findings.py +0 -0
  126. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/preflight.py +0 -0
  127. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/promote_to_archive.py +0 -0
  128. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/record_autonomy_outcome.py +0 -0
  129. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/restore_from_archive.py +0 -0
  130. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/session_lifecycle_hooks.py +0 -0
  131. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/setup_runtime.py +0 -0
  132. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/update_workspace.sh +0 -0
  133. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/validate_agent_card.py +0 -0
  134. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/validate_message.py +0 -0
  135. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/write_event.py +0 -0
  136. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_card.template.yaml +0 -0
  137. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_profile.template.yaml +0 -0
  138. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_status.template.yaml +0 -0
  139. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/checkpoint.template.md +0 -0
  140. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/claude/agents/role_agent.template.md +0 -0
  141. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/claude/rules/guardrail.template.md +0 -0
  142. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/findings_packet.template.yaml +0 -0
  143. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/github_actions_quality_gate.yaml +0 -0
  144. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/coding_standards.template.md +0 -0
  145. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/safe_commands.template.md +0 -0
  146. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/secrets_rules.template.md +0 -0
  147. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/handoff_packet.template.yaml +0 -0
  148. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/inbox_message.template.yaml +0 -0
  149. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/manual_validation.template.md +0 -0
  150. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/merge_decision.template.md +0 -0
  151. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/decisions.md +0 -0
  152. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/events/.gitkeep +0 -0
  153. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
  154. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/recent.md +0 -0
  155. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/rules.md +0 -0
  156. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/receiver_config.template.yaml +0 -0
  157. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/review_packet.template.md +0 -0
  158. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/roles/role_baseline.template.md +0 -0
  159. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/roles/role_definition.template.yaml +0 -0
  160. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/runtime_capabilities.yaml +0 -0
  161. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/skills_manifest.template.yaml +0 -0
  162. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/test_packet.template.md +0 -0
  163. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/README.md +0 -0
  164. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
  165. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
  166. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
  167. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
  168. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
  169. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
  170. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
  171. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
  172. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
  173. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
  174. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
  175. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
  176. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
  177. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
  178. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
  179. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
  180. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
  181. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
  182. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
  183. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
  184. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
  185. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
  186. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
  187. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
  188. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
  189. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
  190. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
  191. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
  192. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
  193. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
  194. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
  195. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
  196. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
  197. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
  198. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
  199. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
  200. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
  201. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
  202. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
  203. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
  204. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
  205. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
  206. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
  207. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
  208. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
  209. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
  210. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
  211. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
  212. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
  213. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
  214. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
  215. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
  216. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
  217. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
  218. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
  219. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
  220. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
  221. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
  222. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
  223. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
  224. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
  225. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
  226. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
  227. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
  228. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
  229. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
  230. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
  231. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
  232. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
  233. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
  234. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
  235. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
  236. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
  237. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
  238. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
  239. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
  240. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
  241. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
  242. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
  243. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
  244. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
  245. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
  246. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
  247. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
  248. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
  249. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
  250. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
  251. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
  252. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
  253. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
  254. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
  255. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
  256. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
  257. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
  258. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
  259. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
  260. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
  261. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
  262. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
  263. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
  264. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
  265. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
  266. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
  267. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/README.md +0 -0
  268. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
  269. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/configs/malformed.yaml +0 -0
  270. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
  271. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
  272. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +0 -0
  273. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
  274. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
  275. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
  276. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
  277. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
  278. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
  279. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
  280. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
  281. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
  282. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
  283. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/README.md +0 -0
  284. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
  285. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
  286. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
  287. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
  288. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
  289. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
  290. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
  291. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
  292. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
  293. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
  294. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
  295. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
  296. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
  297. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
  298. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
  299. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
  300. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
  301. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
  302. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
  303. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
  304. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
  305. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
  306. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/alice.json +0 -0
  307. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/bob.json +0 -0
  308. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/carol.json +0 -0
  309. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
  310. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
  311. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
  312. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
  313. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
  314. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
  315. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
  316. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
  317. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
  318. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
  319. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
  320. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
  321. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
  322. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
  323. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
  324. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
  325. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
  326. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
  327. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
  328. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
  329. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
  330. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
  331. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
  332. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
  333. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
  334. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
  335. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
  336. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
  337. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/regen_fixtures.py +0 -0
  338. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_add_agent.py +0 -0
  339. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_agent_profile.py +0 -0
  340. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_autonomy_conformance_fixtures.py +0 -0
  341. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_codex_session_init.py +0 -0
  342. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_create_handoff_packet.py +0 -0
  343. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_envelope_conformance_fixtures.py +0 -0
  344. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_github_workflows.py +0 -0
  345. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_handoff_schema.py +0 -0
  346. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_init_project_workspace.py +0 -0
  347. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_memory_archive.py +0 -0
  348. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_memory_sync.py +0 -0
  349. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_message_signing.py +0 -0
  350. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_cli.py +0 -0
  351. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_coordinator.py +0 -0
  352. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_env.py +0 -0
  353. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_inbox.py +0 -0
  354. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_watch.py +0 -0
  355. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_preflight.py +0 -0
  356. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_record_autonomy_outcome.py +0 -0
  357. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_review_loop.py +0 -0
  358. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_send_inbox_message.py +0 -0
  359. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_session_lifecycle_hooks.py +0 -0
  360. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_setup_runtime.py +0 -0
  361. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_signing_conformance.py +0 -0
  362. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_update_workspace.py +0 -0
  363. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_validate_agent_card.py +0 -0
  364. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_validate_message.py +0 -0
  365. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_workspace_discovery.py +0 -0
  366. {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_write_event.py +0 -0
@@ -32,7 +32,7 @@ jobs:
32
32
  - name: Install Python dependencies
33
33
  run: |
34
34
  python -m pip install --upgrade pip
35
- python -m pip install -e . build pytest ruff
35
+ python -m pip install -e ".[crypto]" build pytest ruff
36
36
 
37
37
  - name: Run quality gate
38
38
  run: make preflight ARGS="--full"
@@ -5,6 +5,171 @@ 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.4.2] - 2026-08-07
9
+
10
+ ### Added
11
+
12
+ - Profileless admitted requests now receive a documented **default scope
13
+ envelope** instead of running unbounded: 25 minutes / 2 files /
14
+ reply-only, every capability and risk flag false, `risk_tier` mirroring
15
+ the message's declared priority (else `P2`). `allow_without_task_profile`
16
+ is thereby an admission-only exemption — the sender needn't author a
17
+ profile, but the bound always exists, and the post-accept threshold
18
+ checkpoint is always evaluable. A sender-attached voluntary profile on an
19
+ exempt type is the documented override path and replaces the default
20
+ entirely. Every decision names its envelope origin in the new
21
+ `scope_envelope_source` field (`task_profile` / `default_profileless`),
22
+ and `scope_envelope: null` on an admitted record is now a schema
23
+ violation the audit writer refuses to persist. Protocol spec version
24
+ bumps to 0.4.2.
25
+ - Admitted public-visibility tasks gain an explicit, recorded enforcement
26
+ branch: `oacp envelope compile --audit <admission-record>` on a
27
+ `public_visibility: true` task whose record carries a human admission
28
+ approval deliberately does **not** compile (a compiled public envelope
29
+ denies the entire approved chain) and instead stamps
30
+ `envelope_enforcement: none` with the named reason
31
+ `public_visibility_admission_approved` into the audit record — the
32
+ degradation is a documented mode with the human as the bound, not a
33
+ silent absence. The approval record is treated as authorization:
34
+ `--audit` must resolve inside the receiver's canonical admission audit
35
+ directory, the record must be an admission-paused record bound to the
36
+ exact verified message snapshot (`message_sha256`) with a recorded
37
+ `approved`/`modified` outcome, eligibility and the stamp consume one
38
+ locked read, and the branch fails closed while any envelope is active
39
+ for the receiver. Unapproved public tasks and all private tasks are
40
+ unaffected and keep the fail-closed compile path.
41
+ - `signing.verify_mode: enforce` is now a real mode with a real caller.
42
+ The autonomy gate invokes verification at message intake, before any
43
+ evaluation: under enforce, only a `signed-verified` message proceeds —
44
+ every other outcome (unsigned, INVALID, unknown-kid, revoked,
45
+ unverifiable) quarantines a mode-600 evidence copy into the receiver's
46
+ `dead_letter/`, evaluates nothing, and exits `3` with an
47
+ `intake_rejected` decision object. Rejection is mechanism, not
48
+ per-receiver diligence; previously the mode silently degraded to warn
49
+ and nothing on the receive path consumed it. Warn and off behavior are
50
+ unchanged. The receive-path contract is pinned by a new executable
51
+ conformance corpus at `tests/conformance/intake/` (four failure classes
52
+ under each mode, plus a signed-verified positive control).
53
+ - Policy-file signing: `oacp trust sign-policy` signs a receiver's
54
+ `config.yaml` and `trust/allowed_signers.yaml` with the receiver's own
55
+ local key, under a distinct JOSE profile (`oacp-policy+yaml` /
56
+ `urn:oacp:policy:v1`) so message and policy signatures can never be
57
+ exchanged. Loaders verify at load time: audit records now carry a
58
+ `policy_auth` block binding `policy_sha256` to an authorized signer; a
59
+ tampered `config.yaml` fails closed with the new pinned reason code
60
+ `policy_auth_invalid` before anything — including its own
61
+ `verify_mode` — reads it, and a tampered `allowed_signers.yaml` makes
62
+ the trust root unusable (under enforce, everything then rejects).
63
+ Unsigned policy files remain loadable with the unsigned state recorded
64
+ (bootstrap: init → key gen → sign-policy).
65
+ - Policy signatures bind their target context — `{project, receiver,
66
+ kind}` in the protected header — so a signed policy can never be
67
+ replayed across projects, receivers, or between `config.yaml` and
68
+ `allowed_signers.yaml`. `sign-policy` also enrolls each target in a
69
+ machine-local registry (`$OACP_HOME/keys/policy_enrollment.json`):
70
+ once enrolled, a policy file without a verifiable signature is
71
+ `invalid`, never `unsigned` — stripping a trailer stops being a
72
+ downgrade path. Trust mutations (`trust import` / `revoke`)
73
+ atomically re-sign an enrolled trust root or refuse the write.
74
+ - Single-read snapshot discipline on every receiver read path: the gate,
75
+ the trust-root load, and all policy consumers (envelope compiler, send
76
+ helper, trust mutations, inbox lister) verify and parse ONE bounded
77
+ read of each security-sensitive file, closing the window where a
78
+ config, message, or pins file could be swapped between its
79
+ verification and its use. The audit record's `message_sha256` now
80
+ names the verified snapshot bytes.
81
+ - Every non-gate inbox read path goes through one shared receive
82
+ boundary (verify one bounded snapshot before parsing it): the `oacp
83
+ inbox` lister, the `oacp watch` event emitter, the send helper's
84
+ parent-message lookup, and the trust drift report's traffic probe.
85
+ Under `enforce`, an unverified message surfaces as a held row/event
86
+ built from filesystem metadata only (no attacker-controlled field is
87
+ parsed or surfaced), never donates thread identity to replies, and
88
+ never counts as sender liveness; under `warn` rows and events carry
89
+ the verification status. A receiver config that fails policy
90
+ authorization cannot choose a weaker mode — these paths fail closed
91
+ to enforce. The envelope compiler refuses to compile from a message
92
+ that is not signed-verified under enforce, and the envelope's
93
+ `message_sha256` names the verified snapshot. `oacp trust list` and
94
+ doctor readiness calculations load policy files through the
95
+ authorized loader; `oacp doctor` reports per-receiver policy-file
96
+ authorization status.
97
+
98
+ ### Fixed
99
+
100
+ - Intake conformance tests now skip goldens that pin a
101
+ signature-evaluation outcome when the optional cryptography dependency
102
+ is not installed, restoring the suite's graceful degradation without
103
+ the `[crypto]` extra. The release quality gate installs the extra so
104
+ the full signing matrix runs before publishing.
105
+ - Agent enumeration now consistently ignores hidden directories under
106
+ `agents/`, preventing runtime scaffolding such as `.claude/.cc-writes` from
107
+ appearing as phantom agents in doctor, inbox, profile, and trust workflows.
108
+ - Autonomy-gate negation demotion now recognizes common scope language and
109
+ carries unambiguous negation headings over their immediately following,
110
+ bounded block. Blank lines and subsequent headings end that scope, while
111
+ non-demotable side-effect and content-sensitivity hard stops remain hard.
112
+ - Claude envelope enforcement now allows a reconstructed Edit/Write change
113
+ confined to the project's own `[project] version` string in
114
+ `pyproject.toml` under `touches_dependencies: false`, while counting the
115
+ file and continuing to deny real dependency, mixed, ambiguous, and
116
+ Bash-side manifest edits.
117
+ - The foreign-session read-only `oacp envelope show` exemption now recognizes
118
+ argparse-equivalent `--option=value` spellings, unambiguous long-option
119
+ abbreviations, and help flags without weakening its fail-closed handling of
120
+ unknown options.
121
+ - Autonomy audit records now resolve `runtime.model` at the writer instead
122
+ of defaulting to a silent null. The serving model resolves caller-first
123
+ (an explicit `runtime.model` on the decision), then from the
124
+ `OACP_RUNTIME_MODEL` environment variable exported by the invoking
125
+ session, and is normalized at write time: case variants fold to
126
+ lowercase, and `[context]` suffixes split into the base id plus a
127
+ separate `model_context` field. `model_source` names the provenance and
128
+ `model_raw` preserves any input the normalization changed. Records with
129
+ no signal carry an explicit `model_unknown_reason` — never a silent
130
+ null — and the requested model (harness configuration) is never used as
131
+ a fallback. Historical records are not backfilled.
132
+ - The autonomy audit writer now validates `result.completion_kind` against
133
+ the pinned enum at write time, refusing to persist decisions that carry
134
+ a caller-composed off-enum kind.
135
+
136
+ ## [0.4.1] - 2026-08-04
137
+
138
+ ### Fixed
139
+
140
+ - Receiver configs that omit the `autonomy` block, such as signing-only
141
+ configs, now preserve the same conservative `always_pause` behavior as an
142
+ absent config file. Doctor reports the config as valid, and the autonomy
143
+ evaluator records the normal `admission_paused` / `mode_always_pause`
144
+ fingerprint instead of treating the config as malformed.
145
+ - The Claude envelope hook now splits compound Bash commands only at shell
146
+ operators outside quoted arguments and command substitutions, so read-only
147
+ patterns containing literal pipes and backslash-newline continuations no
148
+ longer produce false escalation while later mutating segments remain gated.
149
+ Its conservative parser fallback recognizes only a small, redirect-free
150
+ read-only command set. Every emitted ask or deny reason now starts with the
151
+ stable `[oacp-envelope]` source tag and includes the active task message id
152
+ when available, making hook prompts distinguishable from harness prompts.
153
+ - Envelope enforcement is now session-scoped. The compiled envelope
154
+ records the harness session that compiled it (via a hook-observed
155
+ session claim consumed by the compiler), and the Claude adapter
156
+ no-ops for tool calls from any other session — a concurrent
157
+ interactive session in the same repository no longer inherits a
158
+ dispatched task's constraints or consumes its `files_touched`
159
+ budget. Envelopes compiled without a resolvable session (un-hooked
160
+ runtimes, or callers the harness gave no session id) stay unbound
161
+ and keep the historical whole-workspace enforcement scope, and
162
+ same-task recompiles — including a post-re-authorization
163
+ `--extend` from outside the bound session — inherit the existing
164
+ binding.
165
+ - The autonomy gate evaluator now persists complete, lock-serialized
166
+ audit records to the `--audit-dir` destination; previously an
167
+ evaluation could finish without writing the durable record.
168
+ - `oacp doctor` now reports trust-pin completeness per receiver and
169
+ gates enforce-mode signing readiness on it: every catalog identity
170
+ must carry an active pin before a receiver flips to enforce, with
171
+ gaps broken down per receiver in doctor output.
172
+
8
173
  ## [0.4.0] - 2026-07-17
9
174
 
10
175
  ### Added
@@ -537,6 +702,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
537
702
  - Checkout step in github-release workflow job (#19)
538
703
  - Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
539
704
 
705
+ [0.4.2]: https://github.com/kiloloop/oacp/compare/v0.4.1...v0.4.2
706
+ [0.4.1]: https://github.com/kiloloop/oacp/compare/v0.4.0...v0.4.1
540
707
  [0.4.0]: https://github.com/kiloloop/oacp/compare/v0.3.5...v0.4.0
541
708
  [0.3.5]: https://github.com/kiloloop/oacp/compare/v0.3.4...v0.3.5
542
709
  [0.3.4]: https://github.com/kiloloop/oacp/compare/v0.3.3...v0.3.4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oacp-cli
3
- Version: 0.4.0
3
+ Version: 0.4.2
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
@@ -35,6 +35,10 @@ Checks the project directory structure under `$OACP_HOME/projects/<name>/`.
35
35
  - **workspace.json** — must exist and contain valid JSON
36
36
  - **agents/ directory** — must exist; reports the number of registered agents
37
37
 
38
+ Agent discovery ignores hidden directories directly under `agents/`. Tooling
39
+ scaffolding such as `agents/.claude/.cc-writes/` is therefore not counted or
40
+ checked as a phantom agent if a runtime creates it in that location.
41
+
38
42
  ### 3. Inbox Health
39
43
 
40
44
  Scans each agent's `inbox/` directory for pending messages and staleness.
@@ -1,12 +1,12 @@
1
1
  # Cross-Runtime Parity Matrix
2
2
 
3
- **Date**: 2026-06-26
3
+ **Date**: 2026-08-03
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
- 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.
7
+ Claude was last checked against Claude Code `v2.1.220` (verified in-session 2026-08-03 via `claude --version`) 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 now included in Max and Team Premium plan usage as part of the shared weekly limit pool (the launch-window free-inclusion/credit period has ended); the API rate is $10/$50 per MTok. Claude Opus 5 (`claude-opus-5`, released 2026-07-24) is the current Opus tier at $5/$25 per MTok with the same 1M context; Opus 4.8 remains available at the same price and remains the safeguard-fallback target for Fable 5's classifier fallbacks (unchanged by the Opus 5 release).
8
8
 
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.
9
+ Codex was last checked against app update `26.727`, stable CLI `0.146.0`, GPT-5.6, and the OpenAI Codex/API changelog entries through 2026-07-30. Runtime availability remains configuration-dependent: standard multi-agent support and memories are stable, while multi-agent V2, token budgets, current-time reminders, and remote Code Mode may still require explicit enablement or experimental configuration.
10
10
 
11
11
  ---
12
12
 
@@ -15,18 +15,19 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
15
15
  | Capability | Claude (Claude Code CLI) | Codex (Desktop App) | Gemini |
16
16
  | ---------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
17
17
  | Spawn background tasks | Yes — Task tool + Bash `run_in_background` | Yes — shell background processes | Yes — `run_command` async mode |
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
- | 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 |
18
+ | Spawn subagents | Yes — typed agents (Explore, Plan, general-purpose, code-reviewer, etc.) | Yes — stable native multi-agent lifecycle with runtime metadata and follow-up controls | Partial — `browser_subagent` only |
19
+ | Parallel agent teams | Yes — TeamCreate, task lists, SendMessage, broadcast | Partial — parallel delegation is supported; opt-in multi-agent V2 adds configurable models, reasoning, concurrency, and roles, but there is no shared team/task-list primitive | No — parallel tool calls but no independent agent instances |
20
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
- | 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) |
22
+ | Browser interaction | Partial — WebFetch (read-only, HTML→markdown) | Configuration-dependent — Browser and Chrome plugins can navigate, click, type, inspect, and capture approved contexts; history search remains separately permissioned | 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
- | Git operations | Yes — via Bash (may need sandbox configuration) | Yes — native | Yes — via shell |
24
+ | Multi-folder projects | Manual workspace composition | Yes — the primary folder controls new chats, Git, and automatic instruction/skill/config discovery; secondary folders provide file access | Manual workspace composition |
25
+ | Git operations | Yes — via Bash (may need sandbox configuration) | Yes — native; in a multi-folder project, operations are rooted in the primary folder | Yes — via shell |
25
26
  | GitHub CLI (gh) | Yes — via Bash (may need sandbox configuration) | Yes — authenticated | Yes — native |
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, archive/unarchive/delete flows, and token-budget-aware long-running work | Yes — chat with task UI, artifacts |
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, and newer CLI builds add explicit token budgets for bounded work | Token-based |
27
+ | Session memory | Strong — auto-loaded MEMORY.md + optional MCP memory | Partial — stable generated app memories plus OACP file memory; app memories are not protocol SSOT | Partial — Knowledge Items (not directly writable), conversation logs |
28
+ | Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan and Goal modes, named and pinned sessions, side-chat switching, forks, and archive/unarchive/delete flows | Yes — chat with task UI, artifacts |
29
+ | Context window | ~1M across the current lineup (Fable 5, Opus 5, Opus 4.8); auto-compaction extends indefinitely | Model-dependent; GPT-5.6 Sol, Terra, and Luna are documented at 272K | ~1M tokens |
30
+ | Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× the $5/$25 shared by Opus 5 and Opus 4.8) | ChatGPT sessions do not surface per-session cost; API Fast mode for Sol trades 2× price for up to 2.5× speed, while Terra and Luna target lower-cost work | Token-based |
30
31
  | 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
32
 
32
33
  ---
@@ -41,8 +42,8 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
41
42
  | Plan mode | Claude, Codex | Claude has structured explore → plan → approve → implement; Codex CLI can move from planning into fresh-context implementation |
42
43
  | Auto-compaction | Claude | Context auto-compresses, enabling unlimited session length |
43
44
  | Cross-session semantic search | Claude | MCP-based searchable memory (optional) |
44
- | Browser automation (full) | Gemini | Click, type, navigate, screenshot, WebP video recording |
45
- | GPT-5.5 model availability | Codex | Available in Codex for Plus, Pro, Business, Enterprise, Edu, and Go plans with a 400K context window |
45
+ | Browser automation | Codex, Gemini | Codex Browser/Chrome plugins can click, type, navigate, inspect, and capture approved contexts; Gemini also supports WebP video recording |
46
+ | GPT-5.6 model family | Codex | Sol, Terra, and Luna provide task-tier choices with a documented 272K context window |
46
47
  | Image generation | Codex, Gemini | Codex CLI image generation is enabled by default; Gemini has native `generate_image` |
47
48
  | URL content reading (no browser) | Gemini | `read_url_content` fetches HTML→markdown or PDF directly |
48
49
  | Code outline navigation | Gemini | `view_file_outline`, `view_code_item` for structured exploration |
@@ -53,12 +54,14 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
53
54
  | Remote host control | Codex | Mobile or desktop remote control can run work on connected Mac or Windows hosts with host-local files, credentials, plugins, skills, and config |
54
55
  | App-level artifact review | Codex | Sidebar preview for generated PDFs, spreadsheets, documents, and presentations |
55
56
  | App-level PR review | Codex | PR sidebar can inspect changed files, review comments, and follow-up fixes |
56
- | App-server automation | Codex | JSON-RPC app-server, SDK, schema generation, thread APIs, and websocket/Unix-socket transports for custom clients |
57
+ | Multi-folder projects | Codex | One project can span repositories; the primary folder owns Git and automatic instruction, skill, and config discovery, while secondary folders are file-access-only |
58
+ | Session organization | Codex | CLI/TUI supports named and pinned sessions, side-chat switching, archive/unarchive, deletion, and temporary or persisted forks |
59
+ | App-server automation | Codex | JSON-RPC app-server, SDK, schema generation, thread APIs, and authenticated WebSocket/Unix-socket/stdio transports; remote Code Mode remains experimental |
57
60
  | Hosted site deployment | Codex | Sites preview can create, deploy, inspect, and manage hosted websites or internal tools through the Codex app |
58
- | Plugin marketplace inventory | Codex | Plugin directory plus `codex plugin list --json` for installed plugin inventory and marketplace-aware diagnostics |
61
+ | Plugin marketplace inventory | Codex | Agent Plugin manifests, workspace publishing, additional marketplaces, and `codex plugin list --json`; availability and trust remain configuration-dependent |
59
62
  | Goal mode | Codex | Stable long-running objective mode with dedicated state; candidate for OACP wait/review-loop experiments |
60
63
  | 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 |
64
+ | Current-time reminders | Codex | Announced CLI surface for relative-date work; feature availability must be checked before workflow dependence |
62
65
 
63
66
  ---
64
67
 
@@ -80,9 +83,9 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
80
83
 
81
84
  | Dimension | Claude | Codex | Gemini |
82
85
  | --------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------- |
83
- | Best at | Orchestration, multi-agent teams, persistent memory, plan-then-execute | Terminal-native execution, GPT-5.5 agentic coding, fast iterative patching, plan-to-implementation handoff, app-assisted PR/artifact review, app-server automation, protocol discipline | Web research, browser automation, visual verification, large context |
86
+ | Best at | Orchestration, multi-agent teams, persistent memory, plan-then-execute | Terminal-native execution, GPT-5.6 agentic coding, fast iterative patching, native delegation, plan-to-implementation handoff, app-assisted review, app-server automation, protocol discipline | Web research, browser automation, visual verification, large context |
84
87
  | Ideal task type | Team coordination, complex multi-file refactors, long-running sessions | Shell-heavy workflows, long-horizon coding, targeted file edits, deterministic scripts, PR follow-up, artifact review, CLI planning passes, plugin/app-server automation prototypes | External research, UI testing, document review, MCP integrations |
85
- | Cost profile | Flexible (haiku subagents for cheap tasks, opus for complex, Fable 5 at 2× Opus API rates for the hardest work) | Per-session cost not visible; GPT-5.5 is described as more token-efficient than GPT-5.4 for Codex tasks | Token-based, web search has additional costs |
88
+ | Cost profile | Flexible (haiku subagents for cheap tasks, opus for complex, Fable 5 at 2× Opus API rates for the hardest work) | Per-session ChatGPT cost not visible; Sol, Terra, and Luna provide quality/speed/cost tiers, with API Fast mode available for Sol | Token-based, web search has additional costs |
86
89
 
87
90
  ---
88
91
 
@@ -90,17 +93,17 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
90
93
 
91
94
  | Limitation | Claude | Codex | Gemini |
92
95
  | ----------------------------- | ----------------------------- | -------------------------------------------------------------- | ---------------------- |
93
- | No subagents | — | Yes | Partial (browser only) |
94
- | No browser automation | Yes (read-only) | Partial (in-app browser and Chrome extension are useful for review/verification, but not a general full-browser automation substitute) | — |
96
+ | No subagents | — | — | Partial (browser only) |
97
+ | No browser automation | Yes (read-only) | Configuration-dependent — Browser/Chrome plugins and an approved context are required | — |
95
98
  | No image generation | Yes | — | — |
96
99
  | No persistent writable memory | — | Partial (app memories are not a replacement for OACP durable memory) | Yes |
97
100
  | Sandbox friction | Yes (configurable) | Session-dependent | — |
98
- | No team primitive | — | Yes | Yes |
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 |
101
+ | No team primitive | — | Partial — native parallel delegation exists, but not a shared task-list/broadcast primitive | Yes |
102
+ | Context limits | Auto-compaction mitigates | GPT-5.6 Sol, Terra, and Luna are 272K; compaction behavior is runtime-dependent | Large but finite |
100
103
  | No terminal stdin | Yes | — | — |
101
104
  | Cost not surfaced | — | Yes | — |
102
105
  | Permanent session delete | — | `codex delete` is available; use archive/unarchive for routine cleanup and reserve delete for explicit destructive cleanup | — |
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) | — | — |
106
+ | Serving model can change mid-session | Yes (Fable 5 only — cyber/bio-chem/distillation classifiers fall back to Opus 4.8, a target unchanged by the Opus 5 release; enabled by default and user-configurable in Claude interfaces — off-toggle in Settings > Capabilities, or Config > MODEL & OUTPUT in Claude Code, after which a flagged request pauses instead of switching; a session event is emitted on switch; <5% of sessions) | — | — |
104
107
 
105
108
  ---
106
109
 
@@ -110,10 +113,10 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
110
113
 
111
114
  | Gap | Affected Runtime(s) | Impact | Proposed Fix |
112
115
  | --------------------------- | ---------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
113
- | No team orchestration | Codex, Gemini | Cannot run parallel agent teams | Agent cards — let runtimes discover and delegate to capable peers |
116
+ | No shared team/task-list primitive | Codex, Gemini | Codex can delegate in parallel but lacks Claude-style shared task lists and broadcast; Gemini lacks independent general agents | Agent cards — let runtimes discover and delegate to capable peers |
114
117
  | Memory asymmetry | Codex (partial), Gemini (KIs only) | Cross-session context degrades without MEMORY.md equivalent | Standardize memory protocol; each runtime implements its own persistence layer |
115
118
  | Sandbox blocks git/gh | Claude | Every git/gh call needs sandbox configuration | Configure sandbox allowlists or disable sandbox for specific commands |
116
- | Full browser automation gap | Claude, Codex | Claude is read-only; Codex has stronger browser review and Chrome-extension support but not full autonomous browser automation | Delegate full browser tasks to Gemini; use Codex browser/Chrome workflows for local, public, or approved signed-in page review |
119
+ | Full browser automation gap | Claude; Codex without Browser/Chrome plugins | Claude is read-only; Codex browser control depends on installed plugins and an approved browser context | Delegate to a browser-capable runtime or enable the scoped Codex browser surface after privacy review |
117
120
  | Reviewer cost | All (especially Claude) | High cost for single PR review with polling pattern | Stateless reviewer rounds — one round per invocation |
118
121
  | Public skill coverage | Gemini | `kiloloop/oacp-skills` ships `claude/` and `codex/` variants for all 5 public skills; no `gemini/` variants — Gemini users must rely on convention-based adoption | Add `gemini/` variants to each public skill, or document the convention-based pattern as a first-class install path |
119
122
 
@@ -124,7 +127,7 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
124
127
  | Dimension | Claude | Codex | Gemini |
125
128
  | ---------------------------- | -------------------------------- | ------------------------------------------ | --------------------------------------------- |
126
129
  | Max parallel tool calls | ~10+ | Yes (parallel independent calls) | ~10 (practical) |
127
- | Side conversations | No | Yes (`/side` in CLI/TUI) | No |
130
+ | Side conversations | No | Yes — named/pinned sessions and side-chat switching in CLI/TUI | No |
128
131
  | Hooks system | Yes (pre/post tool call hooks) | Yes (stable hooks and extension lifecycle hooks; plugin-bundled hooks are configuration-dependent) | No |
129
132
  | Automation scheduling | Yes (`CronCreate`, `ScheduleWakeup`, `/loop`, `/schedule` skills) | Yes (desktop app thread automations, Goal mode, and app-server/SDK automation surfaces) | No |
130
133
  | Notebook editing | Yes (NotebookEdit tool) | No | No |
@@ -138,7 +141,8 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
138
141
  | Workflow file format | SKILL.md with YAML frontmatter | SKILL.md with YAML frontmatter | Markdown with YAML frontmatter |
139
142
  | Policy visibility at runtime | Partial (sandbox config visible) | Yes (session policy, approval policy, sandbox, and named permission profiles) | Yes (`SafeToAutoRun` flags) |
140
143
  | Long-running shell sessions | Bash tool (no stdin) | Yes (PTY + stdin; multiple terminals in app) | Yes (`send_command_input`) |
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 |
144
+ | App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, thread/fork APIs, authenticated WebSocket/Unix/stdio transports, and experimental remote Code Mode) | No |
145
+ | Multi-folder projects | No native primary-folder model | Yes (primary folder owns Git and automatic instruction/config discovery; secondary folders are file-access-only) | No native primary-folder model |
142
146
  | Hosted site deployment | No | Yes (Sites preview, app-only/cloud-hosted with separate secret management) | No |
143
147
  | Desktop workflow capture | No | Yes (Record & Replay on Mac; privacy-sensitive and best treated as private-skill capture until reviewed) | No |
144
148
 
@@ -146,10 +150,11 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
146
150
 
147
151
  ## 8. Source Notes
148
152
 
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/>.
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>.
153
+ - GPT-5.6 model availability, the corrected 272K context window, stable memories and multi-agent support, session organization, Agent Plugins, multi-folder behavior, browser/Chrome changes, and app-server transports come from OpenAI's Codex changelog: <https://developers.openai.com/codex/changelog>.
154
+ - Codex app/CLI capability changes are reviewed through app `26.727` and stable CLI `0.146.0`; workstation-specific alpha versions are intentionally kept out of this public matrix.
155
+ - GPT-5.6 API model and pricing changes through 2026-07-30 come from the OpenAI API changelog: <https://developers.openai.com/api/docs/changelog>.
151
156
  - Sites, Amazon Bedrock, Remote, Record & Replay, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
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.
157
+ - Claude Fable 5 release date and pricing come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>; the current plan-inclusion posture (Max/Team Premium shared weekly pool, launch promo ended) reflects Anthropic's plan policy as of 2026-07-20. Claude Opus 5 model ID, pricing ($5/$25 per MTok), 1M context, and its release as the current Opus tier were re-verified 2026-08-03 against Anthropic's model documentation (models overview + migration guide at <https://platform.claude.com/docs/en/about-claude/models/overview.md>): Opus 5 is a drop-in at Opus 4.8's pricing, and Opus 4.8 stays available. Present-day interface fallback behavior comes from Anthropic's Help Center article "Why Claude switched models in your conversation with Fable 5" (2026-07-01, verified 2026-08-04): automatic switching to Opus 4.8 is enabled by default and user-configurable — Settings > Capabilities in the apps, Config > MODEL & OUTPUT in Claude Code ("Switch models when a message is flagged" toggle); with it off, a flagged request pauses the conversation. The Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards") remains the source for the safeguard design, the observed fallback-rate/session-event facts, and the API posture: the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback — whose category-routed default likewise targets Opus 4.8 for cyber-class refusals, so the fallback target is unchanged post-Opus-5. The serving model (claude-fable-5) and Claude Code version (v2.1.220) in the header were verified in-session by the Claude runtime on 2026-08-03.
153
158
 
154
159
  ---
155
160