AI News HubLIVE
In-site rewrite5 min read

Show HN: Collie – a local AI harness that runs the browser, desktop and code

Collie is an open-source, local-first coding agent that can drive your real browser, desktop, and code. It uses a self-verifying loop to ensure fixes are correct, and offers features like a coding agent, browser control, desktop wallpaper, screen recorder, and phone remote. It's private (no telemetry, no account) and runs on Windows, macOS, and Linux.

SourceHacker News AIAuthor: wudmaing00

Uh oh!

There was an error while loading. Please reload this page.

Notifications You must be signed in to change notification settings

Fork 0

Star 2

BranchesTags

Open more actions menu

Folders and files

NameName

Last commit message

Last commit date

Latest commit

History

243 Commits

243 Commits

.github/workflows

.github/workflows

assets

assets

bench

bench

data

data

docs

docs

harness

harness

installer

installer

landing

landing

relay

relay

tests

tests

vscode-collie

vscode-collie

.gitignore

.gitignore

CHANGELOG.md

CHANGELOG.md

HANDOFF.md

HANDOFF.md

LICENSE

LICENSE

README.md

README.md

mkdocs.yml

mkdocs.yml

pyproject.toml

pyproject.toml

pytest.ini

pytest.ini

run_compare.py

run_compare.py

run_compare4.py

run_compare4.py

run_parallel.py

run_parallel.py

swe_run.py

swe_run.py

Repository files navigation

A coding agent that lives on your computer — and can actually run it.

Local and private. It reaches your real environment — your logged-in browser, your desktop, your screen, your files — and proves its work by running it.

collie.run · collie -p "fix the bug" · collie web

Most coding agents live in a cloud tab or an editor pane and can only touch the files you hand them. Collie runs on your machine — so it works the way you already do: it drives your real logged-in browser, arranges your desktop, records your screen, takes tasks from your phone, and edits your code. Nothing leaves your computer unless you send it there; there's no account and no telemetry.

And it doesn't just claim to be done. When Collie fixes something it writes a reproduction that must fail on the broken code, makes the smallest edit that flips it, and re-runs the assertion — a run isn't "done," it's verified ✓.

Why it's different

It's local, and it reaches your real world. A cloud agent can read a repo. Collie can open the site in the browser you're already logged into, click through the actual flow, watch what happens on your screen, and change the code — all on one machine, all under your control. That's a different class of task: not "edit these files," but "get this working, end to end."

The range is the proof. Collie isn't a coding agent with a pile of unrelated features bolted on. The breadth below — the desktop console, the browser control, the screen recorder, the phone remote — is there because Collie's coding agent built all of it. The features are the benchmark: a harness strong enough to ship its own desktop app and iOS companion is strong enough for your bug.

The range

Capability What it means

🧠 Coding agent Semantic code navigation, syntax-gated edits, and a self-verifying repair loop — the core, covered below.

🌐 Your real browser A Chrome extension lets Collie act in your logged-in browser — the real session, real cookies — so it can operate sites, not just scrape them. Every action is a fenced, CSRF-checked localhost call.

🖥️ Living desktop collie web powers an interactive ambient wallpaper: clock, weather, an app dock, projects, a music player (real audio + synced karaoke lyrics), and a command bar — all agent-manageable via one JSON config. When Collie is working, the wallpaper becomes a live star-map of your code.

🎬 Screen recorder collie record captures screen + camera + mic (Windows and macOS) — a built-in way to demo or document a run.

📱 Phone remote Pair once by scanning a code; then tail runs and start new ones from your phone — on the same Wi-Fi (--lan) or anywhere through a relay (--remote), with the companion iOS app.

🔌 Everywhere else Terminal, browser GUI, VS Code, and any ACP editor (Zed/JetBrains/neovim) — one harness, every surface.

Where it runs

Collie is terminal-first and reaches editors through an open protocol, not a bespoke extension:

Surface Command Reaches

Terminal collie (TUI) · collie -p "task" anywhere — SSH, CI, tmux

Browser GUI collie web chat, the live verification gate, diffs, the star-map, the ambient desktop, settings

iPhone collie web --lan (same Wi-Fi) or --remote (anywhere, via the relay) + the companion app scan the pair code once, then run from the phone

VS Code the bundled vscode-collie extension Collie docked in a sidebar panel (manages its own server)

Editors (ACP) collie acp Zed · JetBrains · neovim · VS Code — one adapter, every ACP editor

Streaming / CI collie run "task" --stream-json NDJSON events (tool · edit · repro-gate · receipt)

Install

Windows — one click. Download Collie-Setup.exe from the latest release and double-click it. A small app-style installer lays down a self-contained runtime (Python + Collie + semantic memory, nothing to preinstall) and opens Collie in a native desktop window. On first launch you pick a brain — an existing Claude, Codex, or Grok login is detected and connects in one click; or paste an API key.

macOS / Linux — pip. The core is stdlib-only, so the base install is tiny:

pip install -e ".[local,dev]" # from a clone (PyPI publish is planned) collie setup # optional deps, pre-download the memory model, pick a provider collie # the terminal chat (TUI) opens

No account, no telemetry, and the core has zero third-party dependencies — mock and ollama run without any key, and memory works out of the box on BM25 keyword recall.

Optional extras: pip install ".[local,tui,search]" — local (semantic memory: granite-107m via onnxruntime, ~55MB, multilingual), tui (rich terminal chat), search (keyless web search), acp (editor protocol), browser (Playwright — only for collie browser-bridge --browser, a managed Chromium with the extension preloaded, for CI or when you'd rather not use your own Chrome). Per-OS setup — especially the real-browser bridge (collie browser-bridge + harness/browser_ext/) — is in docs/PLATFORMS.md.

Quickstart

collie # terminal chat (TUI); first run picks a provider collie web # browser GUI — chat, live gate, diffs, star-map, ambient desktop collie selftest # $0 deterministic end-to-end (mock model, real tools + memory)

a real cheap model (provider key in env)

DEEPSEEK_API_KEY=... collie -p "fix the off-by-one in utils/timeparse.py"

machine-readable / streaming

collie run "fix the bug" --json # final result object (tokens, cost, verified) collie run "fix the bug" --stream-json # live NDJSON: tool · edit · repro-gate · receipt

fully local, no key

collie run "summarize app.py" --provider ollama --model qwen2.5-coder:7b

autonomous loop: iterate toward the goal, STOP the first turn an executed check goes green

collie loop --goal "get the suite passing" --until "pytest -q" --max 8

best-of-N with EXECUTION-based selection: run N isolated attempts, keep only what passes

collie pack "fix the failing test" -n 3 --check "pytest -q" --apply

collie acp # serve as an ACP agent (an editor spawns this over stdio)

Providers: mock, ollama, anthropic, anthropic-oauth, and OpenAI-compatible presets deepseek · qwen/dashscope · openrouter · moonshot · groq · zhipu · openai.

For developers

Everything above rests on a small, honest harness. This is what's under it.

The signature: the verification gate

locate code_search "parse_duration compound units" · 4 hits › utils/timeparse.py:42 _parse ············· 0.91

repro wrote repro.py · assert parse_duration("1h30m") == 5400 ✗ FAILING › got 1800, want 5400 ← gate armed

edit utils/timeparse.py ································· +1 −1 43 │- total = SECONDS[unit] * int(val) 43 │+ total += SECONDS[unit] * int(val)

verify python repro.py ✓ PASSING › parse_duration("1h30m") == 5400 ← gate green

✓ verified in 12.8s · Δ +1 −1 · 3,410 tok · $0.006

Other agents check "did the test not error." Collie's gate is stronger: the reproduction carries an assert actual == expected derived from the issue, so a plausible-but-wrong edit fails loudly and drives another repair round. This assert-verify loop is the core of the harness — a wrong edit never silently ships as "done." The same idea scales up: collie loop stops when a real shell check exits 0, and collie pack picks the best of N attempts by what actually passes.

Architecture (abstractions & seams)

┌──────────────── loop.Harness ────────────────┐ task ─────────────▶│ compose → complete → run tools → verify ✓ │ └──┬──────────────┬──────────────┬─────────────┘ ┌───────────────────┘ │ └───────────────────┐ ▼ ▼ ▼ ContextComposer ModelProvider ToolRegistry STABLE/CONTEXT/VOLATILE OpenAI-compat · Anthropic · read/write/edit/bash/ + token budgeter Ollama · subscription-OAuth grep/glob + code_search ▼ │ │ memory.SqliteMemory ▼ recorder.Recorder hybrid recall (BM25+dense+RRF) emit → stream-json / ACP runs.db (+ dashboard)

Seam (abstract base) shipped impl

ModelProvider OpenAICompat (DeepSeek/Qwen/GLM/OpenRouter…) · Anthropic · Ollama · subscription-OAuth

ToolRegistry read/write/edit (syntax-gated) · bash · grep · glob · code_search · web_search + web_fetch (keyless) · plan · undo · browser · MCP (deferred tier + load_tools)

EmbeddingProvider OnnxEmbedding granite-107m (Apache, 55MB, multilingual) · bge-m3 / e5 · jina-v3 opt-in · BM25-only when no model

SqliteMemory CORE + facts + FTS5 + cosine, hybrid RRF + optional rerank + consolidation

ContextComposer STABLE/CONTEXT/VOLATILE + auto-prefetch · a ~1K-token fixed prefix (kept deliberately lean)

code_search extracts the identifiers from a natural-language query and greps the repo (ripgrep, else grep), ranking files by how many of your terms each contains — so the agent reasons about where to edit instead of grepping blind, with no model and no index to go stale. edit_file is exact-match, whitespace-tolerant, and rejects any edit that would break Python syntax. Untrusted web/page content is fenced as data (prompt-injection defense), and the browser bridge refuses any request missing its CSRF header. A token/cost budget (COLLIE_MAX_COST / COLLIE_MAX_TOTAL_TOKENS) stops a run at a ceiling.

Platforms

One cross-platform Python codebase — not a per-OS fork. The handful of operations that genuinely differ (kill a process tree on a timeout, secure a token file, convert a path, choose a shell) are isolated in harness/plat.py, so the same wheel runs everywhere.

OS Status Notes

Linux ✅ native the primary target

macOS ✅ native POSIX; the browser bridge is simplest here (Chrome + Collie on one OS)

Windows ✅ one-click the packaged installer; the agent prefers the file/search tools over bash

WSL2 ✅ a Windows-Chrome ↔ WSL bridge uses the LAN IP + wslpath (handled for you)

Benchmark lab (built in)

Collie measures itself against other harnesses on the same task and model — you run it yourself; no numbers are asserted here:

DEEPSEEK_API_KEY=... python swe_run.py --n 5 # SWE-bench Verified (needs Docker) python -m bench.multirun_eval # pass@1 / pass@k / Wilson CI / McNemar python -m bench.polyglot_eval --langs python,cpp,javascript # Aider-Polyglot, multi-language python -m harness.cli compare --vs all # vs Claude Code / Aider / …

Honesty & policy

The benchmark harness is version-tagged and reproducible. "Progress is a number" cuts both ways — Collie surfaces the levers that turn out net-neutral, not just the wins.

Token counts are real usage (the model's own usage, or harness/apitap.py metering for CLIs that report none) — apples-to-apples, same source both sides.

Collie draws a personal Max/Pro subscription only through the first-party OAuth path (anthropic-oauth), the same mechanism the official CLI uses; it never scrapes or resells subscription tokens. Cheap API keys and local models are the default.

License

MIT © 2026 — see LICENSE.

Resources

Readme

MIT license

Activity

Custom properties

Stars

2 stars

Watchers

0 watching

Forks

0 forks

Report repository