oacp-cli 0.3.0__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.0 → oacp_cli-0.3.2}/CHANGELOG.md +30 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/CONTRIBUTING.md +1 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/PKG-INFO +113 -8
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/QUICKSTART.md +54 -16
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/README.md +112 -7
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/SPEC.md +61 -5
- oacp_cli-0.3.2/docs/from-claude-p.md +151 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/runtime_capability_matrix.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/setup.md +7 -1
- oacp_cli-0.3.2/docs/img/oacp-cli-demo.png +0 -0
- oacp_cli-0.3.2/docs/img/oacp-filesystem-tree.png +0 -0
- oacp_cli-0.3.2/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/agent_safety_defaults.md +18 -1
- oacp_cli-0.3.2/docs/protocol/autonomy.md +319 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/credential_scoping.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/cross_runtime_sync.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/dispatch_states.yaml +20 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/inbox_outbox.md +47 -3
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/review_loop.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/runtime_capabilities.md +19 -19
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/session_init.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/skills_manifest.yaml +2 -2
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/pyproject.toml +3 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/_oacp_constants.py +2 -2
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/add_agent.py +12 -1
- {oacp_cli-0.3.0 → 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.0 → oacp_cli-0.3.2}/scripts/init_project_workspace.py +11 -3
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/oacp_doctor.py +202 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/send_inbox_message.py +18 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/setup_runtime.py +63 -5
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/update_workspace.sh +79 -3
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/validate_message.py +12 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/agent_card.template.yaml +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/agent_profile.template.yaml +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/agent_status.template.yaml +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/guardrails/secrets_rules.template.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/inbox_message.template.yaml +11 -0
- oacp_cli-0.3.2/templates/receiver_config.template.yaml +19 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/roles/role_baseline.template.md +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/runtime_capabilities.yaml +7 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/skills_manifest.template.yaml +3 -3
- oacp_cli-0.3.2/tests/conformance/autonomy/README.md +31 -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.2/tests/conformance/autonomy/configs/always_pause.yaml +15 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +15 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/configs/auto_review_standard.yaml +15 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/configs/auto_review_tight.yaml +15 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/configs/malformed_config.yaml +7 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/always_pause_task.yaml +8 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +9 -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/brainstorm_without_profile_auto_accepts.yaml +14 -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/clean_auto_review_task.yaml +15 -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_dangerously_skip_permissions_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +9 -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/hard_stop_rm_rf_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +8 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +8 -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.2/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +8 -0
- 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/expected/unparsable_task_profile_pauses.yaml +8 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/ambiguous_scope.yaml +20 -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/brainstorm_without_profile.yaml +9 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/clean_task.yaml +21 -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_dangerously_skip_permissions.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +21 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/hard_stop_force.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +20 -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/hard_stop_rm_rf.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/missing_task_profile.yaml +10 -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.2/tests/conformance/autonomy/messages/threshold_breach.yaml +20 -0
- oacp_cli-0.3.2/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +12 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_add_agent.py +27 -6
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_agent_profile.py +1 -1
- oacp_cli-0.3.2/tests/test_autonomy_conformance_fixtures.py +66 -0
- oacp_cli-0.3.2/tests/test_autonomy_gate.py +83 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_init_project_workspace.py +35 -2
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_doctor.py +124 -2
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_send_inbox_message.py +66 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_session_lifecycle_hooks.py +24 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_setup_runtime.py +92 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_update_workspace.py +45 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_validate_agent_card.py +1 -1
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_validate_message.py +17 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/.gitignore +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/LICENSE +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/Makefile +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/SECURITY.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/mcp_servers/oacp_coordinator.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/oacp/__init__.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/oacp/cli.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/memory_sync.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/preflight.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/scripts/write_event.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_memory_archive.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_coordinator.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_preflight.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.3.0 → oacp_cli-0.3.2}/tests/test_write_event.py +0 -0
|
@@ -5,7 +5,34 @@ 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.
|
|
25
|
+
|
|
26
|
+
## [0.3.1] - 2026-05-12
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- `auto_review` autonomy mode — an opt-in receiver-side autonomy profile that classifies inbound messages into auto-accept, pause, or hard-stop bands using clean / ambiguous / hard-stop trigger predicates. Configured via `receiver_config.autonomy_mode: auto_review` with `auto_review_profile` selecting `standard` or `tight`. Off by default; existing receivers continue to behave as `always_pause` unless they opt in. Ships with a conformance fixture suite under `tests/conformance/autonomy/` covering clean tasks, ambiguous scope, hard-stop triggers, and malformed config handling.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- README: refreshed with a hero image and three screenshots illustrating inbox flow, doctor output, and the multi-agent workspace layout. Hub README copy, install path, and command table aligned with the current CLI surface.
|
|
35
|
+
- Docs: link to companion oacp-skills repo from the README and onboarding pages so readers can find the skill library that pairs with the protocol.
|
|
9
36
|
|
|
10
37
|
## [0.3.0] - 2026-04-29
|
|
11
38
|
|
|
@@ -131,6 +158,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
131
158
|
- Checkout step in github-release workflow job (#19)
|
|
132
159
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
133
160
|
|
|
161
|
+
[0.3.2]: https://github.com/kiloloop/oacp/compare/v0.3.1...v0.3.2
|
|
162
|
+
[0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
|
|
134
163
|
[0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
|
|
135
164
|
[0.2.3]: https://github.com/kiloloop/oacp/compare/v0.2.2...v0.2.3
|
|
136
165
|
[0.2.2]: https://github.com/kiloloop/oacp/compare/v0.2.1...v0.2.2
|
|
@@ -73,6 +73,7 @@ make preflight ARGS="--full"
|
|
|
73
73
|
- Packet naming follows `<YYYYMMDD>_<topic>_<owner>_r<round>`.
|
|
74
74
|
- Scripts use `python3` and avoid external dependencies beyond the standard library (exception: `pyyaml`).
|
|
75
75
|
- Shell scripts use POSIX-compatible constructs where possible; bash-specific features require bash 3.2+.
|
|
76
|
+
- README images should stay under ~500KB each. Use `docs/img/` for all README assets.
|
|
76
77
|
|
|
77
78
|
## Commit Messages
|
|
78
79
|
|
|
@@ -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
|
|
@@ -24,30 +24,115 @@ Requires-Python: >=3.9
|
|
|
24
24
|
Requires-Dist: pyyaml>=6.0
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
26
|
|
|
27
|
-
# OACP
|
|
27
|
+
# OACP
|
|
28
28
|
|
|
29
29
|
[](https://pypi.org/project/oacp-cli/)
|
|
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.
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent communication and persistent shared memory. Across runtimes, projects, and machines. No daemons. No central server. Just files.
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
[Read the spec →](SPEC.md)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
$ uv tool install oacp-cli
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## See it in action
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
53
|
+
|
|
54
|
+
## Live agent fleet
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
61
|
+
|
|
62
|
+
<details>
|
|
63
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
PROJECT · my-app ● live
|
|
67
|
+
|
|
68
|
+
C claude code drafting PR #42
|
|
69
|
+
X codex cli reviewing
|
|
70
|
+
G gemini api idle
|
|
71
|
+
|
|
72
|
+
claude → review_request "auth refactor" [codex]
|
|
73
|
+
codex → review_feedback 2 minor, 0 blocking [claude]
|
|
74
|
+
claude → review_addressed [codex]
|
|
75
|
+
codex → review_lgtm [merge]
|
|
76
|
+
|
|
77
|
+
thread #42 · 4 msgs · 8m quality gate ✓
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
</details>
|
|
81
|
+
|
|
82
|
+
## Filesystem as protocol
|
|
83
|
+
|
|
84
|
+
<p align="center">
|
|
85
|
+
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
|
|
89
|
+
|
|
90
|
+
<details>
|
|
91
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
$OACP_HOME/projects/my-app/ ● writing
|
|
95
|
+
|
|
96
|
+
agents/
|
|
97
|
+
claude/
|
|
98
|
+
inbox/ 3 msgs [in]
|
|
99
|
+
outbox/ 12 sent [out]
|
|
100
|
+
dead_letter/ empty [dl]
|
|
101
|
+
codex/
|
|
102
|
+
inbox/ +1 new [in]
|
|
103
|
+
|
|
104
|
+
memory/ shared durable
|
|
105
|
+
project_facts.md 2.4 kb [md]
|
|
106
|
+
decision_log.md edited 3s ago [md]
|
|
107
|
+
open_threads.md 1.1 kb [md]
|
|
108
|
+
known_debt.md 812 b [md]
|
|
109
|
+
|
|
110
|
+
artifacts/ build · research
|
|
111
|
+
checkpoints/ progress
|
|
112
|
+
packets/ review findings
|
|
113
|
+
workspace.json metadata [json]
|
|
114
|
+
|
|
115
|
+
$OACP_HOME/org-memory/ org-wide
|
|
116
|
+
recent.md auto-loaded [⌘]
|
|
117
|
+
rules.md 12 rules [⌘]
|
|
118
|
+
decisions.md org decisions [⌘]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
</details>
|
|
40
122
|
|
|
41
123
|
## Quick Start
|
|
42
124
|
|
|
43
125
|
```bash
|
|
44
|
-
|
|
126
|
+
uv tool install oacp-cli
|
|
45
127
|
oacp init my-project --agents alice,bob
|
|
46
128
|
oacp send my-project --from alice --to bob --type task_request \
|
|
47
129
|
--subject "Implement feature X" --body "Details here..."
|
|
48
130
|
```
|
|
49
131
|
|
|
50
|
-
|
|
132
|
+
By default, `oacp init my-project` creates `claude`, `codex`, and `cursor`
|
|
133
|
+
agents. Pass `--agents` to include Gemini or custom agent names.
|
|
134
|
+
|
|
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.
|
|
51
136
|
|
|
52
137
|
### What you get
|
|
53
138
|
|
|
@@ -59,6 +144,14 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
|
|
|
59
144
|
- **Agent safety defaults** — baseline rules for git, credentials, and scope discipline
|
|
60
145
|
- **Runtime-agnostic** — works with any runtime that reads/writes files
|
|
61
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
|
+
|
|
62
155
|
## Try It Now
|
|
63
156
|
|
|
64
157
|
After installing, run `oacp doctor` to verify your environment is wired up:
|
|
@@ -67,6 +160,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
|
|
|
67
160
|
oacp doctor
|
|
68
161
|
```
|
|
69
162
|
|
|
163
|
+
## Agent Skills
|
|
164
|
+
|
|
165
|
+
OACP has companion agent skills that teach Claude, Codex, and other
|
|
166
|
+
runtimes how to use the CLI and protocol in real workflows.
|
|
167
|
+
|
|
168
|
+
Install or browse them here:
|
|
169
|
+
|
|
170
|
+
- https://github.com/kiloloop/oacp-skills
|
|
171
|
+
|
|
172
|
+
The core `oacp-cli` package remains the protocol/tooling kernel,
|
|
173
|
+
while `oacp-skills` contains runtime guidance and workflows.
|
|
174
|
+
|
|
70
175
|
## Why OACP?
|
|
71
176
|
|
|
72
177
|
When multiple AI agents work on the same codebase, they need a way to:
|
|
@@ -148,7 +253,7 @@ uv tool install .
|
|
|
148
253
|
|---------|-------------|
|
|
149
254
|
| `oacp init` | Create a project workspace under `$OACP_HOME/projects/` |
|
|
150
255
|
| `oacp add-agent` | Add an agent to an existing project workspace |
|
|
151
|
-
| `oacp setup` | Generate runtime-specific config files (Claude, Codex,
|
|
256
|
+
| `oacp setup` | Generate runtime-specific config files (Claude, Codex, Cursor, Gemini) |
|
|
152
257
|
| `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
|
|
153
258
|
| `oacp inbox` | List pending messages across agents (table or `--json`) |
|
|
154
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).
|
|
@@ -1,27 +1,112 @@
|
|
|
1
|
-
# OACP
|
|
1
|
+
# OACP
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/oacp-cli/)
|
|
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.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
A file-based protocol for multi-agent AI workflows. Two pillars — cross-agent communication and persistent shared memory. Across runtimes, projects, and machines. No daemons. No central server. Just files.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
[Read the spec →](SPEC.md)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
$ uv tool install oacp-cli
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## See it in action
|
|
21
|
+
|
|
22
|
+
<p align="center">
|
|
23
|
+
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
27
|
+
|
|
28
|
+
## Live agent fleet
|
|
29
|
+
|
|
30
|
+
<p align="center">
|
|
31
|
+
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
35
|
+
|
|
36
|
+
<details>
|
|
37
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
PROJECT · my-app ● live
|
|
41
|
+
|
|
42
|
+
C claude code drafting PR #42
|
|
43
|
+
X codex cli reviewing
|
|
44
|
+
G gemini api idle
|
|
45
|
+
|
|
46
|
+
claude → review_request "auth refactor" [codex]
|
|
47
|
+
codex → review_feedback 2 minor, 0 blocking [claude]
|
|
48
|
+
claude → review_addressed [codex]
|
|
49
|
+
codex → review_lgtm [merge]
|
|
50
|
+
|
|
51
|
+
thread #42 · 4 msgs · 8m quality gate ✓
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
</details>
|
|
55
|
+
|
|
56
|
+
## Filesystem as protocol
|
|
57
|
+
|
|
58
|
+
<p align="center">
|
|
59
|
+
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
60
|
+
</p>
|
|
61
|
+
|
|
62
|
+
Everything is plain files in `$OACP_HOME`. Agents have `inbox/`, `outbox/`, `dead_letter/`. Projects have shared `memory/` (durable) and per-thread `artifacts/`, `checkpoints/`, `packets/`. Org-wide knowledge lives in `$OACP_HOME/org-memory/`.
|
|
63
|
+
|
|
64
|
+
<details>
|
|
65
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
$OACP_HOME/projects/my-app/ ● writing
|
|
69
|
+
|
|
70
|
+
agents/
|
|
71
|
+
claude/
|
|
72
|
+
inbox/ 3 msgs [in]
|
|
73
|
+
outbox/ 12 sent [out]
|
|
74
|
+
dead_letter/ empty [dl]
|
|
75
|
+
codex/
|
|
76
|
+
inbox/ +1 new [in]
|
|
77
|
+
|
|
78
|
+
memory/ shared durable
|
|
79
|
+
project_facts.md 2.4 kb [md]
|
|
80
|
+
decision_log.md edited 3s ago [md]
|
|
81
|
+
open_threads.md 1.1 kb [md]
|
|
82
|
+
known_debt.md 812 b [md]
|
|
83
|
+
|
|
84
|
+
artifacts/ build · research
|
|
85
|
+
checkpoints/ progress
|
|
86
|
+
packets/ review findings
|
|
87
|
+
workspace.json metadata [json]
|
|
88
|
+
|
|
89
|
+
$OACP_HOME/org-memory/ org-wide
|
|
90
|
+
recent.md auto-loaded [⌘]
|
|
91
|
+
rules.md 12 rules [⌘]
|
|
92
|
+
decisions.md org decisions [⌘]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
</details>
|
|
14
96
|
|
|
15
97
|
## Quick Start
|
|
16
98
|
|
|
17
99
|
```bash
|
|
18
|
-
|
|
100
|
+
uv tool install oacp-cli
|
|
19
101
|
oacp init my-project --agents alice,bob
|
|
20
102
|
oacp send my-project --from alice --to bob --type task_request \
|
|
21
103
|
--subject "Implement feature X" --body "Details here..."
|
|
22
104
|
```
|
|
23
105
|
|
|
24
|
-
|
|
106
|
+
By default, `oacp init my-project` creates `claude`, `codex`, and `cursor`
|
|
107
|
+
agents. Pass `--agents` to include Gemini or custom agent names.
|
|
108
|
+
|
|
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.
|
|
25
110
|
|
|
26
111
|
### What you get
|
|
27
112
|
|
|
@@ -33,6 +118,14 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
|
|
|
33
118
|
- **Agent safety defaults** — baseline rules for git, credentials, and scope discipline
|
|
34
119
|
- **Runtime-agnostic** — works with any runtime that reads/writes files
|
|
35
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
|
+
|
|
36
129
|
## Try It Now
|
|
37
130
|
|
|
38
131
|
After installing, run `oacp doctor` to verify your environment is wired up:
|
|
@@ -41,6 +134,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
|
|
|
41
134
|
oacp doctor
|
|
42
135
|
```
|
|
43
136
|
|
|
137
|
+
## Agent Skills
|
|
138
|
+
|
|
139
|
+
OACP has companion agent skills that teach Claude, Codex, and other
|
|
140
|
+
runtimes how to use the CLI and protocol in real workflows.
|
|
141
|
+
|
|
142
|
+
Install or browse them here:
|
|
143
|
+
|
|
144
|
+
- https://github.com/kiloloop/oacp-skills
|
|
145
|
+
|
|
146
|
+
The core `oacp-cli` package remains the protocol/tooling kernel,
|
|
147
|
+
while `oacp-skills` contains runtime guidance and workflows.
|
|
148
|
+
|
|
44
149
|
## Why OACP?
|
|
45
150
|
|
|
46
151
|
When multiple AI agents work on the same codebase, they need a way to:
|
|
@@ -122,7 +227,7 @@ uv tool install .
|
|
|
122
227
|
|---------|-------------|
|
|
123
228
|
| `oacp init` | Create a project workspace under `$OACP_HOME/projects/` |
|
|
124
229
|
| `oacp add-agent` | Add an agent to an existing project workspace |
|
|
125
|
-
| `oacp setup` | Generate runtime-specific config files (Claude, Codex,
|
|
230
|
+
| `oacp setup` | Generate runtime-specific config files (Claude, Codex, Cursor, Gemini) |
|
|
126
231
|
| `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
|
|
127
232
|
| `oacp inbox` | List pending messages across agents (table or `--json`) |
|
|
128
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
|
|
@@ -79,7 +79,15 @@ Messages are YAML files. Filename convention: `<timestamp>_<from>_<type>.yaml`
|
|
|
79
79
|
| `subject` | string | Subject line |
|
|
80
80
|
| `body` | string | Message content (multi-line markdown) |
|
|
81
81
|
|
|
82
|
-
**Optional fields:** `expires_at`, `channel`, `related_packet`, `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`
|
|
82
|
+
**Optional fields:** `expires_at`, `channel`, `autonomy_hint`, `related_packet`, `related_pr`, `conversation_id`, `parent_message_id`, `context_keys`
|
|
83
|
+
|
|
84
|
+
`autonomy_hint` is an advisory sender hint, such as `auto_proceed`. Receivers
|
|
85
|
+
remain authoritative: local autonomy config, message content, safety defaults,
|
|
86
|
+
and runtime/tool permissions determine whether a message can be accepted without
|
|
87
|
+
interactive human confirmation.
|
|
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).
|
|
83
91
|
|
|
84
92
|
### Message Types
|
|
85
93
|
|
|
@@ -164,7 +172,7 @@ received → accepted → working → pr_opened → in_review → done
|
|
|
164
172
|
|
|
165
173
|
### Key Transitions
|
|
166
174
|
|
|
167
|
-
- **`received` → `accepted`**: Agent reads and accepts the task. Ack recommended for P0/P1.
|
|
175
|
+
- **`received` → `accepted`**: Agent reads and accepts the task. Ack recommended for P0/P1. When accepted by autonomy policy, this transition is preserved and records `accepted_by`, `human_confirmed`, `autonomy_mode`, `policy_ref`, `policy_hash`, and `reason_codes`.
|
|
168
176
|
- **`working` → `pr_opened`**: Agent opens a PR. **Notification required** with `WIP:` subject prefix.
|
|
169
177
|
- **`pr_opened` → `in_review`**: Agent requests cross-agent review via `review_request`.
|
|
170
178
|
- **`in_review` → `done`**: PR merged after review approval. Guard: `pr_merged AND review_approved`.
|
|
@@ -202,6 +210,29 @@ The dispatcher (e.g., an orchestrator agent) tracks dispatches from its perspect
|
|
|
202
210
|
- **Non-PR tasks**: done = deliverable provided or question answered
|
|
203
211
|
- Final notification must include `merge_sha` (PR tasks) or `results_summary` (non-PR tasks)
|
|
204
212
|
|
|
213
|
+
### Acceptance Metadata
|
|
214
|
+
|
|
215
|
+
Receivers must not collapse `received → accepted`, even when a task is
|
|
216
|
+
auto-accepted. Transition metadata records who or what accepted the task:
|
|
217
|
+
|
|
218
|
+
```yaml
|
|
219
|
+
transition: received_to_accepted
|
|
220
|
+
accepted_by: autonomy_policy # human | autonomy_policy | --autonomous-flag
|
|
221
|
+
human_confirmed: false
|
|
222
|
+
autonomy_mode: auto_review
|
|
223
|
+
policy_ref: agents/codex/config.yaml
|
|
224
|
+
policy_hash: sha256:...
|
|
225
|
+
reason_codes:
|
|
226
|
+
- task_profile_present
|
|
227
|
+
- risk_threshold_passed
|
|
228
|
+
```
|
|
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
|
+
|
|
205
236
|
### Brainstorm Lifecycle
|
|
206
237
|
|
|
207
238
|
Brainstorm messages follow a simpler lifecycle: `received` → `researching` → `report_delivered`. No PR, no review loop. The dispatcher sees: `Sent` → `In progress` → `Responded`.
|
|
@@ -400,7 +431,30 @@ Credential scoping: [`docs/protocol/credential_scoping.md`](docs/protocol/creden
|
|
|
400
431
|
|
|
401
432
|
### Baseline Rules
|
|
402
433
|
|
|
403
|
-
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.
|
|
435
|
+
|
|
436
|
+
Autonomy introduces a separate receiver acceptance policy layer; it does not
|
|
437
|
+
relax the safety floor. OACP distinguishes three layers:
|
|
438
|
+
|
|
439
|
+
1. **Safety defaults** — non-negotiable baseline constraints, such as no
|
|
440
|
+
unapproved push/deploy/merge/publish, no destructive commands, no secrets,
|
|
441
|
+
and disciplined staging. Projects may make these stricter, never looser.
|
|
442
|
+
2. **Receiver acceptance policy** — configurable rules for whether a receiver
|
|
443
|
+
may move a message from `received` to `accepted` without interactive human
|
|
444
|
+
confirmation. This is governed by `agents/<receiver>/config.yaml` and
|
|
445
|
+
[`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
|
|
446
|
+
3. **Runtime/tool safety** — runtime-specific permission gates that still apply
|
|
447
|
+
after acceptance, such as editor edit approval, shell sandboxing, or Codex
|
|
448
|
+
approval modes. OACP acceptance never grants runtime tool permissions.
|
|
449
|
+
|
|
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.
|
|
404
458
|
|
|
405
459
|
#### Git Safety
|
|
406
460
|
|
|
@@ -596,6 +650,7 @@ Scripts marked **CLI** are exposed as `oacp` subcommands. Scripts marked **scrip
|
|
|
596
650
|
| `init_org_memory.py` | Scaffold org-level memory directory | CLI: `oacp org-memory` |
|
|
597
651
|
| `write_event.py` | Write timestamped events to org-memory | CLI: `oacp write-event` |
|
|
598
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 |
|
|
599
654
|
| `validate_message.py` | Validates inbox/outbox message YAML | CLI: `oacp validate` |
|
|
600
655
|
| `session_lifecycle_hooks.py` | Session init and close hooks (`init_session`, `close_session`) | CLI-wrapped |
|
|
601
656
|
| `codex_session_init.py` | Codex startup protocol loader | CLI-wrapped |
|
|
@@ -677,6 +732,7 @@ scripts/init_packet.sh <project> <packet_id> # (no CLI wrapper yet)
|
|
|
677
732
|
| Shared workspace | [`docs/protocol/multi_agent_shared_workspace.md`](docs/protocol/multi_agent_shared_workspace.md) |
|
|
678
733
|
| Cross-runtime sync | [`docs/protocol/cross_runtime_sync.md`](docs/protocol/cross_runtime_sync.md) |
|
|
679
734
|
| Session init | [`docs/protocol/session_init.md`](docs/protocol/session_init.md) |
|
|
735
|
+
| Receiver autonomy | [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md) |
|
|
680
736
|
| Safety defaults | [`docs/protocol/agent_safety_defaults.md`](docs/protocol/agent_safety_defaults.md) |
|
|
681
737
|
| Credential scoping | [`docs/protocol/credential_scoping.md`](docs/protocol/credential_scoping.md) |
|
|
682
738
|
| Runtime capabilities | [`docs/protocol/runtime_capabilities.md`](docs/protocol/runtime_capabilities.md) |
|