SBH — Storage Ballast Helper

SkillFiles & storage

Disk-pressure defense for AI coding workloads. Use when: disk full, low space, ballast, cleanup, scan artifacts, emergency, sbh daemon, sbh status.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the SBH — Storage Ballast Helper skill

What this skill tells your AI

The instructions your AI receives, as published by dicklesworthstone/storage_ballast_helper in .claude/skills/sbh/SKILL.md and read by ahel’s review.

Prevents disk-full disasters via ballast files, artifact scanning, and predictive pressure monitoring. Three-pronged: ballast (instant space), scanner (stale artifacts), special locations (/tmp, /dev/shm, swap).

Quick Check

sbh status                     # Pressure level + free space
sbh status --json | jq '.pressure'  # Machine-parseable
sbh check --need 5G            # "Do I have 5 GB free?"
sbh check --predict 30         # "Will I run out in 30 min?"

Exit codes: 0 = healthy, 1 = pressure, 2 = error.


Daemon

sbh daemon                          # Foreground (debugging)
systemctl --user start sbh          # Systemd user scope
sbh install --systemd --user --auto # Install + start (Linux)
sbh install --launchd --auto        # Install + start (macOS)
sbh install --wizard                # Guided interactive setup

Signals: SIGHUP = reload config, SIGUSR1 = force scan now, SIGTERM = graceful stop.


Ballast

Pre-allocated sacrificial files — released in milliseconds, no scanning needed.

sbh ballast status             # Per-volume inventory
sbh ballast provision          # Create/rebuild pool
sbh ballast release 3          # Free 3 files NOW
sbh ballast replenish          # Rebuild after pressure passes

Defaults: 10 x 1 GiB = 10 GiB. Ensure ballast dir is on same mount as pressure source.


Scanning & Cleanup

sbh scan /data/projects --top 20       # Rank artifacts by score
sbh clean /data/projects --dry-run     # Preview what would go
sbh clean --target-free 50G --yes      # Delete until 50 GB free

Scoring: Location (.25) + Name (.25) + Age (.20) + Size (.15) + Structure (.15) = 1.0.


Protection

sbh protect /path              # .sbh-protect marker (subtree)
sbh unprotect /path            # Remove marker

Config globs: scanner.protected_paths. Hard vetoes (always enforced): .git/ dirs, open files, age < 10 min, non-writable parents.


Emergency Recovery

Zero-write mode for near-100% full disks. No config file needed.

sbh emergency /data --yes              # Aggressive cleanup NOW
sbh emergency --target-free 10G        # Stop at 10 GB recovered

Observability

sbh dashboard                  # TUI: 7 screens (1-7 to jump)
sbh stats --window 24h         # Activity over last 24 hours
sbh blame --top 10             # Top 10 pressure sources
sbh explain --id <ID>          # Why was this decision made?

Configuration

Config: ~/.config/sbh/config.toml | Env: SBH_ prefix | Fallback: /etc/sbh/config.toml

sbh config show                # Current values
sbh config validate            # Check constraints
sbh config set KEY VALUE       # Change a value
sbh tune --apply --yes         # Auto-tune for this system

Anti-Patterns

Don'tDo Instead
Ballast on /tmppaths.ballast_dir on same mount as pressure source
Daemon as root, CLI as user--user scope — avoids state file permission mismatch
Skip pre-build checksbh check --need 10G in CI/hook
Delete .sbh-protect by handsbh unprotect /path
Wait for Red to actAct at Yellow — agent swarms escalate fast
min_file_age_minutes = 0Keep >= 5 to protect in-flight writes

Reference Index

TopicFile
All commands, flags, env varsCOMMANDS.md
Full config key referenceCONFIG.md
Error codes, symptom-fix tablesTROUBLESHOOTING.md
Architecture, safety layers, internalsARCHITECTURE.md

Signals

GitHub stars
27
Forks
3
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
sbh-dicklesworthstone
Source
github.com/dicklesworthstone/storage_ballast_helper