Local graph memory for AI agents — CLI-first, no external services required.
Glyph lets agents store, link, and retrieve project knowledge as a durable graph.
Each unit of knowledge is a glyph (a short-id node like g-a1b2). Edges connect glyphs;
refs point at the outside world; tags classify. Everything lives in a single SQLite
file under .glyph/ — no daemon, no service, one process per command.
It is a formalized, addressable, budgeted evolution of the NOTES_yyyy-mm-dd.md habit:
agents keep writing short updates; Glyph clocks them, links them, and discloses them
thinly into context via facets (progressive disclosure).
See OVERVIEW.md for the full design.
go install github.com/54rt1n/glyph/cmd/glyph@latestOr build from source:
git clone https://github.com/54rt1n/glyph
cd glyph
make build # → bin/glyphglyph init # create .glyph/ in your project
glyph skill # print the agent usage skill (learn the tool once)
# write (timestamps are automatic — no date ceremony)
glyph etch --type note --summary "Experiment: Y failed" "Tried X; Y failed because Z"
glyph etch --star --type decision --tag retrieval \
--summary "Retrieval: pins by default" \
--ref url:https://arxiv.org/abs/2501.13956 \
"Pins by default; deepen with show"
# connect and revise
glyph link g-a1b2 g-c3d4 --as supports
glyph amend g-a1b2 "Updated conclusion" --tag +final --tag -draft
glyph amend g-a1b2 --unstar
# retrieve wide and cheap (one-line pins), deepen on purpose
glyph ask "what did we decide about retrieval?" --type decision
glyph list --type note --today
glyph show g-a1b2
glyph show g-a1b2 --facet neighborhood
glyph related g-a1b2 --depth 3 --direction both
glyph context # store size, all starred focus, five recent glyphsAdd --json to any command (or set GLYPH_FORMAT=json) for machine-readable output.
| Command | Role |
|---|---|
glyph init |
Create the .glyph/ store for this project |
glyph etch |
Store text as a glyph (--summary, --star, --type, --tag, --ref) |
glyph amend |
Revise a glyph (--summary, --star/--unstar, tags, refs, or body) |
glyph ask |
Query memory — hybrid BM25 + vectors, thin pins by default |
glyph show |
One glyph in full (--facet neighborhood for 1-hop) |
glyph list |
Recent or filtered glyphs (--star, --type, --tag, --today, --since) |
glyph link |
Connect two glyphs with a typed edge (--as supports) |
glyph related |
Rooted relationship traversal (--depth, --direction both/out/in) |
glyph forget |
Delete a glyph (edges/tags/refs/vectors cascade) |
glyph context |
Compact store count, all starred focus pins, and five additional recent pins (--verbose for inventory) |
glyph skill |
Print the agent usage skill (drop into your agent's skill system) |
glyph model |
Select/download the embedding model |
ask always works: BM25 full-text search is the floor, with exact tag matches blended in.
To add semantic ranking, download the local embedding model once (~119 MB, runs on CPU,
no API key, no service):
glyph model get default
glyph model use defaultSummaries and bodies are both indexed. New and amended glyphs are embedded automatically; ask blends vector similarity into
its ranking via reciprocal rank fusion. Remove the model at any time — everything
degrades cleanly back to keyword search.
CLI is the product · twelve commands · embedded versioned migrations · SQLite + WAL, safe for concurrent agents ·
write fat, disclose thin (facets: pin → card → body → neighborhood) · tags classify,
refs cite, links connect · summaries scan, stars focus · time is implicit on write, a filter on read · no daemon,
no Cypher, no MCP required.
Apache License 2.0 — see LICENSE.
Copyright © 2026 Martin Bukowski (@54rt1n)