Architect first, code second.

$bird

install

Install

$ git clone https://github.com/srujan375/bird && cd bird
$ python3 -m venv .venv && .venv/bin/pip install -e '.[dev]'

Python 3.11+, plus one model source — Ollama, Ollama Cloud or OpenRouter.

What is bird

A coding agent built for small open models.

Small models don't fail at writing code. They fail at finding it. Give a 9B model a repo and a grep tool and it burns its context window wandering. So bird answers the model instead: the repo becomes a knowledge graph it can query, and the work splits across three harnesses that share one engine.

Why architect first. An agent that starts editing on turn one makes your architecture decisions for you, badly, while you watch a diff scroll past. Plan-first tools (Claude Code's plan mode, spec-driven workflows) exist because a plan is reviewable and a 400-line diff isn't. Splitting design from implementation also keeps each agent's scope small, which is where most runaway edits come from.

harness
lead
talks, routes, dispatches
dispatch
harness
arch
designs on a live canvas
harness
code
edits, tests, verifies
bundle handoff

one engine · one toolbox · knowledge graph

arch — the hero harness

Architecture, designed on a live canvas.

A sketch layer for loose thinking, a design layer for what gets built, and a second model reviewing the design each turn. Finalizing seeds the knowledge graph, so bird code starts already knowing the system.

arch workbench · localhost
The arch workbench: a canvas of architecture components — user, runner, read_image tool, vision model sidecar, registry, session persistence — connected by labelled orange edges, with a review chat panel on the right showing decisions, concerns and flows.

code — the builder

Read, plan, edit, verify.

kg_query is the primary search tool for the whole session, and the engine nudges the model back when it drifts into grep. Anything multi-step gets a plan pinned into the conversation, with the current step and its files; done is blocked while steps are open. bash is allowlisted to read-only search, tests, linters and git reads. Everything else is refused loudly. You approve every edit with a real diff.

$ bird code "fix the failing test"
› kg_query: test_pricing.py
› read: src/pricing.py
› plan: 2 steps
› edit: src/pricing.py (diff pending approval)
› bash: pytest -q
✓ 1 passed

lead — the front door

Talks, explores, decides where the work goes.

lead has no edit, write, or bash tools. It answers questions, reads and researches, and each turn decides whether to reply or dispatch. New features go through arch first, then code. Localized fixes go straight to code. An agent quietly changing something while answering a question isn't possible here, it's structural.