I built behave to test command-line tools as black boxes. It reads a tool's --help and man page, generates hundreds of test cases (every flag, flag pairs, listed values, edge-case stdin, bad values, missing files), records stdout, stderr and exit codes, and replays them against another implementation. I use it to compare GNU coreutils with the Rust rewrite uutils, where it has led to 30 upstream bug reports and 37 fix PRs, many of them merged. Useful when porting a tool to Rust or Go, or refactoring a CLI and wanting a quick regression net. It also runs as an MCP server. Early v0.1.
I built behave to make it practical to compare command-line tools as black boxes. When porting or refactoring a CLI, I wanted a quick regression net that records real outputs and exit codes so I can verify a rewrite behaves like the original.