From miller
Use before changing existing indexed files with Miller edit, especially symbol rewrites, text replacements, renames, or refactors.
How this skill is triggered — by the user, by Claude, or both
Slash command
/miller:miller-editingThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use Miller's index-aware `edit` tool for existing indexed files. It previews a diff by default, blocks stale
Use Miller's index-aware edit tool for existing indexed files. It previews a diff by default, blocks stale
targets unless you explicitly allow stale edits, and can make localized text edits without reading a whole file
when you provide a small selector.
Creating a brand-new file is outside this skill; use the normal file creation path.
search(query="<symbol or file>")
inspect(target="<symbol-or-file>")
For symbols, start with inspect(target="<symbol>", depth="overview") to choose the edit target and understand
nearby refs/calls without dumping the full body. Use inspect(target="<symbol>", depth="full") before rewriting a
body or auditing complete relation lists.
For broad multi-hunk edits or when you need to handcraft a large replacement, use the normal patch/edit path. For
small file-level text edits where you know the old value and a nearby selector, use replace_text directly and let
Miller prove the match in preview:
edit(operation="replace_text", target="<file>", old_text="<known-old>", new_text="<new>", match_mode="auto", query="<nearby text>")
impact(target="<symbol-or-file>")
edit(operation="replace_text", target="<file>", old_text="<old>", new_text="<new>")
edit(operation="replace_text", target="<file>", old_text="<old>", new_text="<new>", match_mode="auto", line=42)
edit(operation="replace_text", target="<file>", old_text="<old>", new_text="<new>", match_mode="auto", anchor="<nearby text>")
edit(operation="replace_symbol_body", target="<symbol>", new_text="<body>")
edit(operation="rename_symbol", target="<symbol>", new_text="<new-name>")
The preview should show match mode, match source, line range, occurrence, disk verification, and a concise diff.
If it is the intended edit, re-run the same call with apply=true.
edit(operation="...", target="...", new_text="...", apply=true)
workspace(operation="refresh")
Use allow_stale=true only when the user explicitly accepts the risk or the edit is purely mechanical and the current disk state was independently checked.
replace_text still requires a known old_text, but match_mode="auto" can accept exact, normalized, or bounded
fuzzy matches after verifying the span against current disk text. If preview is ambiguous or text is not found:
line=<line> when you know the target line.anchor="<nearby text>" when the old text appears in multiple places.query="<nearby text>" to use indexed content as a candidate finder.match_mode="exact" when whitespace-tolerant or fuzzy matching would be unsafe.occurrence="all" only when every match should change.replace_symbol_body or replace_symbol_signature for code symbols.rename_symbol for symbol renames.replace_text for docs, config, and arbitrary text.impact.npx claudepluginhub anortham/miller --plugin millerGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.