Designing CLIs people enjoy
A good CLI prints nothing on success and an actionable message on failure. It exits non-zero when it fails so scripts can trust it. It reads from stdin and writes to stdout so it composes.
And it never makes a destructive change without a confirmation or a --yes. The
best compliment a tool gets is being forgotten because it just works.