Repository navigation
Conversation
Design for #11. An agent plays the new user on a box through box's MCP tools, every step is recorded to a run folder, and a separate judge gives the verdict and files issues in box-portal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
run.mjs resets a box over its shell tool, drives the onboarding with a headless claude -p limited to screenshot, computer_act and computer_state, extracts steps and screenshots from the stream-json transcript, then runs a fresh judge session that writes judge.json. The first cell is Claude Code CLI from the landing line. mcp-tools.mjs now uses a shared mcp-client.mjs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ctor cell The first live run found Claude Code on the box loading the signed-in claude.ai account's box connector, so the clean cell never installed anything. The clean cell now sets ENABLE_CLAUDEAI_MCP_SERVERS=false and its precheck matches box's URL, not the name box. The connector path is its own cell. The driver no longer types ahead into a starting program. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
grants.mjs calls cocoonbox Grants over gRPC-web with the box key. A run's grants are the ones its client created inside the run window: they become funnel.json (approval and first token use) and are revoked after the run. A run is blocked when the client already holds a live grant, since consent would renew it. file.mjs files the judge's improvements with gh: product targets to box-portal with screenshots on a layer3-evidence branch, harness targets to this public repo as text only, emails masked everywhere, a model dedupe against open issues, at most three new issues per run, and filed.json so a run files once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A cell's name is now its three values joined with /, so it can't disagree with its fields. cells.mjs holds the allowed values with plain meanings and rejects unknown ones; the app entry also holds the name the app shows on box's sign-in page, which the funnel uses. DESIGN.md gains a Cells section (dimensions, every setup value, what a cell holds) and a funnel section that matches funnel.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design and a first runnable cell for layer 3 of the onboarding tests (#11).
What this adds
An agent plays a new user on a box and tries to set up box from the landing line, then use it for one task. A separate judge reads the recording afterwards and decides pass, fail or blocked.
cli/e2e/layer3/DESIGN.mdcovers the roles, the run folder, the judge, filing, the test account and open questions.run.mjsresets the box over itsshelltool, runs a headlessclaude -pdriver, extracts the recording, and runs the judge.screenshot,computer_actandcomputer_state. This is enforced by--tools "",--strict-mcp-config,--allowedToolsand--disallowedTools, not only by the prompt.extract.mjsturns the driver'sstream-jsontranscript intosteps.jsonland numbered screenshots.judge.mdandjudge.schema.jsondefine the verdict and the cited improvements.cells.jsonholds the first cell, Claude Code CLI from the landing line with OAuth.mcp-client.mjsis the MCP client frommcp-tools.mjs, moved out so layer 3 can call tools.publish-cli.ymllinks the design from itsTODO(layer 3).Recordings show the test account's screen, so runs are written to
~/.box-layer3/runs/, outside this public repo.Not in this PR
funnel.jsonfrom box api, and revoking the run's grant.Testing
node --testpasses, including a new test for the extractor. Lint is clean.claudeCLI and a box key on the machine that runs it.🤖 Generated with Claude Code