Products Open Source Blog About Us Contact Us Sign in
lac shell: Just Type What You Mean

lac shell: Just Type What You Mean

Everyone talks about lac agent and /multi, but lac shell is the part I use the most. It's the simplest thing: type what you want in English, get the right command, run it.

The command I always forget

It's always something embarrassing. Not a complex Kubernetes incantation — just something like the exact flag order for tar, or which way round find wants its -exec arguments, or how to recursively change file permissions without accidentally nuking execute bits on directories. I know roughly what I need. I just don't know the exact syntax without looking it up.

The old workflow: Alt-Tab to the browser, type something into a search engine, skim three Stack Overflow answers that are all subtly different, copy a command, tab back, paste, squint at it, run it, hope. That's four context switches for something I've probably done a dozen times already.

lac shell cuts all of that out.

What lac shell actually is

lac shell is an AI-powered interactive shell that ships as part of lac-cli. You install it once:

pip install lac-cli

Or with the one-liner if you prefer:

curl -fsSL https://lacai.io/install.sh | bash

Then you just run:

lac shell

And you're in. It looks like a normal terminal prompt. The difference is that you can type plain English and it figures out the command for you. You can also run real shell commands directly — it doesn't intercept everything, only the things it recognises as natural language intent.

Ghost text autocomplete

This is the part I didn't expect to like as much as I do. As you type — whether it's a real command or an English description — the shell suggests a completion inline as ghost text. It appears faded ahead of your cursor. Hit Tab to accept it.

It feels a lot like Copilot in a code editor, but for your terminal. You type find all python files modified in the last 7 days and before you finish the sentence, the ghost text is already showing:

find . -name "*.py" -mtime -7

Tab. Done. It didn't even ask you to finish typing.

For commands you half-remember, it's faster than autocomplete in any shell I've used before, because it's working from intent rather than prefix matching. You don't have to know the start of the command — you just have to know what you want.

Confirm before run

One thing I was relieved to see: it always confirms before executing a translated command. You describe something, it surfaces the command, and you get a prompt to review it before anything actually runs. This matters more than it sounds. AI-generated shell commands can be subtly wrong — right general shape, wrong flag, wrong path assumption. The confirm step gives you a moment to actually read what it's about to do.

It's a small UX decision that shows a lot of restraint. The temptation when building something like this is to make it fully automatic — just run it, trust the model. But the people who'd use this tool are developers, and developers want to know what's running on their machines. So it shows you the command, you press Enter or edit it, and then it runs.

It handles the commands you actually forget

Here are a few things I've typed into lac shell in the past week, verbatim:

  • "show me all processes using port 3000"lsof -i :3000
  • "copy folder recursively excluding node_modules"rsync -av --exclude='node_modules' ./src/ ./backup/
  • "unzip and extract only the config folder"unzip archive.zip 'config/*' -d ./output
  • "rename all .jpeg files to .jpg in current directory"for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done

None of those are hard commands. But every single one of them is something I'd normally have to look up, or rely on muscle memory that occasionally misfires. Typing intent and getting the right command back — with a chance to review it — is just faster.

Works with your model of choice

lac shell uses whatever provider you've configured in ~/.lac/config.json. That's Claude, OpenAI, or Ollama if you want to keep everything local and offline. The Ollama support is genuinely useful here — if you're on a flight or working somewhere without reliable internet, you're not stuck. Configure it once, forget about it.

Why I keep reaching for it over the fancier tools

lac-cli has a lot going on — lac agent with project memory and PlanMode, lac mind for multi-model debate, /multi for parallel agents, /watch for browser session capture. All of those are genuinely useful. But they're for specific workflows: building something, debugging something, generating docs.

lac shell is for all the moments in between. The quick commands. The one-liners you half-know. The syntax you learned two years ago and haven't touched since. It's the tool that earns its place by being there constantly rather than being impressive occasionally.

I have it open in a split terminal most of the day. It doesn't replace my normal shell — it sits beside it and handles the lookups. That's the right way to think about it: not a replacement, just an upgrade to the part of terminal use that's always involved a detour to the browser.

Get started in about 90 seconds

If you already have Python 3.9+, it's literally just:

pip install lac-cli
lac shell

Set your model provider on first run, and you're in. Type something in English, hit Tab when you see the ghost text, confirm the command. That's the whole loop. Everything else is optional depth you can explore when you need it.

The one thing I'd suggest trying first: describe the last command you had to look up. Whatever it was — the one from two days ago that sent you to Stack Overflow. Type it in plain English and see what comes back. That moment usually sells it better than anything I could write here.

We use cookies to keep you signed in and to serve ads via Google AdSense. By continuing to use this site you agree to our Privacy Policy.