Skip to content

Comparison with Dippy

rippy is fully inspired by and a Rust rewrite of Dippy by @ldayton. Dippy pioneered the idea of a command safety hook for AI coding tools; rippy ports the idea to Rust, adds a few capabilities, and keeps config compatibility so you can switch without rewriting anything.

Dippyrippy
LanguagePythonRust
RuntimePython 3.9+, pipSingle static binary
Startup~200 ms< 1 ms
Parserbash-parser (Parable)rable, pure Rust
Config files.dippy (flat).rippy.toml (structured; also reads legacy .rippy / .dippy flat)
Handlers~50 commands100+ commands
File analysisReads .py, .sql, .sh, .awk, .graphql for informed decisions
Claude Code permission integrationReads ~/.claude/settings.json allow/deny/ask rules

rippy reads .dippy config files and the DIPPY_CONFIG environment variable out of the box. The full migration is three steps:

  1. Install rippy.
  2. Replace dippy with rippy --mode claude (or --mode cursor, --mode gemini, --mode codex) in your hook config.
  3. Done. Your existing .dippy config keeps working.

Renaming .dippy.rippy and ~/.dippy/config~/.rippy/config is optional — rippy accepts both paths indefinitely.

A 200ms cold start is fine for a one-off tool, but it adds up fast when you run a hook before every Bash call in an AI coding session. A sub-millisecond static binary disappears into the background — you stop thinking about whether to turn the hook off “because it’s slow”.

The rewrite was also a chance to:

  • Build on rable, a properly typed pure-Rust bash parser, instead of shelling out to a JavaScript bash parser.
  • Add file-content analysis for scripts, which is much easier to do safely with a compiled language and a real AST.
  • Integrate with Claude Code’s own permission rules so you don’t have to maintain the same allow/deny list in two places.

The ideas, though, are all Dippy’s. Huge thanks to @ldayton for shipping the original and making the concept real.