Skip to content

Releases: AEndrix03/Graft

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 16 May 00:49

Changelog

All notable changes to graft are documented in this file.
The format follows Keep a Changelog and the project follows Semantic Versioning.

0.1.0 — Initial release

First public release of graft — local-first agentic memory for AI coding agents.
A single binary + single SQLite file that gives any agent persistent memory across sessions, context resets, and machines, with no cloud and no API key.

Core engine

  • C11 daemon (graftd) with AF_UNIX socket transport and a thin graft CLI client; MessagePack wire protocol for low-overhead local IPC.
  • Storage on SQLite with sqlite-vec (dense vector index) and FTS5 (BM25 lexical index) in a single DB file.
  • Embeddings via embedded llama.cpp running BGE-M3 on CPU out of the box; opt-in GPU acceleration with GRAFT_GPU=cuda (NVIDIA) or GRAFT_GPU=hip (AMD ROCm 6 / 7).
  • WAL-safe sync layer: single-writer push half, no double-open, no WAL contention under concurrent reads.

Retrieval

  • graft query — verified semantic cache returning STRONG / WEAK / MISS in milliseconds. Multi-signal verifier refuses to claim a hit when dense and lexical signals disagree, so agents never quote confidently-wrong answers.
  • graft retrieve — hybrid search fusing dense (BGE-M3 cosine) and lexical (BM25 over title + body) via Reciprocal Rank Fusion.
  • graft explore — beam-search graph walk over keyword and semantic edges with MMR diversity and gamma^step decay.

Knowledge model

  • Memory nodes: title (retrieval anchor) + body (full context) + keywords.
  • Graph edges: keyword and semantic links between nodes, walked by explore.
  • Supersession: replace outdated nodes atomically while keeping the old version visible as SUPERSEDED — history stays, mistakes don't propagate.
  • Confidence levels surfaced to clients (STRONG / WEAK / MISS) so agents can gate behavior on retrieval quality.

Multi-tenant profiles

  • Isolated DBs and sockets per profile (work, personal, project-scoped); switch with GRAFT_PROFILE=<name>.
  • Import / export / merge profiles as plain SQLite files — portable, diffable, scriptable.

Optional REST API + 3D viewer

  • Nine JSON endpoints (/v1/match, /v1/search, /v1/insert, …) gated by a flag in config.yaml.
  • Browser-based 3D graph viewer with click-to-edit and atomic supersession.

Agent integrations

Each adapter ships skills (when to search, when to save) and, where the harness supports them, hooks (deterministic execution on UserPromptSubmit / PostToolUse / Stop so the model can't forget):

  • Claude Code — skills + hooks, installed via graft setup claudecode.
  • CodexAGENTS.md + hooks, installed via graft setup codex.
  • Claude Desktop — MCP server (stdio).
  • ChatGPT — MCP server (stdio or HTTP) with optional OAuth gateway.
  • Gemini CLIGEMINI.md memory file.
  • Open CodeAGENTS.md + skills, installed via graft setup opencode.

Microservices pattern

  • Reference architecture for L1 Redis + L2 graft semantic cache + L3 graft + LLM with writeback, documented in docs/microservices/.
  • Designed to absorb most "GPT in a microservice" traffic before it hits the LLM, with the system getting cheaper and faster over time as L3 answers write back into L2.

Packaging & distribution

  • Homebrew formula (Formula/graft.rb) with prebuilt Linux bottle.
  • Scoop bucket (bucket/graft.json) for Windows users.
  • Cross-platform installer scripts: scripts/install.sh (Linux / macOS / MSYS2) and scripts/install.ps1 (Windows, auto-installs MSYS2).
  • Build under 3 minutes on a laptop.

CI / release pipeline

  • Single unified release workflow triggered by pushes to the release branch.
  • Strict semver gate (only x.y.z, no pre-release suffixes).
  • ctest → parallel build of Linux tarball, Homebrew bottle, Scoop zip → single signed publish job with cosign signatures, SBOM, and build provenance attestations.
  • Smart caching of llama.cpp build (keyed on submodule SHA) and ccache across runs.

Documentation

  • Per-feature docs tree under docs/ (install, retrieval, insert, profiles, embeddings, integrations, microservices, HTTP API, viewer, maintenance, storage, architecture, release).
  • Glossary in docs/concepts.md, use cases in docs/use-cases.md.
  • Contributor guide in CONTRIBUTING.md with commit-msg policy (Conventional Commits, English ASCII subject ≤ 70 chars).

v0.1.0-alpha.1

Choose a tag to compare

@github-actions github-actions released this 14 May 20:28

v0.1.0-alpha.1

  • ci: drop macos targets from brew bottle and release workflows (cf6fbac)
  • fix(build): add pkg-config include dirs for sqlite and yaml (89f344c)
  • fix(ci): cap llama.cpp build parallelism to avoid linux oom (5cf8cb1)
  • fix(build): disable neon and tests for ci bottle and scoop builds (3141127)
  • fix(scoop): install zip in msys2 for packaging step (9dc47e9)
  • fix(build): strip semver pre-release suffix for cmake project() (f9bd71d)
  • feat(scoop): add windows bucket manifest and release pipeline (3ef7355)
  • fix(ci): drop windows runner to remove parse-error in release workflow (4590d6a)
  • fix(ci): resolve matrix.shell expression error in release workflow (2a08f83)
  • ci(brew): tag-driven release pipeline, gh release only for stable (8f996c4)
  • feat(profile): add daemon-routed remote sync with --auto/--stop worker (2125b6e)
  • chore: update profile (a2a1030)
  • chore: update 5 files (3be127e)
  • ci(brew): add homebrew bottle workflow for release branches and tags (2cadbfa)
  • refactor(brew): apply homebrew best practices, mark head-only (34965ea)
  • fix(brew): pin sqlite-vec to upstream-reachable sha 5778fec (9f1dc33)
  • feat(view): filter nodes and edges by keyword scope for rbac-lite (3af1586)
  • feat(storage): apply graft_db_key pragma when sqlcipher is linked (664cdbb)
  • feat(http): refuse remote bind without auth or attested tls upstream (9f40e4c)
  • docs: document release process (d15a305)
  • docs: update 11 files (d76b2ea)
  • feat(install): optional cosign verification of model blob (3f12796)
  • feat(view): add view_anonymize toggle to strip titles and keywords (35dd7ad)
  • feat(http): add readonly token capability and origin-based csrf (a247639)
  • feat(http): add bearer token auth for v1 endpoints (bd7108e)
  • feat(http): print attack surface banner at server startup (6640bb3)
  • feat(install): verify model sha256 when pinned via env or .sha256 file (a46b433)
  • fix(storage): chmod sqlite db to 0600 after open (posix) (4c41583)
  • docs: document opencode setup target (e18fb07)
  • test(verify): use clearly-in-band fused score to avoid 0.7 boundary (6a6c5ac)
  • feat(verify): add opt-in fused-score gate mode (49b1955)
  • feat(rerank): add s_nli signal and w_nli weight in fusion (ece3106)
  • feat(verify): compute s_nli via ce with entailment template (ff3eed0)
  • feat(verify): add s_nli signal placeholder to verify signals (f2fc34f)
  • test(rerank): cover fusion math and disabled init (1f9a8ff)
  • feat(retrieve): apply rerank after rrf when enabled (3e83f8b)
  • feat(rerank): implement batch ce scoring with weighted fusion (80dccc1)
  • feat(rerank): scaffold rerank module with config and fusion formula (be769c7)
  • refactor(verify): move hardcoded strong-hit thresholds to config (0ac4a6a)
  • fix(verify): clamp s_vec to [0,1] before scoring (d288739)
  • perf(verify): avoid recomputing jaccard since s_lex is the same value (e5cf78c)
  • refactor(verify): use nan instead of -1 as ce score sentinel (61e63d9)
  • chore: update config.example (3e155b4)
  • fix(http): handle zero-byte files in static reader (6ddb96f)
  • fix(daemon): validate mpack args is a map before dispatch (d0d7379)
  • fix(http): validate host header to block dns rebinding (5041a2f)
  • fix(http): refuse non-loopback bind without explicit opt-in (c3253ac)
  • fix(daemon): restrict unix socket permissions to 0600 (2235bda)
  • fix(view): drop shell interpolation in run_in_dir to prevent rce (d666e5a)
  • fix(setup): prevent heap overflow in codex hooks toml writer (68f630f)
  • fix(profile): handle path truncation in recursive directory removal (538555f)
  • fix(hooks): atomically consume injected proposal via rename (76af916)
  • fix(cli): validate numeric args with strtoll instead of atoll (df1c2d9)
  • fix(hooks): validate session id before using in cache paths (352b37a)
  • fix(autostart): create daemon log with 0600 permissions (62a6044)
  • fix(hooks): restrict state dir and file permissions to user only (2ff60f3)
  • fix(profile): write remote auth file with 0600 permissions (5bf8f8b)
  • fix(classify): skip neighbors without keyword id instead of guessing (9553c0b)
  • fix(hooks): use per-pid candidates files to avoid append races (456e54d)
  • fix(storage): escape fts5 metacharacters in title scoped search (7ffad9d)
  • fix(autostart): guard daemon spawn with exclusive pidfile lock (880eb6e)
  • fix(hooks): cap query prompt length to avoid windows argv limits (1dd59d0)
  • docs: update 31 files (fe2bdac)
  • chore: ignore local config files (1dd92a4)
  • chore: ignore local agent and cache files (0cd2104)
  • fix(hooks): surface save proposals before final response (58cc961)
  • fix(hooks): harden graft setup and cache hints (6c2c9dc)
  • chore: update settings.local (4bff59e)
  • chore: verify.c multi-lang (41fb850)
  • docs: add per-feature documentation tree under docs/ (6e2f2eb)
  • test: update 14 files (493dd2c)
  • fix(storage): filter and prune expired memories (02ca535)
  • fix(retrieve): split title and body FTS results (b4fabf4)
  • fix(query): rerank verified candidates (86e9173)
  • fix(cli): graft view path truncation + absolute viewer_path on install (fec2092)
  • feat(cli): graft view auto-builds the viewer SPA on first run (542a30b)
  • feat(scripts): add reload helper (ps1 + sh) for graftd (e2f7439)
  • feat(config): enable http layer with all endpoints (8334328)
  • feat(install): add homebrew formula (b299511)
  • refactor(project): rename to graft (739ce85)
  • chore(deps): update sqlite-vec submodule (03dca46)
  • fix(core): validate inputs and clone config ownership (1fde6e1)
  • docs: update viewer auth guidance (3dd884b)
  • feat: add remote profile sync and Codex setup fixes (6e50e38)
  • feat(cli): add setup command for assistant integrations (2e87eb4)
  • fix(codex): install hooks with current feature flag (8fc0845)
  • docs: update 4 files (d81addf)
  • feat(explore): expose cosine to query for meaningful score percent (6bf1bef)
  • fix(viewer): score percentage on absolute scale per mode (e04b604)
  • fix(viewer): result nav inline below search bar, no overlap with kw (bdfe98d)
  • feat(viewer): explore defaults depth=5 beam=1 (7a36203)
  • feat(viewer): score percentage to 2 decimals (78167a3)
  • feat(viewer): match dim mode, hide labels on dimmed, kw empty hint (241eec3)
  • feat(viewer): explore path edges, depth/beam labels, kw autocomplete (f51484c)
  • feat(viewer): vivid rank ramp, score box, brighter overlays (18a5e51)
  • feat(viewer): retrieve click semantics, tier-stepped red-orange ramp (7d79f9e)
  • feat(viewer): retrieve dim mode, orange rank ramp, prev/next nav (ca7a373)
  • feat(viewer): match feedback banner, halve edge thickness (bb3293c)
  • chore: update Graph3D (dcda774)
  • feat(viewer): edge thickness proportional to weight (4 buckets) (c1cad83)
  • feat(viewer): 1.5x scale, top-2 also for keyword edges (c4f43a0)
  • feat(viewer): top-2 semantic edges per node, label dist 8 (0002fbc)
  • chore: update Graph3D (2749dcf)
  • chore: update Graph3D (289b616)
  • feat(viewer): 5x wider spatial scale (2d3413a)
  • feat(viewer): anim, resizable panel, smart dirty, prettier nodes (3f05521)
  • feat(viewer): spread, content-size, color, edges click+thicker (1048a27)
  • fix(config): treat YAML null markers as unset for http.api_key (5fe8ca1)
  • feat(viewer): 3D graph viewer with supersession editor (d8a2651)
  • chore: update 9 files (74d35c3)
  • feat(view): add /v1/view full-graph dump with 3D coords (cc8ce2d)
  • feat(insert): atomic supersession via supersedes id (bb457f6)
  • feat(http): add optional REST layer with 5 primitive endpoints (2512a36)
  • docs: README field rename and --markdown render note (f1504f0)
  • docs(integrations): align skills, hooks, MCP server with title/body (43401ec)
  • feat(core): rename summary->title detail->body, add author/expires (32fec2d)
  • docs: rewrite README, add CONTRIBUTING and Apache 2.0 LICENSE (2c35ef7)
  • feat(integrations): add memgraph hooks for Claude Code and Codex (168bf07)
  • chore(hooks): mark commit-msg hook executable (5084a38)
  • feat(hooks): add commit-msg policy hook (381d1d3)
  • docs: document hardware_accel and query_fallback_top_k (cdbadb8)
  • feat(embed): add hardware_accel toggle for CUDA/ROCm GPU offload (6d5f76a)
  • feat(query): cap MISS fallback_retrieve at 5 nodes by default (648785d)
  • docs: update 2 files (29ea46d)
  • feat: Claude & ChatGPT integrations. Node removing & MCP updates (646551e)
  • feat: Claude Code integrations & install utils (8514186)
  • feat: import code (d20bfd3)
  • Initial commit (1576c50)