oacp-cli 0.3.1__tar.gz → 0.3.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.
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/CHANGELOG.md +18 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/PKG-INFO +16 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/QUICKSTART.md +54 -16
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/README.md +15 -3
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/SPEC.md +21 -9
- oacp_cli-0.3.2/docs/from-claude-p.md +151 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/runtime_capability_matrix.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/setup.md +7 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/agent_safety_defaults.md +6 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/autonomy.md +115 -6
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/credential_scoping.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/cross_runtime_sync.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/inbox_outbox.md +16 -4
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/review_loop.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/runtime_capabilities.md +19 -19
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/session_init.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/skills_manifest.yaml +2 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/pyproject.toml +2 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/_oacp_constants.py +2 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/agent_profile.py +1 -1
- oacp_cli-0.3.2/scripts/autonomy_gate.py +691 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/init_project_workspace.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/oacp_doctor.py +10 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/send_inbox_message.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/setup_runtime.py +63 -5
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/agent_card.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/agent_profile.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/agent_status.template.yaml +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/guardrails/secrets_rules.template.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/receiver_config.template.yaml +4 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/roles/role_baseline.template.md +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/runtime_capabilities.yaml +7 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/skills_manifest.template.yaml +3 -3
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/README.md +7 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +6 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/actuals/continuation_drift.yaml +6 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/actuals/continuation_within.yaml +6 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +5 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/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.2/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +2 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/configs/auto_review_standard.yaml +15 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/configs/auto_review_tight.yaml +2 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +18 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +16 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +14 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +18 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +26 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +10 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +15 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +8 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +11 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +2 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +1 -1
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +27 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +10 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/continuation_grant.yaml +33 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +33 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +33 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/path_like_deploy.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/side_effect_booleans.yaml +24 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_add_agent.py +16 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_agent_profile.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_autonomy_conformance_fixtures.py +6 -0
- oacp_cli-0.3.2/tests/test_autonomy_gate.py +83 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_init_project_workspace.py +14 -2
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_doctor.py +36 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_send_inbox_message.py +4 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_session_lifecycle_hooks.py +24 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_setup_runtime.py +92 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_validate_agent_card.py +1 -1
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/.gitignore +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/LICENSE +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/Makefile +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/SECURITY.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/dispatch_states.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/mcp_servers/oacp_coordinator.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/oacp/__init__.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/oacp/cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/add_agent.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/memory_sync.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/preflight.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/update_workspace.sh +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/validate_message.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/scripts/write_event.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/inbox_message.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_memory_archive.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_coordinator.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_preflight.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_validate_message.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.3.1 → oacp_cli-0.3.2}/tests/test_write_event.py +0 -0
|
@@ -5,7 +5,23 @@ 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.2] - 2026-05-26
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Receiver autonomy scope-envelope evaluator with side-effect booleans,
|
|
13
|
+
threshold-checkpoint instrumentation, taxonomy pinning, and default-off
|
|
14
|
+
continuation grants.
|
|
15
|
+
- `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`.
|
|
16
|
+
- `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.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- `oacp init` now defaults to `claude,codex,cursor`; Gemini remains supported through `--agents` and `oacp setup gemini`.
|
|
21
|
+
- Receiver autonomy docs and templates now use the current
|
|
22
|
+
`agents/<receiver>/config.yaml` schema.
|
|
23
|
+
- Docs: added an asynchronous `claude -p` on-ramp guide and refreshed the
|
|
24
|
+
quickstart for the current CLI surface.
|
|
9
25
|
|
|
10
26
|
## [0.3.1] - 2026-05-12
|
|
11
27
|
|
|
@@ -142,6 +158,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
142
158
|
- Checkout step in github-release workflow job (#19)
|
|
143
159
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
144
160
|
|
|
161
|
+
[0.3.2]: https://github.com/kiloloop/oacp/compare/v0.3.1...v0.3.2
|
|
145
162
|
[0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
|
|
146
163
|
[0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
|
|
147
164
|
[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.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
|
|
@@ -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 |
|
|
@@ -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,17 @@ 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:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
while true; do
|
|
164
|
+
oacp watch --project my-first-project --agent codex || true
|
|
165
|
+
sleep 120
|
|
166
|
+
done
|
|
167
|
+
```
|
|
168
|
+
|
|
139
169
|
## 7. Reply
|
|
140
170
|
|
|
141
171
|
Send a response back:
|
|
@@ -146,7 +176,7 @@ oacp send my-first-project \
|
|
|
146
176
|
--type notification \
|
|
147
177
|
--subject "Re: Implement login endpoint" \
|
|
148
178
|
--body "Accepted. Starting implementation on branch codex/login-endpoint." \
|
|
149
|
-
--
|
|
179
|
+
--in-reply-to "msg-20260311T120000Z-claude-a1b2"
|
|
150
180
|
```
|
|
151
181
|
|
|
152
182
|
## 8. Validate Messages
|
|
@@ -160,13 +190,21 @@ oacp validate \
|
|
|
160
190
|
|
|
161
191
|
## 9. Run Health Checks
|
|
162
192
|
|
|
163
|
-
Verify your environment
|
|
193
|
+
Verify your environment first:
|
|
164
194
|
|
|
165
195
|
```bash
|
|
166
196
|
oacp doctor
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Then check the workspace you just created:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
167
202
|
oacp doctor --project my-first-project
|
|
168
203
|
```
|
|
169
204
|
|
|
205
|
+
Plain `oacp doctor` checks global environment health. The `--project` form also
|
|
206
|
+
checks the project workspace, inboxes, schemas, and agent status files.
|
|
207
|
+
|
|
170
208
|
## What's Next?
|
|
171
209
|
|
|
172
210
|
- **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 |
|
|
@@ -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 — while true; do oacp watch --project
|
|
83
|
+
<project> --agent claude || true; sleep 120; done — otherwise you
|
|
84
|
+
only pick up tasks that happened to be there at setup time. Then
|
|
85
|
+
tell me the exact oacp send command I use to dispatch a task to you.
|
|
86
|
+
|
|
87
|
+
Protocol reference: https://github.com/kiloloop/oacp/blob/main/QUICKSTART.md
|
|
88
|
+
~~~
|
|
89
|
+
|
|
90
|
+
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):
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
oacp send my-project --from sender --to claude --type task_request \
|
|
94
|
+
--subject "do X" --body "...details..."
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
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.
|
|
98
|
+
|
|
99
|
+
<details>
|
|
100
|
+
<summary>Manual setup — no agent, or you want the exact commands</summary>
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# install
|
|
104
|
+
uv tool install oacp-cli # or: pipx install oacp-cli
|
|
105
|
+
|
|
106
|
+
# create a workspace — "claude" does the work, "sender" dispatches
|
|
107
|
+
oacp init my-project --agents claude,sender
|
|
108
|
+
|
|
109
|
+
# wire this repo for Claude Code
|
|
110
|
+
oacp setup claude --project my-project
|
|
111
|
+
|
|
112
|
+
# verify the workspace is wired (not just the environment)
|
|
113
|
+
oacp doctor --project my-project
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
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:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
while true; do
|
|
120
|
+
oacp watch --project my-project --agent claude || 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.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Date**: 2026-04-29
|
|
4
4
|
|
|
5
|
-
This is a capability comparison across
|
|
5
|
+
This is a capability comparison across the currently profiled agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Cursor support is scaffold-only until Cursor-owned onboarding lands, so Cursor is intentionally excluded from this comparison table; see `docs/protocol/runtime_capabilities.md` for its conservative scaffold defaults.
|
|
6
6
|
|
|
7
7
|
Claude was last checked against Claude Code `v2.1.123`.
|
|
8
8
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- `bash` 3.2+ (macOS default) or 4+ (recommended)
|
|
6
6
|
- `python3` 3.9+ (for JSON state management, quality gate scripts, and inbox messaging)
|
|
7
7
|
- `gh` CLI (optional, for GitHub operations — `gh auth login`)
|
|
8
|
-
- Agent runtime CLI: `claude`, `codex`, or `gemini` (depending on your agents)
|
|
8
|
+
- Agent runtime CLI: `claude`, `codex`, `cursor`, or `gemini` (depending on your agents)
|
|
9
9
|
|
|
10
10
|
## 1) Install OACP
|
|
11
11
|
|
|
@@ -38,6 +38,12 @@ pip install -e .
|
|
|
38
38
|
oacp init <project>
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
By default, `oacp init` creates `claude`, `codex`, and `cursor` agents.
|
|
42
|
+
Use `--agents` to include Gemini or custom agent names.
|
|
43
|
+
|
|
44
|
+
Cursor support is scaffold-only until Cursor-owned rules land. Cursor sessions
|
|
45
|
+
must set `OACP_RUNTIME=cursor` or pass `--from` explicitly when sending messages.
|
|
46
|
+
|
|
41
47
|
With artifact symlinks from a repo checkout:
|
|
42
48
|
|
|
43
49
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent Safety Defaults
|
|
2
2
|
|
|
3
|
-
Cross-agent baseline safety rules. All agents (Claude, Codex, Gemini) follow these defaults unless a project-level `AGENTS.md` explicitly overrides a specific rule.
|
|
3
|
+
Cross-agent baseline safety rules. All agents (Claude, Codex, Cursor, Gemini) follow these defaults unless a project-level `AGENTS.md` explicitly overrides a specific rule.
|
|
4
4
|
|
|
5
5
|
## Git Safety
|
|
6
6
|
|
|
@@ -36,14 +36,16 @@ Receiver autonomy controls only whether a message can move from `received` to
|
|
|
36
36
|
`accepted` without interactive human confirmation. It does not relax this safety
|
|
37
37
|
floor.
|
|
38
38
|
|
|
39
|
-
Regardless of autonomy mode, receivers must pause on
|
|
39
|
+
Regardless of autonomy mode, receivers must pause on actual requests for:
|
|
40
40
|
|
|
41
41
|
- Destructive command tokens: `rm -rf`, `--force`, `--no-verify`, `--dangerously-skip-permissions`
|
|
42
42
|
- External side effects: push, deploy, merge, publish, credential rotation, dependency install
|
|
43
43
|
- Sensitive scope: auth, config, secrets, dependencies, public repos, pricing/commercial content, memory SSOT
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
Profileless message types that are explicitly allowed for auto-review may log
|
|
46
|
+
incidental side-effect verb mentions as notes instead of hard stops, but
|
|
47
|
+
destructive tokens and real side-effect requests still pause. The only exception
|
|
48
|
+
is an explicit, separate safety-default exception.
|
|
47
49
|
|
|
48
50
|
## Scope Discipline
|
|
49
51
|
|