clean-codebase
Acerca de
Esta habilidad limpia automáticamente problemas de higiene del código como código muerto, importaciones no utilizadas y advertencias de lint, a la vez que estandariza el formato, sin alterar la lógica central del negocio. Es ideal para abordar la deuda técnica acumulada durante sprints de desarrollo rápido. La herramienta se centra en correcciones seguras y no arquitectónicas para restaurar la mantenibilidad de la base de código.
Instalación rápida
Claude Code
Recomendadonpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/clean-codebaseCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
clean-codebase
When Use
Use when codebase has accumulated hygiene debt:
- Lint warnings piled up during rapid development
- Unused imports, variables clutter files
- Dead code paths exist but never removed
- Formatting inconsistent across files
- Static analysis tools report fixable issues
Do NOT use for architectural refactoring, bug fixes, or business logic changes. Skill focuses purely on hygiene, automated cleanup.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
codebase_path | string | Yes | Absolute path to codebase root |
language | string | Yes | Primary language (js, python, r, rust, etc.) |
cleanup_mode | enum | No | safe (default) or aggressive |
run_tests | boolean | No | Run test suite after cleanup (default: true) |
backup | boolean | No | Create backup before deletion (default: true) |
Steps
Step 1: Pre-Cleanup Assessment
Measure current state to quantify improvements later.
# Count lint warnings by severity
lint_tool --format json > lint_before.json
# Count lines of code
cloc . --json > cloc_before.json
# List unused symbols (language-dependent)
# JavaScript/TypeScript: ts-prune or depcheck
# Python: vulture
# R: lintr unused function checks
Got: Baseline metrics saved to lint_before.json and cloc_before.json
If fail: Lint tool not found? Skip automated fixes, focus on manual review
Step 2: Fix Automated Lint Warnings
Apply safe automated fixes (spacing, quotes, semicolons, trailing whitespace).
JavaScript/TypeScript:
eslint --fix .
prettier --write .
Python:
black .
isort .
ruff check --fix .
R:
Rscript -e "styler::style_dir('.')"
Rust:
cargo fmt
cargo clippy --fix --allow-dirty
Got: All safe lint warnings resolved; files formatted consistently
If fail: Automated fixes introduce test failures? Revert changes, escalate
Step 3: Identify Dead Code Paths
Use static analysis to find unreferenced functions, unused variables, orphaned files.
JavaScript/TypeScript:
ts-prune | tee dead_code.txt
depcheck | tee unused_deps.txt
Python:
vulture . | tee dead_code.txt
R:
Rscript -e "lintr::lint_dir('.', linters = lintr::unused_function_linter())"
General approach:
- Grep for function definitions
- Grep for function calls
- Report functions defined but never called
Got: dead_code.txt lists unused functions, variables, files
If fail: Static analysis tool unavailable? Manually review recent commit history for orphaned code
Step 4: Remove Unused Imports
Clean up import blocks by removing references to packages never used.
JavaScript:
eslint --fix --rule 'no-unused-vars: error'
Python:
autoflake --remove-all-unused-imports --in-place --recursive .
R:
# Manual review: grep for library() calls, check if package used
grep -r "library(" . | cut -d: -f2 | sort | uniq
Got: All unused import statements removed
If fail: Removing imports breaks build? Used indirectly — restore, document
Step 5: Remove Dead Code (Mode-Dependent)
Safe Mode (default):
- Only remove code explicitly marked as deprecated
- Remove commented-out code blocks (if >10 lines and >6 months old)
- Remove TODO comments referencing completed issues
Aggressive Mode (opt-in):
- Remove all functions identified as unused in Step 3
- Remove private methods with zero references
- Remove feature flags for deprecated features
For each candidate deletion:
- Verify zero references in codebase
- Check git history for recent activity (skip if modified in last 30 days)
- Remove code, add entry to
CLEANUP_LOG.md
Got: Dead code removed; CLEANUP_LOG.md documents all deletions
If fail: Uncertain whether code truly dead? Move to archive/ directory instead
Step 6: Normalize Formatting
Ensure consistent formatting across all files (even if not caught by linters).
- Normalize line endings (LF vs CRLF)
- Ensure single newline at end of file
- Remove trailing whitespace
- Normalize indentation (spaces vs tabs, indent width)
# Example: Fix line endings and trailing whitespace
find . -type f -name "*.js" -exec sed -i 's/\r$//' {} +
find . -type f -name "*.js" -exec sed -i 's/[[:space:]]*$//' {} +
Got: All files follow consistent formatting conventions
If fail: sed breaks binary files? Skip, document
Step 7: Run Tests
Validate cleanup didn't break functionality.
# Language-specific test command
npm test # JavaScript
pytest # Python
R CMD check # R
cargo test # Rust
Got: All tests pass (or same failures as before cleanup)
If fail: Revert changes incrementally to identify breaking change, then escalate
Step 8: Generate Cleanup Report
Document all changes for review.
# Codebase Cleanup Report
**Date**: YYYY-MM-DD
**Mode**: safe | aggressive
**Language**: <language>
## Metrics
| Metric | Before | After | Change |
|--------|--------|-------|--------|
| Lint warnings | X | Y | -Z |
| Lines of code | A | B | -C |
| Unused imports | D | 0 | -D |
| Dead functions | E | F | -G |
## Changes Applied
1. Fixed X lint warnings (automated)
2. Removed Y unused imports
3. Deleted Z lines of dead code (see CLEANUP_LOG.md)
4. Normalized formatting across W files
## Escalations
- [Issue description requiring human review]
- [Uncertain deletion moved to archive/]
## Validation
- [x] All tests pass
- [x] Backup created: backup_YYYYMMDD/
- [x] CLEANUP_LOG.md updated
Got: Report saved to CLEANUP_REPORT.md in project root
If fail: (N/A — generate report regardless of outcome)
Checks
After cleanup:
- All tests pass (or same failures as before)
- No new lint warnings introduced
- Backup created before any deletions
-
CLEANUP_LOG.mddocuments all removed code - Cleanup report generated with metrics
- Git diff reviewed for unexpected changes
- CI pipeline passes
Pitfalls
-
Removing Code Still Used via Reflection: Static analysis misses dynamic calls (e.g.,
eval(), metaprogramming). Always check git history. -
Breaking Implicit Dependencies: Removing imports used by dependencies. Run tests after every import removal.
-
Deleting Feature Flags for Active Features: Even if unused in current branch, feature flags may be active in other environments. Check deployment configs.
-
Over-Aggressive Formatting: Tools like
blackorprettiermay reformat code in ways that trigger unnecessary diffs. Configure tools to match project style. -
Ignoring Test Coverage: Cannot safely clean codebases without tests. Coverage low? Escalate for test additions first.
-
Not Backing Up: Always create
backup_YYYYMMDD/directory before deleting anything, even if using git. -
Wrong R binary on hybrid systems: On WSL or Docker,
Rscriptmay resolve to cross-platform wrapper instead of native R. Check withwhich Rscript && Rscript --version. Prefer native R binary (e.g.,/usr/local/bin/Rscripton Linux/WSL) for reliability. See Setting Up Your Environment for R path configuration.
See Also
- tidy-project-structure — Organize directory layout, update READMEs
- repair-broken-references — Fix dead links, imports
- escalate-issues — Route complex problems to specialists
- r-packages/run-r-cmd-check — Run full R package checks
- devops/dependency-audit — Check for outdated dependencies
Repositorio GitHub
Habilidades relacionadas
railway-docs
DocumentaciónEsta habilidad obtiene la documentación actual de Railway para responder preguntas sobre características, funcionalidad o URLs específicas de documentación. Garantiza que los desarrolladores reciban información precisa y actualizada directamente de las fuentes oficiales de Railway. Úsala cuando los usuarios pregunten cómo funciona Railway o hagan referencia a la documentación de Railway.
n8n-code-python
DocumentaciónEsta Skill de Claude proporciona orientación experta para escribir código Python en los nodos Code de n8n, específicamente para usar la biblioteca estándar de Python y trabajar con la sintaxis especial de n8n como `_input`, `_json` y `_node`. Ayuda a los desarrolladores a comprender las limitaciones de Python dentro de n8n y recomienda usar JavaScript para la mayoría de los flujos de trabajo, mientras ofrece soluciones en Python para necesidades específicas de transformación de datos.
archon
DocumentaciónLa habilidad Archon proporciona búsqueda semántica con tecnología RAG y gestión de proyectos a través de una API REST. Úsala para consultar documentación, gestionar proyectos/tareas jerárquicos y realizar recuperación de conocimiento con capacidades de carga de documentos. Prioriza siempre a Archon en primer lugar al buscar en documentación externa antes de utilizar otras fuentes.
n8n-code-javascript
DocumentaciónEsta habilidad de Claude proporciona orientación experta para escribir código JavaScript en los nodos de Código de n8n. Cubre sintaxis esencial específica de n8n como las variables `$input`/`$json`, ayudantes HTTP y manejo de DateTime, mientras soluciona errores comunes. Úsela al desarrollar flujos de trabajo en n8n que requieran procesamiento personalizado de JavaScript en los nodos de Código.
