协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
clean-room-loop【开发与工程】Front door for running the clean-room unattended loop as a Claude Code dynamic WORKFLOW using in-session subagents, so it never spends `claude -p` API tokens. Use when the user wants to run a clean-room / reverse-engineering / source-to-clean-implementation task hands-off but without paying per-token for `clean-room-skill run`, or says "clean-room as…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
claude -p API tokens. Use when the user wants to run a clean-room / reverse-engineering / source-to-clean-implementation task hands-off but without paying per-token for clean-room-skill run, or says "clean-room as a workflow", "unattended clean-room without API cost", "/clean-room-loop". Runs a short discussion (authorization, end goal, target stack, policies, source roots, output roots, iterations) then launches the clean-room-loop workflow with the answers. NOT the enforced OS-level wall - that is clean-room-skill run --agent-runtime claude.
argument-hint: [end goal, authorized source roots, target stack, output roots, optional max iterations]Conversational front door to the clean-room-loop dynamic workflow (.claude/workflows/clean-room-loop.js).
The workflow runs in the background with no way to ask anything mid-run, so the discussion happens
HERE; answers pass as args.
Claude Code only. Dynamic workflows are a Claude Code feature. In Pi/Codex/OpenCode the
Workflow() call will not exist - see the Fallback step. Only this workflow shortcut is Claude
Code specific; the underlying clean-room skills (/clean-room:unattended, clean-room-skill run)
work on every supported runtime.
Installed project-local. The workflow script ships to project-local .claude/workflows/
(not global). Workflow({ name }) discovers it from the current project's .claude/workflows/
(or ~/.claude/workflows/ if a personal copy exists). If the current project does not have it,
initialize a project-local install before launching - see Step 3.
agent() subagents (in-session,
subscription, no claude -p), gating every wall crossing with the real
clean-room-skill artifact validate --role leakage + schema hooks.CLEAN_ROOM_* env or install hooks, so nothing stops a clean subagent from reading
source off disk except the neutral-artifact discipline + the leakage gate. If the user needs the
enforced boundary, use clean-room-skill run --agent-runtime claude instead (that path costs API
tokens by design).Get the brief. Take the end goal from the invocation if present. If missing, ask what they are reimplementing and why they are authorized to.
Run the discussion. Collect the fields below with AskUserQuestion (batch - max 4 per call,
~3 calls); ask free-text ones plainly. Offer defaults so a terse brief is still runnable. Do NOT
infer the end goal or target stack from source - clean-room forbids it; if unknown, ask.
Batch A (goal + stack):
Batch B (policy):
Batch C (roots + bounds - all safety-relevant):
~/Documents/CleanRoom). Must be OUTSIDE the
source tree and neutral-named.Ensure the workflow is installed project-local, preview, STOP for confirmation, then launch.
First confirm this project has the workflow. Dynamic workflows load from project-local
.claude/workflows/. If .claude/workflows/clean-room-loop.js is absent in the current project
(and no ~/.claude/workflows/clean-room-loop.js personal copy exists), initialize a project-local
install before launching:
clean-room-skill --claude --local --yes
# or, without a global CLI:
npx clean-room-skill@latest --claude --local --yes
That writes clean-room-loop.js into the current project's .claude/workflows/ so
Workflow({ name }) can discover it. Then show a compact preview of the args
(at least endGoal, sourceRoots, artifactBase, targetStack, maxIterations) so a wrong
source path or output root is caught BEFORE a filesystem-writing, source-reading run starts. STOP
and wait for an explicit "yes". Do NOT call Workflow in the same turn as the preview. Only after
the user confirms:
Workflow({ name: "clean-room-loop", args: {
endGoal,
targetStack, // { language, runtime, framework, packageManager, testFramework }
compatibilityPolicy, featurePolicy,
licensePolicy, dependencyPolicy, codeHygienePolicy,
sourceRoots, // array of absolute paths (REQUIRED)
artifactBase, project, taskId,
schemaProfile, maxIterations,
specSliceRef, // optional
}})
Pass only what was gathered; omit the rest (the workflow defaults them).
Fallback. If Workflow() errors or is unavailable (non-Claude host, or dynamic workflows
disabled), do NOT hand-run the roles here. Route the user to /clean-room:unattended, which
prefers fresh-context in-harness roles on that harness and drops to the durable runner only as a
last resort: clean-room-skill run --agent-commands <adapter> on Codex/Pi/other runtimes (spawns
the harness CLI, shell: false), or --agent-runtime claude (spawns claude -p, Claude only,
per-token) last. Use the runner only once a runner-ready manifest with loop_context exists.
Hand back the workflow's result (the terminal clean-room-result.json result string, task
root, and clean/implementation roots).