A local-first cleaner for AI agent clients.
VibeHauler opens a terminal UI that finds local AI agent data, explains what is safe to remove, and helps clean sessions, caches, logs, and temporary files without touching credentials or long-term configuration.
Current main supports the original CLI clients plus protective desktop-client cleanup:
| Client | Tier | Detection | Inventory | Sessions | Safe cleanup |
|---|---|---|---|---|---|
| Claude Code | Full | yes | yes | JSONL | logs/cache/tmp |
| Codex | Full | yes | yes | JSONL/history | logs/cache/tmp |
| Gemini CLI | Full | yes | yes | JSONL chats | logs/cache/tmp |
| Cursor | Protective | yes | report-only DB state | none yet | cache/log only |
| Cherry Studio | Protective | yes | report-only LevelDB/IndexedDB/SQLite state | none yet | trace/cache/log only |
| DeepChat | Protective | yes | read-only agent.db sessions |
report-only | cache/log/tmp only |
Protective adapters never mutate app databases or opaque browser stores. Aider support was removed from the default registry; the old Markdown parser remains as a regression fixture only.
From source:
git clone https://github.com/zerob13/VibeHauler.git
cd VibeHauler
cargo install --path crates/vibe-hauler
vhaulDuring development, run directly:
cargo run -p vibe-hauler --Homebrew:
brew install zerob13/tap/vibe-hauler
vhaulPlanned npm distribution:
npm install -g vibe-haulerDirect release archives should contain vhaul or vhaul.exe, README.md, and LICENSE.
Open the interactive TUI:
vhaulUseful startup flags:
vhaul --help
vhaul --version
vhaul --no-color
vhaul --config path/to/config.toml
vhaul --portable-root fixtures/macos-home
vhaul --roots claude=/tmp/home/.claude,codex=/tmp/home/.codexSafety model:
- discovery and analysis are read-only;
- Green items are rebuildable logs, caches, and temp files, selected by default;
- Yellow items are sessions/history and require explicit selection plus backup;
- Red and Black items are protected/report-only;
- cleanup moves files to OS Trash when available or VibeHauler quarantine;
- every mutation writes a manifest under the VibeHauler data directory;
- execution re-checks source files before moving them and skips changed files.
TUI flow:
Boot -> AppSelection -> Analyze -> SafeSelection -> SafeExecution
-> SessionOverview -> SessionBrowser -> SessionConfirmation
-> SessionExecution -> FinalSummaryFor fixture-safe usage while testing:
cargo run -p vibe-hauler -- --portable-root fixtures/macos-home --no-colorDo not run mutation tests against a real home directory. Use --portable-root fixtures/<os>-home/ or a temporary copy of a fixture home.
| Surface | Name |
|---|---|
| Product | VibeHauler |
| CLI binary | vhaul |
| Rust crate | vibe-hauler |
| Repository | VibeHauler |
| Tagline | Haul away your agent clutter. |
crates/
├── vibe-hauler # CLI binary
├── vibe-hauler-core # shared models, risk engine, plan builder
├── vibe-hauler-config # config loading and validation
├── vibe-hauler-discovery # cross-platform root discovery
├── vibe-hauler-adapters # app-specific inventory/session extraction
├── vibe-hauler-parsers # JSONL and Markdown session parsers
├── vibe-hauler-cleaner # backup, trash/quarantine, manifest, restore
├── vibe-hauler-redaction # secret masking and preview truncation
└── vibe-hauler-fixtures # test fixture helpersRequirements:
- Rust toolchain from
rust-toolchain.toml; cargo;- optional
tmuxfor local TUI snapshot driving.
Common commands:
cargo fmt --all
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo run -p vibe-hauler --Recommended pre-PR check:
cargo fmt --all -- --check
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warningsRun against a fixture home:
cargo run -p vibe-hauler -- --portable-root fixtures/macos-home --no-color
cargo run -p vibe-hauler -- --portable-root fixtures/linux-home --no-color
cargo run -p vibe-hauler -- --portable-root fixtures/windows-home --no-colorAdd new behavior in module order:
- core models/risk/plan;
- config/discovery;
- parsers;
- adapters;
- cleaner;
- CLI/TUI;
- fixtures and tests.
Keep adapter semantics out of vibe-hauler-core, and keep filesystem mutation inside vibe-hauler-cleaner.
The test suite is fixture-first. It must not depend on the developer's real home directory.
cargo test --workspace --all-featuresCovered areas include:
- adapter detect/inventory/sessions for Claude, Codex, and Gemini;
- protective detect/inventory/no-session behavior for Cursor and Cherry Studio;
- read-only DeepChat
agent.dbsession parsing; - JSONL known and unknown events;
- legacy Markdown history parsing;
- RiskLevel assignment;
- CleanPlan generation and serialization;
- CleanManifest generation;
- dry-run no-mutation behavior;
- backup -> trash -> manifest -> restore roundtrip;
- symlink escape rejection;
- mock process guard;
- CLI help and fixture-backed TUI startup.
Optional manual TUI smoke with tmux:
tmux new-session -d -s vhaul-test
tmux send-keys -t vhaul-test 'cargo run -p vibe-hauler -- --portable-root fixtures/macos-home --no-color' Enter
sleep 2
tmux capture-pane -t vhaul-test -p
tmux send-keys -t vhaul-test Enter
tmux send-keys -t vhaul-test Enter
tmux send-keys -t vhaul-test s
tmux capture-pane -t vhaul-test -p
tmux kill-session -t vhaul-testFor mutation smoke tests, copy fixtures to a temporary directory first:
tmp="$(mktemp -d)"
cp -R fixtures/macos-home "$tmp/macos-home"
cargo run -p vibe-hauler -- --portable-root "$tmp/macos-home" --no-colorRelease builds:
cargo build -p vibe-hauler --release
target/release/vhaul --version
target/release/vhaul --helpSuggested artifact names:
vhaul-v0.2.0-aarch64-apple-darwin.tar.gz
vhaul-v0.2.0-x86_64-apple-darwin.tar.gz
vhaul-v0.2.0-x86_64-unknown-linux-gnu.tar.gz
vhaul-v0.2.0-x86_64-pc-windows-msvc.zip
checksums.txtEach archive should include:
vhaul or vhaul.exe
README.md
LICENSEHomebrew packaging lives in:
packaging/homebrew/Formula/vibe-hauler.rbnpm packaging lives in:
packaging/npm/vibe-hauler/
packaging/npm/vibe-hauler-darwin-arm64/
packaging/npm/vibe-hauler-darwin-x64/
packaging/npm/vibe-hauler-linux-x64/
packaging/npm/vibe-hauler-win32-x64/The npm package is a native binary wrapper, not a Node rewrite. Copy the built vhaul binary into the matching platform package before npm pack or publish.
Dry-run package checks:
npm pack --dry-run --prefix packaging/npm/vibe-hauler
npm pack --dry-run --prefix packaging/npm/vibe-hauler-darwin-arm64
npm pack --dry-run --prefix packaging/npm/vibe-hauler-darwin-x64
npm pack --dry-run --prefix packaging/npm/vibe-hauler-linux-x64
npm pack --dry-run --prefix packaging/npm/vibe-hauler-win32-x64Before tagging:
cargo fmt --all -- --check
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo run -p vibe-hauler -- --help
cargo run -p vibe-hauler -- --versionRelease checklist:
- Update version numbers in Cargo and packaging metadata.
- Update release notes or
CHANGELOG.mdif present. - Build target artifacts for macOS arm64, macOS x64, Linux x64, and Windows x64.
- Generate
checksums.txt. - Smoke-test
vhaul --versionandvhaul --helpfrom packaged artifacts. - Create a GitHub Release with binaries and checksums.
- Update the Homebrew tap formula URL/version/sha256.
- Publish npm platform packages first, then the
vibe-haulerwrapper package. - Verify install paths:
brew install zerob13/tap/vibe-hauler
npm install -g vibe-hauler
vhaul --version
vhaul --helpDetailed release notes live in:
Start with docs/README.md.
