The personal OS your agent runs on.
Give your agent a memory it can't hallucinate: plain markdown + SQLite full-text search + a typed contract it already knows how to operate. No LLM inside. Your agent brings the intelligence; Granite holds the ground truth.
Paste this into Claude Code, Cursor, or any MCP-capable agent:
Install Granite as my personal OS.
1. `npm install -g granite-mem`
2. `granite init --template founder-os` (vault at ~/.granite)
3. `claude mcp add granite -- granite mcp --vault ~/.granite`
4. Restart yourself so the MCP server loads.
5. Call `granite_wakeup`, then propose three notes you would write
first based on what you know about me so far. Capture them as
drafts with --source agent.
Sixty seconds later: a live vault, an agent that knows how to operate it, and its first three notes on disk in ~/.granite/notes/. No system prompt. No config. No cloud.
That's the thesis of this project. No agent handy? Granite is a complete tool on its own:
Add --template founder-os to init when you want a full personal OS from the start: person, organization, meeting, and learning on top of the four defaults — eight types already wired with hooks, indexed fields, and lifecycles, in 150 lines of pure YAML.
Everything Granite writes is a plain .md file with YAML frontmatter. Close the laptop, git init the vault, open the folder in any editor — it's just files.
How it works
Granite is a deterministic substrate for knowledge: markdown files as the source of truth, a SQLite index as derived state, and one fixed loop imposed on top. The intelligence is not in Granite — it's in whatever agent (or human) operates it.
resolve_wikilinks + auto_stub — turns organization: Acme Corp into the slug acme-corp, creating the org note if missing (with a globally-unique slug so nothing gets silently overwritten)
indexed_fields — makes granite_query { type: meeting, where: { date: { gte: "2026-01-01" } } } fast and deterministic
lifecycle — declare states and stale-days transitions, and granite doctor surfaces drift before it rots
On top of its type, every note carries five protocol fields, so humans and agents share ground truth:
Field
Values
Purpose
status
inbox · active · archived
operational state
source
human · agent · extraction
who wrote it
review_state
draft · reviewed · locked
editorial state
durability
canonical · working · ephemeral
keep / may drift / throwaway
derived_from
[slug, …]
provenance for syntheses and outputs
Your agent reads these before writing and sets them as it works. You inherit a fully auditable trail. Add a type when your life grows a new shape — the core stays small. For the formal protocol, see docs/GRANITE_OBJECT_STANDARD.md.
Wired for agents: the MCP server
"A thin MCP server exposes capabilities. A strong MCP server shapes behavior."
One line connects any MCP-capable agent to your vault:
claude mcp add granite -- granite mcp --vault ~/.granite
The surface is intention-first — fourteen tools organized around the workflow, not around files:
Plus three prompts for the higher-level workflows (granite_refine_note, granite_process_inbox, granite_compile_topic), and resources for raw note and type-contract access. Start the server with --role read when an agent should inspect without mutating. An HTTP transport with bearer-token auth is available for remote setups — see docs/DEPLOY.md.
The point is not to give an agent a file browser. The point is to give it a workflow it can follow.
What Granite will never do
Granite will never:
run a generated word, plan a step, or loop on its own
compute embeddings or ship a vector store
run background agents or a scheduler
phone home — no telemetry, no account, no cloud dependency of its own
add overlapping CLI/MCP endpoints that blur the loop
This is why your agent can be trusted with write access. The vault is a deterministic substrate. The intelligence is yours (or Claude's, or GPT's, or whoever you pay this quarter).
One exception, and it is not a language model. Granite's MCP layer calls
Jev, TypeSafe's System One classifier, so it can bound a candidate
set deterministically and then delegate the judgment of which candidate answers a
question — instead of leaving that assembly work to your agent. Jev returns a choice, a
score, or a probability over a set Granite chose; it never writes prose, never plans, and
never decides what to look at.
Jev is required.TYPESAFE_API_KEY must be set or Granite refuses to start, because a
semantic layer that silently degrades produces answers that look right and are not. Every
capture is judged too, and the proposals it returns are yours to apply — Jev never writes a
link.
Beyond one machine
Cloud, if you want it. One command deploys a personal serverless Granite on Fly.io Sprites: wakes on request in 100–500 ms, sleeps when idle, costs cents per month at rest. You own the sprite — there is no Granite cloud, no central admin, no relay.
granite deploy login --token <sprites-token> # or export SPRITES_TOKEN=…
granite deploy # prints an MCP URL + bearer token
claude mcp add --transport http granite https://<your-sprite>.sprites.app/mcp \
--header "Authorization: Bearer <token>"
Multiple named instances, bulk upgrades, token rotation, and self-hosting the HTTP MCP server (a generic Dockerfile is included) are covered in docs/DEPLOY.md.
Sync, without a relay. Direct machine-to-machine over LAN, Tailscale, or a private DNS name — with per-device read/write tokens:
No. Your vault is plain markdown with [[wikilinks]] — Obsidian opens it just fine. Granite adds the typed contracts, the deterministic index, and the MCP surface on top of files any editor can read.
In your agent. Granite is deliberately deterministic — that's precisely why an agent can be trusted with write access to it.
SQLite FTS5 for full text, typed queries over indexed fields, and the wikilink graph for structure. Deterministic, explainable, and rebuildable from the files.
Yes. The full CLI and the web UI work standalone. The MCP server is one door among three.
Nothing. It's a folder of markdown files. The index is derived and disposable; git init the vault and you have versioning and backup for free.
No. No telemetry, no account, no network calls — unless you explicitly deploy to your own sprite, sync to your own machines, or run granite serve with cloud credentials configured (use --no-cloud to stay fully offline). Granite makes one outbound call on your behalf: the Jev judgment, from the MCP layer, which requires a TYPESAFE_API_KEY you set yourself. Without it Granite refuses to start rather than degrade.
Philosophy
local-first beats cloud dependence for personal memory
plain markdown beats proprietary formats
types as active contracts beat types as folders
tools for humans should also be legible to agents
protocol belongs in the core; agent policy belongs outside it
a personal OS is a thing you own — not a thing you rent
Status & contributing
Granite is pre-1.0 and moving fast — see CHANGELOG.md for release history. The product boundary stays fixed: Granite stores and indexes local knowledge; agents bring the intelligence.
Issues and focused PRs are welcome. For local development, read CLAUDE.md. The key product rule is simple: no embedded LLM, no vector store, no autonomous scheduler inside Granite — the single permitted model is Jev, a classifier Granite requires for its semantic layer.
คัดลอกคอนฟิก stdio สำหรับ Cursor, Claude Desktop, Claude Code หรือ VS Code ได้ในหน้านี้ คอนฟิกนี้ใช้การติดตั้งของผู้เผยแพร่ ไม่ใช่พร็อกซีของ PlugMCP
Granite Mem ต้องใช้ API key ไหม?
ระเบียนนี้ไม่ได้ระบุตัวแปรสภาพแวดล้อมที่จำเป็น
Granite Mem ใช้ทรานสปอร์ตแบบใด?
Granite Mem ทำงานแบบโลคัลผ่าน stdio
Granite Mem ถูกตรวจสอบล่าสุดเมื่อใด?
ตรวจสอบล่าสุดเมื่อ 2026-10-28 Local-first markdown memory system for humans and AI agents: MCP server, typed knowledge graph, deterministic garden planning.