Reset — Remove optimus-generated files
Remove files installed by /optimus:init and /optimus:permissions from the project. Does NOT uninstall the plugin itself — only removes files from the project's .claude/ directory (and subproject docs for monorepos).
Safety Rules
These rules are absolute and override all other instructions:
- NEVER touch test files, test directories, or test configuration — even if created by
/optimus:unit-test - NEVER touch files outside
.claude/, subprojectCLAUDE.md, subprojectdocs/, and workspace rootCLAUDE.md - NEVER delete
.claude/settings.jsonwithout first extracting user-added content (use surgical removal — Step 4) - ALWAYS show the categorized file list and get user confirmation before removing anything
Workflow
Step 1 — Detect project context
Multi-repo workspace detection
Read $CLAUDE_PLUGIN_ROOT/skills/init/references/multi-repo-detection.md and run the detection algorithm.
Determine project type:
- Multi-repo workspace — root has no
.git/, 2+ child directories have.git/directories. Each child repo has its own.claude/directory. Workspace root may have a localCLAUDE.md(not version-controlled) - Monorepo — single git repo with multiple subproject directories (e.g.,
packages/,apps/). Root has.claude/, subprojects may have their ownCLAUDE.mdanddocs/directories - Single project — standard single repo with
.claude/directory
Check for optimus files
For multi-repo workspaces: enumerate all child repos and check each for .claude/ directories. Also check for a workspace root CLAUDE.md. If no child repo has .claude/ and no workspace root CLAUDE.md exists → inform the user "Nothing to reset — no optimus files found" → stop.
For single project / monorepo: check if .claude/ directory exists. If not → inform the user "Nothing to reset — no optimus files found" → stop.
If .claude/.optimus-version does not exist, warn that the project may not have been initialized by optimus, but proceed with template comparison anyway.
Inventory optimus-managed files
Scan for all files that optimus skills may have created. Only list files that actually exist:
Root .claude/ directory:
.claude/CLAUDE.md.claude/.optimus-version.claude/settings.json.claude/docs/coding-guidelines.md.claude/docs/testing.md.claude/docs/styling.md.claude/docs/architecture.md.claude/docs/skill-writing-guidelines.md.claude/agents/code-simplifier.md(legacy — from previous optimus versions).claude/agents/test-guardian.md(legacy — from previous optimus versions).claude/hooks/format-python.py.claude/hooks/format-node.js.claude/hooks/format-rust.sh.claude/hooks/format-go.sh.claude/hooks/format-csharp.sh.claude/hooks/format-java.sh.claude/hooks/format-cpp.sh.claude/hooks/format-dart.sh.claude/hooks/restrict-paths.sh
Monorepo subprojects (scan for these patterns):
<subproject>/CLAUDE.md— subproject overview files<subproject>/docs/testing.md— subproject testing docs<subproject>/docs/styling.md— subproject styling docs<subproject>/docs/architecture.md— subproject architecture docs
Multi-repo workspace root:
CLAUDE.mdat workspace root (local-only file)
Step 2 — Classify each file
For each file found in Step 1, determine two things:
- Origin classification — was it generated by optimus, and has it been modified?
- Git tracking — is it tracked by git? (recoverable via
git checkoutif deleted)
Check git tracking by running git ls-files --error-unmatch <file> for each file. Note: in multi-repo workspaces, run this from the correct repo directory.
Classification by comparison strategy
Verbatim templates (exact content match):
For these files, read both the project file and the corresponding template from the plugin. If content is identical → classify as UNMODIFIED. If different → classify as MODIFIED.
| Project file | Template source |
|---|---|
.claude/agents/code-simplifier.md | $CLAUDE_PLUGIN_ROOT/agents/code-simplifier.md (legacy — agents now live at plugin level) |
.claude/agents/test-guardian.md | $CLAUDE_PLUGIN_ROOT/agents/test-guardian.md (legacy — agents now live at plugin level) |
.claude/hooks/format-python.py | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-python.py |
.claude/hooks/format-node.js | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-node.js |
.claude/hooks/format-rust.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-rust.sh |
.claude/hooks/format-go.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-go.sh |
.claude/hooks/format-csharp.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-csharp.sh |
.claude/hooks/format-java.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-java.sh |
.claude/hooks/format-cpp.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-cpp.sh |
.claude/hooks/format-dart.sh | $CLAUDE_PLUGIN_ROOT/skills/init/templates/hooks/format-dart.sh |
.claude/hooks/restrict-paths.sh | $CLAUDE_PLUGIN_ROOT/skills/permissions/templates/hooks/restrict-paths.sh |
Near-exact template (coding-guidelines.md):
The template body (everything after line 1) is verbatim — only line 1 has [PROJECT NAME] substituted by init. Compare the project file's content from line 2 onward against the template's content from line 2 onward. If identical → UNMODIFIED. If different → MODIFIED.
Template: $CLAUDE_PLUGIN_ROOT/skills/init/templates/docs/coding-guidelines.md
Generated docs (heuristic — content filled in by init):
These files have ALL content filled in by init from project analysis — no template comparison is possible. Use heuristic fingerprinting:
| Project file | Template fingerprint (line 1 HTML comment) | Template section headings |
|---|---|---|
.claude/CLAUDE.md | <!-- Keep this file and .claude/docs/ updated when project structure, conventions, or tooling changes --> | Conventions, Commands, Project Structure, Before Writing Code, Documentation |
.claude/docs/testing.md | (no comment — check heading) First line: # Testing | Test Runner, Running Tests, Test Structure, Writing Tests, Workflow, Coverage |
.claude/docs/skill-writing-guidelines.md | (no comment — check heading) First line: # Skill-writing guidelines for | Foundation, Writing Style, Degrees of Freedom, Description Quality (frontmatter), Progressive Disclosure, Directory Layout, Shared References, Workflows and Feedback Loops, Common Patterns, Evaluation and Iteration, Anti-patterns, Documentation |
.claude/docs/styling.md | (no comment — check heading) First line: # Styling | Stack, Conventions, File Organization, Adding New Components |
.claude/docs/architecture.md | (no comment — check heading) First line: # Architecture | ANY of these heading sets: (1) code-only: Overview, Directory Map, Data Flow, Key Patterns, Dependencies Between Modules (2) skill-authoring: Overview, Directory Map, Skill Organization, Agent Boundaries, Reference Hierarchy, Orchestration Patterns (3) hybrid: Overview, Directory Map, Code Architecture, Skill Architecture |
For CLAUDE.md: check if line 1 matches the template comment. Also check for monorepo variant: <!-- Keep this file, .claude/docs/, and subproject CLAUDE.md files updated when project structure changes -->.
For subproject CLAUDE.md files: check for <!-- Keep this file and docs/ updated when this subproject's conventions change -->.
For workspace root CLAUDE.md: check for <!-- Local workspace file — not version-controlled. Each repo has its own .claude/CLAUDE.md. -->.
For docs (testing.md, skill-writing-guidelines.md, styling.md, architecture.md): check if the ##