I don't want to be told which AI to use
Most AI tools make this decision for you. They ship with one model baked in, maybe offer a dropdown to switch between two, and that's your lot. If the model they picked isn't the one you want for a particular job, you're stuck.
lac-cli doesn't work like that. The whole thing is built around the idea that you bring your own model. Claude, GPT-4o, a local Llama 3 instance via Ollama, or any OpenAI-compatible endpoint you're already paying for — they all work. The same lac shell, lac agent, lac mind, and /multi commands run on top of whatever provider you configure.
I've been running it with Claude for most coding tasks and a local Ollama model when I'm on a plane or just don't want to send code to an external API. Switching takes about ten seconds. Here's how it actually works.
The setup wizard
When you install lac-cli for the first time:
pip install lac-cli
...and run any command, it drops you into a provider wizard automatically. It asks which provider you want, then prompts for the relevant API key or endpoint. Nothing gets written until you confirm.
If you want to re-run the wizard at any point — say you want to switch from OpenAI to Claude — just pass the --setup flag to lac shell:
lac shell --setup
That re-opens the wizard without you having to dig around in config files manually. It's one of those small things that should be standard everywhere but usually isn't.
Where config actually lives
Everything gets written to ~/.lac/config.json. You can open that file directly if you want to make quick edits without running the wizard again. The structure is straightforward — provider name, model string, and API key or base URL depending on the provider type.
Knowing this file exists is useful when you're working across machines. I keep a personal dotfiles repo and just symlink ~/.lac/config.json so every machine I work on has the same setup the moment I clone the repo. No wizard, no re-entering keys.
The four provider options
Claude (Anthropic)
Set provider to claude and drop in your Anthropic API key. I use Claude most of the time for lac agent work — it handles multi-file edits with good judgment about what not to touch. Give it a task like "refactor the auth middleware to use the new token format" and it reads the relevant files, makes the changes, and leaves the rest alone.
OpenAI (GPT)
Set provider to openai, add your OpenAI key, and specify the model string — gpt-4o, gpt-4o-mini, whatever you want. GPT-4o-mini is fast and cheap enough that I'll sometimes use it for lac shell autocomplete where I just need a quick command translation and don't need deep reasoning.
Ollama (local/offline)
This is the one I reach for when internet is flaky or when I'm working on something I'd rather not send over the wire. Set provider to ollama and make sure the Ollama daemon is running locally. Then just use the --offline flag:
lac shell --offline
It routes every request to your local model instead of any external API. No key needed, no data leaving your machine. I wrote a whole post on this setup if you want the full picture — lac-cli Offline. The short version: install Ollama, pull a model like llama3 or mistral, and you're running.
Custom OpenAI-compatible endpoint
This one is underused. If you're running any inference server that speaks the OpenAI API format — LM Studio, vLLM, Together AI, Groq, a self-hosted setup at work — you can point lac-cli at it by setting the base URL in config. The provider just needs to respond to /chat/completions the way OpenAI does.
I've used this with Groq because the inference speed is genuinely fast for shell autocomplete. Set the base URL to Groq's endpoint, add your Groq key, and lac shell ghost text suggestions come back fast enough that it stops feeling like waiting.
Mixing providers across tools
One thing I wish the docs made clearer: lac mind — the multi-model debate engine — is specifically built to use multiple providers at once. That's the whole point of it. You give it a problem, it routes the same question to different models, they respond, challenge each other across rounds, and vote on the best answer.
So even if your main config is set to Claude, lac mind can pull in GPT-4o and a local Ollama model in the same session. You configure those extra providers when you start a lac mind session rather than through the main config file. Worth knowing if you're trying to stress-test an architectural decision or just want a second opinion that isn't from the same underlying model.
The practical reason this matters
Model quality is not static. Six months ago I was using one model as my default. Then a new one came out that's better at the things I spend most time on. If lac-cli were locked to a single provider, I'd have to wait for the tool to update before I could use the better model. Instead I just update the one line in ~/.lac/config.json and every command picks it up immediately.
That's a small thing until it isn't. When a new Claude or GPT release drops and everyone's talking about it, I'm already using it in my terminal the same day. No waiting for a product update, no feature request, no migration.
One quick tip before you go
If you're switching providers and want to test that everything is wired up correctly without running a real task, just use lac shell and type something trivial like "list files in the current directory". If it returns ls (or dir on Windows) and prompts you to confirm, the provider connection is good. If it errors, the output will tell you exactly which part failed — usually a bad API key or a model string typo — so you can fix it without guessing.
lac-cli is free and open source. Install it with pip install lac-cli or check the full docs at lacai.io/lac-cli.