Interactive Demo

Parallel agents maintain
your codebase.

Sweeper dispatches parallel Claude agents to fix lint issues, run migrations, or refactor code across your repo—optionally inside a stereOS VM for isolation. Multi-round retry with escalating strategies. Every fix attempt recorded to tapes.

View sweeper on GitHub →

← All demos
The Setup

One command, any linter or refactor target

Sweeper works with any linter—golangci-lint, eslint, cargo clippy—or pipe in any structured output to drive file-level refactors. The --vm flag boots a stereOS VM with your API key injected via tmpfs. The orchestrator never reads source files directly—all file-level work happens inside isolated sub-agents.

Why VM isolation? Running sweeper inside an active Claude Code session triggers nesting detection errors. The --vm flag boots a dedicated stereOS VM with its own resources, so sub-agents run cleanly. Also useful for CI/CD: hermetic environment, secrets never touch the host filesystem.
~ — launch sweeper
Scales via concurrency, not context. An orchestrator fixing 50 files uses roughly the same context as fixing 5. Each sub-agent is a single-shot claude --print invocation—no conversation state, no context window bloat. Work parallelizes, not concatenates.
Round 1

Lint, group, dispatch

Sweeper runs the linter, parses the output (supports golangci-lint, ESLint stylish, and generic file:line:col formats), groups issues by file, and dispatches parallel agents. Each agent gets a file-specific prompt with just its issues.

sweeper — round 1 dispatching
┌────────────────────────────────────────────────────────┐ sweeper orchestrator lint ──▶ parse ──▶ group by file ──▶ dispatch ┌─────────┼─────────┐ agent 1 agent 2 agent 3 file A file B file C each agent: single-shot claude --print via mb ssh every call recorded to tapes (.tapes/tapes.db) └────────────────────────────────────────────────────────┘
Round 2

Re-lint, escalate, retry

After round 1, sweeper re-runs the linter. Files with remaining issues get retried with escalating strategies: the retry prompt includes prior output so the agent tries a different approach. Stagnant files get an exploration prompt that encourages refactoring.

sweeper — round 2 retry with escalation
Three escalation strategies. Round 0 uses a standard fix prompt. If a file doesn’t improve, the retry prompt includes prior output: “this was attempted, try a different approach.” After consecutive stagnation, the exploration prompt encourages structural changes: “consider refactoring, examine the broader context.”
all issues resolved
Results

Observe what happened

Sweeper logs every fix attempt to .sweeper/telemetry/ as JSONL and every LLM call to tapes. Run sweeper observe to see success rates by linter, round effectiveness, and strategy performance.

~ — results and observability
Telemetry-driven learning. Every fix attempt records the file, linter, round, strategy, success/failure, duration, and token usage. Aggregate across runs to find where your prompts fall short, which linters have the highest fix rates, and whether retry rounds are worth the token spend. tapes captures the full LLM conversation for any attempt you want to replay.
Beyond Lint

Pipe in anything

Sweeper’s core loop—parse issues, group by file, dispatch parallel agents, retry on failure—works for any measurable code improvement target. Find files over 1,000 lines and dispatch agents to refactor them in parallel:

# find files over 1,000 lines and refactor them find src/ -name "*.ts" -exec wc -l {} + | awk '$1 > 1000' | sweeper run # sweeper dispatches an agent per file: # src/api/router.ts (1,847 lines) → agent 1: extract route handlers # src/db/queries.ts (1,234 lines) → agent 2: split by domain # src/utils/helpers.ts (1,102 lines) → agent 3: decompose into modules # src/services/payments.ts (2,041 lines) → agent 4: extract sub-services # same retry loop, same escalation, same telemetry # agents that don't reduce line count get retried with exploration strategy
The pattern is general. Any command that outputs file:line: message works as input. Sweeper parses it, groups by file, and dispatches agents. The VM, retry loop, escalation strategies, and telemetry all apply regardless of the source. The same tool that fixes ESLint warnings can split oversized files, resolve TODOs, or drive a database migration.

Lint. Fix. Learn. Repeat.

Any linter. Parallel agents. Escalating retries.
Every decision recorded.

View on GitHub →