The reasoning

Why this exists

Command-line muscle memory produces the same small typos hundreds of times: git sattus, docker imagse, transposed letters in commands typed dozens of times a day. Each one costs a failed run, a re-type and a broken train of thought. A corrector that fires after the error message has scrolled past is documentation; the only useful place to fix a typo is the gap between Enter and execution.

CommandFixer lives in exactly that gap. A PSReadLine hook intercepts Enter and hands the buffer to a fast Go binary, which fuzzy-matches it against a built-in database of popular CLI tools and their subcommands plus the standard Windows command set. A near-miss within the threshold becomes a suggestion shown before anything runs; anything too far off is left untouched and known PowerShell aliases are recognised exactly so they are never "corrected". The first version asked you to list every typo by hand; version 2 ships the dictionary, so useful corrections need no configuration at all.

The boundary that matters most is consent. A changed command never runs silently: the corrected form is shown and executes only when you accept it, because a tool that guesses at a prompt that can delete things is a tool you eventually uninstall. The same restraint shapes the scope: it corrects near-misses of commands it knows and never invents intent.

What works now is a single Go binary with no CGO, no system-wide keyboard hook and no background service, running in milliseconds only in the instant it is needed. One per-user install hooks both PowerShell 7 and Windows PowerShell 5 profiles with no administrator rights; config and a JSONL corrections log live under your home directory and uninstalling removes the hook cleanly while leaving your data yours.

Full reasoning at crankthecode.com.