Skip to content

Final validation: show the configured remote agents to the model ​

Summarised from testing-plan.md § Verification results and the review fixes after it, mapped onto the acceptance criteria.

The headline: with a real model (gpt-6.1-sol), harness A was configured with one remote agent and asked "What is the status of order 48213?". The model delegated to that agent by itself, with a self-contained goal, and answered with its result. Before this change the model had no way to learn the agent existed (manual-delegation.md).

Final validation evidence ​

Acceptance criterionHow it was provedWhere
R1.1 roster in every contextScenario "The model's context lists a configured remote agent" reads the real request's instructions; T11 startup log agents roster: ledgerintegration.md, manual-delegation.md
R1.2 id, name, description, skillsSame scenario asserts each field. test_each_agent_is_listed_by_id_with_card_fields_and_skillsintegration.md, unit.md
R1.3 no URL or configtest_the_roster_never_reads_the_agent_url; scenario asserts neither the URL nor 127.0.0.1 is in instructionsunit.md, integration.md
R1.4 (no agents)test_no_agents_renders_a_plain_marker, test_the_agents_section_defaults_to_no_agentsunit.md
R1.5 static, byte-identical, sortedtest_the_agents_roster_is_static_never_compacted_and_stable_across_turns, test_agents_are_sorted_by_id; scenario "The durable engine renders the same agents section on every turn"unit.md, integration.md
R1.6 refused card not listedUnchanged path: a card failing validate_card stops RemoteAgent.connect, so it is never registered (existing tests/security/test_remote_card.py)security.md
R1.7 never compactedagents in NEVER_COMPACT; test_compaction_keeps_the_never_compact_sections_intact now includes itunit.md
R2.1 delegation guidancetest_default_prompt_says_when_and_how_to_delegate_to_an_agent checks each point. T11: the real model followed itunit.md, manual-delegation.md
R2.2 agent parameter descriptionRegenerated spawn_subtask.json, pinned by the contract testcontract.md
R2.3 section extendabletest_a_plugin_prompt_extends_the_agents_section; SECTION_ORDER pinnedunit.md, contract.md
R3.1 unknown id → agent.unknown, no sub-taskScenario "A spawn_subtask naming an unknown agent is refused without a sub-task"; unit and abuse-case 4 tests; critic C1 fix (71c1545) for a registered empty idintegration.md, security.md, critic-review.md
R3.2 known id delegates as beforeScenario "A spawn_subtask naming a listed agent still delegates to it"; existing delegation scenarios pass (20 in tests/integration/agents). T11 full round tripintegration.md, manual-delegation.md
R3.3 null runs locallytest_a_null_agent_runs_locally_as_beforeunit.md
R4.1 caps with …test_long_fields_are_cut_to_their_cap_and_reported, test_skills_beyond_the_cap_are_counted_not_listed, abuse case 3unit.md, security.md
R4.2 one WARNING per truncated fieldScenario "Startup logs the roster and each truncated card field"; critic C2 fix (433f694) with test_each_truncated_skill_field_is_reported_by_its_positionintegration.md, critic-review.md
NFR both enginesDurable-engine scenario aboveintegration.md
NFR observabilityINFO agents roster: … asserted in the scenario and seen in T11integration.md, manual-delegation.md
NFR docsCapability and user docs updated in this PRdocumentation.md
Security abuse cases 1–4One negative test each, plus the end-to-end hostile-card scenario; security review passedsecurity.md, security-review.md

Regression: pre-commit on all files passed. The full integration suite passed (111), and the unit, contract and security suites passed again after the review fixes (693). See ci-parity.md.