import InfoBox from '../components/InfoBox.astro';

The [three developer CLIs](/posts/more-than-one-agent-in-the-workshop#share-knowledge-without-merging-identities) can now use the same documentation lookup and browser-automation tools inside the devcontainer. The feature mattered, but the sharper lesson came from its verification: the Claude Code and Antigravity tickets were already marked done, while the files that made them true had disappeared with an ephemeral worktree.

## Verify the artifact, not the ticket

The missing integrations had detailed resolution comments and successful test notes, so the work could be reconstructed. That record was useful, but it was not a substitute for committed state. The final implementation therefore landed all three configurations together and repeated the live checks instead of trusting the earlier status: a real documentation query, a real browser launch, a real navigation, and a real screenshot.

The browser path needed its own shared wrapper. The automation server and the project's test runner expected different Chromium revisions, and the apparently direct browser flag selected another branded binary that was not installed. Trying the server's installation route also removed the browser used by the existing end-to-end tests. The wrapper now discovers the Chromium already cached by the project and passes its executable explicitly, so every CLI reaches the same known browser.

<InfoBox title="The acceptance test" variant="note">
  Configuration was not considered complete when a tool appeared in a list. Each CLI had
  to start both servers, perform a documentation lookup, and drive a headless browser against
  the local application.
</InfoBox>

## One capability, three configurations

Claude Code, Codex, and Antigravity keep their own repository configuration formats, but they point browser automation through the same launcher. That preserves the identities and approval boundaries of each tool while sharing the fragile environment-specific part. The accompanying documentation records why a bare launch command is not equivalent, so a future cleanup does not remove the workaround as apparent duplication.

The result is a common pair of agent capabilities with evidence behind every supported path. More importantly, “done” now means the artifact exists on the branch and survives a fresh session. A closed ticket, a successful command, and an uncommitted worktree can describe progress, but only one of them becomes part of the repository.