Version 2.0 - Deterministic macOS artifact hunter with interactive TUI mode, comprehensive validation, and plan execution.
Scans well-known locations for application traces and produces rich CSV/JSON reports with deletion plans, shell scripts, and optional interactive artifact review.
- Interactive TUI Mode - Review and select artifacts for deletion with Rich-based interface
- Deterministic Scanning - Scans standard macOS locations (Applications, Application Support, Preferences, Containers, caches, logs, etc.)
- Rich Metadata - Artifact model with kind, scope, category, safety levels, size, timestamps, and removal instructions
- Plan Execution - Generate and execute deletion plans with built-in safety confirmations
- Input Validation - Comprehensive security checks for all user inputs
- Exclusion Patterns - Filter out paths you don't want to scan
- Multiple Output Formats - CSV, JSON reports, deletion plans, and executable shell scripts
- Example Configs - Ready-to-use configurations for Slack, Discord, Chrome, VS Code, and more
# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Clone repository
git clone https://github.com/rohit1901/app-hound.git
cd app-hound
# Install dependencies
poetry install
# Run app-hound
poetry run app-hound --helpUninstalling macOS apps cleanly requires identifying all related files (app bundles, support data, preferences, logs, caches, containers, saved state). app-hound scans predictable places and produces a structured set of artifacts so you can:
- Audit what exists and where
- Decide what's safe to remove (e.g., caches/logs) vs. what needs caution (e.g., preferences)
- Generate a deletion plan and an interactive shell script to clean up confidently
- Review artifacts in a beautiful TUI before making any changes
Configuration files are JSON and can be merged from multiple sources. By default, app-hound looks for apps_config.json in the input directory.
name(string, required)additional_locations(array of strings, optional)installation_path(string or null, optional)deep_home_search(boolean, optional)patterns(array of strings, optional; supports glob patterns)exclusions(array of strings, optional; glob patterns to exclude)
{
"apps": [
{
"name": "Slack",
"additional_locations": ["~/opt/slack-legacy"],
"installation_path": "~/Downloads/Slack.pkg",
"deep_home_search": false,
"patterns": [
"~/Library/**/Slack*",
"/Library/Application Support/slack*"
],
"exclusions": [
"*/Cache/*",
"*.log"
]
},
{
"name": "PDF Expert"
}
]
}Notes:
- Environment variables and
~are expanded in paths and patterns - Multiple configuration files can be merged using
--inputwith comma-separated paths - Each config file must contain
{ "apps": [...] }
poetry run app-hound --version
poetry run app-hound --help# Scan Slack using example config
poetry run app-hound --input examples/slack.json --interactive
# Scan multiple apps
poetry run app-hound --input examples/multi-app.json --interactive# Basic scan
poetry run app-hound --app "Slack"
# Interactive mode (recommended)
poetry run app-hound --app "Slack" --interactive
# With exclusions
poetry run app-hound --app "Chrome" --exclude "*/Cache/*" --exclude "*.log"# Generate plan first
poetry run app-hound --app "OldApp"
# Execute the plan (with confirmations)
poetry run app-hound --execute-plan ~/.app-hound/audit/plan.json-v, --version- Show detailed version information-h, --help- Show beautiful Rich-formatted help-i, --input <path>- Configuration file(s), comma-separated to merge-a, --app <name>- Scan a single app without config file--interactive- Enter interactive TUI mode for artifact review--execute-plan <path>- Execute deletion plan from JSON file
-o, --output <path>- CSV report (default:~/.app-hound/audit/audit.csv)--json-output <path>- JSON artifact report (default:~/.app-hound/audit/artifacts.json)--plan <path>- Deletion plan JSON (default:~/.app-hound/audit/plan.json)--plan-script <path>- Shell script (default:~/.app-hound/audit/delete.sh)
--additional-location <path>- Extra location to inspect (repeatable)--pattern <glob>- Glob pattern to match (repeatable)--exclude <pattern>- Exclude paths matching pattern (repeatable)--deep-home-search- Enable brute-force home directory search (slow)
--installation-path <path>- Installer to run before scanning--run-installers- Execute installers from config
--quiet- Suppress console output (warnings/errors still show)--no-progress- Disable progress indicators- Color customization:
--accent-color,--info-color,--success-color,--warning-color,--error-color,--highlight-color,--muted-color,--progress-bar-color,--progress-complete-color,--progress-description-color
Columns include:
- App Name
- Artifact Path
- Kind (file, directory, symlink, unknown)
- Scope (default, configured, discovered, system, unknown)
- Category (application, support, cache, preferences, logs, launch-agent, other)
- Exists
- Writable
- Size (bytes) - files only, non-symlinks
- Last Modified (ISO 8601, UTC)
- Removal Safety (SAFE, CAUTION, REVIEW)
- Notes
- Removal Instructions
Captures the full artifact model with:
- One entry per app
generated_attimestampartifactsarray with full metadataerrorsarray with non-fatal scan notes
JSON structure with enabled/disabled entries:
app_name,path,kind,category,scopeexists,writable,removal_safetynotes,removal_instructionsenabled(defaults to SAFE artifacts only)suggested_command
Portable bash script with:
- Header (
#!/usr/bin/env bash,set -euo pipefail) - Per-entry comments (notes/instructions)
- Interactive prompts before each deletion
- Safe commands (
rm -rffor directories,rm -ffor files) - Marked executable automatically
# Scan and review interactively
poetry run app-hound --app "Slack" --interactive
# In the TUI:
# - Press 'f' โ '4' to filter safe items only
# - Press 'x' to execute deletion
# - Confirm with dry-run, then actual deletion# Single app with full features
poetry run app-hound --input examples/slack.json --interactive
# Multiple apps at once
poetry run app-hound --input examples/multi-app.json --interactive# With exclusions
poetry run app-hound --app "Chrome" \
--exclude "*/Cache/*" \
--exclude "*.log" \
--interactive
# Deep search with patterns
poetry run app-hound --app "VSCode" \
--pattern "~/.vscode*" \
--deep-home-search \
--output ~/Desktop/vscode-audit.csv# Generate plan first
poetry run app-hound --app "OldApp"
# Review plan JSON
cat ~/.app-hound/audit/plan.json
# Execute with confirmations
poetry run app-hound --execute-plan ~/.app-hound/audit/plan.jsonpoetry run app-hound --input ~/configs/slack.json,~/configs/pdf.json- Review CAUTION/REVIEW entries before enabling deletion
- Use interactive mode to review before deleting
- Run dry-run first (automatically offered in
--execute-plan) - Create backups (Time Machine) before major cleanups
- Read the notes - safety levels are color-coded (green/yellow/red)
src/app_hound/
โโโ main.py # CLI wiring, argument parsing, orchestration
โโโ scanner.py # Deterministic artifact discovery
โโโ domain.py # Artifact model, enums, serialization
โโโ configuration.py # Config loading/merging
โโโ installer.py # Installer runner
โโโ ui.py # OutputManager, Rich presentation
โโโ removal.py # Plan building, deletion execution
โโโ interactive.py # Interactive TUI mode
โโโ validation.py # Input validation and security
โโโ finder.py # Legacy (superseded by scanner.py)
# Run all tests
poetry run pytest
# Run with coverage
poetry run pytest --cov=app_hound --cov-report=html
# Test structure includes:
# - Unit tests for Scanner (with mock filesystem)
# - Domain model tests (140 total tests)
# - Interactive mode tests
# - Integration testsPRs welcome for:
- Plugin hooks
- Per-app rule extensions
- Interactive selection enhancements
- Expanded location detection
- Cross-platform support
Keep the UI friendly and scanning deterministic!
- โจ Interactive Mode - Rich TUI for artifact selection and deletion
- ๐ Plan Execution -
--execute-plancommand with multi-step confirmation - ๐ก๏ธ Input Validation - Comprehensive security checks for all inputs
- ๐ซ Exclusion Patterns -
--excludeflag to filter unwanted paths - ๐ Example Configs - 5 ready-to-use configs in
examples/directory - ๐ Enhanced Help - Beautiful Rich-formatted
--helpoutput - ๐ Detailed Version -
--versionshows Python, platform, author - ๐งช 140 Tests - Comprehensive test suite with 100% pass rate
- โ Zero Errors - Complete type safety and validation
See CHANGELOG.md for full release notes.
QUICK_START.md- 5-minute beginner guideINTERACTIVE_MODE_GUIDE.md- Complete interactive mode tutorialexamples/README.md- Example configuration guideCHANGELOG.md- Version 2.0 release notesTODO.md- Roadmap and future featuresIMPLEMENTATION_SUMMARY.md- Technical details
MIT
A friendly dog-themed tool for Mac users and admins. app-hound helps you audit and clean application traces with confidenceโsniff, fetch, and wag your way to a tidy system! ๐ถ๐ฆด