comparison
Lacy Shell vs ShellGPT
Transparent routing vs explicit command prefix.
The core difference
ShellGPT (sgpt) requires you to type sgpt before every query. Lacy detects whether your input is a command or natural language and routes automatically — no prefix needed.
| Lacy Shell | ShellGPT | |
|---|---|---|
| Invocation | Just type — automatic detection | sgpt "query" |
| AI backend | Any CLI (Claude, Gemini, OpenCode, etc.) | OpenAI API |
| API key required | No (uses your installed CLI tool) | Yes (OpenAI key) |
| Real-time indicator | Yes — green/magenta as you type | No |
| Shell integration | Deep — plugin hooks into shell execution | Standalone command |
| Smart reroute | Yes — failed NL commands auto-reroute | No |
| Mode switching | Ctrl+Space toggle (shell/agent/auto) | N/A |
| Language | Shell (ZSH/Bash) | Python |
| Dependencies | None (pure shell) | Python, pip |
The friction difference
With ShellGPT, you decide in advance that you need AI and type sgpt. With Lacy, you just type what you mean. If it’s a command, it runs. If it’s a question, it goes to AI. The routing is invisible.
This matters most when you’re in flow. You don’t want to stop and think “is this a command or a question?” — you just want to type and have the right thing happen.
Side-by-side: the same tasks, different tools
Here’s how common terminal tasks look with each approach:
# ShellGPT: find files changed in the last day $ sgpt "find all .log files modified in the last 24 hours" # Lacy: same question, no prefix $ find all .log files modified in the last 24 hours
# ShellGPT: explain an error $ sgpt "what does EACCES mean in Node.js" # Lacy: same question, no prefix $ what does EACCES mean in Node.js
# ShellGPT: generate a command with the --shell flag $ sgpt --shell "archive all .log files older than 7 days" # Lacy: type naturally — Lacy detects and routes $ archive all .log files older than 7 days
With ShellGPT, every AI interaction requires a deliberate sgpt invocation. With Lacy, the routing happens automatically — you never consciously switch modes.
Real-world scenarios
Debugging a failing service. You’re SSH’d into a server, reading logs, and want to ask why a process keeps dying. With ShellGPT you type sgpt "why would a node process exit with code 137". With Lacy you type the question directly. Same answer, no prefix.
DevOps lookups mid-session. You’re configuring nginx and can’t remember the rate-limiting syntax. With ShellGPT you prefix every lookup with sgpt. With Lacy you ask the question inline between real commands without thinking about a separate tool name.
Quick one-liners. You need a command to count unique IP addresses in an access log. With ShellGPT you run sgpt --shell "count unique IPs in access.log". With Lacy you type it naturally and your connected agent — Claude Code, Gemini CLI, or whatever you have installed — generates the one-liner.
Mixed command sessions. You run docker ps, tail logs with tail -f app.log, then want to ask a quick question. With ShellGPT you must remember the prefix each time. With Lacy, real commands and questions coexist in the same prompt without any mode-switching.
Coming from ShellGPT
Moving from ShellGPT to Lacy mostly means unlearning the sgpt prefix. You’ll also need a CLI AI agent installed, since Lacy routes to external tools rather than calling an API directly. Claude Code (claude), Gemini CLI (gemini), and OpenCode (opencode) all work out of the box. If you were using ShellGPT specifically for OpenAI, configure Lacy with a CLI that connects to OpenAI, or switch to one of the supported agents.
Installation is a single curl command plus one line added to your shell config — around 30 seconds total. ShellGPT and Lacy coexist without conflict: sgpt continues to work normally, and Lacy recognizes it as a valid shell command rather than intercepting it.
When to use Lacy
- You want zero-friction AI access without remembering a prefix
- You already use Claude Code, Gemini CLI, or another AI CLI
- You prefer no Python dependencies in your shell setup
- You want real-time visual feedback on routing decisions
- You want smart reroute when a natural-language command fails to execute
When to use ShellGPT
- You want a simple, standalone tool with explicit and predictable control
- You want to call OpenAI’s API directly without a separate CLI tool
- You use the
--shellflag for command generation specifically - You don’t want any shell-level hooks or modifications to your prompt
Further reading
- Why I didn’t use AI to classify AI input — how Lacy decides whether your input is a shell command or natural language, without ML.
- The post-execution reroute pattern — what happens when a natural-language query accidentally runs as a shell command and fails.
Frequently asked questions
Does Lacy support OpenAI like ShellGPT does?
Lacy doesn’t call OpenAI directly — it routes to whatever CLI agent you have installed. To use OpenAI models, configure Lacy with a CLI that connects to OpenAI, or use one of the supported agents that may also access OpenAI models depending on your configuration.
Will Lacy interfere with ShellGPT if I have both installed?
No. Lacy hooks into ZSH’s execute function and classifies input based on whether it looks like natural language. It recognizes sgpt as a valid shell command and passes it through untouched. Both tools coexist without conflict.
Does Lacy support command generation like sgpt --shell?
Lacy routes your input to whichever agent you configure. If that agent can generate shell commands — and most can — it will. The behavior depends on your connected agent rather than Lacy itself. Lacy handles detection and routing; the agent handles the response.
What if Lacy routes a real shell command to AI by mistake?
The detection is tuned to distinguish natural language from shell syntax. For ambiguous input, Lacy has a smart reroute: if the shell fails to execute something it classified as a command, it automatically retries through AI. You can also press Ctrl+Space to manually toggle between shell and agent mode at any time.
Does Lacy require Python?
No. Lacy is pure ZSH/Bash — no Python, Node.js, or other runtime dependencies. It installs as a single shell function and adds no measurable weight to your shell startup time.
The bottom line
ShellGPT is a capable tool that does exactly what it says: a command you run when you want to query AI from the terminal. The explicit sgpt prefix is also its main constraint — you make a conscious decision every time you want AI involved.
Lacy removes that decision. It operates at the shell input level and routes transparently. For developers who spend most of their day in the terminal and want AI to feel native rather than bolted on, the difference in friction is real and adds up. You stop thinking about which tool to reach for and just type.