oacp-cli 0.3.4__tar.gz → 0.3.5__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.4 → oacp_cli-0.3.5}/CHANGELOG.md +63 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/PKG-INFO +5 -3
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/README.md +4 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/SECURITY.md +15 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/SPEC.md +6 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/from-claude-p.md +14 -14
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/doctor.md +24 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/prompt_caching.md +0 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/runtime_capability_matrix.md +12 -8
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/setup.md +0 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/unified_skill_spec.md +1 -1
- oacp_cli-0.3.5/docs/guides/versioning.md +65 -0
- oacp_cli-0.3.5/docs/protocol/autonomy.md +649 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/inbox_outbox.md +53 -9
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/mcp_integration.md +2 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/review_loop.md +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/runtime_capabilities.md +5 -4
- oacp_cli-0.3.5/examples/demo-workspace/README.md +118 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/decisions.md +13 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +14 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +13 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +13 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +15 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +13 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +13 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/recent.md +25 -0
- oacp_cli-0.3.5/examples/demo-workspace/org-memory/rules.md +17 -0
- oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +30 -0
- oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +21 -0
- oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +11 -0
- oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +23 -0
- oacp_cli-0.3.5/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +21 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/mcp_servers/oacp_coordinator.py +4 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/oacp/cli.py +7 -0
- oacp_cli-0.3.5/oacp/envelope_hook.py +24 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/pyproject.toml +5 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/_oacp_constants.py +1 -0
- oacp_cli-0.3.5/scripts/autonomy_gate.py +1350 -0
- oacp_cli-0.3.5/scripts/claude_envelope_hook.py +914 -0
- oacp_cli-0.3.5/scripts/envelope_compiler.py +361 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_sync.py +45 -10
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_doctor.py +50 -11
- oacp_cli-0.3.5/scripts/record_autonomy_outcome.py +269 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/setup_runtime.py +15 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/update_workspace.sh +3 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/validate_message.py +55 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/inbox_message.template.yaml +6 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/receiver_config.template.yaml +7 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/README.md +7 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +2 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/actuals/declaration_error.yaml +8 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +2 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +48 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/always_pause.yaml +2 -2
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +1 -1
- oacp_cli-0.3.4/tests/conformance/autonomy/configs/auto_review_standard.yaml → oacp_cli-0.3.5/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +1 -1
- oacp_cli-0.3.5/tests/conformance/autonomy/configs/auto_review_standard.yaml +17 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +1 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +1 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +25 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +3 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +4 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +6 -1
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +24 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +23 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +1 -1
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +19 -0
- oacp_cli-0.3.4/tests/conformance/autonomy/expected/clean_auto_review_task.yaml → oacp_cli-0.3.5/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +2 -2
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +10 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +20 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +15 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +10 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +1 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/guardrails_fence.yaml +24 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +1 -1
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/lexical_declared_false.yaml +21 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/minutes_45.yaml +20 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/minutes_46.yaml +20 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/negated_guardrails.yaml +21 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +25 -0
- oacp_cli-0.3.5/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +25 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +5 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_config.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_secret.yaml +1 -1
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +2 -2
- oacp_cli-0.3.5/tests/conformance/envelope/README.md +47 -0
- oacp_cli-0.3.5/tests/conformance/envelope/configs/auto_review_standard.yaml +17 -0
- oacp_cli-0.3.5/tests/conformance/envelope/configs/malformed.yaml +2 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +29 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +29 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +6 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/malformed_config_fails.yaml +6 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/missing_profile_fails.yaml +6 -0
- oacp_cli-0.3.5/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +6 -0
- oacp_cli-0.3.5/tests/conformance/envelope/messages/clean_pr_task.yaml +25 -0
- oacp_cli-0.3.5/tests/conformance/envelope/messages/docs_only_task.yaml +20 -0
- oacp_cli-0.3.5/tests/conformance/envelope/messages/invalid_numeric.yaml +20 -0
- oacp_cli-0.3.5/tests/conformance/envelope/messages/missing_profile.yaml +10 -0
- oacp_cli-0.3.5/tests/conformance/envelope/messages/unparsable_profile.yaml +14 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_autonomy_conformance_fixtures.py +11 -0
- oacp_cli-0.3.5/tests/test_autonomy_gate.py +434 -0
- oacp_cli-0.3.5/tests/test_claude_envelope_hook.py +661 -0
- oacp_cli-0.3.5/tests/test_envelope_compiler.py +305 -0
- oacp_cli-0.3.5/tests/test_envelope_conformance_fixtures.py +97 -0
- oacp_cli-0.3.5/tests/test_memory_sync.py +274 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_cli.py +35 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_coordinator.py +28 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_doctor.py +84 -0
- oacp_cli-0.3.5/tests/test_record_autonomy_outcome.py +288 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_setup_runtime.py +22 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_validate_message.py +51 -0
- oacp_cli-0.3.4/docs/guides/versioning.md +0 -34
- oacp_cli-0.3.4/docs/protocol/autonomy.md +0 -323
- oacp_cli-0.3.4/scripts/autonomy_gate.py +0 -822
- oacp_cli-0.3.4/tests/test_autonomy_gate.py +0 -177
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.github/workflows/release.yml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/.gitignore +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/LICENSE +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/Makefile +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/QUICKSTART.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/agent_safety_defaults.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/credential_scoping.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/cross_runtime_sync.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/dispatch_states.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/session_init.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/skills_manifest.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/oacp/__init__.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/add_agent.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/agent_profile.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_project_workspace.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_inbox.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/oacp_watch.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/preflight.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/send_inbox_message.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/scripts/write_event.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_card.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_profile.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/agent_status.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/guardrails/secrets_rules.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/roles/role_baseline.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/runtime_capabilities.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/skills_manifest.template.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_add_agent.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_agent_profile.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_init_project_workspace.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_memory_archive.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_constants.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_preflight.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_send_inbox_message.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_validate_agent_card.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.3.4 → oacp_cli-0.3.5}/tests/test_write_event.py +0 -0
|
@@ -5,6 +5,68 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.5] - 2026-07-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Receiver autonomy supports sender-marked `oacp-guardrails` fences, negation
|
|
13
|
+
fallback, declaration-aware lexical advisories, and a pinned reason-code
|
|
14
|
+
taxonomy backed by executable conformance fixtures.
|
|
15
|
+
- `external_side_effects: allow_pr_artifacts` permits declared PR, review, and
|
|
16
|
+
issue-comment artifacts only for receiver-allowlisted private repositories,
|
|
17
|
+
while retaining pre-approval for public/unlisted artifacts, direct main
|
|
18
|
+
pushes, merges, deploys, and publishes.
|
|
19
|
+
- Autonomy audit output records the full declared task profile, an explicit
|
|
20
|
+
breach list, a semantic policy hash, and a shared outcome block including
|
|
21
|
+
completion time and materialized-risk telemetry.
|
|
22
|
+
- Default-off standing continuation grants now resolve from an explicit prior
|
|
23
|
+
human approval in the same conversation thread; sender-declared grant data
|
|
24
|
+
alone cannot authorize follow-up scope.
|
|
25
|
+
- `oacp autonomy-outcome` atomically records structured approval, modification,
|
|
26
|
+
decline, latency, and grant-decision telemetry in schema-v2 autonomy audits.
|
|
27
|
+
The subcommand is exposed by the installed CLI starting with this release.
|
|
28
|
+
- Envelope compilation: `oacp envelope compile|show|clear`
|
|
29
|
+
turns an admitted message's `task_profile` plus receiver config into a
|
|
30
|
+
runtime envelope (`active_envelope.json`), enforced at the tool-call layer
|
|
31
|
+
by a static Claude PreToolUse hook (`oacp-envelope-hook`, registered once
|
|
32
|
+
by `oacp setup claude`). Compilation is fail-closed
|
|
33
|
+
(`envelope_compile_error`), envelope drift denies with the canonical
|
|
34
|
+
threshold-checkpoint opener, unclassifiable calls escalate to `ask`, and
|
|
35
|
+
the audit outcome block records `envelope_enforcement: hooks | none`.
|
|
36
|
+
Contract pinned by executable fixtures under `tests/conformance/envelope/`.
|
|
37
|
+
- The security policy documents the Tier-1.5 trust ceiling for single-OS-user
|
|
38
|
+
hosts: `from` fields are unauthenticated traceability today, future optional
|
|
39
|
+
signing would add tamper-evidence and provenance but not same-host
|
|
40
|
+
anti-impersonation, and hard isolation requires separate OS users,
|
|
41
|
+
containers, or hosts.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- The versioning guide documents the staged release pipeline end to end,
|
|
46
|
+
replacing the retired single-repo flow.
|
|
47
|
+
- Documentation examples and conformance fixtures use neutral example
|
|
48
|
+
repository slugs.
|
|
49
|
+
- The standard `auto_review` estimate cap is 45 minutes; estimates above 45
|
|
50
|
+
still pause and the five-file cap remains unchanged.
|
|
51
|
+
- Pricing and commercial matches remain hard pauses but now use the separate
|
|
52
|
+
`hard_stop_content_sensitivity` category.
|
|
53
|
+
- Follow-up declarations outside a standing grant's time, file, or side-effect
|
|
54
|
+
scope re-pause before work begins.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- `doctor --memory` now forwards bounded network timeouts to remote Git fetches
|
|
59
|
+
without breaking custom runners that implement the original command interface.
|
|
60
|
+
- The MCP stdio coordinator now converts unexpected request exceptions into
|
|
61
|
+
structured `-32603` responses instead of crashing the server.
|
|
62
|
+
- Undeclared runtime side effects now produce `declaration_error` at the
|
|
63
|
+
threshold checkpoint instead of silently completing outside the profile.
|
|
64
|
+
- Message validation now accepts and type-checks the six documented
|
|
65
|
+
review-loop telemetry fields: `model`, `turns`, `input_tokens`,
|
|
66
|
+
`output_tokens`, `wall_time_s`, and `est_cost_usd`.
|
|
67
|
+
- Receiver config and doctor validation share one repository-slug regex instead
|
|
68
|
+
of maintaining duplicate definitions.
|
|
69
|
+
|
|
8
70
|
## [0.3.4] - 2026-06-11
|
|
9
71
|
|
|
10
72
|
### Fixed
|
|
@@ -192,6 +254,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
192
254
|
- Checkout step in github-release workflow job (#19)
|
|
193
255
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
194
256
|
|
|
257
|
+
[0.3.5]: https://github.com/kiloloop/oacp/compare/v0.3.4...v0.3.5
|
|
195
258
|
[0.3.4]: https://github.com/kiloloop/oacp/compare/v0.3.3...v0.3.4
|
|
196
259
|
[0.3.3]: https://github.com/kiloloop/oacp/compare/v0.3.2...v0.3.3
|
|
197
260
|
[0.3.2]: https://github.com/kiloloop/oacp/compare/v0.3.1...v0.3.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oacp-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
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
|
|
@@ -120,6 +120,8 @@ $OACP_HOME/org-memory/ org-wide
|
|
|
120
120
|
|
|
121
121
|
</details>
|
|
122
122
|
|
|
123
|
+
Want to see these files populated? Browse [`examples/demo-workspace/`](examples/demo-workspace/) — what a fictional team's project remembers after a month of agent sessions (debt with origins, threads opened and closed, decisions with rationale), plus the org-memory layer mid-curation.
|
|
124
|
+
|
|
123
125
|
## Quick Start
|
|
124
126
|
|
|
125
127
|
```bash
|
|
@@ -146,9 +148,9 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
|
|
|
146
148
|
|
|
147
149
|
## Coming from `claude -p`?
|
|
148
150
|
|
|
149
|
-
`claude -p` runs an agent synchronously and headless — your script blocks while it works, and
|
|
151
|
+
`claude -p` runs an agent synchronously and headless — your script blocks while it works, and there's no session to glance at, attach to, or steer mid-run.
|
|
150
152
|
|
|
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
|
|
153
|
+
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 the session is right there to watch and steer. Once tasks are messages, review loops, handoffs, and multi-agent coordination come with the shape.
|
|
152
154
|
|
|
153
155
|
**[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
156
|
|
|
@@ -94,6 +94,8 @@ $OACP_HOME/org-memory/ org-wide
|
|
|
94
94
|
|
|
95
95
|
</details>
|
|
96
96
|
|
|
97
|
+
Want to see these files populated? Browse [`examples/demo-workspace/`](examples/demo-workspace/) — what a fictional team's project remembers after a month of agent sessions (debt with origins, threads opened and closed, decisions with rationale), plus the org-memory layer mid-curation.
|
|
98
|
+
|
|
97
99
|
## Quick Start
|
|
98
100
|
|
|
99
101
|
```bash
|
|
@@ -120,9 +122,9 @@ When running inside a configured agent runtime, `--from` can be omitted — OACP
|
|
|
120
122
|
|
|
121
123
|
## Coming from `claude -p`?
|
|
122
124
|
|
|
123
|
-
`claude -p` runs an agent synchronously and headless — your script blocks while it works, and
|
|
125
|
+
`claude -p` runs an agent synchronously and headless — your script blocks while it works, and there's no session to glance at, attach to, or steer mid-run.
|
|
124
126
|
|
|
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
|
|
127
|
+
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 the session is right there to watch and steer. Once tasks are messages, review loops, handoffs, and multi-agent coordination come with the shape.
|
|
126
128
|
|
|
127
129
|
**[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
130
|
|
|
@@ -29,6 +29,21 @@ OACP is a file-based coordination protocol. Security considerations include:
|
|
|
29
29
|
- **Script injection** — Report any case where user-controlled input in message fields can lead to command injection via OACP scripts.
|
|
30
30
|
- **Path traversal** — Report any case where message fields or script arguments can read or write files outside the intended directories.
|
|
31
31
|
|
|
32
|
+
### Trust ceiling on shared hosts (Tier 1.5)
|
|
33
|
+
|
|
34
|
+
On a single-OS-user host, OACP cannot *cryptographically prevent* one agent
|
|
35
|
+
from impersonating another, because key-read access and inbox-write access
|
|
36
|
+
collapse to the same uid. Today, `from` fields are unauthenticated and provide
|
|
37
|
+
traceability only — not identity assurance. Message signing (an optional
|
|
38
|
+
extension under design, not yet implemented) would add tamper-evidence and
|
|
39
|
+
third-party-verifiable identity provenance for honest agents; it would still
|
|
40
|
+
not provide same-host anti-impersonation. Hard inter-agent isolation requires
|
|
41
|
+
one OS user per agent (Tier-2), containers, or separate hosts with enforced
|
|
42
|
+
access controls. Hardware-backed keys can strengthen future signing identity
|
|
43
|
+
assurance, but they do not isolate a shared filesystem or process space. Treat
|
|
44
|
+
any `from` field on a shared host as **provenance, not an anti-spoofing
|
|
45
|
+
guarantee.**
|
|
46
|
+
|
|
32
47
|
## Acknowledgments
|
|
33
48
|
|
|
34
49
|
We appreciate responsible disclosure and will credit reporters in release notes (unless you prefer to remain anonymous).
|
|
@@ -79,7 +79,10 @@ 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`, `autonomy_hint`, `related_packet`,
|
|
82
|
+
**Optional fields:** `expires_at`, `channel`, `autonomy_hint`, `related_packet`,
|
|
83
|
+
`related_pr`, `conversation_id`, `parent_message_id`, `context_keys`, plus the
|
|
84
|
+
review-loop telemetry fields `model`, `turns`, `input_tokens`, `output_tokens`,
|
|
85
|
+
`wall_time_s`, and `est_cost_usd`
|
|
83
86
|
|
|
84
87
|
`autonomy_hint` is an advisory sender hint, such as `auto_proceed`. Receivers
|
|
85
88
|
remain authoritative: local autonomy config, message content, safety defaults,
|
|
@@ -88,6 +91,8 @@ interactive human confirmation.
|
|
|
88
91
|
|
|
89
92
|
Receiver autonomy is defined by `agents/<receiver>/config.yaml` and the
|
|
90
93
|
scope-envelope contract in [`docs/protocol/autonomy.md`](docs/protocol/autonomy.md).
|
|
94
|
+
Sender-marked `oacp-guardrails` body fences and the 45-minute standard
|
|
95
|
+
`auto_review` cap are defined there as well.
|
|
91
96
|
|
|
92
97
|
### Message Types
|
|
93
98
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# From `claude -p` to an interactive Claude Code session
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`claude -p` is how most people first script a Claude agent. It works — but if you run agents in automation, it's worth asking a question the one-liner never forces: **why is the agent headless and synchronous in the first place?**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
(A pricing footnote, since earlier versions of this page led with it: Anthropic explored moving programmatic usage — `claude -p`, the Agent SDK, Claude Code GitHub Actions — onto a separate metered credit, but paused that change before it took effect; per the June 15 announcement no such credit exists, subscription limits are unchanged, and advance notice is promised before any future version.)
|
|
6
6
|
|
|
7
7
|
This guide is built to be handed to your agent. Read the first half for the *why*; paste the setup block into your Claude Code session for the *how*.
|
|
8
8
|
|
|
9
|
-
> **Setup is a one-time ~5 minutes. Every task after that is one `oacp send` — async, non-blocking,
|
|
9
|
+
> **Setup is a one-time ~5 minutes. Every task after that is one `oacp send` — async, non-blocking, observable.**
|
|
10
10
|
|
|
11
11
|
## The shape of `claude -p`
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ This guide is built to be handed to your agent. Read the first half for the *why
|
|
|
14
14
|
|
|
15
15
|
- it **blocks** — your script waits for the agent to finish
|
|
16
16
|
- it runs **headless** — no session to glance at, attach to, or steer mid-run
|
|
17
|
-
-
|
|
17
|
+
- it's **one-shot** — one prompt in, one result out; there's no queue behind it, and coordinating several calls is your script's problem
|
|
18
18
|
|
|
19
19
|
That shape was always a compromise. You wanted to script an agent, and `claude -p` was the way to do it from a shell. Synchronous-and-headless came along for the ride.
|
|
20
20
|
|
|
@@ -24,10 +24,10 @@ Run the agent as a **standing interactive Claude Code session**, and *send* it w
|
|
|
24
24
|
|
|
25
25
|
```
|
|
26
26
|
Before: claude -p "do X"
|
|
27
|
-
blocks · headless ·
|
|
27
|
+
blocks · headless · one-shot
|
|
28
28
|
|
|
29
29
|
After: oacp send → a standing interactive session picks it up
|
|
30
|
-
async · you're not blocked ·
|
|
30
|
+
async · you're not blocked · a session you can watch
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Concretely — the call that replaces `claude -p "do X"`:
|
|
@@ -39,23 +39,23 @@ oacp send my-project --from sender --to claude --type task_request \
|
|
|
39
39
|
|
|
40
40
|
Same prompt, different delivery. The text you'd have handed to `claude -p` becomes the message `--body`; `oacp send` drops it in the interactive session's inbox, and the session picks it up and runs it. Sending the prompt as an OACP message is the whole trick — it routes the work into a session running in interactive mode instead of a headless `claude -p` call.
|
|
41
41
|
|
|
42
|
-
The session is a real interactive Claude Code session —
|
|
42
|
+
The session is a real interactive Claude Code session — you're not spoofing interactive mode; you're using it, and feeding it a queue.
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Async is the right shape for most automation — a build, an overnight refactor, a research job — none of it needs your script to sit and wait. And once tasks are messages in an inbox, you get real multi-agent coordination — review loops, handoffs, several agents on one project — instead of a pile of blocking shell calls.
|
|
45
45
|
|
|
46
46
|
## Your options, honestly
|
|
47
47
|
|
|
48
|
-
Two real choices
|
|
48
|
+
Two real choices.
|
|
49
49
|
|
|
50
|
-
**1.
|
|
50
|
+
**1. Keep `claude -p`.** Simplest. It's one line, it works, and nothing about your setup changes. If your automation is a single blocking call and you never need to see inside it, this is fine.
|
|
51
51
|
|
|
52
|
-
**2. OACP — run interactive for real, feed it a queue.** Run a real interactive Claude Code session and send it work.
|
|
52
|
+
**2. OACP — run interactive for real, feed it a queue.** Run a real interactive Claude Code session and send it work. Not a one-liner — it's a workflow change. In exchange you get async dispatch, a session you can watch and steer, and real agent coordination.
|
|
53
53
|
|
|
54
|
-
Option 1 is
|
|
54
|
+
Option 1 is zero effort and stays synchronous, headless, one-shot. Option 2 is a one-time workflow change that removes all three. Pick on that.
|
|
55
55
|
|
|
56
56
|
## What OACP is
|
|
57
57
|
|
|
58
|
-
OACP isn't a
|
|
58
|
+
OACP isn't a `claude -p` replacement tool. It's a file-based protocol for coordinating AI agents — inbox/outbox messaging, structured review loops, shared memory — no server, no daemon, just files in a directory. It was built to run a multi-agent fleet; the `claude -p` swap is **one usage** of it. Full picture: the [README](../README.md) and [SPEC](../SPEC.md). The companion [oacp-skills](https://github.com/kiloloop/oacp-skills) repo packages the runtime guidance — skills that teach Claude, Codex, and other agents to operate the protocol.
|
|
59
59
|
|
|
60
60
|
## Set it up — paste this into your agent
|
|
61
61
|
|
|
@@ -142,7 +142,7 @@ oacp-do() {
|
|
|
142
142
|
|
|
143
143
|
**Request-response callers** — CI doing `RESULT=$(claude -p ...)` and using the output inline. Works too, but not a one-liner: the caller also arms `oacp watch --agent sender` to catch the reply. Worth it for a real pipeline — just know it's more than a swap.
|
|
144
144
|
|
|
145
|
-
**If you just want zero workflow change** and don't care about coordination — keep `claude -p`
|
|
145
|
+
**If you just want zero workflow change** and don't care about coordination — keep `claude -p` (option 1). OACP earns its setup cost when you have more than one agent, recurring work, or you want to see and steer what the agent is doing. If that's not you, we'd rather say so.
|
|
146
146
|
|
|
147
147
|
## Try it
|
|
148
148
|
|
|
@@ -13,7 +13,7 @@ No project, no config, no commit required — just install and run.
|
|
|
13
13
|
|
|
14
14
|
## What doctor checks
|
|
15
15
|
|
|
16
|
-
Doctor organizes its output into
|
|
16
|
+
Doctor organizes its output into six categories. When run without `--project`, only the first category (Environment) runs. With `--project <name>`, all six categories are evaluated.
|
|
17
17
|
|
|
18
18
|
### 1. Environment
|
|
19
19
|
|
|
@@ -50,7 +50,19 @@ Validates YAML files against protocol expectations.
|
|
|
50
50
|
- **packets/** — parses all `.yaml`/`.yml` files and reports syntax errors
|
|
51
51
|
- **status.yaml** — checks required fields (`runtime`, `status`, `capabilities`, `updated_at`), validates enum values, and verifies timestamp format
|
|
52
52
|
|
|
53
|
-
### 5.
|
|
53
|
+
### 5. Autonomy
|
|
54
|
+
|
|
55
|
+
Validates each agent's receiver-autonomy setup (see `docs/protocol/autonomy.md`).
|
|
56
|
+
|
|
57
|
+
- **config.yaml** — validates `autonomy.default_mode`, `auto_review_thresholds`
|
|
58
|
+
(numeric + policy keys, including `external_side_effects: pause |
|
|
59
|
+
allow_pr_artifacts | allow`), `allow_without_task_profile` entries, and
|
|
60
|
+
receiver-controlled `private_repo_allowlist` entries, and
|
|
61
|
+
`continuation_grants`; an absent config is fine (defaults to `always_pause`)
|
|
62
|
+
- **audit directory** — warns if `agents/<agent>/audit/autonomy_decisions/` is missing
|
|
63
|
+
- **orphaned policy refs** — warns when an audit event's `policy_path` points at a config file that no longer exists
|
|
64
|
+
|
|
65
|
+
### 6. Agent Status
|
|
54
66
|
|
|
55
67
|
Checks each agent's `status.yaml` for presence and freshness.
|
|
56
68
|
|
|
@@ -104,6 +116,14 @@ $ oacp doctor --project my-project
|
|
|
104
116
|
[+] claude/status.yaml — valid
|
|
105
117
|
[+] codex/status.yaml — valid
|
|
106
118
|
|
|
119
|
+
[!] Autonomy
|
|
120
|
+
[+] claude/audit/autonomy_decisions — present
|
|
121
|
+
[+] claude/config.yaml — valid
|
|
122
|
+
[+] claude/autonomy audit — no orphaned policy refs
|
|
123
|
+
[!] codex/audit/autonomy_decisions — missing
|
|
124
|
+
mkdir -p $OACP_HOME/projects/my-project/agents/codex/audit/autonomy_decisions
|
|
125
|
+
[+] codex/config.yaml — absent; defaults to always_pause
|
|
126
|
+
|
|
107
127
|
[!] Agent Status
|
|
108
128
|
[+] claude/status.yaml — present
|
|
109
129
|
[!] codex/status.yaml — stale (updated 26h ago)
|
|
@@ -179,6 +199,8 @@ oacp doctor # environment checks only
|
|
|
179
199
|
oacp doctor --project <name> # full workspace + agent checks
|
|
180
200
|
oacp doctor --json # machine-readable JSON output
|
|
181
201
|
oacp doctor --project <name> --json # full checks in JSON format
|
|
202
|
+
oacp doctor --project <name> --fix # auto-fix safe issues (missing inbox dirs, missing/stale status.yaml)
|
|
203
|
+
oacp doctor --memory # advisory checks for OACP_HOME memory git sync
|
|
182
204
|
oacp doctor -o report.txt # save report to file
|
|
183
205
|
```
|
|
184
206
|
|
|
@@ -94,7 +94,6 @@ Codex CLI sends the full prompt to the Codex API on each invocation. There is no
|
|
|
94
94
|
|
|
95
95
|
4. **Lean on diff-only context**
|
|
96
96
|
- For PR fix loops, pass the diff + findings rather than full file contents
|
|
97
|
-
- `run_agent_task.sh` already scopes context to changed files
|
|
98
97
|
|
|
99
98
|
## Gemini
|
|
100
99
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Cross-Runtime Parity Matrix
|
|
2
2
|
|
|
3
|
-
**Date**: 2026-06-
|
|
3
|
+
**Date**: 2026-06-26
|
|
4
4
|
|
|
5
5
|
This is a capability comparison across the currently profiled agent runtimes (Claude Code, Codex, Gemini), compiled from each runtime's self-report and current runtime changelogs. Cursor support is scaffold-only until Cursor-owned onboarding lands, so Cursor is intentionally excluded from this comparison table; see `docs/protocol/runtime_capabilities.md` for its conservative scaffold defaults.
|
|
6
6
|
|
|
7
7
|
Claude was last checked against Claude Code `v2.1.170` with Claude Fable 5 (`claude-fable-5`, serving model verified in-session on the 1M-context variant). Fable 5 (released 2026-06-09, first Mythos-class model) is included at no extra cost on Pro/Max/Team/Enterprise plans Jun 9–22, 2026, with usage credits required after; Opus 4.8 remains available and serves as Fable 5's safeguard-fallback model.
|
|
8
8
|
|
|
9
|
-
Codex was last checked against app update `26.
|
|
9
|
+
Codex was last checked against app update `26.616`, CLI `0.142.3`, the local desktop app `26.623.31921`, OpenAI's GPT-5.5 launch note from 2026-04-23, and the June 2026 Codex/API entries for Sites, Amazon Bedrock, Remote, and Record & Replay.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -17,16 +17,16 @@ Codex was last checked against app update `26.602`, CLI `0.137.0`, OpenAI's GPT-
|
|
|
17
17
|
| Spawn background tasks | Yes — Task tool + Bash `run_in_background` | Yes — shell background processes | Yes — `run_command` async mode |
|
|
18
18
|
| Spawn subagents | Yes — typed agents (Explore, Plan, general-purpose, code-reviewer, etc.) | Yes — native multi-agent lifecycle with runtime metadata and follow-up defaults | Partial — `browser_subagent` only |
|
|
19
19
|
| Parallel agent teams | Yes — TeamCreate, task lists, SendMessage, broadcast | Partial — parallel spawned agents are supported, but there is no team/task-list primitive | No — parallel tool calls but no independent agent instances |
|
|
20
|
-
| MCP tools | Yes — extensible via MCP servers | Yes — MCP/plugin support with `/mcp verbose`, per-server environment targeting, read-only MCP parallelism,
|
|
20
|
+
| MCP tools | Yes — extensible via MCP servers | Yes — MCP/plugin support with `/mcp verbose`, per-server environment targeting, read-only MCP parallelism, scriptable plugin inventory, and default tool-search exposure where supported | Yes — MCP server support |
|
|
21
21
|
| Web search | Yes — native WebSearch tool | Yes — web search/fetch tools; hosted web tools are expanding in code-mode flows | Yes — native `search_web` tool |
|
|
22
22
|
| Browser interaction | Partial — WebFetch (read-only, HTML→markdown) | Partial — in-app browser and Chrome extension can inspect local/public and approved browser contexts, with faster asset extraction and read-only JS structured-data extraction; not full browser automation | Yes — full browser control (click, type, navigate, screenshot, video) |
|
|
23
23
|
| File system access | Sandboxed — configurable read/write allowlists | Policy-dependent per session; named permission profiles can include deny-read rules and managed requirements | Full — unrestricted |
|
|
24
24
|
| Git operations | Yes — via Bash (may need sandbox configuration) | Yes — native | Yes — via shell |
|
|
25
25
|
| GitHub CLI (gh) | Yes — via Bash (may need sandbox configuration) | Yes — authenticated | Yes — native |
|
|
26
26
|
| Session memory | Strong — auto-loaded MEMORY.md + optional MCP memory | Partial — app memories where available plus OACP file memory; app memories are not protocol SSOT | Partial — Knowledge Items (not directly writable), conversation logs |
|
|
27
|
-
| Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan Mode, Goal mode, side conversations,
|
|
27
|
+
| Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan Mode, Goal mode, side conversations, archive/unarchive/delete flows, and token-budget-aware long-running work | Yes — chat with task UI, artifacts |
|
|
28
28
|
| Context window | ~1M with Fable 5 or Opus 4.8 (auto-compaction extends indefinitely) | Model-dependent; GPT-5.5 in Codex is documented at 400K, with no auto-compaction guarantee | ~1M tokens |
|
|
29
|
-
| Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× Opus 4.8's $5/$25) | Not surfaced per session; GPT-5.5 Fast mode trades 2.5x cost for 1.5x token generation speed
|
|
29
|
+
| Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× Opus 4.8's $5/$25) | Not surfaced per session; GPT-5.5 Fast mode trades 2.5x cost for 1.5x token generation speed, and newer CLI builds add explicit token budgets for bounded work | Token-based |
|
|
30
30
|
| Sandbox restrictions | Yes — configurable allowlists | Session-dependent; supports deny-read policies, isolated `codex exec`, named permission profiles, managed requirements, and explicit approval policies | None — full system access |
|
|
31
31
|
|
|
32
32
|
---
|
|
@@ -57,6 +57,8 @@ Codex was last checked against app update `26.602`, CLI `0.137.0`, OpenAI's GPT-
|
|
|
57
57
|
| Hosted site deployment | Codex | Sites preview can create, deploy, inspect, and manage hosted websites or internal tools through the Codex app |
|
|
58
58
|
| Plugin marketplace inventory | Codex | Plugin directory plus `codex plugin list --json` for installed plugin inventory and marketplace-aware diagnostics |
|
|
59
59
|
| Goal mode | Codex | Stable long-running objective mode with dedicated state; candidate for OACP wait/review-loop experiments |
|
|
60
|
+
| Record & Replay | Codex | Mac desktop workflows can be recorded and converted into reusable skills; candidate for private skill capture after privacy review |
|
|
61
|
+
| Current-time reminders | Codex | CLI can remind agents of current time/date context; useful for protocol work with relative dates and scheduled waits |
|
|
60
62
|
|
|
61
63
|
---
|
|
62
64
|
|
|
@@ -97,6 +99,7 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
|
|
|
97
99
|
| Context limits | Auto-compaction mitigates | Model-dependent; GPT-5.5 in Codex is 400K, but there is no documented auto-compaction behavior | Large but finite |
|
|
98
100
|
| No terminal stdin | Yes | — | — |
|
|
99
101
|
| Cost not surfaced | — | Yes | — |
|
|
102
|
+
| Permanent session delete | — | `codex delete` is available; use archive/unarchive for routine cleanup and reserve delete for explicit destructive cleanup | — |
|
|
100
103
|
| Serving model can change mid-session | Yes (Fable 5 only — cyber/bio-chem/distillation classifiers fall back to Opus 4.8; default and non-configurable in Claude interfaces incl. Claude Code, with a session event emitted; <5% of sessions — system card §1.5) | — | — |
|
|
101
104
|
|
|
102
105
|
---
|
|
@@ -135,16 +138,17 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
|
|
|
135
138
|
| Workflow file format | SKILL.md with YAML frontmatter | SKILL.md with YAML frontmatter | Markdown with YAML frontmatter |
|
|
136
139
|
| Policy visibility at runtime | Partial (sandbox config visible) | Yes (session policy, approval policy, sandbox, and named permission profiles) | Yes (`SafeToAutoRun` flags) |
|
|
137
140
|
| Long-running shell sessions | Bash tool (no stdin) | Yes (PTY + stdin; multiple terminals in app) | Yes (`send_command_input`) |
|
|
138
|
-
| App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, archive/thread APIs, schema generation) | No |
|
|
141
|
+
| App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, archive/thread APIs, schema generation, remote execution improvements, and multi-agent continuation surfaces) | No |
|
|
139
142
|
| Hosted site deployment | No | Yes (Sites preview, app-only/cloud-hosted with separate secret management) | No |
|
|
143
|
+
| Desktop workflow capture | No | Yes (Record & Replay on Mac; privacy-sensitive and best treated as private-skill capture until reviewed) | No |
|
|
140
144
|
|
|
141
145
|
---
|
|
142
146
|
|
|
143
147
|
## 8. Source Notes
|
|
144
148
|
|
|
145
149
|
- GPT-5.5 Codex availability, 400K context, Fast mode, token-efficiency, and API timing come from OpenAI's 2026-04-23 release note: <https://openai.com/index/introducing-gpt-5-5/>.
|
|
146
|
-
- Codex app/CLI capability changes through app `26.
|
|
147
|
-
- Sites, Amazon Bedrock, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
|
|
150
|
+
- Codex app/CLI capability changes through app `26.616`, CLI `0.142.3`, and the local desktop app `26.623.31921` come from OpenAI's Codex changelog and local Codex runtime checks: <https://developers.openai.com/codex/changelog>.
|
|
151
|
+
- Sites, Amazon Bedrock, Remote, Record & Replay, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
|
|
148
152
|
- Claude Fable 5 release date, pricing, and plan-inclusion window come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>. Safeguard-fallback behavior comes from the Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards"): client apps and Claude interfaces auto-fall back to Opus 4.8 (default and non-configurable in interfaces, session event emitted), while the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback. The serving model in the header was verified in-session by the Claude runtime.
|
|
149
153
|
|
|
150
154
|
---
|
|
@@ -80,7 +80,6 @@ For Claude Code projects, copy templates into the repo's `.claude/` directory:
|
|
|
80
80
|
# From the oacp repo root:
|
|
81
81
|
cp templates/claude/agents/role_agent.template.md /path/to/repo/.claude/agents/<role>.md
|
|
82
82
|
cp templates/claude/rules/guardrail.template.md /path/to/repo/.claude/rules/guardrails.md
|
|
83
|
-
cp templates/claude/skills/session_lifecycle.template.md /path/to/repo/.claude/skills/lifecycle/SKILL.md
|
|
84
83
|
```
|
|
85
84
|
|
|
86
85
|
## 5) Initialize packet files (source checkout only)
|
|
@@ -179,7 +179,7 @@ Once both runtimes can resolve a shared skill path (e.g., `shared/skills/<name>/
|
|
|
179
179
|
|
|
180
180
|
## Example: check-inbox (unified)
|
|
181
181
|
|
|
182
|
-
See the current Claude and Codex implementations:
|
|
182
|
+
See the current Claude and Codex implementations in the [oacp-skills](https://github.com/kiloloop/oacp-skills) repo:
|
|
183
183
|
- `claude/skills/check-inbox/SKILL.md`
|
|
184
184
|
- `codex/skills/check-inbox/SKILL.md`
|
|
185
185
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Versioning Guide
|
|
2
|
+
|
|
3
|
+
The `oacp-cli` package follows semantic versioning:
|
|
4
|
+
|
|
5
|
+
- `v0.x.y` while the CLI surface and protocol are still stabilizing.
|
|
6
|
+
- `v1.0.0` once format fields and loop controls are stable.
|
|
7
|
+
|
|
8
|
+
## Change Types
|
|
9
|
+
|
|
10
|
+
- Patch (`x.y.Z`): wording fixes, non-breaking docs improvements.
|
|
11
|
+
- Minor (`x.Y.0`): new optional fields/templates/scripts.
|
|
12
|
+
- Major (`X.0.0`): breaking template/protocol changes.
|
|
13
|
+
|
|
14
|
+
## Where the Version Lives
|
|
15
|
+
|
|
16
|
+
`pyproject.toml` is the single source of truth. `oacp/__init__.py` resolves
|
|
17
|
+
`__version__` at runtime via `importlib.metadata`, so `oacp --version` always
|
|
18
|
+
reports the installed package version — the version number itself is edited in
|
|
19
|
+
exactly one file (the release-bump PR also adds the matching `CHANGELOG.md`
|
|
20
|
+
section, see below).
|
|
21
|
+
|
|
22
|
+
## Release Pipeline
|
|
23
|
+
|
|
24
|
+
Releases flow through a staged promotion: development repo → private staging
|
|
25
|
+
repo (soak) → public repo (`kiloloop/oacp`) → PyPI. Every repository content
|
|
26
|
+
change lands via a reviewed pull request (branch protection enforces squash
|
|
27
|
+
merges and rejects direct pushes); the one non-PR step is the release tag
|
|
28
|
+
itself, which triggers the publish workflow.
|
|
29
|
+
|
|
30
|
+
1. **Pre-export audit** — run `make preflight ARGS="--full"` (conflict-marker
|
|
31
|
+
scan, Makefile checks, YAML validation, ruff, shellcheck, full test suite),
|
|
32
|
+
then scan for leaks: hardcoded user paths, private repository references,
|
|
33
|
+
secret patterns, and SPDX headers on all tracked Python files. All checks
|
|
34
|
+
must pass before anything is exported.
|
|
35
|
+
2. **Version bump PR** — update the `version` in `pyproject.toml` and add a
|
|
36
|
+
`CHANGELOG.md` section in [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
37
|
+
format. Gather the changes with `git log --oneline <last-tag>..HEAD`.
|
|
38
|
+
3. **Export to staging** — open a staging PR mirroring the development branch.
|
|
39
|
+
The export copies the tracked tree only (`git archive`), so gitignored
|
|
40
|
+
local files never leave the development machine; rerun the leak audit on
|
|
41
|
+
the staged tree before merging. Non-urgent releases soak here before
|
|
42
|
+
promotion; urgent fixes may skip the soak.
|
|
43
|
+
4. **Promote to public** — open a promotion PR into `kiloloop/oacp` under the
|
|
44
|
+
release automation identity; a human reviews and merges it. The squash
|
|
45
|
+
commit message becomes permanent public history — keep it free of internal
|
|
46
|
+
references (the PR description alone is not what gets published).
|
|
47
|
+
5. **Tag and publish** — push an annotated `vX.Y.Z` tag to the public repo
|
|
48
|
+
(a direct tag push, not a PR). The tag-triggered release workflow reruns
|
|
49
|
+
the checks, builds the sdist/wheel, publishes `oacp-cli` to PyPI via
|
|
50
|
+
[Trusted Publishing](https://docs.pypi.org/trusted-publishers/) (OIDC — no
|
|
51
|
+
long-lived API tokens), and creates the GitHub Release with notes from the
|
|
52
|
+
CHANGELOG section.
|
|
53
|
+
6. **Verify** — check the version-pinned endpoint
|
|
54
|
+
`https://pypi.org/pypi/oacp-cli/<version>/json` first; the unversioned
|
|
55
|
+
"latest" endpoint and the pip simple index can lag a few minutes behind it.
|
|
56
|
+
Then install and confirm `oacp --version` prints the new version. On a
|
|
57
|
+
machine with an existing uv-managed install, replace it explicitly —
|
|
58
|
+
`uv cache prune`, `uv tool uninstall oacp-cli`, then
|
|
59
|
+
`uv tool install oacp-cli==<version> --no-cache`; the short
|
|
60
|
+
`uv tool install` form is only reliable in a clean tool environment.
|
|
61
|
+
|
|
62
|
+
## Doc-Only Changes
|
|
63
|
+
|
|
64
|
+
Documentation-only updates promote through the same two-PR staging path
|
|
65
|
+
(staging PR plus public PR) with no version bump, no tag, and no PyPI publish.
|