Closing the Verification Loop Compound Engineering (CE) released /ce-dogfood, a QA agent skill that autonomously tests code changes in a real browser by diff-scoped, flow-based verification, closing the verification loop without human intervention. The skill maps user journeys before deriving test matrices, ensures resumable reports, and delegates fixes to specialized tools, aiming to keep pace with agent-driven development. Closing the Verification Loop How a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence. 1. The loop that must close Agents made building cheap. The cost moved: the expensive question is no longer "can we ship this?" but "does anyone actually know it works?" A branch that compiles, passes review, and merges can still greet its first real user with a form that validates the wrong field and an email that links to the wrong thread. The verification loop is the distance between a claim and its proof: Most teams close this loop with humans: someone clicks around before the demo, someone eyeballs staging. That works until agents outrun the humans, which is what the agents were for. Compound engineering CE, a plugin of skills for coding agents like Claude Code answers that the loop itself is work an agent can do, end to end, with people pulled in where judgment belongs to them, and where the tooling genuinely cannot reach. The skill that embodies this is /ce-dogfood , and the rest of this piece walks through how it closes the loop, and the persona strategy that gives it eyes. 2. Dogfood in one pass /ce-dogfood acts as a QA engineer who dogfoods the active branch: understand every change, test every change in a real browser as a user would, and fix what breaks, autonomously, until the branch is ready. Two constraints define it: Diff-scoped, never whole-app. It tests what this branch changed versus the trunk, and it refuses to run on the trunk itself: no diff, nothing to dogfood. A real browser, one tool. All automation goes through the agent-browser CLI, a shell tool that drives the browser directly a Rust binary, not a wrapper, not an MCP server : no exceptions. The workflow is seven phases with a loop in the middle: A few phase details that carry the philosophy: Scope pins the identity of the ref under test, so the diff is cut against the right base a PR stays a PR; a fork's head can literally be named main , and offers worktree isolation via ce-worktree when testing someone else's ref, so your checkout is never disturbed. Serve is hands-off by design: detect the port explicit flag, then project instructions, then package.json , then .env , then 3000 , reuse a running server or start one, poll until it accepts connections. It does not stop to ask permission to start a dev server. Everything is resumable. The matrix the scenario checklist phase 2 produces lives twice: as a live task list in the session, and as a report document on disk at docs/dogfood-reports/