Skip to content

geist v0.3.0

Choose a tag to compare

@geisten geisten released this 23 Jun 13:32
6c1a22d

First release with the agent/CLI layer on top of the inference core. Everything since v0.2.1 is additive — no change to the STABLE include/geist.h ABI.

Highlights

Agent & CLI layer (header-only under tools/, links libgeist.a)

  • agent.h — a bounded, whitelist-gated tool-use loop over a resident session. The host, not the model, decides what runs: a request can only act through a fixed tool whitelist, capped by max_steps.
  • agent_main.h + geist_agent — a reusable CLI engine; a downstream app is ~15 lines (define tools + a system prompt, forward argv). One-shot or REPL.
  • geist_chat — interactive multi-turn chat + a markdown "memory palace" (mind.h): notes as files + an in-context INDEX.md, no DB/embeddings.
  • Tools: doc_search (paragraph-granular, overlap-scored local RAG over a folder) and web_fetch (curl, no-shell fork+execvp, scheme gate + host allowlist + --proto redirect lock).

Quality benchmark

  • Cross-engine MMLU vs llama.cpp on identical weights: geist 52.8% vs 54.0% (Gemma 4 E2B Q4_K, 5-shot) — iso-quality. matplotlib reporting from result JSON.

CI hardening

  • Integration + e2e tests now run against the real model (cached) — the product path is gated, not just unit tests.
  • ASan + UBSan job; ccache across build jobs.

Binaries

Attached by CI: a fully static, dependency-free geist-linux-arm64 (musl) and geist-macos-arm64. See docs/agent.md and docs/DEPLOY.md.