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.
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/CHANGELOG.md +41 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/PKG-INFO +17 -5
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/QUICKSTART.md +57 -16
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/README.md +16 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/SPEC.md +21 -9
- oacp_cli-0.3.3/docs/from-claude-p.md +151 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/prompt_caching.md +8 -6
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/runtime_capability_matrix.md +35 -22
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/setup.md +7 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/agent_safety_defaults.md +6 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/autonomy.md +115 -6
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/credential_scoping.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/cross_runtime_sync.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/inbox_outbox.md +16 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/review_loop.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/runtime_capabilities.md +19 -19
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/session_init.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/skills_manifest.yaml +2 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/task_negotiation.md +4 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/pyproject.toml +2 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/_oacp_constants.py +2 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/agent_profile.py +1 -1
- oacp_cli-0.3.3/scripts/autonomy_gate.py +691 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_project_workspace.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_doctor.py +10 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_inbox.py +8 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/oacp_watch.py +24 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/send_inbox_message.py +29 -6
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/setup_runtime.py +63 -5
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_card.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_profile.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/agent_status.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/secrets_rules.template.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/receiver_config.template.yaml +4 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/roles/role_baseline.template.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/runtime_capabilities.yaml +7 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/skills_manifest.template.yaml +3 -3
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/README.md +7 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +6 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/actuals/continuation_drift.yaml +6 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/actuals/continuation_within.yaml +6 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +5 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/always_pause.yaml +2 -0
- 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
- oacp_cli-0.3.3/tests/conformance/autonomy/configs/auto_review_standard.yaml +15 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/auto_review_tight.yaml +2 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +9 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +18 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +16 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +9 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +14 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +18 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +26 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +10 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +9 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +15 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +8 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +11 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +2 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +1 -1
- oacp_cli-0.3.3/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +27 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +9 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +10 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant.yaml +33 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +33 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +33 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +20 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/path_like_deploy.yaml +20 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +9 -0
- oacp_cli-0.3.3/tests/conformance/autonomy/messages/side_effect_booleans.yaml +24 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_add_agent.py +16 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_agent_profile.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_autonomy_conformance_fixtures.py +6 -0
- oacp_cli-0.3.3/tests/test_autonomy_gate.py +83 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_init_project_workspace.py +14 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_memory_archive.py +2 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_doctor.py +36 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_inbox.py +37 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_watch.py +63 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_send_inbox_message.py +133 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_session_lifecycle_hooks.py +24 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_setup_runtime.py +92 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_validate_agent_card.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/.gitignore +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/LICENSE +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/Makefile +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/SECURITY.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/dispatch_states.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/mcp_servers/oacp_coordinator.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/oacp/__init__.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/oacp/cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/add_agent.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/memory_sync.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/preflight.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/update_workspace.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/validate_message.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/scripts/write_event.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/inbox_message.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_coordinator.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_preflight.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_validate_message.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.3}/tests/test_workspace_discovery.py +0 -0
- {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
|
-
## [
|
|
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.
|
|
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)
|
|
31
31
|
[](https://claude.ai/code)
|
|
32
32
|
[](https://openai.com/index/codex/)
|
|
33
|
+
[](https://cursor.com/)
|
|
33
34
|
[](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
|
-
$
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
│ └──
|
|
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
|
-
|
|
75
|
+
Run the runtime setup command from the repo you want the agent to work in:
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
```bash
|
|
78
|
+
cd /path/to/repo
|
|
79
|
+
oacp setup <runtime> --project my-first-project
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For Claude Code:
|
|
78
83
|
|
|
79
|
-
```
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
--
|
|
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
|
|
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)
|
|
5
5
|
[](https://claude.ai/code)
|
|
6
6
|
[](https://openai.com/index/codex/)
|
|
7
|
+
[](https://cursor.com/)
|
|
7
8
|
[](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
|
-
$
|
|
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
|
-
|
|
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,
|
|
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
|
-
│ └──
|
|
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
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
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 ($
|
|
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
|
|
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
|
|
135
|
-
| Claude
|
|
136
|
-
| Claude
|
|
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.
|