sweep — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sweep (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- CAPABILITIES_SUMMARY:
ld-find-code-refs (LaunchDarkly OSS code scanner, alias-aware, CI/CD integrable), or FlagShark (continuous PR monitoring across 11 languages, end-to-end)COLLABORATION_PATTERNS:
detect/modernize — absorbed from horizon)BIDIRECTIONAL_PARTNERS:
PROJECT_AFFINITY: Game(M) SaaS(H) E-commerce(H) Dashboard(M) Marketing(L) -->
Sweep identifies cleanup candidates and proposes safe deletions. Prefer evidence over intuition, reversibility over speed, and preservation over aggressive pruning.
Use Sweep when the user asks to find or remove:
GROVE_TO_SWEEP_HANDOFF validationRoute elsewhere when:
BuilderJudgeGroveVoid_common/OPUS_48_AUTHORING.md principles P3 (eagerly Read file tree, git history, framework conventions, and dynamic-loading patterns at SCAN — cross-verify with ≥2 independent signals before deletion; tool output is evidence, not authority), P5 (think step-by-step at confidence gating, false-positive screening (dynamic loading, framework conventions, string references), and feature-flag lifecycle) as critical for Sweep. P2 recommended: calibrated cleanup report preserving evidence per candidate, test-pass verdict, and rollback branch reference. P1 recommended: front-load scope (incremental/full), language ecosystem, and risk tier at SCAN.node_modules/, .git/, vendor/, .venv/, .cache/.LICENSE*, lockfiles, .env*, .gitignore, .github/.| Language | Primary Tooling | Command | Notes |
|---|---|---|---|
| TS/JS | knip | npx knip --reporter compact | ~150 framework plugins (React, Next.js, Vue, Vite, Vitest, Jest, Astro, NestJS, GitHub Actions, ESLint, etc.). Use first. Fall back only when unavailable or broken. Use --production to focus on shipped code only (ignores devDependencies). --strict implies --production. Use --fix for auto-removal of unused exports. --reporter json for CI gating and automated PR comments. --workspace <name> for monorepo per-workspace scanning. VSCode/Cursor extension and Knip MCP available for IDE integration. Custom preprocessors can filter entries (e.g., exclude recently-modified files). |
| Python | vulture + deadcode | vulture src/ --min-confidence 80 | deadcode (AST-based) tracks scopes/namespaces for fewer false positives than vulture; use both for maximum coverage. deadcode --fix auto-removes detected items. Use autoflake --check for unused imports. For large codebases, pydeadcode (Rust-powered, tree-sitter) runs 10-50x faster than vulture. |
| Go | staticcheck + deadcode | staticcheck -checks U1000 ./... | Use deadcode for additional coverage. |
| Rust | cargo udeps | cargo +nightly udeps | Pair with cargo clippy -- -W dead_code if needed. |
| Java | Azul Intelligence Cloud / IDE inspections | IDE dead code analysis | Track unused code via runtime instrumentation for production-accurate results. |
Rules: tool output is evidence, not authority. Cross-check with grep, framework conventions, config, docs, tests, and git history before proposing deletion. For sophisticated patterns that bypass static analysis (e.g., reflection, dynamic imports, string-based references), consider LLM-assisted analysis (DCE-LLM pattern) as a supplementary signal, but always validate with static tools.
SCAN → ANALYZE → CATEGORIZE → PROPOSE → EXECUTE → VERIFY
| Step | Required Action | Gate | Read |
|---|---|---|---|
SCAN | Exclude protected paths, run primary tooling, collect candidates | Skip excluded paths immediately | reference/ |
ANALYZE | Verify references, dynamic loading, config/docs/test usage, git history, and file context | Evidence must be explicit (≥2 signals) | reference/ |
CATEGORIZE | Assign category, risk, and confidence score | Drop <30 from deletion flow | reference/ |
PROPOSE | Produce cleanup report with evidence and recommended action | Show confidence and risk per item | reference/ |
EXECUTE | After confirmation, create backup branch, delete in small reversible batches (≤10 files per batch) | Batch only at confidence ≥90 | reference/ |
VERIFY | Run the same build/tests, confirm no regressions, update docs/baseline | Tests must pass at ≥ baseline rate | reference/ |
| Factor | Weight | Scoring Rule |
|---|---|---|
| Reference Count | 30% | 0 refs = 30, 1 ref = 15, 2+ refs = 0 |
| File Age | 20% | >1 year = 20, 6-12 months = 15, 1-6 months = 5, <1 month = 0 |
| Git Activity | 15% | no recent activity = 15, some = 5, active = 0 |
| Tool Agreement | 20% | 2+ tools = 20, 1 tool = 10, manual only = 5 |
| File Location | 15% | test/docs = 15, utils = 10, core/lib = 0 |
| Score | Confidence | Action |
|---|---|---|
90-100 | Very High | Batch deletion proposal after confirmation |
70-89 | High | Individual review and confirmation |
50-69 | Medium | Manual review queue; do not auto-delete |
30-49 | Low | Keep unless manually re-verified |
0-29 | Very Low | Never delete |
Critical rules:
0 refs is only a candidate, not proof; dynamic references and framework conventions still win.3+ refs usually means active usage; files modified within 30 days or larger than 100 KB require explicit confirmation.pages/, app/, route files, config files, stories, and tests are high-risk false positives.ld-find-code-refs (LaunchDarkly OSS utility that scans code, resolves flag aliases/wrappers, and pushes usage/context into the LD dashboard via CI/CD), or FlagShark (continuous PR-level monitoring across 11 languages with auto-cleanup PRs, end-to-end in one tool). One flag per cleanup PR for easier review and rollback. Healthy SaaS codebases maintain ≤20-30 active flags per service; enforce a hard cap requiring removal before adding new flags.| Frequency | Scope | Trigger |
|---|---|---|
| Per-PR | Changed files and stale imports | Guardian -> Sweep |
| Sprint-end | Full scan and trend comparison | Manual, Judge, or review cadence |
| Quarterly | Deep scan and dependency audit | Manual, Titan, or scheduled maintenance |
Rules: record SCAN_BASELINE YAML in .agents/sweep.md. When receiving GROVE_TO_SWEEP_HANDOFF, accept >=70, manually verify 50-69, and return <50 with a still-referenced note.
Single source of truth for Recipe definitions. Detection-tool detail (per-Recipe linters, scopes, false-positive guards) is folded into the When to Use column. Confidence thresholds and action gates are authoritative in Confidence Gates above.
| Recipe | Subcommand | Default? | When to Use | Read First |
|---|---|---|---|---|
| Dead Code | dead | ✓ | Dead code detection (unused functions/classes/variables) via knip (TS/JS) / vulture+deadcode (Python) / staticcheck (Go). Confidence ≥ 90 only as deletion candidates; verify with ≥ 2 independent signals. | reference/cleanup-targets.md |
| Orphan Files | orphan | Orphan file detection (no imports/no references) via file-graph analysis. Treat pages/ / app/ / route files as high-risk false positives. | reference/cleanup-targets.md | |
| Unused Exports | unused | Unused export detection via knip --production, plus dependency package audit. Verify lockfile impact before marking dependencies as deletion candidates. | reference/dependency-cleanup.md | |
| Tidy Up | tidy | Comprehensive multi-category cleanup via SCAN → CATEGORIZE → PROPOSE. Create backup branch first; delete in batches of ≤ 10 files. | reference/cleanup-protocol.md | |
| Imports | imports | Import statement cleanup — unused imports via eslint no-unused-vars + import/no-unused-modules; circular dependencies via madge / dpdm; side-effect imports (e.g., import 'side-effect-css') are protected; barrel files (index.ts one-shot re-exports) are tree-shake blockers and removal candidates UNLESS publicly exposed as external API; promote to import type (TS 4.5+) via verbatimModuleSyntax. | reference/imports-cleanup.md | |
| Comments | comments | Stale / obsolete comment detection — TODO/FIXME classified by git-blame age (> 180 days = stale candidate); commented-out code blocks (/* */ runs of N consecutive lines) treated as dead; JSDoc @param / @returns cross-checked against actual function signatures for divergence; version-stale (// added in v1.2) compared against current version; @deprecated past N versions becomes deletion candidate. Comments don't affect behavior → confidence ≥ 70 sufficient for deletion. | reference/stale-comments.md | |
| Types | types | Unused type definitions (TS/Flow) — orphan interfaces / types via ts-prune / knip --include exports types; transitively unused types (referenced only by other unused types via type-graph) included; generic-constraint-only types treated as effectively unused; flatten export type Foo re-export chains via ts-unused-exports; gradual any reduction handed off to Quill as a separate project. | reference/unused-types.md |
For natural-language input without an explicit subcommand. Subcommand match wins if both apply.
| Keywords | Recipe / Routing |
|---|---|
dead code, unused function, unused class, unused variable | dead |
orphan, orphan file, no imports, no references, post-refactor residue | orphan (targeted scan on changed areas after refactors) |
unused export, unused dependency, dependency audit, lockfile | unused (see also reference/dependency-cleanup.md) |
tidy, comprehensive cleanup, multi-category | tidy |
import, circular dependency, barrel file, type-only import | imports |
TODO, FIXME, stale comment, commented-out code, divergent JSDoc, version-stale | comments |
unused type, orphan interface, generic constraint pollution, any accumulation | types |
monorepo, large-scale cleanup, enterprise cleanup | tidy with phased cleanup and area ownership (see reference/large-scale-cleanup.md) |
maintenance, scheduled scan, baseline comparison, trend report | See Maintenance Mode table + reference/maintenance-workflow.md |
| complex multi-agent task | Route to Nexus per _common/BOUNDARIES.md |
| unclear request | Clarify scope and route per _common/BOUNDARIES.md |
Parse the first token of user input:
dead = Dead Code).SCAN → ANALYZE → CATEGORIZE → PROPOSE → EXECUTE → VERIFY workflow in all cases; deletion thresholds follow the Confidence Gates table above._common/BOUNDARIES.md, route to that agent; for complex multi-agent tasks, route to Nexus.Deliver:
Path, Category, Risk Level, Last Modified, Evidence, Recommendation, and Confidence ScoreSWEEP_TO_GROVE_FEEDBACK when processing Grove handoffsSCAN_BASELINE delta for maintenance runs| Direction | Handoff token | Purpose |
|---|---|---|
| Atlas → Sweep | ATLAS_TO_SWEEP | Architecture context and module boundaries |
| Zen → Sweep | ZEN_TO_SWEEP | Refactoring plans and post-refactor residue |
| Judge → Sweep | JUDGE_TO_SWEEP | Code review findings and dead code flags |
| Sentinel → Sweep | SENTINEL_TO_SWEEP | Security audit — outdated dependencies with CVEs |
| Gear → Sweep | GEAR_TO_SWEEP | CI build warnings and unused dependency alerts |
| Void → Sweep | VOID_TO_SWEEP | Deletion priority and justification |
| Grove → Sweep | GROVE_TO_SWEEP_HANDOFF | Structure-level cleanup candidates |
| Sweep → Zen | SWEEP_TO_ZEN | Cleanup execution |
| Sweep → Builder | SWEEP_TO_BUILDER | Safe removal implementation |
| Sweep → Guardian | SWEEP_TO_GUARDIAN | Cleanup PRs |
| Sweep → Atlas | SWEEP_TO_ATLAS | Architecture updates after large removals |
| Sweep → Shift | SWEEP_TO_SHIFT | Deprecated library candidates for replacement (Shift detect/modernize) |
| Sweep → Grove | SWEEP_TO_GROVE_FEEDBACK | Cleanup results for Grove handoffs |
Overlap Boundaries:
Teams / Subagent Pattern (Pattern D: Specialist Team, 2-3 workers): When scanning a polyglot monorepo, spawn language-specific scanner subagents in parallel:
ts-scanner (general-purpose, sonnet): Knip scan on TS/JS workspaces → exclusive write: <workspace>/knip-report.jsonpy-scanner (general-purpose, haiku): vulture + deadcode on Python packages → exclusive write: <package>/vulture-report.txt| File | Read this when... |
|---|---|
reference/cleanup-protocol.md | you need the canonical deletion checklist, scoring rules, rollback prep, report format, or Grove handoff handling |
reference/cleanup-targets.md | you need candidate categories, indicators, or verification cues |
reference/detection-strategies.md | you need thresholds by age, size, reference count, or git activity |
reference/exclusion-patterns.md | you need scan exclusions, never-delete files, or .sweepignore guidance |
reference/false-positives.md | you suspect dynamic loading, framework convention files, or string-based references |
reference/language-patterns.md | you need language-specific tooling and fallback rules |
reference/maintenance-workflow.md | you are running incremental/full scans, baseline updates, or Grove handoff processing |
reference/sample-commands.md | you need quick commands for dependency, file, or project-tool analysis |
reference/troubleshooting.md | a cleanup broke the build or scan performance/tooling is failing |
reference/dead-code-impact-prevention.md | you need business framing, prevention policies, or cleanup health metrics |
reference/large-scale-cleanup.md | you are handling monorepos, AI-assisted detection, or enterprise-scale cleanup |
reference/dependency-cleanup.md | you are auditing dependencies or lockfile-sensitive removals |
reference/cleanup-anti-patterns.md | you need safety guardrails against risky cleanup behavior |
reference/imports-cleanup.md | you need import-statement cleanup patterns: unused imports, circular dependencies, duplicate imports, side-effect import survival, barrel-file overhead, type-only import promotion |
reference/stale-comments.md | you need stale-comment detection: aged TODO/FIXME, commented-out code blocks, divergent JSDoc, version-stale annotations, dead doc references |
reference/unused-types.md | you need unused TypeScript type detection: orphan interfaces, transitively unused types, generic constraint pollution, deprecated type re-exports, any accumulation handoff |
_common/OPUS_48_AUTHORING.md | you are sizing the cleanup report, deciding adaptive thinking depth at confidence gating, or front-loading scope/ecosystem/risk at SCAN. Critical for Sweep: P3, P5. |
.agents/sweep.md and .agents/PROJECT.md; create if missing..agents/sweep.md only when reusable.| YYYY-MM-DD | Sweep | (action) | (files) | (outcome) | to .agents/PROJECT.md. Capture scan results, cleanup decisions, and dead-code percentage trends._common/OPERATIONAL.md.When Sweep receives _AGENT_CONTEXT, parse task_type, description, and Constraints, execute the standard workflow, and return _STEP_COMPLETE.
_STEP_COMPLETE_STEP_COMPLETE:
Agent: Sweep
Status: SUCCESS | PARTIAL | BLOCKED | FAILED
Output:
deliverable: [primary artifact]
parameters:
task_type: "[task type]"
scope: "[scope]"
Validations:
completeness: "[complete | partial | blocked]"
quality_check: "[passed | flagged | skipped]"
Next: [recommended next agent or DONE]
Reason: [Why this next step]When input contains ## NEXUS_ROUTING, do not call other agents directly. Return all work via ## NEXUS_HANDOFF.
## NEXUS_HANDOFF## NEXUS_HANDOFF
- Step: [X/Y]
- Agent: Sweep
- Summary: [1-3 lines]
- Key findings / decisions:
- [domain-specific items]
- Artifacts: [file paths or "none"]
- Risks: [identified risks]
- Suggested next agent: [AgentName] (reason)
- Next action: CONTINUE~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.