Agent-first local RAG — one native binary, Qdrant, and a tiny hash embedder. Ingest → query → JSON. No OpenAI keys. No model downloads.
30-second loop
docker compose up -d && ./build.sh ./machin-rag kb create -c docs ./machin-rag ingest -c docs -f notes.md ./machin-rag query -c docs -q "native binary" -k 3 # multi-KB = one Qdrant collection per -c name · config ~/.machin-rag/config.json
JSON stdout, structured stderr errors, exit codes 82/85/106, help-json. Same shape as other agent-first machin tools.
hash-sha256-v1 feature hashing → 64-d cosine. Offline, free, keyword-ish. Swap the embedder later without changing agents.
One compose.yml brings vectors. The machin binary talks REST — create collection, upsert, search.
serve embeds a Vue 3 CDN console for humans. Agents still prefer the CLI/API.
Pairs with
machin-colibri / bossless for retrieve → generate fully offline.