Individual skill
unattended
Starts the Clean Room startup wizard in bounded unattended controller mode for authorized source-to-implementation work with finite loop limits and safety stops.
plugins/whit3rabbit/clean-room-skill/skills/unattended/SKILL.md
Source commit d780783eba4ecc7c8b9429f95c9362df95f07c61
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Network or broad shell
- Last checked
- Nov 4, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 1,532
- Repository last updated
- Nov 6, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- ai-coding Repository topic
- awesome Repository topic
- awesome-list Repository topic
- codex Repository topic
- codex-plugins Repository topic
- openai Repository topic
- codex-skill Repository topic
- codex-skills Repository topic
- marketplace Repository topic
- codex-marketplace Repository topic
- engineering Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
Read excerpt
# Clean Room Unattended
Start the clean-room startup wizard with `controller_policy.mode` fixed to `unattended`.
In Pi, this entry point is invoked as `/skill:unattended`.
Use the canonical `clean-room` skill workflow and references in this plugin. Read `skills/clean-room/references/CONTROLLER-LOOP.md` before defining unattended loop behavior. Preserve the same clean-room boundary, role separation, artifact schemas, leakage rules, implementation-root rules, and hook expectations.
Before asking setup or preflight questions, use the canonical `clean-room` "Run State Discovery Before Wizard" rules. Resolve explicit artifact paths first, then current-repo `.clean-room/local-state.json`, then configured clean-room roots, then bounded `~/Documents/CleanRoom/task-*` (legacy) and `~/Documents/CleanRoom/*/tasks/task-*` (project layout) candidates. Treat target-repo `.clean-room/tasks/` as noncanonical unless explicitly provided or named by the local pointer. If a valid `task-manifest.json` exists, route to `resume-cr`. If a `task-manifest.json` exists but is invalid or legacy-shaped, stop and report its exact path and validation errors. If a valid canonical `preflight-goal.json` exists without a manifest, continue at source/destination discovery and manifest creation. If a preflight artifact exists but is invalid, stop with schema errors instead of restarting preflight. If a project is found with only completed tasks and the user wants more work, create the next task in that project by default. If multiple candidates are found without an explicit path, list them and stop for selection.
This `unattended` skill runs on every supported runtime; only the optional dynamic-workflow shortcut below is Claude Code specific. Role execution preference, most to least preferred:
1. In-harness roles with fresh context and no external process spawn. In Claude Code this is the cost-free dynamic workflow front door `/clean-room:clean-room-loop` (in-session `agent()` subagents, new context per role; self-bootstraps init, preflight, and decomposition). It is Claude Code only and installs project-local (`.claude/workflows/`); it gives context-level separation, not the OS-enforced wall. On non-Claude harnesses, run each role as a fresh in-harness subagent or skill session orchestrated from the controller.
2. Durable runner with external process dispatch: last resort, or when you specifically need the OS-enforced wall. Use `clean-room-skill run --task-manifest <path> --agent-commands <adapter>` (spawns the harness's own CLI, `shell: false`) on Codex, Pi, and every non-Claude runtime; `--agent-runtime claude` spawns `claude -p` per role and is Claude only and per-token, so treat it as the last resort even on Claude Code. Never pass `--agent-runtime claude` on a non-Claude runtime. Launch the runner only after the manifest has `loop_context` with an approved pending or gap unit. For ccsilo/OpenRouter sessions, use `clean-room-skill run --task-manifest <path> --ccsilo [variant]` instead of manual `--agent-runtime claude`, `--agent-config-dir`, or `CLEAN_ROOM_CLAUDE_EXECUTABLE` wiring. Never write `ANTHROPIC_AUTH_TOKEN` or API keys into ccsilo or Claude settings files. If an unattended manifest lacks `loop_context`, treat it as incomplete outer-loop state: finish decomposition or selected-slice approval first, or stop with the missing outer-loop fields instead of launching the runner. If `clean-room-skill` is not on `PATH`, immediately use `npx clean-room-skill@latest run --task-manifest <path> --agent-runtime claude` instead of searching for the installed package. Do not search plugin cache paths for schema files, and do not pass `--schema-dir /dev/null`. The runner uses bundled schemas by default; pass `--schema-dir` only when the user provides a real schema directory. The main conversation must not perform Agent 1, Agent 2, Agent 3, or Agent 4 work once runner-ready unattended state exists. Do not edit `task-manifest.json` unit statuses in the main conversation; unit completion must come from runner-managed role artifacts and contaminated-side coverage verification. Do not ask to continue while `controller_policy.mode` is `unattended`, the iteration budget remains, and approved pending or gap units remain. If Claude role-agent dispatch or the runner is unavailable, stop with `BLOCKERS: Claude role-agent dispatch unavailable` instead of falling back to main-chat execution.