
Indexion Refactor
- 4.9k installs
- 1 repo stars
- Updated July 20, 2026
- trkbt10/indexion-skills
indexion-refactor is an agent skill for detecting textual, structural, and conceptual duplication with indexion, consolidating single source of truth, and verifying cleanup.
About
The indexion-refactor skill detects and eliminates duplication at textual, structural, and conceptual levels using indexion analysis commands, then verifies single source of truth enforcement. Phase 1 uses plan refactor at 90 percent threshold for duplicate code blocks and function-level duplicates within directories. Phase 2 uses plan solid --from=dirA,dirB for cross-package extraction candidates with apted or tfidf strategies. Phase 3 runs plan unwrap with dry-run then fix to remove trivial delegation wrappers. Phase 4 uses explore for concept-level duplication where files share vocabulary without copy-paste matches. Phase 5 consolidates into SoT: one concept, one module, one function. Phase 6 verifies with re-run refactor, explore, unwrap, and moon test. Phase 7 proves non-recurrence with structural invariant tests. Invoke after new abstractions, file format changes, fixes touching three or more files, guard workarounds, or periodic SoT health checks. Stop signals include platform stubs, type method similarity, CLI boilerplate, and semantic-but-different functions.
- Three duplication levels: textual plan refactor, structural plan solid and unwrap, conceptual explore analysis.
- plan refactor finds duplicate blocks and function-level matches with adjustable similarity threshold.
- plan solid extracts cross-package shared code with apted or tfidf strategies into a target directory.
- plan unwrap dry-run and fix removes trivial single-call delegation wrappers safely.
- Seven-phase SoT workflow ends with structural invariant tests preventing duplication recurrence.
Indexion Refactor by the numbers
- 4,918 all-time installs (skills.sh)
- +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #38 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
indexion-refactor capabilities & compatibility
- Capabilities
- textual duplicate detection with plan refactor t · cross package extraction planning with plan soli · trivial wrapper removal via plan unwrap dry run · concept neighbor analysis with explore and apted · sot consolidation rules and structural invariant
- Use cases
- refactoring · code review
What indexion-refactor says it does
Detect and eliminate duplication at three levels — textual, structural, and conceptual — using indexion's analysis commands, then verify SoT is enforced.
Functions whose body is a single function call with all arguments forwarded as simple identifiers — no control flow, no transforms.
npx skills add https://github.com/trkbt10/indexion-skills --skill indexion-refactorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4.9k |
|---|---|
| repo stars | ★ 1 |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 20, 2026 |
| Repository | trkbt10/indexion-skills ↗ |
How do I find and eliminate copy-paste blocks, cross-package overlap, trivial wrappers, and scattered concept implementations?
Detect and clean duplication at textual, structural, and conceptual levels with plan refactor, plan solid, plan unwrap, and explore, then verify SoT.
Who is it for?
Developers cleaning up after refactors, new abstractions, or fixes that touched multiple files for the same reason.
Skip if: Skip for greenfield feature work with no duplication signals; run only after meaningful code changes or periodic health checks.
When should I use this skill?
User reports duplicated logic, guard workarounds, cross-package overlap, or needs a post-refactor SoT verification pass.
What you get
Reduced duplication with one concept per module, shorter callers, and tests proving SoT invariants hold.
- Deduped code changes
- SoT verification report
By the numbers
- Default plan refactor threshold 0.7; workflow starts at 0.9 for high-confidence matches
- explore threshold 0.4 surfaces concept neighbors at 40-60 percent vocabulary similarity
Files
indexion refactor — Codebase Refactoring
Detect and eliminate duplication at three levels — textual, structural, and conceptual — using indexion's analysis commands, then verify SoT is enforced.
When to Use
- After adding a new abstraction (type, module, API layer)
- After introducing a new file format or I/O boundary
- When a fix required touching 3+ files for the same reason
- When a "guard" or "skip" was added to work around a structural problem
- When
opendir,ENOENT, or similar filesystem errors appear from unexpected paths - When extracting shared code across packages
- When cleaning up after a refactor (removing trivial wrapper functions)
- Periodic SoT health check on a codebase
Three Levels of Duplication
| Level | What it is | Tool | Example |
|---|---|---|---|
| Textual | Copy-pasted code blocks, identical functions | plan refactor | is_whitespace copied across 5 modules |
| Structural | Same logic structure with different names | plan solid, plan unwrap | cross-package extraction candidates, trivial wrappers |
| Conceptual | Same domain concept implemented independently | explore + manual analysis | Three modules each deciding "is this file an archive?" |
Textual duplication is easy to find and fix. Conceptual duplication is the hardest and most dangerous — it produces no copy-paste matches but means changing one concept requires updating every scattered implementation.
Workflow
Phase 1: Clear textual duplication (plan refactor)
Start with high-confidence matches and work down.
# Step 1: Find 90%+ duplicates (high confidence)
indexion plan refactor --threshold=0.9 \
--include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' \
cmd/indexion/
indexion plan refactor --threshold=0.9 \
--include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' \
src/Read the output in three sections:
| Section | What it finds | Action |
|---|---|---|
| Similar Files | Files with high overall similarity | Investigate for structural consolidation |
| Duplicate Code Blocks | Line-level identical code between files | Extract to @common or shared module |
| Function-Level Duplicates | Structurally similar functions (TF-IDF on bodies) | Unify into single SoT function |
Same-file duplicates (functions within one file at 90%+) are the highest-value targets — easiest to fix, clearest wins. Example: get_global_data_dir and get_global_cache_dir share 95% structure, extracted into resolve_os_dir.
# Step 2: Use grep to trace references before consolidating
indexion grep "TypeIdent:TfidfEmbeddingProvider" src/
indexion grep --semantic=name:is_whitespace src/
# Step 3: Fix, then re-run to confirm duplicates are gone
indexion plan refactor --threshold=0.9 --include='*.mbt' ...
# Step 4: Lower threshold and iterate
indexion plan refactor --threshold=0.85 --include='*.mbt' ...`plan refactor` options:
| Option | Default | Description |
|---|---|---|
--threshold=FLOAT | 0.7 | Minimum similarity threshold |
--strategy=NAME | hybrid | Similarity: hybrid, tfidf, bm25, jsd, ncd |
--fdr=FLOAT | 0 | FDR correction (0=disabled) |
--style=STYLE | raw | Output: raw, structured |
--format=FORMAT | md | Output: md, json, text, github-issue |
--name=NAME | -- | Project name (for structured style) |
--include=PATTERN | -- | Include pattern (repeatable) |
--exclude=PATTERN | -- | Exclude pattern (repeatable) |
-o, --output=FILE | stdout | Output file path |
--specs-dir=DIR | kgfs | KGF specs directory |
What remains after cleanup (stop signals):
- Platform stubs (
native.mbt/stub.mbt) — intentional platform branching - Type method similarity (
to_stringon different types) — different types, same pattern - CLI command boilerplate (
command()functions) — @argparse API pattern, not duplication - Semantic-but-different functions (
is_disqualifying_keywordvsis_skip_token) — different purpose
Phase 2: Extract cross-package shared code (plan solid)
After cleaning within each directory, find code that should be shared across packages.
# Find overlap between two packages
indexion plan solid --from=src/a,src/b
# Specify extraction target
indexion plan solid --from=src/a,src/b --to=src/common
# Use tree edit distance for precise function-level matching
indexion plan solid --from=src/a,src/b --strategy=apted
# Higher threshold for stricter matching
indexion plan solid --from=src/a,src/b --threshold=0.95
# Filter files
indexion plan solid --from=src/a,src/b --include='*.mbt' --exclude='*_test.mbt'plan solid differs from plan refactor:
plan refactor | plan solid | |
|---|---|---|
| Scope | Internal duplication within directories | Cross-directory overlap |
| Goal | Consolidate within a codebase | Extract shared code into a new package |
| Input | <path> | --from=dirA,dirB |
`plan solid` options:
| Option | Default | Description |
|---|---|---|
--from=DIRS | (required) | Source directories (comma-separated or repeatable) |
--to=DIR | -- | Target directory for extraction |
--rules=FILE | -- | Rules file (.solidrc) |
--rule=RULE | -- | Inline rule (repeatable) |
--threshold=FLOAT | 0.9 | Minimum similarity threshold |
--strategy=NAME | tfidf | Similarity: tfidf, apted, tsed |
--include=PATTERN | -- | Include pattern (repeatable) |
--exclude=PATTERN | -- | Exclude pattern (repeatable) |
--format=FORMAT | md | Output: md, json, github-issue |
-o, --output=FILE | stdout | Output file path |
--specs-dir=DIR | kgfs | KGF specs directory |
Workflow:
1. Run plan refactor on each directory individually first to clean internal duplication 2. Run plan solid --from=dirA,dirB to find cross-directory extraction candidates 3. Extract shared code following the plan's recommendations 4. Use indexion grep "TypeIdent:SharedType" to verify all references are updated
Phase 3: Remove unnecessary wrappers (plan unwrap)
After consolidation, clean up trivial delegation functions that add indirection without value.
# Step 1: Quick check
indexion grep --semantic=proxy src/
# Step 2: Detailed report
indexion plan unwrap --include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' src/
# Step 3: Preview changes (safe — no files modified)
indexion plan unwrap --dry-run --include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' src/
# Step 4: Apply fixes
indexion plan unwrap --fix --include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' src/
# Step 5: Run tests
moon test --target nativeWhat gets detected: Functions whose body is a single function call with all arguments forwarded as simple identifiers — no control flow, no transforms.
// Detected (default) — trivial delegation
fn matches_pattern(text : String, pat : String) -> Bool {
@glob.glob_match(text, pat)
}
// Excluded by default (use --all to include)
fn length(self : MyList) -> Int {
self.items.length() // self-delegation (encapsulation)
}
fn emit(value : String) -> Action {
Emit(value) // bare constructor
}`plan unwrap` modes:
| Mode | Flag | Description |
|---|---|---|
| Report | (default) | List wrappers found |
| Preview | --dry-run | Show all edits without modifying files |
| Fix | --fix | Apply edits to files |
`plan unwrap` options:
| Option | Default | Description |
|---|---|---|
--dry-run | -- | Preview edits |
--fix | -- | Apply edits |
--all | -- | Include self-delegation and bare constructor wrappers |
--include-self | -- | Include self.field.method patterns |
--include-bare | -- | Include bare constructor wrappers |
--include=PATTERN | -- | Include pattern (repeatable) |
--exclude=PATTERN | -- | Exclude pattern (repeatable) |
--format=FORMAT | md | Output: md, json, text |
-o, --output=FILE | stdout | Output file path |
--specs-dir=DIR | kgfs | KGF specs directory |
Review before removing:
- Platform wrappers (FFI,
@osenv_path) are abstraction layers, not accidental indirection - Public API wrappers used by external packages — removing them is a breaking change
- Always `--dry-run` first
Phase 4: Detect concept-level duplication (explore + analysis)
This is the hardest level. Textual and structural tools won't find it because the code is different — but the concept is the same.
# Find which files share vocabulary (= work in the same concept domain)
indexion explore --threshold=0.4 \
--include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' \
src/ cmd/Files at 40-60% similarity without structural duplication are concept neighbors — they use the same terms because they deal with the same domain.
For each high-similarity pair, ask: "What concept do they share, and who owns it?"
# Inspect shared vocabulary with tree structure comparison
indexion explore file_a.mbt file_b.mbt --threshold=0 --strategy=aptedCommon patterns of concept leakage:
| Symptom | Concept leaked | Fix |
|---|---|---|
Both files call is_X(spec) then Y::from_spec(spec) | "Determine if X and configure Y" | Extract try_do_X(path, spec) into the module that owns X |
Both files @fs.read_file_to_string(path) when content is already loaded | "Read file content" | Pass content as argument, don't re-read |
Both files parent_dir(path) then @fs.read_dir(dir) | "List sibling files" | Centralize directory walking into pipeline |
Multiple if is_virtual_path(x) { skip } guards | "Real vs virtual path" | Make the type system prevent virtual paths from reaching here |
Both files buf.write_string("\n"); buf.write_string(x) | "Join text entries" | Extract join_text_entries() into the owning module |
Phase 5: Consolidate into SoT
The module that defines the concept should be the only one that implements the logic.
Rules: 1. One concept, one module, one function. If "extract text from archive" appears in vfs.mbt, discover.mbt, and args.mbt, it belongs in vfs.mbt only. 2. Callers receive results, not ingredients. Don't export is_archive_spec + ArchiveSpec::from_spec + expand_archive separately. Export try_extract_archive_text(path, spec) -> String?. 3. Guards are symptoms, not fixes. if is_virtual_path(x) { skip } means virtual paths shouldn't reach here at all. Fix the source, not the sink. 4. Re-reading from disk what's already in memory is a concept leak. If SupportedFile.content holds the text, no downstream code should call @fs.read_file_to_string(file.path).
Phase 6: Verify
# Confirm textual duplication is gone
indexion plan refactor --threshold=0.9 \
--include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' \
src/ cmd/indexion/
# Confirm concept similarity is reduced
indexion explore file_a.mbt file_b.mbt --threshold=0
# Confirm wrappers are cleaned up
indexion plan unwrap --include='*.mbt' --exclude='*_wbtest.mbt' \
--exclude='*moon.pkg*' --exclude='*pkg.generated*' src/
# Run tests
moon test --target nativeAfter SoT consolidation:
- Textual similarity between the concept owner and its callers drops
- Callers become shorter (one API call instead of multi-step logic)
- The concept owner may grow, but it's the single place to change
Phase 7: Prove non-recurrence with tests
Write a test that structurally prevents the old pattern from recurring:
test "SoT: SupportedFile.path is always a real filesystem path" {
// Create an archive, run load_supported_file_info
// Assert: no path contains "!/"
// Assert: every path passes @fs.path_exists
}The test doesn't check behavior — it checks the SoT invariant.
Red Flags
"I need to add a guard here"
If you're adding if is_special_case(x) { skip } to a function that shouldn't receive special cases, the problem is upstream. The function's caller should never pass that value.
"It works but prints errors to stderr"
Stderr messages from C runtime (opendir: No such file or directory) mean invalid data reached a system call. catch absorbs the error, but perror() already printed. The only fix is preventing invalid data from reaching the call.
"I'll fix it in each command separately"
If the same fix is needed in explore, search, grep, reconcile, plan documentation... the fix belongs in the shared pipeline, not in each command.
"The similarity is just shared vocabulary, not real duplication"
40-60% TF-IDF similarity between modules that aren't supposed to share concepts is a warning. The vocabulary match IS the signal.
Quick Reference: Which Command When
| Question | Command |
|---|---|
| "What files are similar?" | explore --format=list |
| "What exactly is duplicated?" | plan refactor --threshold=0.9 |
| "What code overlaps between packages A and B?" | plan solid --from=A,B |
| "Which functions are trivial wrappers?" | plan unwrap or grep --semantic=proxy |
| "What concept do these files share?" | explore file_a file_b --threshold=0 --strategy=apted |
| "Has the duplication been fixed?" | Re-run plan refactor with same threshold |
Related skills
FAQ
Who is indexion-refactor for?
Developers eliminating textual, structural, and conceptual duplication and enforcing single source of truth in codebases.
Which indexion command finds cross-package overlap?
plan solid --from=dirA,dirB finds extraction candidates between directories; plan refactor handles within-directory duplication.
Should I apply plan unwrap fixes immediately?
Always run plan unwrap --dry-run first; review platform wrappers and public API wrappers before --fix.
Is Indexion Refactor safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.