Skip to content

rippy

A fast shell command safety hook for Claude Code, Cursor, Gemini CLI, and Codex — written in Rust.

Static binary, sub-millisecond startup

No Python, no virtualenv, no pip install. A single Rust binary launches in under a millisecond — fast enough to run on every single Bash hook without your AI tool noticing.

Real bash AST parsing

Commands are parsed into a proper AST by rable, a pure-Rust bash parser with 100% Parable compatibility. No regex hacks, no string-split guesses.

100+ commands understood in depth

Built-in handlers for git, docker, cargo, kubectl, psql, gh, ansible, and 80+ more — each one knows which subcommands are safe and which need a human in the loop.

Transparent, predictable rules

Structured .rippy.toml config files with a simple rule grammar (allow, ask, deny, redirects, MCP gating, structured matching). Unknown commands default to ask — nothing dangerous slips through silently.

Terminal window
brew install mpecan/tools/rippy

Then run rippy init to pick a safety package and wire rippy into your AI tool — rippy setup claude-code, rippy setup cursor, or rippy setup gemini does the hook-config editing for you. Full walkthrough in the Claude Code guide.

rippy ships three preconfigured packages so you don’t have to start from a blank config:

review [===] Full supervision. Every command asks.
develop [==.] Auto-approves builds, tests, VCS. Asks for destructive ops.
autopilot [=..] Maximum AI autonomy. Only catastrophic ops are blocked.

Pick one with rippy init, then layer your own allow / ask / deny rules on top. See the Packages guide for details.

rippy ships with 130+ commands in its safe allowlist (read-only tools like cat, ls, grep, jq, rg) plus 40+ CLI-specific handlers that understand subcommand safety:

CommandSafeNeeds approval
gitstatus, log, diff, branchpush, reset, rebase
dockerps, images, logsrun, exec, rm
cargotest, build, check, clippyrun, publish, install
python-c 'print(1)', safe scripts-c 'import os', unknown scripts
kubectlget, describe, logsapply, delete, exec
psqlread-only SELECT querieswrite SQL, interactive
ghpr view, issue listpr create, pr merge
ansible--check, --syntax-check, ansible-docplaybook runs, vault encrypt

Everything else defaults to ask — fail-safe by design.

rippy is fully inspired by and config-compatible with Dippy by @ldayton. The rewrite trades Python for Rust, a 200ms cold start for sub-millisecond, and adds file analysis and Claude Code permission integration. Your existing .dippy files keep working.

See the comparison page for the full breakdown.