A CLI that prints “done” after changing production state is unfinished.
Done what? Which resource? Which account? Which version? Was the change idempotent? Where is the audit trail? Can another operator verify it without trusting the terminal scrollback on your laptop?
Command-line tools often get a pass because their users are technical. That is exactly backwards. Technical users automate, chain, retry, and run commands under pressure. They need receipts more, not less.
The receipt format
After a state-changing command, print:
- The object changed. Stable ID and human name.
- The before and after. At least the fields that matter.
- The server-side operation ID. Something support can search.
- The next command. Verify, rollback, or inspect.
This is not decoration. It is how operators build confidence.
If your CLI can destroy, deploy, bill, rotate, or migrate, it owes the user a receipt. “Done” is for scripts with no blast radius.