Fuzzy autocorrect for mistyped Linux/macOS shell commands. Works in bash and zsh.
Project description
lk-autocorrect
Fuzzy autocorrect for mistyped shell commands. Works in zsh and bash on Linux and macOS, and PowerShell on Windows.
When you mistype a command, instead of a dead error you get a suggestion:
$ gti status
[lk-autocorrect] Did you mean: git status?
[lk-autocorrect] Run it? [y/N] y
$ dockr ps
[lk-autocorrect] Did you mean: docker ps?
[lk-autocorrect] Run it? [y/N] y
$ terrafrom plan
[lk-autocorrect] Did you mean: terraform plan?
[lk-autocorrect] Run it? [y/N] y
Requirements
- macOS or Linux (zsh or bash) — check with
echo $SHELL - Python 3.11+ — check with
python3 --version - Windows — PowerShell 5 or PowerShell 7
Install
macOS / Linux
Step 1 — Install lk-autocorrect
pip install lk-autocorrect
macOS users: if you see an
externally-managed-environmenterror, use:pip install lk-autocorrect --user --break-system-packages
Step 2 — Add lk-autocorrect to PATH (if needed)
If lk-autocorrect is not found after installing, run the command to add it to PATH:
export PATH="$HOME/Library/Python/3.13/bin:$PATH"
Add that line to your ~/.zshrc or ~/.bashrc to make it permanent, then restart your shell.
Step 3 — Run the installer
lk-autocorrect install
This automatically adds the source line to your ~/.zshrc or ~/.bashrc.
Step 4 — Reload your shell
source ~/.zshrc # zsh
source ~/.bashrc # bash
Step 5 — Test it
gti status # → Did you mean: git status?
dockr ps # → Did you mean: docker ps?
kubctl get pods # → Did you mean: kubectl get pods?
Windows (PowerShell)
Step 1 — Install lk-autocorrect
pip install lk-autocorrect
Step 2 — Add lk-autocorrect to PATH
After installing, if PowerShell cannot find lk-autocorrect run the following commands.
This will find where pip installed it and add it to your PATH permanently:
# find where pip installed lk-autocorrect
pip show lk-autocorrect
# add Scripts folder to PATH permanently
$scriptsPath = (pip show lk-autocorrect | Select-String "Location").Line.Split(" ")[1] + "\..\..\Scripts"
$env:PATH += ";$scriptsPath"
This adds the Python Scripts folder to your PATH so
lk-autocorrectcan be found. Open a new PowerShell window or restart Powershell after running this.
Step 3 — Run the installer
lk-autocorrect install
This automatically adds the source line to your PowerShell profile ($PROFILE).
After install you will see the PATH commands printed — run them if lk-autocorrect is not found.
Step 4 — Reload your profile
. $PROFILE
Step 5 — Test it
gti status # → Did you mean: git status?
dockr ps # → Did you mean: docker ps?
kubctl get pods # → Did you mean: kubectl get pods?
Note: if you see a script execution error on first run:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Shell compatibility
| Shell | Platform | Support | Notes |
|---|---|---|---|
| zsh | macOS / Linux | Full | Automatic — fires on any mistyped command |
| bash 4+ | macOS / Linux | Full | Automatic — fires on any mistyped command |
| bash 3.2 | macOS | Partial | Use lk <command> as fallback |
| PowerShell 5 | Windows | Full | Automatic via CommandNotFoundAction |
| PowerShell 7 | Windows | Full | Automatic via CommandNotFoundAction |
| Git Bash | Windows | Full | Treated as bash — works automatically |
| WSL | Windows | Full | Treated as Linux — works automatically |
| CMD | Windows | ❌ | No hook mechanism available |
bash 3.2 on macOS
This version does not support the command_not_found_handle hook that lk-autocorrect relies on for automatic correction.
When you source the script in bash 3.2 you will see:
[lk-autocorrect] bash 3.2 detected — automatic correction unavailable.
[lk-autocorrect] Use: lk <command> e.g. lk gti status
[lk-autocorrect] Or switch to zsh: chsh -s /bin/zsh
Option 1 — use the lk fallback:
lk gti status # → Did you mean: git status?
lk dockr ps # → Did you mean: docker ps?
Option 2 — switch to zsh (recommended):
chsh -s /bin/zsh
# open a new terminal — autocorrect works automatically
Option 3 — upgrade bash:
brew install bash
echo '/opt/homebrew/bin/bash' | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/bash
Python version
lk-autocorrect requires Python 3.11+ and is supported on older versions, but upgrading to 3.13+ is recommended since older versions no longer receive security patches.
Check your version:
python3 --version
Upgrade on macOS:
brew install python@3.13
Upgrade on Linux:
sudo apt install python3.13
Upgrade on Windows:
Download from python.org or:
winget install Python.Python.3.13
Usage
Once installed, autocorrect fires automatically whenever you mistype a command:
$ gti commit -m "fix bug"
[lk-autocorrect] Did you mean: git commit -m "fix bug"?
[lk-autocorrect] Run it? [y/N] y
Shell commands
| Command | Description |
|---|---|
ac-add <cmd> |
Add a command to the store |
ac-remove <cmd> |
Remove a command from the store |
ac-list |
List all commands in the store |
ac-test <typo> |
Preview what a typo would correct to |
ac-help |
Show in-shell help |
# add your own commands
ac-add "mycli"
ac-add "my-test-command"
# preview a correction
ac-test "dockr"
# [lk-autocorrect] 'dockr' → 'docker' (distance: 1)
# list everything in the store
ac-list
CLI commands
| Command | Description |
|---|---|
lk-autocorrect install |
Install and set up shell hook |
lk-autocorrect uninstall |
Remove from system |
lk-autocorrect upgrade |
Upgrade to the latest stable version |
lk-autocorrect upgrade --pre |
Upgrade to the latest beta/alpha |
lk-autocorrect upgrade [version] |
Upgrade to a specific version |
lk-autocorrect status |
Show installation status |
lk-autocorrect verify |
Check file integrity and print checksums |
lk-autocorrect help |
Show help |
Configuration
macOS / Linux
Set these in your ~/.zshrc or ~/.bashrc before the source line:
# how forgiving the matcher is (1 = strict, 5 = loose) — default: 2
export AUTOCORRECT_THRESHOLD=2
# auto-run the correction without asking — default: false
export AUTOCORRECT_AUTO=true
# turn off colours — default: true
export AUTOCORRECT_COLOR=false
Windows (PowerShell)
Set these in your $PROFILE before the source line:
$env:AUTOCORRECT_THRESHOLD = "2"
$env:AUTOCORRECT_AUTO = "true"
Command store
macOS / Linux
The store lives at ~/.config/lk-autocorrect/commands.txt — one command per line, # lines are comments.
Windows
The store lives at %USERPROFILE%\.config\lk-autocorrect\commands.txt.
Ships with 150+ popular commands across git, docker, kubectl, terraform, AWS CLI, Azure CLI and more. Your store is preserved across updates and uninstalls (you are asked before it is deleted).
# add a command
ac-add "mycli"
# remove a command
ac-remove "mycli"
# or edit directly
nano ~/.config/lk-autocorrect/commands.txt or vim ~/.config/lk-autocorrect/commands.txt # macOS / Linux
notepad $env:USERPROFILE\.config\lk-autocorrect\commands.txt # Windows
How it works
- The shell hook (
command_not_found_handlerin zsh,command_not_found_handlein bash 4+,CommandNotFoundActionin PowerShell) fires when a command is not found. - The typo is passed to
matcher.pywhich compares it against every command in the store using Damerau-Levenshtein distance — an algorithm that counts insertions, deletions, substitutions, and transpositions. This meansgti→gitscores as distance 1 (one transposition) not 2. - If the closest match is within
AUTOCORRECT_THRESHOLDedits, the suggestion is shown. - You confirm with
yor it runs automatically ifAUTOCORRECT_AUTO=true.
Upgrade
lk-autocorrect detects whether you installed via pip or pipx and runs the correct upgrade command automatically, then refreshes your shell files in one step.
# upgrade to the latest stable release
lk-autocorrect upgrade
# upgrade to the latest beta/alpha (pre-release)
lk-autocorrect upgrade --pre
# upgrade to a specific version
lk-autocorrect upgrade [version]
# example: lk-autocorrect upgrade 1.3.0b4
This works the same way on macOS, Linux, and Windows.
Uninstall
lk-autocorrect uninstall
pip uninstall lk-autocorrect
Verify integrity
lk-autocorrect verify
Prints the SHA256 checksums of the installed files so you can verify them against the GitHub release.
Contributing
Pull requests welcome.
- Fork the repo
- Create a branch:
git checkout -b my-feature - Make changes to
src/autocorrect.sh,src/autocorrect.ps1orsrc/matcher.py - Test in zsh, bash, and PowerShell
- Open a PR
License
MIT — see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lk_autocorrect-1.3.0.tar.gz.
File metadata
- Download URL: lk_autocorrect-1.3.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cc95539112ed3204f6fb434c073fe4bdfe761b078462ece1e26a0713e869b52
|
|
| MD5 |
d3a389d03d5970cd62b81dad8cb26ba6
|
|
| BLAKE2b-256 |
9848952c09ae0277e87d31a4a25723472d5f568eb75fc4013a024efed6abd920
|
Provenance
The following attestation bundles were made for lk_autocorrect-1.3.0.tar.gz:
Publisher:
publish.yml on OladipupoGomez/lk-autocorrect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lk_autocorrect-1.3.0.tar.gz -
Subject digest:
6cc95539112ed3204f6fb434c073fe4bdfe761b078462ece1e26a0713e869b52 - Sigstore transparency entry: 2166177090
- Sigstore integration time:
-
Permalink:
OladipupoGomez/lk-autocorrect@654000c789bac75516bb85c6c5941fdf7273182a -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/OladipupoGomez
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@654000c789bac75516bb85c6c5941fdf7273182a -
Trigger Event:
push
-
Statement type:
File details
Details for the file lk_autocorrect-1.3.0-py3-none-any.whl.
File metadata
- Download URL: lk_autocorrect-1.3.0-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f74885c80802fb6a41120636d74bfaff4b00429e59870bef34f093cffc0f436
|
|
| MD5 |
9ae6dab1fd08f3b5dc10617bbe4ee665
|
|
| BLAKE2b-256 |
f0243c3ee797a278c791fd50a66ac3c1e4846c15e5a9021cd576e410d4a55dda
|
Provenance
The following attestation bundles were made for lk_autocorrect-1.3.0-py3-none-any.whl:
Publisher:
publish.yml on OladipupoGomez/lk-autocorrect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lk_autocorrect-1.3.0-py3-none-any.whl -
Subject digest:
6f74885c80802fb6a41120636d74bfaff4b00429e59870bef34f093cffc0f436 - Sigstore transparency entry: 2166177161
- Sigstore integration time:
-
Permalink:
OladipupoGomez/lk-autocorrect@654000c789bac75516bb85c6c5941fdf7273182a -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/OladipupoGomez
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@654000c789bac75516bb85c6c5941fdf7273182a -
Trigger Event:
push
-
Statement type: