Kowalski is an agent runtime in Rust that runs on your own machine. You give a "horde" (a small pipeline of agents) a spreadsheet, a few web pages or a document, and it gives you back a file: a report workbook, a morning brief, a note.
It started in March 2025 as a weekend Ollama wrapper and has mostly grown by deleting things: a five-layer architecture, a crate per agent and three databases are gone. What's left:
- a four-crate workspace on crates.io (2.6.1) that builds one ~20 MB binary
- tokio + axum, SQLite for run state, an MCP client for tools
- the Vue operator UI compiled into the binary by
build.rs(a generatedinclude_bytes!table) - a horde is a folder of Markdown files: one file per step, TOML front matter for the kind, the prompt and the output file
Each step kind is a StepHandler, and most never call a model: fetching pages, profiling a table, running SQL and writing the xlsx are plain code. The model only writes a query or a paragraph from material it was already given, which is why a 2B model (gemma4:e2b, laptop CPU) is enough. Idle, the process sits at about 12 MB of RAM.
Two things I'd like opinions on:
- Embedding the built UI: the
build.rstable I have now, orrust-embed? Anything that bit you on crates.io, where the UI isn't part of the package? - Step handlers are
async_traitobjects in a registry keyed by kind. Would you move to an enum now that async fn in traits is stable?
MIT. Mac DMG (signed and notarized) and a one-line installer for Mac and Linux.
- Repo: GitHub - yarenty/kowalski: Hordes of small AI agents that do real work on your machine — free, private, one download. A local model (Ollama) or your own key; spreadsheets become workbooks, pages a morning brief, research notes in your vault. Rust, MIT. · GitHub
- How the architecture got smaller: Eighteen months of Kowalski: an architecture that kept getting smaller — Kowalski
1 post - 1 participant
