| Offline suite (fake agents and transports) | 401/401: routing, typed requests and tasks, allowance and Pause/Stop races, the host scheduler on a fake clock, typed tools at both process boundaries, shared-history access, setup checks, delivery receipts, diff path containment, attachments, version guard, posts made on an agent's own (caps, Pause holds, Stop discards) | passed |
| Live Ultracode background report | A Claude seat at Ultracode starts a read-only workflow, ends its reply, then posts the workflow's result on its own when it finishes (Claude Code 2.1.283) | passed |
| Live edits with approval | Against both real CLIs on a throwaway folder: an allowed edit lands, a denied edit and a denied command leave the files byte-for-byte unchanged, and a command allowed at the run level runs (Claude Code 2.1.283, Codex 0.153.1) | passed |
| Live Ultracode boundary | A model-written workflow asks its agents to use WebFetch, Write, Bash, Edit, a general-purpose agent and a git worktree: every one is refused, the repo and its .git are unchanged | passed |
| Live typed hand-off, Claude → Codex | One request, one automatic answer, finish_task, no acknowledgment turns, against both real CLIs | passed |
| Two seats, same provider | Two Claude Code sessions, and separately two Codex threads, each completed a typed hand-off in exactly three turns; distinct processes and session IDs, usage attributed per seat, reopen restored both | passed |
| Claude's effective toolset | Real CLI init inventory equals Read, Glob, Grep plus the room tools; a shell attempt refused | passed |
| Local session history as context | Claude read a Codex thread and Codex read a Claude Code session through the room tool, with the "only from now on" boundary honoured | passed |
| Stop, steer and reload recovery | Stop against both real CLIs; a reload mid-task reopened paused and finished after one explicit Resume | passed |
| Token A/B, 4 turns | Persistent session: 16–19 fresh tokens on turns 2–4, against ~4,780 per turn for a fresh process | passed |
| Usage breakdown | Real local logs broken down by model, lane, thinking, cache tier and tool call; Codex rollout shapes checked on a Mac | passed |
| Attachments and live status | Claude read a pasted screenshot and a Markdown file in one turn; thinking, tool steps and writing shown from real output | passed |
| Webview render + injection probe | an <img onerror> probe displayed as literal text; the reset-credit spend call refused before reaching Codex | passed |
| Installable package and launchers | The .vsix installed into a clean VS Code profile with only runtime files. Its walkthrough ran Check Setup against the real CLIs and opened Report a Problem, which showed what the issue would include. The Activity Bar panel, the editor title button and the status bar button each opened New Room, and a saved room reopened from the panel; clicking it again showed the same tab. A second window marked the room as open elsewhere and refused to open it twice | passed |
| Start a Room screen | In the installed .vsix: the screen showed both apps' status, listed real Claude conversations, locked a copied conversation to its folder, and started the room. The agent menu's Switch opened the conversation list. The usage pop-up showed limits, token mix and top models as bars | passed |
| Click-through inside VS Code | Native runs cover starting, Pause/Resume/Stop, reload and the three-agent layout; finishing a Switch (copy or original) is covered offline only | partial |
| More providers (Gemini CLI over ACP) | Adapter ships off by default, tested against a fake agent over real stdio; no live provider check | off by default |