oacp-cli 0.4.0__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.github/workflows/release.yml +1 -1
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/CHANGELOG.md +167 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/PKG-INFO +1 -1
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/doctor.md +4 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/runtime_capability_matrix.md +35 -30
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/autonomy.md +196 -20
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/inbox_outbox.md +5 -3
- oacp_cli-0.4.2/docs/protocol/message_signing.md +383 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/pyproject.toml +2 -1
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/_oacp_constants.py +6 -1
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/agent_profile.py +9 -3
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/autonomy_gate.py +423 -29
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/claude_envelope_hook.py +650 -30
- oacp_cli-0.4.2/scripts/envelope_compiler.py +736 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/message_signing.py +67 -19
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/message_verify.py +313 -31
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_doctor.py +275 -12
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_inbox.py +108 -25
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/oacp_watch.py +67 -13
- oacp_cli-0.4.2/scripts/policy_signing.py +643 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/send_inbox_message.py +48 -10
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/trust_cli.py +120 -6
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/trust_root.py +234 -31
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_side_effect_verbs_auto_accepts.yaml +1 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_without_profile_auto_accepts.yaml +1 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/negated_guardrails.yaml +9 -3
- oacp_cli-0.4.2/tests/conformance/intake/README.md +26 -0
- oacp_cli-0.4.2/tests/conformance/intake/configs/enforce.yaml +17 -0
- oacp_cli-0.4.2/tests/conformance/intake/configs/off.yaml +17 -0
- oacp_cli-0.4.2/tests/conformance/intake/configs/warn.yaml +17 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/signed_basic__enforce.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__enforce.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__off.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/signed_revoked__warn.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__enforce.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__off.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_body_flip__warn.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__enforce.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__off.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/tamper_kid_unknown__warn.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__enforce.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__off.yaml +9 -0
- oacp_cli-0.4.2/tests/conformance/intake/expected/unsigned_notification__warn.yaml +9 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_autonomy_gate.py +375 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_claude_envelope_hook.py +706 -1
- oacp_cli-0.4.2/tests/test_default_envelope.py +173 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_envelope_compiler.py +150 -0
- oacp_cli-0.4.2/tests/test_envelope_public_admission.py +394 -0
- oacp_cli-0.4.2/tests/test_inbox_verify.py +424 -0
- oacp_cli-0.4.2/tests/test_intake_conformance.py +133 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_message_verify.py +2 -2
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_constants.py +23 -1
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_doctor.py +305 -2
- oacp_cli-0.4.2/tests/test_policy_signing.py +555 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_trust_root.py +21 -0
- oacp_cli-0.4.0/docs/protocol/message_signing.md +0 -212
- oacp_cli-0.4.0/scripts/envelope_compiler.py +0 -373
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.gitattributes +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.github/workflows/ci.yml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/.gitignore +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/CONTRIBUTING.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/LICENSE +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/Makefile +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/QUICKSTART.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/SECURITY.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/SPEC.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/from-claude-p.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/adoption.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/prompt_caching.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/setup.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/unified_skill_spec.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/guides/versioning.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-cli-demo.png +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-filesystem-tree.png +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/img/oacp-fleet-thread.png +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/agent_profiles.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/agent_safety_defaults.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/credential_scoping.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/cross_runtime_sync.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/dispatch_states.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/mcp_integration.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/multi_agent_shared_workspace.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/org_memory.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/packet_states.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/review_loop.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/runtime_capabilities.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/session_init.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/skills_manifest.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/docs/protocol/task_negotiation.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/decisions.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260504-093015-postgres-over-dynamodb.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260508-141220-utc-timestamps-pr-review.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260515-102045-utc-timestamps-webhooks.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260521-163330-utc-timestamps-rule-proposal.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260527-110500-idempotency-keys-merged.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/events/20260602-090210-parcel-api-v020-released.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/recent.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/org-memory/rules.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/archive/2026-05-21-csv-export-timeouts.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/decision_log.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/known_debt.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/open_threads.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/demo-workspace/projects/parcel-api/memory/project_facts.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/examples/quickstart/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/mcp_servers/oacp_coordinator.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/__init__.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/cli.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/oacp/envelope_hook.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/_oacp_env.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/add_agent.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/check_quality_gate.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/codex_session_init.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/create_handoff_packet.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/handoff_schema.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_org_memory.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_packet.sh +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_project_workspace.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/init_project_workspace.sh +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/key_cli.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_archive_common.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_cli.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/memory_sync.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/normalize_findings.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/preflight.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/promote_to_archive.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/record_autonomy_outcome.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/restore_from_archive.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/setup_runtime.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/update_workspace.sh +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/validate_agent_card.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/validate_message.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/scripts/write_event.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_card.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_profile.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/agent_status.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/checkpoint.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/claude/agents/role_agent.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/claude/rules/guardrail.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/findings_packet.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/github_actions_quality_gate.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/coding_standards.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/safe_commands.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/guardrails/secrets_rules.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/handoff_packet.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/inbox_message.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/manual_validation.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/merge_decision.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/decisions.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/events/.gitkeep +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/events/20260317-170120-example-api-convention.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/recent.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/org-memory/rules.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/receiver_config.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/review_packet.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/roles/role_baseline.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/roles/role_definition.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/runtime_capabilities.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/skills_manifest.template.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/templates/test_packet.template.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/checkpoint_breach.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/continuation_drift.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/continuation_within.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/declaration_error.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/declaration_intent.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/actuals/top_level_side_effect_keys.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/audits/prior_thread_grant_approved.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/always_pause.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_continuation_enabled.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_external_pause.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/auto_review_tight.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/configs/malformed_config.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/always_pause_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/ambiguous_scope_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/brainstorm_destructive_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/checkpoint_breach_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/clean_auto_review_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_destructive_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_disabled_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_drift_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_enabled_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/continuation_grant_external_uncovered_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declaration_error_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declaration_intent_checkpoint_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/declared_destructive_ops_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/expired_message_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/guardrails_fence_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_dangerously_skip_permissions_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_external_side_effects_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_force_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_masking_threshold_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_no_verify_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_no_verify_upper_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_rm_rf_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_commercial_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_config_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_credentials_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_memory_ssot_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_pricing_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_public_repo_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_scope_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_sensitive_secret_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/hard_stop_side_effect_before_sensitive_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/invalid_message_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/lexical_declared_false_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/malformed_config_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/minutes_45_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/minutes_46_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/missing_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/negated_guardrails_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/path_like_deploy_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_issue_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_pr_artifacts_auto_accepts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/private_pr_with_merge_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/public_pr_artifacts_pause.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/risk_obvious_no_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/side_effect_booleans_pause.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/threshold_breach_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/tight_threshold_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/top_level_side_effect_actuals_ignored.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/expected/unparsable_task_profile_pauses.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/ambiguous_scope.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_destructive.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_side_effect_verbs.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/brainstorm_without_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/clean_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant_destructive.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/continuation_grant_external_uncovered.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/declared_destructive_ops.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/expired_message.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/guardrails_fence.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_dangerously_skip_permissions.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_external_side_effects.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_force.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_masking_threshold.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_no_verify.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_no_verify_upper.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_rm_rf.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/hard_stop_sensitive_scope.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/invalid_message.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/lexical_declared_false.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/minutes_45.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/minutes_46.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/missing_task_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/path_like_deploy.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_issue_artifacts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_pr_artifacts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/private_pr_with_merge.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/public_pr_artifacts.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/risk_obvious_no_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_commercial.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_config.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_credentials.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_memory_ssot.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_pricing.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_public_repo.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/sensitive_secret.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/side_effect_before_sensitive.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/side_effect_booleans.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/threshold_breach.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/autonomy/messages/unparsable_task_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/configs/auto_review_standard.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/configs/malformed.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/clean_pr_task_compiles.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/docs_only_task_compiles.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/granular_capabilities_compile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/invalid_numeric_fails.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/malformed_config_fails.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/missing_profile_fails.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/expected/unparsable_profile_fails.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/clean_pr_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/docs_only_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/granular_capabilities_task.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/invalid_numeric.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/missing_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/envelope/messages/unparsable_profile.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/README.md +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_basic.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_lookalike.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_multisig.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/signed_revoked.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/expected/unsigned_notification.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/alice.json +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/bob.json +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/keys/carol.json +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_basic.prefix.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_basic.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_lookalike.prefix.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_lookalike.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_multisig.prefix.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_multisig.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_revoked.prefix.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/signed_revoked.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_auth_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_body_flip.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_container_reformat.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_crlf_trailer.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_header_reencode.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_identity_mismatch.prefix.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_identity_mismatch.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_indented_trailer.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_cross_agent.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_kid_unknown.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_missing_final_lf.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_padded_b64.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_sig_alias.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_sig_corrupt.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailer_transplant.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailing_blank_line.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/tamper_trailing_space.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/messages/unsigned_notification.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/pins/allowed_signers.yaml +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/conformance/signing/regen_fixtures.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_add_agent.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_agent_profile.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_autonomy_conformance_fixtures.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_codex_session_init.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_create_handoff_packet.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_envelope_conformance_fixtures.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_github_workflows.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_handoff_schema.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_init_project_workspace.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_memory_archive.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_memory_sync.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_message_signing.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_cli.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_coordinator.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_env.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_inbox.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_oacp_watch.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_preflight.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_record_autonomy_outcome.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_review_loop.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_send_inbox_message.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_session_lifecycle_hooks.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_setup_runtime.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_signing_conformance.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_update_workspace.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_validate_agent_card.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_validate_message.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_workspace_discovery.py +0 -0
- {oacp_cli-0.4.0 → oacp_cli-0.4.2}/tests/test_write_event.py +0 -0
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
- name: Install Python dependencies
|
|
33
33
|
run: |
|
|
34
34
|
python -m pip install --upgrade pip
|
|
35
|
-
python -m pip install -e . build pytest ruff
|
|
35
|
+
python -m pip install -e ".[crypto]" build pytest ruff
|
|
36
36
|
|
|
37
37
|
- name: Run quality gate
|
|
38
38
|
run: make preflight ARGS="--full"
|
|
@@ -5,6 +5,171 @@ 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.4.2] - 2026-08-07
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Profileless admitted requests now receive a documented **default scope
|
|
13
|
+
envelope** instead of running unbounded: 25 minutes / 2 files /
|
|
14
|
+
reply-only, every capability and risk flag false, `risk_tier` mirroring
|
|
15
|
+
the message's declared priority (else `P2`). `allow_without_task_profile`
|
|
16
|
+
is thereby an admission-only exemption — the sender needn't author a
|
|
17
|
+
profile, but the bound always exists, and the post-accept threshold
|
|
18
|
+
checkpoint is always evaluable. A sender-attached voluntary profile on an
|
|
19
|
+
exempt type is the documented override path and replaces the default
|
|
20
|
+
entirely. Every decision names its envelope origin in the new
|
|
21
|
+
`scope_envelope_source` field (`task_profile` / `default_profileless`),
|
|
22
|
+
and `scope_envelope: null` on an admitted record is now a schema
|
|
23
|
+
violation the audit writer refuses to persist. Protocol spec version
|
|
24
|
+
bumps to 0.4.2.
|
|
25
|
+
- Admitted public-visibility tasks gain an explicit, recorded enforcement
|
|
26
|
+
branch: `oacp envelope compile --audit <admission-record>` on a
|
|
27
|
+
`public_visibility: true` task whose record carries a human admission
|
|
28
|
+
approval deliberately does **not** compile (a compiled public envelope
|
|
29
|
+
denies the entire approved chain) and instead stamps
|
|
30
|
+
`envelope_enforcement: none` with the named reason
|
|
31
|
+
`public_visibility_admission_approved` into the audit record — the
|
|
32
|
+
degradation is a documented mode with the human as the bound, not a
|
|
33
|
+
silent absence. The approval record is treated as authorization:
|
|
34
|
+
`--audit` must resolve inside the receiver's canonical admission audit
|
|
35
|
+
directory, the record must be an admission-paused record bound to the
|
|
36
|
+
exact verified message snapshot (`message_sha256`) with a recorded
|
|
37
|
+
`approved`/`modified` outcome, eligibility and the stamp consume one
|
|
38
|
+
locked read, and the branch fails closed while any envelope is active
|
|
39
|
+
for the receiver. Unapproved public tasks and all private tasks are
|
|
40
|
+
unaffected and keep the fail-closed compile path.
|
|
41
|
+
- `signing.verify_mode: enforce` is now a real mode with a real caller.
|
|
42
|
+
The autonomy gate invokes verification at message intake, before any
|
|
43
|
+
evaluation: under enforce, only a `signed-verified` message proceeds —
|
|
44
|
+
every other outcome (unsigned, INVALID, unknown-kid, revoked,
|
|
45
|
+
unverifiable) quarantines a mode-600 evidence copy into the receiver's
|
|
46
|
+
`dead_letter/`, evaluates nothing, and exits `3` with an
|
|
47
|
+
`intake_rejected` decision object. Rejection is mechanism, not
|
|
48
|
+
per-receiver diligence; previously the mode silently degraded to warn
|
|
49
|
+
and nothing on the receive path consumed it. Warn and off behavior are
|
|
50
|
+
unchanged. The receive-path contract is pinned by a new executable
|
|
51
|
+
conformance corpus at `tests/conformance/intake/` (four failure classes
|
|
52
|
+
under each mode, plus a signed-verified positive control).
|
|
53
|
+
- Policy-file signing: `oacp trust sign-policy` signs a receiver's
|
|
54
|
+
`config.yaml` and `trust/allowed_signers.yaml` with the receiver's own
|
|
55
|
+
local key, under a distinct JOSE profile (`oacp-policy+yaml` /
|
|
56
|
+
`urn:oacp:policy:v1`) so message and policy signatures can never be
|
|
57
|
+
exchanged. Loaders verify at load time: audit records now carry a
|
|
58
|
+
`policy_auth` block binding `policy_sha256` to an authorized signer; a
|
|
59
|
+
tampered `config.yaml` fails closed with the new pinned reason code
|
|
60
|
+
`policy_auth_invalid` before anything — including its own
|
|
61
|
+
`verify_mode` — reads it, and a tampered `allowed_signers.yaml` makes
|
|
62
|
+
the trust root unusable (under enforce, everything then rejects).
|
|
63
|
+
Unsigned policy files remain loadable with the unsigned state recorded
|
|
64
|
+
(bootstrap: init → key gen → sign-policy).
|
|
65
|
+
- Policy signatures bind their target context — `{project, receiver,
|
|
66
|
+
kind}` in the protected header — so a signed policy can never be
|
|
67
|
+
replayed across projects, receivers, or between `config.yaml` and
|
|
68
|
+
`allowed_signers.yaml`. `sign-policy` also enrolls each target in a
|
|
69
|
+
machine-local registry (`$OACP_HOME/keys/policy_enrollment.json`):
|
|
70
|
+
once enrolled, a policy file without a verifiable signature is
|
|
71
|
+
`invalid`, never `unsigned` — stripping a trailer stops being a
|
|
72
|
+
downgrade path. Trust mutations (`trust import` / `revoke`)
|
|
73
|
+
atomically re-sign an enrolled trust root or refuse the write.
|
|
74
|
+
- Single-read snapshot discipline on every receiver read path: the gate,
|
|
75
|
+
the trust-root load, and all policy consumers (envelope compiler, send
|
|
76
|
+
helper, trust mutations, inbox lister) verify and parse ONE bounded
|
|
77
|
+
read of each security-sensitive file, closing the window where a
|
|
78
|
+
config, message, or pins file could be swapped between its
|
|
79
|
+
verification and its use. The audit record's `message_sha256` now
|
|
80
|
+
names the verified snapshot bytes.
|
|
81
|
+
- Every non-gate inbox read path goes through one shared receive
|
|
82
|
+
boundary (verify one bounded snapshot before parsing it): the `oacp
|
|
83
|
+
inbox` lister, the `oacp watch` event emitter, the send helper's
|
|
84
|
+
parent-message lookup, and the trust drift report's traffic probe.
|
|
85
|
+
Under `enforce`, an unverified message surfaces as a held row/event
|
|
86
|
+
built from filesystem metadata only (no attacker-controlled field is
|
|
87
|
+
parsed or surfaced), never donates thread identity to replies, and
|
|
88
|
+
never counts as sender liveness; under `warn` rows and events carry
|
|
89
|
+
the verification status. A receiver config that fails policy
|
|
90
|
+
authorization cannot choose a weaker mode — these paths fail closed
|
|
91
|
+
to enforce. The envelope compiler refuses to compile from a message
|
|
92
|
+
that is not signed-verified under enforce, and the envelope's
|
|
93
|
+
`message_sha256` names the verified snapshot. `oacp trust list` and
|
|
94
|
+
doctor readiness calculations load policy files through the
|
|
95
|
+
authorized loader; `oacp doctor` reports per-receiver policy-file
|
|
96
|
+
authorization status.
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
|
|
100
|
+
- Intake conformance tests now skip goldens that pin a
|
|
101
|
+
signature-evaluation outcome when the optional cryptography dependency
|
|
102
|
+
is not installed, restoring the suite's graceful degradation without
|
|
103
|
+
the `[crypto]` extra. The release quality gate installs the extra so
|
|
104
|
+
the full signing matrix runs before publishing.
|
|
105
|
+
- Agent enumeration now consistently ignores hidden directories under
|
|
106
|
+
`agents/`, preventing runtime scaffolding such as `.claude/.cc-writes` from
|
|
107
|
+
appearing as phantom agents in doctor, inbox, profile, and trust workflows.
|
|
108
|
+
- Autonomy-gate negation demotion now recognizes common scope language and
|
|
109
|
+
carries unambiguous negation headings over their immediately following,
|
|
110
|
+
bounded block. Blank lines and subsequent headings end that scope, while
|
|
111
|
+
non-demotable side-effect and content-sensitivity hard stops remain hard.
|
|
112
|
+
- Claude envelope enforcement now allows a reconstructed Edit/Write change
|
|
113
|
+
confined to the project's own `[project] version` string in
|
|
114
|
+
`pyproject.toml` under `touches_dependencies: false`, while counting the
|
|
115
|
+
file and continuing to deny real dependency, mixed, ambiguous, and
|
|
116
|
+
Bash-side manifest edits.
|
|
117
|
+
- The foreign-session read-only `oacp envelope show` exemption now recognizes
|
|
118
|
+
argparse-equivalent `--option=value` spellings, unambiguous long-option
|
|
119
|
+
abbreviations, and help flags without weakening its fail-closed handling of
|
|
120
|
+
unknown options.
|
|
121
|
+
- Autonomy audit records now resolve `runtime.model` at the writer instead
|
|
122
|
+
of defaulting to a silent null. The serving model resolves caller-first
|
|
123
|
+
(an explicit `runtime.model` on the decision), then from the
|
|
124
|
+
`OACP_RUNTIME_MODEL` environment variable exported by the invoking
|
|
125
|
+
session, and is normalized at write time: case variants fold to
|
|
126
|
+
lowercase, and `[context]` suffixes split into the base id plus a
|
|
127
|
+
separate `model_context` field. `model_source` names the provenance and
|
|
128
|
+
`model_raw` preserves any input the normalization changed. Records with
|
|
129
|
+
no signal carry an explicit `model_unknown_reason` — never a silent
|
|
130
|
+
null — and the requested model (harness configuration) is never used as
|
|
131
|
+
a fallback. Historical records are not backfilled.
|
|
132
|
+
- The autonomy audit writer now validates `result.completion_kind` against
|
|
133
|
+
the pinned enum at write time, refusing to persist decisions that carry
|
|
134
|
+
a caller-composed off-enum kind.
|
|
135
|
+
|
|
136
|
+
## [0.4.1] - 2026-08-04
|
|
137
|
+
|
|
138
|
+
### Fixed
|
|
139
|
+
|
|
140
|
+
- Receiver configs that omit the `autonomy` block, such as signing-only
|
|
141
|
+
configs, now preserve the same conservative `always_pause` behavior as an
|
|
142
|
+
absent config file. Doctor reports the config as valid, and the autonomy
|
|
143
|
+
evaluator records the normal `admission_paused` / `mode_always_pause`
|
|
144
|
+
fingerprint instead of treating the config as malformed.
|
|
145
|
+
- The Claude envelope hook now splits compound Bash commands only at shell
|
|
146
|
+
operators outside quoted arguments and command substitutions, so read-only
|
|
147
|
+
patterns containing literal pipes and backslash-newline continuations no
|
|
148
|
+
longer produce false escalation while later mutating segments remain gated.
|
|
149
|
+
Its conservative parser fallback recognizes only a small, redirect-free
|
|
150
|
+
read-only command set. Every emitted ask or deny reason now starts with the
|
|
151
|
+
stable `[oacp-envelope]` source tag and includes the active task message id
|
|
152
|
+
when available, making hook prompts distinguishable from harness prompts.
|
|
153
|
+
- Envelope enforcement is now session-scoped. The compiled envelope
|
|
154
|
+
records the harness session that compiled it (via a hook-observed
|
|
155
|
+
session claim consumed by the compiler), and the Claude adapter
|
|
156
|
+
no-ops for tool calls from any other session — a concurrent
|
|
157
|
+
interactive session in the same repository no longer inherits a
|
|
158
|
+
dispatched task's constraints or consumes its `files_touched`
|
|
159
|
+
budget. Envelopes compiled without a resolvable session (un-hooked
|
|
160
|
+
runtimes, or callers the harness gave no session id) stay unbound
|
|
161
|
+
and keep the historical whole-workspace enforcement scope, and
|
|
162
|
+
same-task recompiles — including a post-re-authorization
|
|
163
|
+
`--extend` from outside the bound session — inherit the existing
|
|
164
|
+
binding.
|
|
165
|
+
- The autonomy gate evaluator now persists complete, lock-serialized
|
|
166
|
+
audit records to the `--audit-dir` destination; previously an
|
|
167
|
+
evaluation could finish without writing the durable record.
|
|
168
|
+
- `oacp doctor` now reports trust-pin completeness per receiver and
|
|
169
|
+
gates enforce-mode signing readiness on it: every catalog identity
|
|
170
|
+
must carry an active pin before a receiver flips to enforce, with
|
|
171
|
+
gaps broken down per receiver in doctor output.
|
|
172
|
+
|
|
8
173
|
## [0.4.0] - 2026-07-17
|
|
9
174
|
|
|
10
175
|
### Added
|
|
@@ -537,6 +702,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
537
702
|
- Checkout step in github-release workflow job (#19)
|
|
538
703
|
- Pre-release audit fixes: SHA-pinned actions, dangling doc refs (#15, #16)
|
|
539
704
|
|
|
705
|
+
[0.4.2]: https://github.com/kiloloop/oacp/compare/v0.4.1...v0.4.2
|
|
706
|
+
[0.4.1]: https://github.com/kiloloop/oacp/compare/v0.4.0...v0.4.1
|
|
540
707
|
[0.4.0]: https://github.com/kiloloop/oacp/compare/v0.3.5...v0.4.0
|
|
541
708
|
[0.3.5]: https://github.com/kiloloop/oacp/compare/v0.3.4...v0.3.5
|
|
542
709
|
[0.3.4]: https://github.com/kiloloop/oacp/compare/v0.3.3...v0.3.4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oacp-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: Open Agent Coordination Protocol CLI for file-based multi-agent workflows
|
|
5
5
|
Project-URL: Homepage, https://github.com/kiloloop/oacp
|
|
6
6
|
Project-URL: Repository, https://github.com/kiloloop/oacp
|
|
@@ -35,6 +35,10 @@ Checks the project directory structure under `$OACP_HOME/projects/<name>/`.
|
|
|
35
35
|
- **workspace.json** — must exist and contain valid JSON
|
|
36
36
|
- **agents/ directory** — must exist; reports the number of registered agents
|
|
37
37
|
|
|
38
|
+
Agent discovery ignores hidden directories directly under `agents/`. Tooling
|
|
39
|
+
scaffolding such as `agents/.claude/.cc-writes/` is therefore not counted or
|
|
40
|
+
checked as a phantom agent if a runtime creates it in that location.
|
|
41
|
+
|
|
38
42
|
### 3. Inbox Health
|
|
39
43
|
|
|
40
44
|
Scans each agent's `inbox/` directory for pending messages and staleness.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Cross-Runtime Parity Matrix
|
|
2
2
|
|
|
3
|
-
**Date**: 2026-
|
|
3
|
+
**Date**: 2026-08-03
|
|
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
|
-
Claude was last checked against Claude Code `v2.1.
|
|
7
|
+
Claude was last checked against Claude Code `v2.1.220` (verified in-session 2026-08-03 via `claude --version`) 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 now included in Max and Team Premium plan usage as part of the shared weekly limit pool (the launch-window free-inclusion/credit period has ended); the API rate is $10/$50 per MTok. Claude Opus 5 (`claude-opus-5`, released 2026-07-24) is the current Opus tier at $5/$25 per MTok with the same 1M context; Opus 4.8 remains available at the same price and remains the safeguard-fallback target for Fable 5's classifier fallbacks (unchanged by the Opus 5 release).
|
|
8
8
|
|
|
9
|
-
Codex was last checked against app update `26.
|
|
9
|
+
Codex was last checked against app update `26.727`, stable CLI `0.146.0`, GPT-5.6, and the OpenAI Codex/API changelog entries through 2026-07-30. Runtime availability remains configuration-dependent: standard multi-agent support and memories are stable, while multi-agent V2, token budgets, current-time reminders, and remote Code Mode may still require explicit enablement or experimental configuration.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -15,18 +15,19 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
|
|
|
15
15
|
| Capability | Claude (Claude Code CLI) | Codex (Desktop App) | Gemini |
|
|
16
16
|
| ---------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
17
17
|
| Spawn background tasks | Yes — Task tool + Bash `run_in_background` | Yes — shell background processes | Yes — `run_command` async mode |
|
|
18
|
-
| Spawn subagents | Yes — typed agents (Explore, Plan, general-purpose, code-reviewer, etc.) | Yes — native multi-agent lifecycle with runtime metadata and follow-up
|
|
19
|
-
| Parallel agent teams | Yes — TeamCreate, task lists, SendMessage, broadcast | Partial — parallel
|
|
18
|
+
| Spawn subagents | Yes — typed agents (Explore, Plan, general-purpose, code-reviewer, etc.) | Yes — stable native multi-agent lifecycle with runtime metadata and follow-up controls | Partial — `browser_subagent` only |
|
|
19
|
+
| Parallel agent teams | Yes — TeamCreate, task lists, SendMessage, broadcast | Partial — parallel delegation is supported; opt-in multi-agent V2 adds configurable models, reasoning, concurrency, and roles, but there is no shared team/task-list primitive | No — parallel tool calls but no independent agent instances |
|
|
20
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
|
-
| Browser interaction | Partial — WebFetch (read-only, HTML→markdown) |
|
|
22
|
+
| Browser interaction | Partial — WebFetch (read-only, HTML→markdown) | Configuration-dependent — Browser and Chrome plugins can navigate, click, type, inspect, and capture approved contexts; history search remains separately permissioned | 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
|
+
| Multi-folder projects | Manual workspace composition | Yes — the primary folder controls new chats, Git, and automatic instruction/skill/config discovery; secondary folders provide file access | Manual workspace composition |
|
|
25
|
+
| Git operations | Yes — via Bash (may need sandbox configuration) | Yes — native; in a multi-folder project, operations are rooted in the primary folder | Yes — via shell |
|
|
25
26
|
| GitHub CLI (gh) | Yes — via Bash (may need sandbox configuration) | Yes — authenticated | Yes — native |
|
|
26
|
-
| Session memory | Strong — auto-loaded MEMORY.md + optional MCP memory | Partial — app memories
|
|
27
|
-
| Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan
|
|
28
|
-
| Context window | ~1M
|
|
29
|
-
| Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× Opus 4.8
|
|
27
|
+
| Session memory | Strong — auto-loaded MEMORY.md + optional MCP memory | Partial — stable generated app memories plus OACP file memory; app memories are not protocol SSOT | Partial — Knowledge Items (not directly writable), conversation logs |
|
|
28
|
+
| Interactive mode | Yes — CLI chat with permissions, plan mode | Yes — desktop app and CLI/TUI, including Plan and Goal modes, named and pinned sessions, side-chat switching, forks, and archive/unarchive/delete flows | Yes — chat with task UI, artifacts |
|
|
29
|
+
| Context window | ~1M across the current lineup (Fable 5, Opus 5, Opus 4.8); auto-compaction extends indefinitely | Model-dependent; GPT-5.6 Sol, Terra, and Luna are documented at 272K | ~1M tokens |
|
|
30
|
+
| Cost model | Token-based, visible in statusline; Fable 5 API rate is $10/$50 per MTok (2× the $5/$25 shared by Opus 5 and Opus 4.8) | ChatGPT sessions do not surface per-session cost; API Fast mode for Sol trades 2× price for up to 2.5× speed, while Terra and Luna target lower-cost work | Token-based |
|
|
30
31
|
| 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
32
|
|
|
32
33
|
---
|
|
@@ -41,8 +42,8 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
|
|
|
41
42
|
| Plan mode | Claude, Codex | Claude has structured explore → plan → approve → implement; Codex CLI can move from planning into fresh-context implementation |
|
|
42
43
|
| Auto-compaction | Claude | Context auto-compresses, enabling unlimited session length |
|
|
43
44
|
| Cross-session semantic search | Claude | MCP-based searchable memory (optional) |
|
|
44
|
-
| Browser automation
|
|
45
|
-
| GPT-5.
|
|
45
|
+
| Browser automation | Codex, Gemini | Codex Browser/Chrome plugins can click, type, navigate, inspect, and capture approved contexts; Gemini also supports WebP video recording |
|
|
46
|
+
| GPT-5.6 model family | Codex | Sol, Terra, and Luna provide task-tier choices with a documented 272K context window |
|
|
46
47
|
| Image generation | Codex, Gemini | Codex CLI image generation is enabled by default; Gemini has native `generate_image` |
|
|
47
48
|
| URL content reading (no browser) | Gemini | `read_url_content` fetches HTML→markdown or PDF directly |
|
|
48
49
|
| Code outline navigation | Gemini | `view_file_outline`, `view_code_item` for structured exploration |
|
|
@@ -53,12 +54,14 @@ Codex was last checked against app update `26.616`, CLI `0.142.3`, the local des
|
|
|
53
54
|
| Remote host control | Codex | Mobile or desktop remote control can run work on connected Mac or Windows hosts with host-local files, credentials, plugins, skills, and config |
|
|
54
55
|
| App-level artifact review | Codex | Sidebar preview for generated PDFs, spreadsheets, documents, and presentations |
|
|
55
56
|
| App-level PR review | Codex | PR sidebar can inspect changed files, review comments, and follow-up fixes |
|
|
56
|
-
|
|
|
57
|
+
| Multi-folder projects | Codex | One project can span repositories; the primary folder owns Git and automatic instruction, skill, and config discovery, while secondary folders are file-access-only |
|
|
58
|
+
| Session organization | Codex | CLI/TUI supports named and pinned sessions, side-chat switching, archive/unarchive, deletion, and temporary or persisted forks |
|
|
59
|
+
| App-server automation | Codex | JSON-RPC app-server, SDK, schema generation, thread APIs, and authenticated WebSocket/Unix-socket/stdio transports; remote Code Mode remains experimental |
|
|
57
60
|
| Hosted site deployment | Codex | Sites preview can create, deploy, inspect, and manage hosted websites or internal tools through the Codex app |
|
|
58
|
-
| Plugin marketplace inventory | Codex | Plugin
|
|
61
|
+
| Plugin marketplace inventory | Codex | Agent Plugin manifests, workspace publishing, additional marketplaces, and `codex plugin list --json`; availability and trust remain configuration-dependent |
|
|
59
62
|
| Goal mode | Codex | Stable long-running objective mode with dedicated state; candidate for OACP wait/review-loop experiments |
|
|
60
63
|
| 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
|
|
64
|
+
| Current-time reminders | Codex | Announced CLI surface for relative-date work; feature availability must be checked before workflow dependence |
|
|
62
65
|
|
|
63
66
|
---
|
|
64
67
|
|
|
@@ -80,9 +83,9 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
|
|
|
80
83
|
|
|
81
84
|
| Dimension | Claude | Codex | Gemini |
|
|
82
85
|
| --------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
83
|
-
| Best at | Orchestration, multi-agent teams, persistent memory, plan-then-execute | Terminal-native execution, GPT-5.
|
|
86
|
+
| Best at | Orchestration, multi-agent teams, persistent memory, plan-then-execute | Terminal-native execution, GPT-5.6 agentic coding, fast iterative patching, native delegation, plan-to-implementation handoff, app-assisted review, app-server automation, protocol discipline | Web research, browser automation, visual verification, large context |
|
|
84
87
|
| Ideal task type | Team coordination, complex multi-file refactors, long-running sessions | Shell-heavy workflows, long-horizon coding, targeted file edits, deterministic scripts, PR follow-up, artifact review, CLI planning passes, plugin/app-server automation prototypes | External research, UI testing, document review, MCP integrations |
|
|
85
|
-
| Cost profile | Flexible (haiku subagents for cheap tasks, opus for complex, Fable 5 at 2× Opus API rates for the hardest work) | Per-session cost not visible;
|
|
88
|
+
| Cost profile | Flexible (haiku subagents for cheap tasks, opus for complex, Fable 5 at 2× Opus API rates for the hardest work) | Per-session ChatGPT cost not visible; Sol, Terra, and Luna provide quality/speed/cost tiers, with API Fast mode available for Sol | Token-based, web search has additional costs |
|
|
86
89
|
|
|
87
90
|
---
|
|
88
91
|
|
|
@@ -90,17 +93,17 @@ Scope: skills shipped in [`kiloloop/oacp-skills`](https://github.com/kiloloop/oa
|
|
|
90
93
|
|
|
91
94
|
| Limitation | Claude | Codex | Gemini |
|
|
92
95
|
| ----------------------------- | ----------------------------- | -------------------------------------------------------------- | ---------------------- |
|
|
93
|
-
| No subagents | — |
|
|
94
|
-
| No browser automation | Yes (read-only) |
|
|
96
|
+
| No subagents | — | — | Partial (browser only) |
|
|
97
|
+
| No browser automation | Yes (read-only) | Configuration-dependent — Browser/Chrome plugins and an approved context are required | — |
|
|
95
98
|
| No image generation | Yes | — | — |
|
|
96
99
|
| No persistent writable memory | — | Partial (app memories are not a replacement for OACP durable memory) | Yes |
|
|
97
100
|
| Sandbox friction | Yes (configurable) | Session-dependent | — |
|
|
98
|
-
| No team primitive | — |
|
|
99
|
-
| Context limits | Auto-compaction mitigates |
|
|
101
|
+
| No team primitive | — | Partial — native parallel delegation exists, but not a shared task-list/broadcast primitive | Yes |
|
|
102
|
+
| Context limits | Auto-compaction mitigates | GPT-5.6 Sol, Terra, and Luna are 272K; compaction behavior is runtime-dependent | Large but finite |
|
|
100
103
|
| No terminal stdin | Yes | — | — |
|
|
101
104
|
| Cost not surfaced | — | Yes | — |
|
|
102
105
|
| Permanent session delete | — | `codex delete` is available; use archive/unarchive for routine cleanup and reserve delete for explicit destructive cleanup | — |
|
|
103
|
-
| Serving model can change mid-session | Yes (Fable 5 only — cyber/bio-chem/distillation classifiers fall back to Opus 4.8; default and
|
|
106
|
+
| Serving model can change mid-session | Yes (Fable 5 only — cyber/bio-chem/distillation classifiers fall back to Opus 4.8, a target unchanged by the Opus 5 release; enabled by default and user-configurable in Claude interfaces — off-toggle in Settings > Capabilities, or Config > MODEL & OUTPUT in Claude Code, after which a flagged request pauses instead of switching; a session event is emitted on switch; <5% of sessions) | — | — |
|
|
104
107
|
|
|
105
108
|
---
|
|
106
109
|
|
|
@@ -110,10 +113,10 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
|
|
|
110
113
|
|
|
111
114
|
| Gap | Affected Runtime(s) | Impact | Proposed Fix |
|
|
112
115
|
| --------------------------- | ---------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
|
|
113
|
-
| No team
|
|
116
|
+
| No shared team/task-list primitive | Codex, Gemini | Codex can delegate in parallel but lacks Claude-style shared task lists and broadcast; Gemini lacks independent general agents | Agent cards — let runtimes discover and delegate to capable peers |
|
|
114
117
|
| Memory asymmetry | Codex (partial), Gemini (KIs only) | Cross-session context degrades without MEMORY.md equivalent | Standardize memory protocol; each runtime implements its own persistence layer |
|
|
115
118
|
| Sandbox blocks git/gh | Claude | Every git/gh call needs sandbox configuration | Configure sandbox allowlists or disable sandbox for specific commands |
|
|
116
|
-
| Full browser automation gap | Claude
|
|
119
|
+
| Full browser automation gap | Claude; Codex without Browser/Chrome plugins | Claude is read-only; Codex browser control depends on installed plugins and an approved browser context | Delegate to a browser-capable runtime or enable the scoped Codex browser surface after privacy review |
|
|
117
120
|
| Reviewer cost | All (especially Claude) | High cost for single PR review with polling pattern | Stateless reviewer rounds — one round per invocation |
|
|
118
121
|
| Public skill coverage | Gemini | `kiloloop/oacp-skills` ships `claude/` and `codex/` variants for all 5 public skills; no `gemini/` variants — Gemini users must rely on convention-based adoption | Add `gemini/` variants to each public skill, or document the convention-based pattern as a first-class install path |
|
|
119
122
|
|
|
@@ -124,7 +127,7 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
|
|
|
124
127
|
| Dimension | Claude | Codex | Gemini |
|
|
125
128
|
| ---------------------------- | -------------------------------- | ------------------------------------------ | --------------------------------------------- |
|
|
126
129
|
| Max parallel tool calls | ~10+ | Yes (parallel independent calls) | ~10 (practical) |
|
|
127
|
-
| Side conversations | No | Yes
|
|
130
|
+
| Side conversations | No | Yes — named/pinned sessions and side-chat switching in CLI/TUI | No |
|
|
128
131
|
| Hooks system | Yes (pre/post tool call hooks) | Yes (stable hooks and extension lifecycle hooks; plugin-bundled hooks are configuration-dependent) | No |
|
|
129
132
|
| Automation scheduling | Yes (`CronCreate`, `ScheduleWakeup`, `/loop`, `/schedule` skills) | Yes (desktop app thread automations, Goal mode, and app-server/SDK automation surfaces) | No |
|
|
130
133
|
| Notebook editing | Yes (NotebookEdit tool) | No | No |
|
|
@@ -138,7 +141,8 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
|
|
|
138
141
|
| Workflow file format | SKILL.md with YAML frontmatter | SKILL.md with YAML frontmatter | Markdown with YAML frontmatter |
|
|
139
142
|
| Policy visibility at runtime | Partial (sandbox config visible) | Yes (session policy, approval policy, sandbox, and named permission profiles) | Yes (`SafeToAutoRun` flags) |
|
|
140
143
|
| Long-running shell sessions | Bash tool (no stdin) | Yes (PTY + stdin; multiple terminals in app) | Yes (`send_command_input`) |
|
|
141
|
-
| App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK,
|
|
144
|
+
| App-server / SDK | No | Yes (JSON-RPC app-server, Python SDK, thread/fork APIs, authenticated WebSocket/Unix/stdio transports, and experimental remote Code Mode) | No |
|
|
145
|
+
| Multi-folder projects | No native primary-folder model | Yes (primary folder owns Git and automatic instruction/config discovery; secondary folders are file-access-only) | No native primary-folder model |
|
|
142
146
|
| Hosted site deployment | No | Yes (Sites preview, app-only/cloud-hosted with separate secret management) | No |
|
|
143
147
|
| Desktop workflow capture | No | Yes (Record & Replay on Mac; privacy-sensitive and best treated as private-skill capture until reviewed) | No |
|
|
144
148
|
|
|
@@ -146,10 +150,11 @@ These are the highest-impact gaps where one runtime's limitation blocks effectiv
|
|
|
146
150
|
|
|
147
151
|
## 8. Source Notes
|
|
148
152
|
|
|
149
|
-
- GPT-5.
|
|
150
|
-
- Codex app/CLI capability changes through app `26.
|
|
153
|
+
- GPT-5.6 model availability, the corrected 272K context window, stable memories and multi-agent support, session organization, Agent Plugins, multi-folder behavior, browser/Chrome changes, and app-server transports come from OpenAI's Codex changelog: <https://developers.openai.com/codex/changelog>.
|
|
154
|
+
- Codex app/CLI capability changes are reviewed through app `26.727` and stable CLI `0.146.0`; workstation-specific alpha versions are intentionally kept out of this public matrix.
|
|
155
|
+
- GPT-5.6 API model and pricing changes through 2026-07-30 come from the OpenAI API changelog: <https://developers.openai.com/api/docs/changelog>.
|
|
151
156
|
- Sites, Amazon Bedrock, Remote, Record & Replay, app-server, plugin, and permissions details come from the official Codex docs under <https://developers.openai.com/codex/>.
|
|
152
|
-
- Claude Fable 5 release date
|
|
157
|
+
- Claude Fable 5 release date and pricing come from Anthropic's 2026-06-09 announcement: <https://www.anthropic.com/news/claude-fable-5-mythos-5>; the current plan-inclusion posture (Max/Team Premium shared weekly pool, launch promo ended) reflects Anthropic's plan policy as of 2026-07-20. Claude Opus 5 model ID, pricing ($5/$25 per MTok), 1M context, and its release as the current Opus tier were re-verified 2026-08-03 against Anthropic's model documentation (models overview + migration guide at <https://platform.claude.com/docs/en/about-claude/models/overview.md>): Opus 5 is a drop-in at Opus 4.8's pricing, and Opus 4.8 stays available. Present-day interface fallback behavior comes from Anthropic's Help Center article "Why Claude switched models in your conversation with Fable 5" (2026-07-01, verified 2026-08-04): automatic switching to Opus 4.8 is enabled by default and user-configurable — Settings > Capabilities in the apps, Config > MODEL & OUTPUT in Claude Code ("Switch models when a message is flagged" toggle); with it off, a flagged request pauses the conversation. The Fable 5 / Mythos 5 system card §1.5 ("Novel safeguards") remains the source for the safeguard design, the observed fallback-rate/session-event facts, and the API posture: the Messages API blocks by default with a structured refusal category and offers opt-in server-side fallback — whose category-routed default likewise targets Opus 4.8 for cyber-class refusals, so the fallback target is unchanged post-Opus-5. The serving model (claude-fable-5) and Claude Code version (v2.1.220) in the header were verified in-session by the Claude runtime on 2026-08-03.
|
|
153
158
|
|
|
154
159
|
---
|
|
155
160
|
|