DEV Community

OpenPilot
OpenPilot

Posted on

Run a local coding agent with Ollama + Qwen 3 using OpenPilot


I wanted something like Cursor that was open source and let me use whatever model I wanted, including ones running on my own machine. I couldn't find one, so I built OpenPilot. It's a desktop app (Electron) where an AI agent works inside a project folder you pick: it reads and edits files and runs shell commands, and you approve or deny the sensitive stuff.

This post walks through running it fully locally with Ollama and Qwen 3. I've tested Qwen 3 8B and Qwen 3 27B this way (through Ollama and LM Studio) and both worked well for me.

What you need

  • Windows (works today) or macOS (unsigned beta). No Linux installer yet, but building from source works on Linux.
  • Ollama installed
  • Enough RAM/VRAM for the model you pick (8B is the easy starting point)

Step 1: Pull a Qwen 3 model

ollama pull qwen3:8b
# or, if your hardware can take it:
ollama pull qwen3:27b
Enter fullscreen mode Exit fullscreen mode

Make sure Ollama is running (ollama serve, or just open the Ollama app). It serves an OpenAI-compatible API at http://localhost:11434/v1.

Step 2: Install OpenPilot

SmartScreen tip: the Windows installer isn't code-signed yet (I'm a solo dev), so Windows will show "Windows protected your PC". Click More info → Run anyway. If you'd rather not, read the code and build it yourself (below).

macOS tip: the build is unsigned, so if macOS blocks it, right-click the app → Open.

From source (any OS, incl. Linux) — needs Node.js 20+ and roughly 1 GB free disk for npm install:

git clone https://github.com/ibmshaikh/OpenPilot.git
cd OpenPilot
npm install
npm start
Enter fullscreen mode Exit fullscreen mode

If native modules complain after updating, run npm run rebuild.

Step 3: Connect the model

On first launch, onboarding asks you to connect a model. Enter:

  • Name: qwen3:8b (use the exact model name from ollama list)
  • Base URL: http://localhost:11434/v1
  • API key: Ollama doesn't check it, so any placeholder like ollama works

Using LM Studio instead? Start its local server and use its base URL (by default http://localhost:1234/v1) with the model name it shows.

You can add multiple models in Settings and switch per chat, e.g. a small local one for quick stuff and a bigger one for harder tasks.

Step 4: Pick a workspace

Choose the folder the agent should work in. Start with a throwaway or git-tracked project so you can diff/revert anything it does.

Step 5: (Optional) web search

OpenPilot can use TinyFish for web search and page fetch so the agent can look up current docs. It's optional; skip it for a fully offline setup.

Step 6: Give it a task

Start small and concrete, e.g.:

Read README.md and add a "Running tests" section based on package.json scripts.

You'll see streaming replies, thinking blocks, file edits and shell output as tool cards, and approve/deny prompts for sensitive actions. Token usage per model is in the usage view.

Other things worth knowing about: MCP servers can be connected and enabled per chat, skills (reusable playbooks, type / in the composer), and persistent memory.

Honest limits

  • Small models struggle with long multi-step tasks. 8B is great for focused edits; for longer chains it can lose the plot. Break tasks up or use a bigger model.
  • No loop/retry guard yet. A model can get stuck repeating itself. Stop it and rephrase. A guard is planned.
  • Unsigned builds on Windows and macOS (see tips above). macOS is a beta.
  • No Linux installer yet, source build only.
  • Telemetry: anonymous usage data (app opens, model/feature use, token counts; no chats, files, paths or keys) is on by default. Turn it off during Getting Started or in Settings → About.

Links

Disclosure: this post was drafted with help from an AI assistant. Field names and default ports can differ between versions, so if a step doesn't match what you see, please open an issue.

Top comments (0)