oacp-cli 0.2.3__tar.gz → 0.3.1__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.2.3 → oacp_cli-0.3.1}/CHANGELOG.md +23 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/CONTRIBUTING.md +1 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/PKG-INFO +103 -10
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/README.md +102 -9
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/SPEC.md +108 -5
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/runtime_capability_matrix.md +2 -2
- oacp_cli-0.3.1/docs/img/oacp-cli-demo.png +0 -0
- oacp_cli-0.3.1/docs/img/oacp-filesystem-tree.png +0 -0
- oacp_cli-0.3.1/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/agent_safety_defaults.md +15 -0
- oacp_cli-0.3.1/docs/protocol/autonomy.md +210 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/dispatch_states.yaml +20 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/inbox_outbox.md +35 -3
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/oacp/cli.py +2 -1
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/pyproject.toml +3 -1
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/add_agent.py +12 -1
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_project_workspace.py +10 -2
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/memory_cli.py +91 -7
- oacp_cli-0.3.1/scripts/memory_sync.py +547 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_doctor.py +619 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/send_inbox_message.py +17 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/setup_runtime.py +159 -2
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/update_workspace.sh +79 -3
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/validate_message.py +12 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/inbox_message.template.yaml +11 -0
- oacp_cli-0.3.1/templates/receiver_config.template.yaml +15 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/README.md +24 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/configs/always_pause.yaml +13 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_standard.yaml +13 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/configs/auto_review_tight.yaml +13 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/configs/malformed_config.yaml +7 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/always_pause_task.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +14 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +15 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +8 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/ambiguous_scope.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +9 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/clean_task.yaml +21 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +21 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_force.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/missing_task_profile.yaml +10 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/threshold_breach.yaml +20 -0
- oacp_cli-0.3.1/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +12 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_add_agent.py +11 -6
- oacp_cli-0.3.1/tests/test_autonomy_conformance_fixtures.py +60 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_init_project_workspace.py +21 -0
- oacp_cli-0.3.1/tests/test_memory_archive.py +443 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_doctor.py +194 -2
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_send_inbox_message.py +62 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_setup_runtime.py +57 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_update_workspace.py +45 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_validate_message.py +17 -0
- oacp_cli-0.2.3/tests/test_memory_archive.py +0 -222
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/.gitignore +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/LICENSE +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/Makefile +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/QUICKSTART.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/SECURITY.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/doctor.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/setup.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/credential_scoping.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/cross_runtime_sync.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/review_loop.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/runtime_capabilities.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/session_init.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/skills_manifest.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/mcp_servers/oacp_coordinator.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/oacp/__init__.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/_oacp_constants.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/agent_profile.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/preflight.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/scripts/write_event.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_card.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_profile.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/agent_status.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/guardrails/secrets_rules.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/roles/role_baseline.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/runtime_capabilities.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/skills_manifest.template.yaml +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_agent_profile.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_coordinator.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_preflight.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_validate_agent_card.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.2.3 → oacp_cli-0.3.1}/tests/test_write_event.py +0 -0
|
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.3.1] - 2026-05-12
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `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.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- 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.
|
|
19
|
+
- 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.
|
|
20
|
+
|
|
21
|
+
## [0.3.0] - 2026-04-29
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- `oacp memory init|clone|pull|push|disable` subcommands for opt-in cross-machine sync of `$OACP_HOME/org-memory/**` and `$OACP_HOME/projects/*/memory/**` via a plain git repo rooted at `$OACP_HOME`. Three-state activation model: Disabled (no marker), Local-only (`init` without `--remote`), and Synced (`init --remote <url>` or `clone <url>`).
|
|
26
|
+
- `oacp doctor --memory` advisory checks (10 checks covering marker presence, allowlist coverage, remote configuration, fetch/divergence state, and signing setup).
|
|
27
|
+
- `oacp setup claude` now installs memory pull/push hook scripts and registers them in `.claude/settings.json` for Claude SessionStart and SessionEnd lifecycle events. Hooks are marker-gated and no-op silently unless `$OACP_HOME/.oacp-memory-repo` is present, so existing workflows are unaffected on machines that have not opted in.
|
|
28
|
+
|
|
8
29
|
## [0.2.3] - 2026-04-26
|
|
9
30
|
|
|
10
31
|
### Changed
|
|
@@ -121,6 +142,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
121
142
|
- Checkout step in github-release workflow job (#19)
|
|
122
143
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
123
144
|
|
|
145
|
+
[0.3.1]: https://github.com/kiloloop/oacp/compare/v0.3.0...v0.3.1
|
|
146
|
+
[0.3.0]: https://github.com/kiloloop/oacp/compare/v0.2.3...v0.3.0
|
|
124
147
|
[0.2.3]: https://github.com/kiloloop/oacp/compare/v0.2.2...v0.2.3
|
|
125
148
|
[0.2.2]: https://github.com/kiloloop/oacp/compare/v0.2.1...v0.2.2
|
|
126
149
|
[0.2.1]: https://github.com/kiloloop/oacp/compare/v0.2.0...v0.2.1
|
|
@@ -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
|
+
Version: 0.3.1
|
|
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,7 +24,7 @@ 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)
|
|
@@ -32,11 +32,92 @@ Description-Content-Type: text/markdown
|
|
|
32
32
|
[](https://openai.com/index/codex/)
|
|
33
33
|
[](https://github.com/kiloloop/oacp/pulls)
|
|
34
34
|
|
|
35
|
-
>
|
|
35
|
+
> Coordinate agents *without* the chaos.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
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
38
|
|
|
39
|
-
|
|
39
|
+
[Read the spec →](SPEC.md)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
$ pip install oacp-cli
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## See it in action
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
52
|
+
|
|
53
|
+
## Live agent fleet
|
|
54
|
+
|
|
55
|
+
<p align="center">
|
|
56
|
+
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
60
|
+
|
|
61
|
+
<details>
|
|
62
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
PROJECT · my-app ● live
|
|
66
|
+
|
|
67
|
+
C claude code drafting PR #42
|
|
68
|
+
X codex cli reviewing
|
|
69
|
+
G gemini api idle
|
|
70
|
+
|
|
71
|
+
claude → review_request "auth refactor" [codex]
|
|
72
|
+
codex → review_feedback 2 minor, 0 blocking [claude]
|
|
73
|
+
claude → review_addressed [codex]
|
|
74
|
+
codex → review_lgtm [merge]
|
|
75
|
+
|
|
76
|
+
thread #42 · 4 msgs · 8m quality gate ✓
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
## Filesystem as protocol
|
|
82
|
+
|
|
83
|
+
<p align="center">
|
|
84
|
+
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
85
|
+
</p>
|
|
86
|
+
|
|
87
|
+
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/`.
|
|
88
|
+
|
|
89
|
+
<details>
|
|
90
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
$OACP_HOME/projects/my-app/ ● writing
|
|
94
|
+
|
|
95
|
+
agents/
|
|
96
|
+
claude/
|
|
97
|
+
inbox/ 3 msgs [in]
|
|
98
|
+
outbox/ 12 sent [out]
|
|
99
|
+
dead_letter/ empty [dl]
|
|
100
|
+
codex/
|
|
101
|
+
inbox/ +1 new [in]
|
|
102
|
+
|
|
103
|
+
memory/ shared durable
|
|
104
|
+
project_facts.md 2.4 kb [md]
|
|
105
|
+
decision_log.md edited 3s ago [md]
|
|
106
|
+
open_threads.md 1.1 kb [md]
|
|
107
|
+
known_debt.md 812 b [md]
|
|
108
|
+
|
|
109
|
+
artifacts/ build · research
|
|
110
|
+
checkpoints/ progress
|
|
111
|
+
packets/ review findings
|
|
112
|
+
workspace.json metadata [json]
|
|
113
|
+
|
|
114
|
+
$OACP_HOME/org-memory/ org-wide
|
|
115
|
+
recent.md auto-loaded [⌘]
|
|
116
|
+
rules.md 12 rules [⌘]
|
|
117
|
+
decisions.md org decisions [⌘]
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
</details>
|
|
40
121
|
|
|
41
122
|
## Quick Start
|
|
42
123
|
|
|
@@ -47,7 +128,7 @@ oacp send my-project --from alice --to bob --type task_request \
|
|
|
47
128
|
--subject "Implement feature X" --body "Details here..."
|
|
48
129
|
```
|
|
49
130
|
|
|
50
|
-
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.
|
|
131
|
+
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
132
|
|
|
52
133
|
### What you get
|
|
53
134
|
|
|
@@ -67,6 +148,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
|
|
|
67
148
|
oacp doctor
|
|
68
149
|
```
|
|
69
150
|
|
|
151
|
+
## Agent Skills
|
|
152
|
+
|
|
153
|
+
OACP has companion agent skills that teach Claude, Codex, and other
|
|
154
|
+
runtimes how to use the CLI and protocol in real workflows.
|
|
155
|
+
|
|
156
|
+
Install or browse them here:
|
|
157
|
+
|
|
158
|
+
- https://github.com/kiloloop/oacp-skills
|
|
159
|
+
|
|
160
|
+
The core `oacp-cli` package remains the protocol/tooling kernel,
|
|
161
|
+
while `oacp-skills` contains runtime guidance and workflows.
|
|
162
|
+
|
|
70
163
|
## Why OACP?
|
|
71
164
|
|
|
72
165
|
When multiple AI agents work on the same codebase, they need a way to:
|
|
@@ -152,7 +245,7 @@ uv tool install .
|
|
|
152
245
|
| `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
|
|
153
246
|
| `oacp inbox` | List pending messages across agents (table or `--json`) |
|
|
154
247
|
| `oacp watch` | Emit inbox delta events for one agent across selected projects |
|
|
155
|
-
| `oacp memory` | Archive or
|
|
248
|
+
| `oacp memory` | Archive, restore, or git-sync project/org memory files |
|
|
156
249
|
| `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
|
|
157
250
|
| `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
|
|
158
251
|
| `oacp write-event` | Write an event to `org-memory/events/` |
|
|
@@ -167,9 +260,9 @@ uv tool install .
|
|
|
167
260
|
|
|
168
261
|
**`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
|
|
169
262
|
|
|
170
|
-
**`oacp doctor`**: `--fix` (auto-fix safe issues), `--json`, `-o/--output`
|
|
263
|
+
**`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
|
|
171
264
|
|
|
172
|
-
**`oacp memory`**: `
|
|
265
|
+
**`oacp memory`**: `init [--remote URL]`, `clone <URL> [--force]`, `pull`, `push`, `disable`, `archive <project> <file>`, `restore <project> <file>`
|
|
173
266
|
|
|
174
267
|
</details>
|
|
175
268
|
|
|
@@ -182,7 +275,7 @@ If `OACP_HOME` is unset, workspace commands default to `~/oacp`.
|
|
|
182
275
|
| **Inbox/Outbox** | Async messaging between agents via YAML files in `agents/<name>/inbox/` |
|
|
183
276
|
| **Review Loop** | Structured code review: `review_request` → `review_feedback` → `review_addressed` → `review_lgtm` |
|
|
184
277
|
| **Quality Gate** | Merge-readiness criteria: no unresolved P0/P1 findings, deferred nits tracked |
|
|
185
|
-
| **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory |
|
|
278
|
+
| **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory; optional `$OACP_HOME` git sync tracks only `org-memory/**` and `projects/*/memory/**` |
|
|
186
279
|
| **Dispatch States** | Task lifecycle: `received` → `accepted` → `working` → `pr_opened` → `in_review` → `done` |
|
|
187
280
|
| **Safety Defaults** | Baseline rules all agents follow: no force push, no secrets in commits, stage hygiene |
|
|
188
281
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# OACP
|
|
1
|
+
# OACP
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/oacp-cli/)
|
|
4
4
|
[](LICENSE)
|
|
@@ -6,11 +6,92 @@
|
|
|
6
6
|
[](https://openai.com/index/codex/)
|
|
7
7
|
[](https://github.com/kiloloop/oacp/pulls)
|
|
8
8
|
|
|
9
|
-
>
|
|
9
|
+
> Coordinate agents *without* the chaos.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
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
12
|
|
|
13
|
-
|
|
13
|
+
[Read the spec →](SPEC.md)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
$ pip install oacp-cli
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## See it in action
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<img src="docs/img/oacp-cli-demo.png" alt="oacp send + watch terminal demo" width="584" />
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
The CLI ships structured tasks between agents and lets you watch the conversation in real time.
|
|
26
|
+
|
|
27
|
+
## Live agent fleet
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<img src="docs/img/oacp-fleet-thread.png" alt="claude / codex / gemini fleet with PR #42 review thread" width="650" />
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
Every multi-agent thread is a sequence of typed messages — `review_request`, `review_feedback`, `review_addressed`, `review_lgtm` — with explicit quality gates.
|
|
34
|
+
|
|
35
|
+
<details>
|
|
36
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
PROJECT · my-app ● live
|
|
40
|
+
|
|
41
|
+
C claude code drafting PR #42
|
|
42
|
+
X codex cli reviewing
|
|
43
|
+
G gemini api idle
|
|
44
|
+
|
|
45
|
+
claude → review_request "auth refactor" [codex]
|
|
46
|
+
codex → review_feedback 2 minor, 0 blocking [claude]
|
|
47
|
+
claude → review_addressed [codex]
|
|
48
|
+
codex → review_lgtm [merge]
|
|
49
|
+
|
|
50
|
+
thread #42 · 4 msgs · 8m quality gate ✓
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
</details>
|
|
54
|
+
|
|
55
|
+
## Filesystem as protocol
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<img src="docs/img/oacp-filesystem-tree.png" alt="$OACP_HOME directory tree with inbox/outbox/memory/artifacts" width="526" />
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
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/`.
|
|
62
|
+
|
|
63
|
+
<details>
|
|
64
|
+
<summary>Text version (terminal browsing / grep / a11y)</summary>
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
$OACP_HOME/projects/my-app/ ● writing
|
|
68
|
+
|
|
69
|
+
agents/
|
|
70
|
+
claude/
|
|
71
|
+
inbox/ 3 msgs [in]
|
|
72
|
+
outbox/ 12 sent [out]
|
|
73
|
+
dead_letter/ empty [dl]
|
|
74
|
+
codex/
|
|
75
|
+
inbox/ +1 new [in]
|
|
76
|
+
|
|
77
|
+
memory/ shared durable
|
|
78
|
+
project_facts.md 2.4 kb [md]
|
|
79
|
+
decision_log.md edited 3s ago [md]
|
|
80
|
+
open_threads.md 1.1 kb [md]
|
|
81
|
+
known_debt.md 812 b [md]
|
|
82
|
+
|
|
83
|
+
artifacts/ build · research
|
|
84
|
+
checkpoints/ progress
|
|
85
|
+
packets/ review findings
|
|
86
|
+
workspace.json metadata [json]
|
|
87
|
+
|
|
88
|
+
$OACP_HOME/org-memory/ org-wide
|
|
89
|
+
recent.md auto-loaded [⌘]
|
|
90
|
+
rules.md 12 rules [⌘]
|
|
91
|
+
decisions.md org decisions [⌘]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
</details>
|
|
14
95
|
|
|
15
96
|
## Quick Start
|
|
16
97
|
|
|
@@ -21,7 +102,7 @@ oacp send my-project --from alice --to bob --type task_request \
|
|
|
21
102
|
--subject "Implement feature X" --body "Details here..."
|
|
22
103
|
```
|
|
23
104
|
|
|
24
|
-
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.
|
|
105
|
+
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
106
|
|
|
26
107
|
### What you get
|
|
27
108
|
|
|
@@ -41,6 +122,18 @@ After installing, run `oacp doctor` to verify your environment is wired up:
|
|
|
41
122
|
oacp doctor
|
|
42
123
|
```
|
|
43
124
|
|
|
125
|
+
## Agent Skills
|
|
126
|
+
|
|
127
|
+
OACP has companion agent skills that teach Claude, Codex, and other
|
|
128
|
+
runtimes how to use the CLI and protocol in real workflows.
|
|
129
|
+
|
|
130
|
+
Install or browse them here:
|
|
131
|
+
|
|
132
|
+
- https://github.com/kiloloop/oacp-skills
|
|
133
|
+
|
|
134
|
+
The core `oacp-cli` package remains the protocol/tooling kernel,
|
|
135
|
+
while `oacp-skills` contains runtime guidance and workflows.
|
|
136
|
+
|
|
44
137
|
## Why OACP?
|
|
45
138
|
|
|
46
139
|
When multiple AI agents work on the same codebase, they need a way to:
|
|
@@ -126,7 +219,7 @@ uv tool install .
|
|
|
126
219
|
| `oacp send` | Send a protocol-compliant inbox message (`--from` auto-inferred) |
|
|
127
220
|
| `oacp inbox` | List pending messages across agents (table or `--json`) |
|
|
128
221
|
| `oacp watch` | Emit inbox delta events for one agent across selected projects |
|
|
129
|
-
| `oacp memory` | Archive or
|
|
222
|
+
| `oacp memory` | Archive, restore, or git-sync project/org memory files |
|
|
130
223
|
| `oacp agent` | Manage global agent profiles (`init`, `show`, `list`) |
|
|
131
224
|
| `oacp org-memory` | Initialize org-level memory at `$OACP_HOME/org-memory/` |
|
|
132
225
|
| `oacp write-event` | Write an event to `org-memory/events/` |
|
|
@@ -141,9 +234,9 @@ uv tool install .
|
|
|
141
234
|
|
|
142
235
|
**`oacp watch`**: `--agent`, repeatable `--project`, `--all-projects`, `--json`, `--since` (default `now`), `--show-archived`
|
|
143
236
|
|
|
144
|
-
**`oacp doctor`**: `--fix` (auto-fix safe issues), `--json`, `-o/--output`
|
|
237
|
+
**`oacp doctor`**: `--fix` (auto-fix safe issues), `--memory`, `--json`, `-o/--output`
|
|
145
238
|
|
|
146
|
-
**`oacp memory`**: `
|
|
239
|
+
**`oacp memory`**: `init [--remote URL]`, `clone <URL> [--force]`, `pull`, `push`, `disable`, `archive <project> <file>`, `restore <project> <file>`
|
|
147
240
|
|
|
148
241
|
</details>
|
|
149
242
|
|
|
@@ -156,7 +249,7 @@ If `OACP_HOME` is unset, workspace commands default to `~/oacp`.
|
|
|
156
249
|
| **Inbox/Outbox** | Async messaging between agents via YAML files in `agents/<name>/inbox/` |
|
|
157
250
|
| **Review Loop** | Structured code review: `review_request` → `review_feedback` → `review_addressed` → `review_lgtm` |
|
|
158
251
|
| **Quality Gate** | Merge-readiness criteria: no unresolved P0/P1 findings, deferred nits tracked |
|
|
159
|
-
| **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory |
|
|
252
|
+
| **Durable Memory** | Shared `memory/` directory with an active working set plus `memory/archive/` for historical memory; optional `$OACP_HOME` git sync tracks only `org-memory/**` and `projects/*/memory/**` |
|
|
160
253
|
| **Dispatch States** | Task lifecycle: `received` → `accepted` → `working` → `pr_opened` → `in_review` → `done` |
|
|
161
254
|
| **Safety Defaults** | Baseline rules all agents follow: no force push, no secrets in commits, stage hygiene |
|
|
162
255
|
|
|
@@ -16,7 +16,7 @@ OACP is not a framework or SDK. It is a set of conventions, YAML schemas, and sh
|
|
|
16
16
|
3. [Review Loop Protocol](#3-review-loop-protocol)
|
|
17
17
|
4. [Cross-Runtime Sync](#4-cross-runtime-sync)
|
|
18
18
|
5. [Agent Safety Defaults](#5-agent-safety-defaults)
|
|
19
|
-
6. [Org-Level Memory](#6-org-level-memory)
|
|
19
|
+
6. [Org-Level Memory and Sync](#6-org-level-memory-and-sync)
|
|
20
20
|
7. [Kernel Script Inventory](#7-kernel-script-inventory)
|
|
21
21
|
|
|
22
22
|
---
|
|
@@ -79,7 +79,12 @@ 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.
|
|
83
88
|
|
|
84
89
|
### Message Types
|
|
85
90
|
|
|
@@ -164,7 +169,7 @@ received → accepted → working → pr_opened → in_review → done
|
|
|
164
169
|
|
|
165
170
|
### Key Transitions
|
|
166
171
|
|
|
167
|
-
- **`received` → `accepted`**: Agent reads and accepts the task. Ack recommended for P0/P1.
|
|
172
|
+
- **`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
173
|
- **`working` → `pr_opened`**: Agent opens a PR. **Notification required** with `WIP:` subject prefix.
|
|
169
174
|
- **`pr_opened` → `in_review`**: Agent requests cross-agent review via `review_request`.
|
|
170
175
|
- **`in_review` → `done`**: PR merged after review approval. Guard: `pr_merged AND review_approved`.
|
|
@@ -202,6 +207,23 @@ The dispatcher (e.g., an orchestrator agent) tracks dispatches from its perspect
|
|
|
202
207
|
- **Non-PR tasks**: done = deliverable provided or question answered
|
|
203
208
|
- Final notification must include `merge_sha` (PR tasks) or `results_summary` (non-PR tasks)
|
|
204
209
|
|
|
210
|
+
### Acceptance Metadata
|
|
211
|
+
|
|
212
|
+
Receivers must not collapse `received → accepted`, even when a task is
|
|
213
|
+
auto-accepted. Transition metadata records who or what accepted the task:
|
|
214
|
+
|
|
215
|
+
```yaml
|
|
216
|
+
transition: received_to_accepted
|
|
217
|
+
accepted_by: autonomy_policy # human | autonomy_policy | --autonomous-flag
|
|
218
|
+
human_confirmed: false
|
|
219
|
+
autonomy_mode: auto_review
|
|
220
|
+
policy_ref: agents/codex/config.yaml
|
|
221
|
+
policy_hash: sha256:...
|
|
222
|
+
reason_codes:
|
|
223
|
+
- task_profile_present
|
|
224
|
+
- risk_threshold_passed
|
|
225
|
+
```
|
|
226
|
+
|
|
205
227
|
### Brainstorm Lifecycle
|
|
206
228
|
|
|
207
229
|
Brainstorm messages follow a simpler lifecycle: `received` → `researching` → `report_delivered`. No PR, no review loop. The dispatcher sees: `Sent` → `In progress` → `Responded`.
|
|
@@ -402,6 +424,27 @@ Credential scoping: [`docs/protocol/credential_scoping.md`](docs/protocol/creden
|
|
|
402
424
|
|
|
403
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.
|
|
404
426
|
|
|
427
|
+
Autonomy introduces a separate receiver acceptance policy layer; it does not
|
|
428
|
+
relax the safety floor. OACP distinguishes three layers:
|
|
429
|
+
|
|
430
|
+
1. **Safety defaults** — non-negotiable baseline constraints, such as no
|
|
431
|
+
unapproved push/deploy/merge/publish, no destructive commands, no secrets,
|
|
432
|
+
and disciplined staging. Projects may make these stricter, never looser.
|
|
433
|
+
2. **Receiver acceptance policy** — configurable rules for whether a receiver
|
|
434
|
+
may move a message from `received` to `accepted` without interactive human
|
|
435
|
+
confirmation. This is governed by `agents/<receiver>/config.yaml` and
|
|
436
|
+
[`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
|
|
437
|
+
3. **Runtime/tool safety** — runtime-specific permission gates that still apply
|
|
438
|
+
after acceptance, such as editor edit approval, shell sandboxing, or Codex
|
|
439
|
+
approval modes. OACP acceptance never grants runtime tool permissions.
|
|
440
|
+
|
|
441
|
+
Regardless of autonomy mode, receivers must pause on any of: destructive command
|
|
442
|
+
tokens (`rm -rf`, `--force`, `--no-verify`,
|
|
443
|
+
`--dangerously-skip-permissions`), external side effects
|
|
444
|
+
(push/deploy/merge/publish/rotate/install), or modifications to auth, config,
|
|
445
|
+
secrets, dependencies, public repos, pricing/commercial content, or memory SSOT,
|
|
446
|
+
unless explicitly authorized by a separate safety-default exception.
|
|
447
|
+
|
|
405
448
|
#### Git Safety
|
|
406
449
|
|
|
407
450
|
- No push/deploy without explicit approval from the user or dispatcher
|
|
@@ -451,7 +494,7 @@ Agents operate under least-privilege credentials:
|
|
|
451
494
|
|
|
452
495
|
---
|
|
453
496
|
|
|
454
|
-
## 6. Org-Level Memory
|
|
497
|
+
## 6. Org-Level Memory and Sync
|
|
455
498
|
|
|
456
499
|
Full specification: [`docs/protocol/org_memory.md`](docs/protocol/org_memory.md)
|
|
457
500
|
|
|
@@ -459,6 +502,16 @@ Full specification: [`docs/protocol/org_memory.md`](docs/protocol/org_memory.md)
|
|
|
459
502
|
|
|
460
503
|
Shared, cross-project memory for multi-agent organizations. Agents across projects read org-wide decisions, conventions, and events from a single location. Complements per-project memory — does not replace it.
|
|
461
504
|
|
|
505
|
+
OACP can optionally sync curated memory across machines using one plain git
|
|
506
|
+
repository rooted at `$OACP_HOME`. This feature is opt-in and tracks only:
|
|
507
|
+
|
|
508
|
+
- `$OACP_HOME/org-memory/**`
|
|
509
|
+
- `$OACP_HOME/projects/<project>/memory/**`
|
|
510
|
+
|
|
511
|
+
Cross-machine inbox delivery, `agents/` runtime state, `status.yaml`, concurrent
|
|
512
|
+
writer protocols, encrypted transport, and runtime-specific memory outside
|
|
513
|
+
`$OACP_HOME` are out of scope.
|
|
514
|
+
|
|
462
515
|
### Directory Structure
|
|
463
516
|
|
|
464
517
|
```
|
|
@@ -470,6 +523,28 @@ $OACP_HOME/org-memory/
|
|
|
470
523
|
└── YYYYMMDD-HHMMSS-short-slug.md
|
|
471
524
|
```
|
|
472
525
|
|
|
526
|
+
When memory sync is enabled, `$OACP_HOME` also contains:
|
|
527
|
+
|
|
528
|
+
```text
|
|
529
|
+
$OACP_HOME/
|
|
530
|
+
├── .gitignore # positive allowlist
|
|
531
|
+
├── .oacp-memory-repo # tracked marker; activates hooks
|
|
532
|
+
├── org-memory/ # tracked
|
|
533
|
+
└── projects/*/memory/ # tracked
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
Canonical root `.gitignore`:
|
|
537
|
+
|
|
538
|
+
```gitignore
|
|
539
|
+
*
|
|
540
|
+
!*/
|
|
541
|
+
!.gitignore
|
|
542
|
+
!.oacp-memory-repo
|
|
543
|
+
!org-memory/**
|
|
544
|
+
!projects/*/memory/**
|
|
545
|
+
projects/*/memory/.cache/
|
|
546
|
+
```
|
|
547
|
+
|
|
473
548
|
### Key Concepts
|
|
474
549
|
|
|
475
550
|
- **`recent.md`** is the always-loaded cross-project context. Agents read it at session start via session-init hooks. Kept concise (~150 lines) as a rolling summary of current state, not full history.
|
|
@@ -506,11 +581,37 @@ Agents write events only (append-only). The coordinator curates topical files an
|
|
|
506
581
|
|
|
507
582
|
- **`oacp org-memory init`** — scaffold `$OACP_HOME/org-memory/` with default files
|
|
508
583
|
- **`oacp write-event`** — create an event file with proper frontmatter
|
|
584
|
+
- **`oacp memory init [--remote URL]`** — initialize the `$OACP_HOME` memory git repo, marker, canonical allowlist, optional remote, and initial commit
|
|
585
|
+
- **`oacp memory clone <URL> [--force]`** — clone a memory repo into `$OACP_HOME`; refuses non-empty targets unless `--force` moves the existing directory aside
|
|
586
|
+
- **`oacp memory pull`** — advisory fetch plus fast-forward-only pull; warns loudly on dirty, ahead, behind, diverged, or fetch-failed states and never auto-merges
|
|
587
|
+
- **`oacp memory push`** — stages only the memory allowlist, commits as `memory: <agent>@<host> <date> (N files)`, then pushes when a remote is configured
|
|
588
|
+
- **`oacp memory disable`** — removes `.oacp-memory-repo` locally while leaving `.git/` intact
|
|
589
|
+
- **`oacp doctor --memory`** — runs advisory memory sync checks for marker state, allowlist drift, tracked/untracked leakage, clean/ahead/behind/diverged state, remote reachability, commit staleness, `agents/` leakage, and per-project memory overlay safety
|
|
509
590
|
|
|
510
591
|
### Integration with Session Init
|
|
511
592
|
|
|
512
593
|
Agents can read `org-memory/recent.md` at session start for cross-project context. This integration is runtime-specific — for example, Claude Code loads it via a session-init hook, while other runtimes may read it explicitly. Topical files and `events/` are available for on-demand reading when agents need deeper org context.
|
|
513
594
|
|
|
595
|
+
Memory sync has three activation states:
|
|
596
|
+
|
|
597
|
+
| State | Trigger | Behavior |
|
|
598
|
+
|-------|---------|----------|
|
|
599
|
+
| Disabled | No `.oacp-memory-repo` marker | Hooks no-op silently; `oacp doctor --memory` reports not configured |
|
|
600
|
+
| Local-only | `oacp memory init` | Wrap-up commits memory locally for audit history; no push |
|
|
601
|
+
| Synced | `oacp memory init --remote URL` or `oacp memory clone <URL>` | Session start pulls fast-forward updates; wrap-up commits and pushes |
|
|
602
|
+
|
|
603
|
+
Lifecycle hooks must check for `$OACP_HOME/.oacp-memory-repo` first and exit
|
|
604
|
+
without output when it is absent. Claude runtime setup installs hook scripts for
|
|
605
|
+
`SessionStart` pull and wrap-up/session-end push:
|
|
606
|
+
|
|
607
|
+
1. Session start runs `oacp memory pull`. It exits advisory-successfully, pulls
|
|
608
|
+
only clean behind states with `--ff-only`, and warns loudly when memory is
|
|
609
|
+
dirty, ahead, diverged, behind, or remote fetch fails.
|
|
610
|
+
2. Wrap-up runs `oacp memory push`. It stages only `.gitignore`,
|
|
611
|
+
`.oacp-memory-repo`, `org-memory/**`, and `projects/*/memory/**`; commits
|
|
612
|
+
with the fixed terse message format; pushes when a remote exists; and warns
|
|
613
|
+
loudly when memory is dirty, behind, diverged, or push fails.
|
|
614
|
+
|
|
514
615
|
---
|
|
515
616
|
|
|
516
617
|
## 7. Kernel Script Inventory
|
|
@@ -532,7 +633,8 @@ Scripts marked **CLI** are exposed as `oacp` subcommands. Scripts marked **scrip
|
|
|
532
633
|
| `agent_profile.py` | Two-tier agent profile management | CLI: `oacp agent` |
|
|
533
634
|
| `send_inbox_message.py` | Compose and send inbox messages | CLI: `oacp send` |
|
|
534
635
|
| `oacp_inbox.py` | List pending inbox messages | CLI: `oacp inbox` |
|
|
535
|
-
| `memory_cli.py` | Archive or
|
|
636
|
+
| `memory_cli.py` | Archive, restore, or git-sync project/org memory files | CLI: `oacp memory` |
|
|
637
|
+
| `memory_sync.py` | Shared git allowlist and memory sync helpers | imported by CLI/doctor |
|
|
536
638
|
| `setup_runtime.py` | Generate runtime-specific config files | CLI: `oacp setup` |
|
|
537
639
|
| `init_org_memory.py` | Scaffold org-level memory directory | CLI: `oacp org-memory` |
|
|
538
640
|
| `write_event.py` | Write timestamped events to org-memory | CLI: `oacp write-event` |
|
|
@@ -618,6 +720,7 @@ scripts/init_packet.sh <project> <packet_id> # (no CLI wrapper yet)
|
|
|
618
720
|
| Shared workspace | [`docs/protocol/multi_agent_shared_workspace.md`](docs/protocol/multi_agent_shared_workspace.md) |
|
|
619
721
|
| Cross-runtime sync | [`docs/protocol/cross_runtime_sync.md`](docs/protocol/cross_runtime_sync.md) |
|
|
620
722
|
| Session init | [`docs/protocol/session_init.md`](docs/protocol/session_init.md) |
|
|
723
|
+
| Receiver autonomy | [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md) |
|
|
621
724
|
| Safety defaults | [`docs/protocol/agent_safety_defaults.md`](docs/protocol/agent_safety_defaults.md) |
|
|
622
725
|
| Credential scoping | [`docs/protocol/credential_scoping.md`](docs/protocol/credential_scoping.md) |
|
|
623
726
|
| Runtime capabilities | [`docs/protocol/runtime_capabilities.md`](docs/protocol/runtime_capabilities.md) |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Cross-Runtime Parity Matrix
|
|
2
2
|
|
|
3
|
-
**Date**: 2026-04-
|
|
3
|
+
**Date**: 2026-04-29
|
|
4
4
|
|
|
5
5
|
This is a capability comparison across 3 agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Use this as a reference when deciding which agent to assign for a given task.
|
|
6
6
|
|
|
7
|
-
Claude was last checked against Claude Code `v2.1.
|
|
7
|
+
Claude was last checked against Claude Code `v2.1.123`.
|
|
8
8
|
|
|
9
9
|
Codex was last checked against app update `26.415`, CLI `0.123.0`, and OpenAI's GPT-5.5 launch note from 2026-04-23.
|
|
10
10
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -30,6 +30,21 @@ Follow `credential_scoping.md` in this directory for:
|
|
|
30
30
|
- Per-agent credential boundaries
|
|
31
31
|
- Rotation and revocation procedures
|
|
32
32
|
|
|
33
|
+
## Autonomy Hard Stops
|
|
34
|
+
|
|
35
|
+
Receiver autonomy controls only whether a message can move from `received` to
|
|
36
|
+
`accepted` without interactive human confirmation. It does not relax this safety
|
|
37
|
+
floor.
|
|
38
|
+
|
|
39
|
+
Regardless of autonomy mode, receivers must pause on any of:
|
|
40
|
+
|
|
41
|
+
- Destructive command tokens: `rm -rf`, `--force`, `--no-verify`, `--dangerously-skip-permissions`
|
|
42
|
+
- External side effects: push, deploy, merge, publish, credential rotation, dependency install
|
|
43
|
+
- Sensitive scope: auth, config, secrets, dependencies, public repos, pricing/commercial content, memory SSOT
|
|
44
|
+
|
|
45
|
+
The only exception is an explicit, separate safety-default exception. The
|
|
46
|
+
Phase 1 autonomy RFC does not introduce any such exception.
|
|
47
|
+
|
|
33
48
|
## Scope Discipline
|
|
34
49
|
|
|
35
50
|
- **Do not edit files outside the requested scope** — if a task says "fix X in file Y", do not refactor file Z.
|