amicus 0.7.0__tar.gz → 0.8.0__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.
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/SKILL.md +2 -2
- amicus-0.8.0/.agents/skills/agent-friendly-mcp/decisions/006-instructions-prefix.md +51 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/contract-checklist.md +13 -1
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/design-workflow.md +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/review-workflow.md +3 -1
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/rule-ids.txt +2 -0
- amicus-0.8.0/.agents/skills/agent-friendly-mcp/tests/runs/2026-09-26-scenario9.md +561 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/scenarios.md +173 -1
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/SKILL.md +3 -3
- amicus-0.8.0/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-26-confirmation-mixed-sentence.md +357 -0
- amicus-0.8.0/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-26-scenario1-with-skill-final-wording.md +362 -0
- amicus-0.8.0/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-26-scenario1-with-skill.md +393 -0
- amicus-0.8.0/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-26-scenario5-with-skill-final-wording.md +233 -0
- amicus-0.8.0/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-26-scenario5-with-skill.md +285 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/scenarios.md +5 -0
- {amicus-0.7.0 → amicus-0.8.0}/.claude-plugin/marketplace.json +2 -2
- {amicus-0.7.0 → amicus-0.8.0}/.claude-plugin/plugin.json +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/.codex-plugin/plugin.json +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/.mcp.json +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/CHANGELOG.md +76 -1
- {amicus-0.7.0 → amicus-0.8.0}/PKG-INFO +9 -10
- {amicus-0.7.0 → amicus-0.8.0}/README.md +8 -9
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/jobs.md +5 -1
- {amicus-0.7.0 → amicus-0.8.0}/docs/MIGRATION.md +23 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/RELEASING.md +33 -7
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0036-a-refused-answer-file-is-answer-unavailable.md +2 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0037-a-lost-stream-answer-is-answer-unavailable.md +2 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0038-the-job-cap-never-evicts-an-unreturned-result.md +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0039-a-deadline-timeout-is-never-temporary.md +2 -1
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0044-the-fingerprint-pins-each-codes-repair-contract.md +1 -1
- amicus-0.8.0/docs/adr/0046-a-keyed-runs-stored-error-is-never-temporary.md +44 -0
- {amicus-0.7.0 → amicus-0.8.0}/pyproject.toml +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/scripts/record_live_gate_evidence.py +137 -8
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/SKILL.md +6 -1
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/active-workflows.md +14 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/options-and-errors.md +20 -1
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/reading-results.md +2 -2
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/sync-vs-async.md +14 -2
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/__init__.py +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/_worker.py +17 -11
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/errors.py +45 -12
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/delivery.py +14 -1
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/lifecycle.py +4 -2
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/middleware.py +24 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/run.py +20 -4
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/workspace.py +64 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/fingerprint.py +13 -91
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/params.py +19 -3
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/results.py +2 -2
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/_prepare.py +20 -1
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/discovery.py +2 -2
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/jobs.py +22 -4
- {amicus-0.7.0 → amicus-0.8.0}/tests/conftest.py +46 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/manifest_snapshot.all.json +24 -16
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/manifest_snapshot.claude.json +24 -16
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/manifest_snapshot.codex-kimi.json +24 -16
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/wire_shape_snapshot.json +2 -2
- amicus-0.8.0/tests/sdk/test_fingerprint.py +62 -0
- amicus-0.8.0/tests/support/state_guard.py +160 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codes.py +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_result_differential.py +7 -4
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_delivery.py +22 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_discovery.py +19 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_discovery_cost.py +30 -2
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_dry_run.py +21 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_errors.py +78 -21
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_fingerprint.py +11 -4
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_job_tools.py +143 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_manifest.py +3 -3
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_middleware.py +53 -2
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_prepare.py +39 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_relative_config_paths.py +3 -1
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_release_evidence.py +226 -1
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_review_artifact.py +102 -4
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_run.py +74 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_server.py +1 -1
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_skill_contract.py +68 -0
- amicus-0.8.0/tests/test_state_guard.py +293 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_surface_honesty.py +105 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_sync_tools.py +27 -17
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_worker.py +43 -1
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_workspace.py +114 -0
- {amicus-0.7.0 → amicus-0.8.0}/uv.lock +1 -1
- amicus-0.7.0/tests/sdk/test_fingerprint.py +0 -93
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/SKILL.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/references/design-workflow.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/references/docs-checklist.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/references/examples.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/references/review-workflow.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-docs/tests/scenarios.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/SKILL.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/decisions/001-github-fact-sheet.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/audit-workflow.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/config-checklist.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/README.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/codeowners.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/harness-deny.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/identity.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/repo-files.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/required-checks.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/rulesets.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/examples/workflows.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/operating-playbook.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/setup-workflow.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/references/threat-model.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/tests/check_authority.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-github/tests/scenarios.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/decisions/001-mcp-2026-07-28-rebase.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/decisions/002-machine-code-rename-rationale.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/decisions/003-offending-value-omission.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/decisions/004-ownership-boundaries.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/decisions/005-content-fallback-roles.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/examples.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/mcp-2025-11-25-compat.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/mcp-vs-cli.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/native-wire-shapes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/vocabulary.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/check_fact_sync.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/check_rule_ids.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/check_stale_terms.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/fixtures/github_issues.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/fixtures/github_repo_resource.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-outputschema-error.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario2-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario2-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario3-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario3-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario4-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario4-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario5-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario5-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario6-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario6-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-11-scenario7-trigger.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario1-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario3-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario3-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario5-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-29-scenario5-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-30-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/runs/2026-07-30-scenario8-severity-calibration.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/test_check_fact_sync.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/test_check_rule_ids.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/test_validate_fixture.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/tests/validate_fixture.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/agents/openai.yaml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/references/example-audit.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/rescore-2026-08-06/preregistration.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/rescore-2026-08-06/results.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario1-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario2-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario2-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario3-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario3-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario4-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario4-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario5-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario5-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario6-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario6-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario7-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario7-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario8-baseline.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario8-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-07-11-scenario9-trigger.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-06-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-06-scenario6-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-confirmation-r1-both-directions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario2-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario5-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario6-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario7-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-08-23-scenario8-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-14-scenario1-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-14-scenario2-with-skill-prior-wording.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-14-scenario2-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.agents/skills/separating-context-from-constraints/tests/runs/2026-09-14-scenario6-with-skill.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.gitattributes +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/CODEOWNERS +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/copilot-instructions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/dependabot.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/workflows/ci.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/workflows/codeql.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/workflows/dependency-review.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/workflows/publish.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.github/workflows/test.yml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/.gitignore +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/AGENTS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/CLAUDE.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/LICENSE +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/adversarial.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/consult.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/delegate-async.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/delegate.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/dry-run.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/review.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/commands/amicus/status.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/2026-09-04-naming-and-scoping-notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/DEPRECATING-SIBLINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0001-annotations-follow-the-worst-enabled-backend.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0002-backend-options-is-a-closed-superset.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0003-workspace-resolution.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0004-tasks-and-jobs.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0005-error-envelope-and-repair-precedence.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0006-fingerprint-and-surface-digest.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0007-m1-codex-port-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0008-m2-jobs-surface-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0009-m3-kimi-port-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0010-m4-claude-port-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0011-m5-tasks-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0012-m6-packaging-decisions.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0013-proceed-without-trademark-clearance.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0014-release-predicate-on-the-tag.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0015-mcp-json-pins-an-already-published-release.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0016-skill-rules-are-a-complete-contract.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0017-an-unreadable-machine-enum-falls-to-its-own-floor.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0018-the-catalog-carries-a-ttl-and-resource-reads-do-not.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0019-review-results-disclose-coverage-as-a-field.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0020-idempotency-keys-on-the-sync-tools.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0021-repair-arguments-are-a-complete-call.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0022-consume-reports-its-discard-outcome.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0023-dependency-loggers-are-owned-at-a-warning-floor.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0024-prose-list-loss-is-disclosed-never-folded.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0025-success-meta-is-sparse-on-every-tool.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0026-a-not-run-review-carries-no-confidence-rating.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0027-every-instructions-rule-fits-the-shown-prefix.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0028-a-deprecated-tool-keeps-its-record-beside-one-marker.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0029-the-backend-sdk-lives-in-tree.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0030-the-sdk-keeps-what-a-backend-imports.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0031-the-marketplace-pointer-decides-what-users-run.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0032-a-claude-review-defaults-to-readonly-access.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0033-an-unreadable-review-answer-is-delivered-unstructured.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0034-claude-usage-is-read-from-model-usage.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0035-a-backend-answer-is-kept-on-the-job-record.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0040-the-backend-enum-is-the-set-the-verb-accepts.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0041-static-resource-reads-carry-the-catalog-ttl.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0042-amicus-job-list-pages-by-an-opaque-cursor.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/0043-each-paid-verb-is-one-tool-with-a-wait-flag.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/adr/README.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.263/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.263/claude-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.263/claude-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.263/envelope-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.274/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.274/budget-stop-envelope-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.274/claude-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.278/claude-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/claude-help/2.1.278/claude-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.155.1/codex-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.155.1/codex-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.156.1/codex-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.156.1/codex-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.157.0/codex-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/codex-help/0.157.0/codex-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/claude-code/2.1.263/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/claude-code/2.1.263/connection.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/claude-code/2.1.263/host-output.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/codex/0.153.4/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/codex/0.153.4/connection.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/codex/0.153.4/host-output.jsonl +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/free-scenarios/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/claude-code/2.1.263/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/codex/0.153.4/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/codex/0.153.4/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/install-smoke/codex/0.153.4/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-f3-recon-attempt/claude-code/2.1.265/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-old-text-new-grader/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-rerun/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s6-response-contract/claude-code/2.1.263/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/notes.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/server.log +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/host-captures/s7-rule5-recheck/claude-code/2.1.265/transcript.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.41.0/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.41.0/kimi-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.41.0/kimi-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.41.0/provider-list-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.42.0/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.42.0/kimi-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.42.0/kimi-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.42.0/provider-list-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.43.1/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.43.1/kimi-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.43.1/kimi-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/0.43.1/provider-list-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.0.2/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.0.2/kimi-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.0.2/kimi-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.0.2/provider-list-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.1.0/FINDINGS.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.1.0/kimi-help.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.1.0/kimi-version.txt +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/kimi-help/2.1.0/provider-list-shape.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/reviews/2026-09-07-agent-friendly-mcp-walk.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/reviews/2026-09-20-agent-friendly-mcp-walk.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/superpowers/plans/2026-09-04-amicus-execution-model.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/superpowers/specs/2026-09-04-amicus-design.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/superpowers/specs/2026-09-15-amicus-M8-sdk-in-tree-design.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/docs/superpowers/specs/2026-09-16-amicus-release-activation-design.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/prek.toml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/capture_claude_differentials.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/capture_codex_differentials.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/capture_kimi_differentials.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/check_backend_compat.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/check_commit_message.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/check_github_actions_pinning.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/check_release_state.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/check_sentence_per_line.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/scripts/probe_review_surface.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/blind-comparison.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/choosing-a-backend.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/independent-attempt.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/review-revise.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/reviewing-a-returned-diff.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/references/server-down-fallback.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/skills/collaborating-with-amicus/tests/scenarios.md +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/appstate.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/adversarial.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/options.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/claude/status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/options.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/codex/status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/options.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/backends/kimi/status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/compaction.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/config/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/config/envspec.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/idempotency.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/lookup.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/polling.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/store.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/jobs/taskmap.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/manifest.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/obs.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/finalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/gitdiff.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/gitproc.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/isolation.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/prompts.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/review.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/orchestration/worktree.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/packaging.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/plugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/py.typed +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/registry.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/request.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/result_format_snapshot.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/codes.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/envelope.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/field_policy.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/instructions.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/options.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/publish.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/schemas/structured.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/backend/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/backend/contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/backend/protocol.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/conventions/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/conventions/annotations.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/conventions/envelope.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/conventions/preflight.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/jsoncache.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/pathalias.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/redaction.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/runtime.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/core/streamcap.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/testing/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/testing/conformance.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/sdk/testing/surface_honesty.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/server.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/surface.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/_guard.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/_meta.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/_resolve.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/consult.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/delegate.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/dry_run.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/resources.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/tools/review.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/src/amicus/wire_shape_snapshot.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/claude_budget_stop_envelope.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/claude_differentials.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/claude_golden_envelope.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/codex_differentials.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/fakebackend/pyproject.toml +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/fakebackend/src/fakebackend/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/kimi_differentials.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/fixtures/result_format_snapshot.json +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/conftest.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_annotations.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_classified_failure_fields.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_conformance_fakes.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_conformance_inspector.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_envelope.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_git_isolation.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_gitdiff.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_gitproc.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_idempotency.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_jobs.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_jsoncache.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_orphan_sweep.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_outcome_inspector.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_pair_parity_kit.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_pathalias.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_preflight.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_prompts.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_redaction.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_run_request.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_runtime.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_runtime_kill_and_sweep_paths.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_streamcap.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_surface_honesty_kit.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_usage_cache_fields.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_workspace.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_worktree.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/sdk/test_worktree_config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/__init__.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/claudefixtures.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/codexfixtures.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/fake_claude.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/fake_codex.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/fake_kimi.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/fakeplugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/kimifixtures.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/livegate.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/support/pair_parity.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_adversarial.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_artifact_references.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_async_tools.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_cache_hints.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_check_backend_compat.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_check_commit_message.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_check_github_actions_pinning.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_check_sentence_per_line.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_argv_differential.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_golden_envelope.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_live.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_plugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_result_differential.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_claude_sync_tools.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_argv_differential.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_live.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_plugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_codex_status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_commands.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_compaction.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_conftest_guards.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_envelope.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_envspec.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_fastmcp_argument_log.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_field_policy.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_finalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_guard.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_host_captures.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_import_contracts.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_instructions.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_isolation.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_job_durability.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_adapter.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_argv_differential.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_binary.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_cli.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_config.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_contract.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_live.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_models.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_normalize.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_plugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_result_differential.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_status.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_kimi_sync_tools.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_lifecycle.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_live_gate_report.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_live_suite_hygiene.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_livegate.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_log_redaction.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_lookup.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_meta.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_migration_doc.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_obs.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_options.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_packaging.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_paid_tools.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_params.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_plugin.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_poll_hint.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_prompts.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_publish.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_registry.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_release_state.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_request.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_resources.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_result_format.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_results.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_review.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_sdk_in_tree.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_structured.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_surface.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_taskmap.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_tasks_client.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_tasks_spike.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_wheel_seam.py +0 -0
- {amicus-0.7.0 → amicus-0.8.0}/tests/test_wire_shape.py +0 -0
|
@@ -4,7 +4,7 @@ metadata:
|
|
|
4
4
|
github-path: agent-friendly-mcp
|
|
5
5
|
github-ref: refs/heads/main
|
|
6
6
|
github-repo: https://github.com/briandconnelly/skills
|
|
7
|
-
github-tree-sha:
|
|
7
|
+
github-tree-sha: 9cd3ae57ef60ea4338ef777c4983aad4e2225a07
|
|
8
8
|
name: agent-friendly-mcp
|
|
9
9
|
---
|
|
10
10
|
# Agent-Friendly MCP
|
|
@@ -32,7 +32,7 @@ Read the cited ids — a row names the concern but does not define the rule, so
|
|
|
32
32
|
|
|
33
33
|
| Concern | Governing rules |
|
|
34
34
|
| --- | --- |
|
|
35
|
-
| What carries the contract, and what is only advisory | `[5.scaffolding-only]`, `[5.ap-contract-container]`, `[2.instructions-advisory]` |
|
|
35
|
+
| What carries the contract, and what is only advisory | `[5.scaffolding-only]`, `[5.ap-contract-container]`, `[2.instructions-advisory]`, `[2.instructions-prefix]`, `[2.truncation-signal]` |
|
|
36
36
|
| Capability negotiation before optional features | `[1.negotiated-caps]` |
|
|
37
37
|
| Tool granularity: tasks vs endpoints | `[3.task-completing]`, `[3.hide-steps]`, `[3.ap-endpoint-wrapping]` |
|
|
38
38
|
| Side effects, idempotency, and rate limits | `[3.declare-effects]`, `[3.honest-annotations]`, `[3.annotation-defaults]` |
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 006 — Server `instructions` delivered as a prefix
|
|
2
|
+
|
|
3
|
+
Decided 2026-09-26.
|
|
4
|
+
Triggered by issue #184, which reported that Claude Code delivers only a fixed-length prefix of a server's `instructions` string and proposed rules for laying the string out around that cut.
|
|
5
|
+
|
|
6
|
+
## Question
|
|
7
|
+
|
|
8
|
+
`[2.instructions-advisory]` covered a client that never surfaces `instructions`.
|
|
9
|
+
It did not cover a client that surfaces the head and drops the rest, which leaves the agent holding a plausible partial contract.
|
|
10
|
+
Which rules does that failure need, and should the skill state a length budget?
|
|
11
|
+
|
|
12
|
+
## Evidence
|
|
13
|
+
|
|
14
|
+
These are dated observations of client behavior, not protocol facts.
|
|
15
|
+
Each figure can change with a client release, and at least one is configurable per session.
|
|
16
|
+
|
|
17
|
+
| Client | Observation | Source |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Claude Code | First 2,048 characters of a 13.9 KB string reached the model, followed by a client-rendered `… [truncated]` marker; earlier readings on the same client landed near 2,041 bytes and 2,058 characters. | Issue #184, citing runpod/snowpod#463, #437, #299 (2026-09-26 and earlier) |
|
|
20
|
+
| Claude Code 2.1.283 | A fresh session's transcript records the injected block (an `mcp_instructions_delta` attachment): exactly the first 2,048 characters of amicus 0.7.0's 3,438-character instructions, matching the server's `manifest_snapshot.all.json` fixture, followed by `… [truncated]`. That prefix holds two em dashes, so it is 2,052 UTF-8 bytes: the cut is in characters, not bytes. The block arrived with the session's second message, when the slow-starting server finished connecting; on the first message neither amicus's tools nor its instructions were present, so the model said it saw none. `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` was unset in the authoring session, which saw the same 2,046 visible characters. | The maintainer's session `d7a2e144`, 2026-09-26, and this PR's authoring session, both read against the amicus fixture |
|
|
21
|
+
| Claude Code (changelog) | 2.1.280 "Added `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` to change the 2,048-character cap on MCP tool descriptions and server instructions for every MCP server in the session." The cap is a documented default the user can raise or lower, so a server cannot know the prefix a given Claude Code session delivers. | <https://code.claude.com/docs/en/changelog.md>, read 2026-09-26 |
|
|
22
|
+
| Codex CLI 0.157.1 | Codex carries the full `instructions` string inside the server's tool descriptions. In a VS Code-hosted session, amicus 0.6.0's 3,392-character (3,396-byte) string, byte-identical to its `initialize` result, heads a 6,030-character `amicus_backends` description, and the four amicus descriptions visible in a separate, truncated capture begin with the same text. No separate instructions text was reported: fresh `codex exec` sessions told not to use tools said they saw none, and one listing its tools listed no MCP tools. `codex exec` sessions prompted to find a tool definition recovered the whole string, including an 11,682-character ASCII probe (last sentinel and tail value correct); the transcripts do not show whether that text sat in starting tool metadata or arrived through an unlogged lookup. No cut was seen at these lengths, including none at 1,000 bytes for a plugin-declared server, and the lengths are lower bounds. A fresh VS Code-hosted TUI session told not to use tools also reported no amicus server instructions, only the amicus skill listing; its rollout shows no tool calls and does not contain the instructions text. Other Codex surfaces were not measured. | The maintainer's sessions and this PR's probes, 2026-09-26, read from the Codex session rollouts and debug log |
|
|
23
|
+
| Codex (docs) | "Keep the first 512 characters self-contained so the most important guidance is available when Codex is deciding how to use the server." No truncation limit is documented. | <https://learn.chatgpt.com/docs/extend/mcp?surface=cli> and <https://developers.openai.com/plugins/build/mcp-server>, read 2026-09-26 |
|
|
24
|
+
|
|
25
|
+
Issue #184 also reported a cold-start observation (runpod/snowpod#462): with a truncation self-test at the head, the agent followed the rules inside the prefix and went straight to the resource it needed, without acting on the self-test.
|
|
26
|
+
|
|
27
|
+
## Decision
|
|
28
|
+
|
|
29
|
+
Add two rules and extend one.
|
|
30
|
+
|
|
31
|
+
- `[2.instructions-advisory]` names the prefix case and the tool-definition case (Codex CLI above) alongside the never-surfaced case, so all three route to the same "never the sole carrier" requirement.
|
|
32
|
+
- `[2.instructions-prefix]` owns the layout and the length budget.
|
|
33
|
+
- `[2.truncation-signal]` owns the self-check the agent can run on its own copy, and why it is a floor (the cold-start observation above).
|
|
34
|
+
- `review-workflow.md` gains a measurement step in the cold-start probe and a Major example for binding rules past a measured prefix.
|
|
35
|
+
|
|
36
|
+
The rules state no number.
|
|
37
|
+
The two measured clients fail differently: Claude Code cuts at a user-adjustable 2,048 characters, while Codex CLI carried at least 5.7× that uncut, inside tool definitions rather than as separate context.
|
|
38
|
+
The documented Codex figure is guidance rather than a limit.
|
|
39
|
+
A skill meant for many clients would be wrong for most of them if it bound one client's figure.
|
|
40
|
+
The figures live in this record so a reader can see where a budget came from and when it was last measured.
|
|
41
|
+
|
|
42
|
+
## Rejected
|
|
43
|
+
|
|
44
|
+
A fixed 2,048-character budget in the rule, as issue #184 proposed.
|
|
45
|
+
It is one client's current behavior; applied to Codex CLI it would cap a server's usable text at under a fifth of what that path carries in its tool definitions, and it is not stable even within Claude Code, where a session can change it.
|
|
46
|
+
|
|
47
|
+
A separate rule for digests over glossaries (issue #184's proposed `2.instructions-digest-not-glossary`).
|
|
48
|
+
It is one consequence of ordering by what the agent needs first, so it lives as a sentence in `[2.instructions-prefix]` rather than as a third rule with its own id.
|
|
49
|
+
|
|
50
|
+
Measuring in both characters and UTF-8 bytes until the unit is known, as the issue proposed.
|
|
51
|
+
The Claude Code measurement above settles the unit for that client, and the rule already asks for the unit each target client cuts in, which covers clients whose unit is still unknown.
|
{amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/contract-checklist.md
RENAMED
|
@@ -99,10 +99,22 @@ Audit prompt: Can an agent learn what this server does, what it doesn't, and whi
|
|
|
99
99
|
The optional `instructions` field rides this result under 2026-07-28 — it is no longer carried by an `initialize` response — and remains advisory wherever it travels (`[2.instructions-advisory]`).
|
|
100
100
|
Say in the capability summary how an agent gets from `server/discover` to the house surfaces, because a capability advertisement does not carry the task-level guidance `[2.summary]` requires.
|
|
101
101
|
|
|
102
|
-
- `[2.instructions-advisory]` **Treat server `instructions` as advisory, never as the sole carrier.** Some clients never surface the `instructions` field to the model, so behavior that exists only there is invisible to those agents.
|
|
102
|
+
- `[2.instructions-advisory]` **Treat server `instructions` as advisory, never as the sole carrier.** Some clients never surface the `instructions` field to the model, some surface only a prefix of it (`[2.instructions-prefix]`), and some carry it only inside the server's tool definitions rather than as separate context, so behavior that exists only there is invisible to those agents, or visible only where the agent reads those definitions.
|
|
103
103
|
Essential selection, prerequisite, safety, and repair behavior must also reach the agent through a surface it is guaranteed to see — the tool and resource schemas, or a discovery tool or resource the client does honor.
|
|
104
104
|
Using `instructions` is fine; relying on it alone is not.
|
|
105
105
|
|
|
106
|
+
- `[2.instructions-prefix]` **Lay out `instructions` so the prefix a client delivers is still a correct contract.** Some clients deliver only a fixed-length prefix of `instructions` and drop the rest; whether the agent sees any marker of the cut is up to the client, so an agent holding a partial copy can proceed as though it had the whole contract.
|
|
107
|
+
Order the text by what the agent needs before its first call: negative scope, binding safety and ordering rules, and the pointer to the full contract come first; material comes after only when another surface already puts it in front of the agent before its first call — tool routing that `tools/list` carries qualifies on a client that preloads the catalog, not on a host that withholds definitions until selection (`[2.pd-host]`).
|
|
108
|
+
Spend the head on branch rules, not glossaries: a payload that describes itself when it arrives, such as an error envelope, needs only which field to branch on, which value means do not retry, and where the full glossary lives.
|
|
109
|
+
Prefix lengths are client properties, often undocumented, and free to change between releases or even between sessions, so no single figure binds: keep the binding contract inside the shortest prefix measured on the clients you target, measured in the unit each client cuts in, and date where each figure came from (the observations on record live in `decisions/006-instructions-prefix.md`).
|
|
110
|
+
A target with no measurement, or a session whose configuration may have changed its cut, gets no claim that its prefix holds the binding contract; for that target the other carriers `[2.instructions-advisory]` requires and the check in `[2.truncation-signal]` are the protection.
|
|
111
|
+
A length test is evidence only when its limit comes from such a measurement; one that asserts an unmeasured limit stays green while the client cuts the text.
|
|
112
|
+
|
|
113
|
+
- `[2.truncation-signal]` **Give the agent a check it can run on its own copy of `instructions`.** "Clients may truncate" is not a rule under `[2.rules-then-context]`: it names no condition an agent can evaluate, because the agent cannot tell whether its copy was cut.
|
|
114
|
+
State at the head the exact line the text ends with and what to read when the agent's copy does not end with it, and pin that line last with a test so a reorder cannot break the check silently.
|
|
115
|
+
Name a line, not a section: a cut inside the final section leaves its heading visible and passes a section-presence check.
|
|
116
|
+
The check is a floor, not a substitute for `[2.instructions-prefix]`: in the one cold-start observation on record the agent followed the rules inside the prefix and never acted on the check, so the directives themselves must sit inside the prefix.
|
|
117
|
+
|
|
106
118
|
- `[2.negative-scope]` **State negative scope explicitly.** What the server does NOT do is as important as what it does.
|
|
107
119
|
Negative scope prevents wasted exploration and wrong-tool selection.
|
|
108
120
|
|
{amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/design-workflow.md
RENAMED
|
@@ -93,7 +93,7 @@ Decide how an agent finds the right primitive at the lowest cost its clients all
|
|
|
93
93
|
|
|
94
94
|
- Write the server capability summary: what it does, what it does NOT do, and any prerequisites that affect whether or how an agent should use it.
|
|
95
95
|
- Expose the summary through a resource, discovery tool, or instructions field, whichever the client honors.
|
|
96
|
-
Treat `instructions` as supplemental
|
|
96
|
+
Treat `instructions` as supplemental (`[2.instructions-advisory]`) and lay it out under `[2.instructions-prefix]` and `[2.truncation-signal]`.
|
|
97
97
|
- Make compact definitions your baseline (§2), then, if you need progressive disclosure, pick a mechanism by cost axis: host-managed context disclosure, server-managed catalog disclosure, or client-independent surface reduction — only the last helps a client that preloads and never lazy-loads.
|
|
98
98
|
- Make discovery selective, but through a discovery tool, resource catalog, or authorization-scoped catalog — native `tools/list` takes only a pagination cursor and has no filter parameters.
|
|
99
99
|
A flat list of 80 tools is undiscoverable.
|
{amicus-0.7.0 → amicus-0.8.0}/.agents/skills/agent-friendly-mcp/references/review-workflow.md
RENAMED
|
@@ -19,7 +19,7 @@ Step 1's calibration for a missing capability summary is the worked model; apply
|
|
|
19
19
|
Without that, an imprecise auth error is a repair-quality defect and lands in Major: it costs turns without establishing a security risk or a reliable task failure.
|
|
20
20
|
Blocks merge.
|
|
21
21
|
- **Major** — agent will frequently choose the wrong primitive, waste tokens, or hit avoidable errors.
|
|
22
|
-
Examples: overlapping tool descriptions, bloated definitions or a 50-tool catalog with no client-independent surface reduction (and no progressive-disclosure mechanism matched to the target clients), unstructured error strings with no symbolic codes, no capability fingerprint for a target client that caches or pins the server surface, resource lists that inline bodies.
|
|
22
|
+
Examples: overlapping tool descriptions, bloated definitions or a 50-tool catalog with no client-independent surface reduction (and no progressive-disclosure mechanism matched to the target clients), unstructured error strings with no symbolic codes, binding `instructions` rules that sit past a target client's measured prefix and reach the agent through no other surface, no capability fingerprint for a target client that caches or pins the server surface, resource lists that inline bodies.
|
|
23
23
|
- **Minor** — degrades agent experience but recoverable.
|
|
24
24
|
Examples: verbose default responses with no detail toggle, missing `request_id` correlation, ambiguous parameter names whose schema types still constrain shape, summaries longer than three sentences.
|
|
25
25
|
- **Nit** — style, naming, or doc improvement.
|
|
@@ -61,6 +61,8 @@ Each should be answerable from concrete evidence — schema text, response paylo
|
|
|
61
61
|
- **Cold start.** What does an agent see when it first connects?
|
|
62
62
|
Can it learn what the server does, what it does NOT do, and what prerequisites affect use in one read?
|
|
63
63
|
Trace the first few definition loads from a transcript or simulate them from the schema. *(maps to §1, §2)*
|
|
64
|
+
When the server sets `instructions`, render the string it actually sends and measure it: total length, the offset where each section ends, and which sections fall past the prefix measured on each target client (`[2.instructions-prefix]`).
|
|
65
|
+
Where you can run a target client, place sentinels at known offsets and ask a fresh session which ones it can see, then confirm from the session's transcript whether the answer came from its starting context, a tool lookup, or a file read, and record the provenance as unresolved when the transcript does not show it; otherwise record the prefix check as `not-checked` for that client, in the §2 row's notes of the coverage table, rather than borrowing another client's figure.
|
|
64
66
|
- **Tool selection.** Given two adjacent tools (same verb, overlapping nouns, or similar surface), can an agent pick the right one without invoking both?
|
|
65
67
|
Are descriptions narrow enough that the schema alone disambiguates?
|
|
66
68
|
Look for tools whose descriptions you cannot tell apart at a glance. *(maps to §3; see `examples.md` §10 for the failure-mode shape)*
|