Fraise

io.github.FraiseHQ由 GitHub 帳號 FraiseHQ 發布v0.3.7更新於 Nov 5, 2026

Memory database for AI agents: remember and recall over a running Fraise daemon, in FQL.

已驗證STDIO僅桌面資料庫知識與記憶

概覽

AI 產生的概覽

Fraise 是給 AI 代理使用的本機記憶資料庫,其 MCP 橋接讓助理以 FQL 記住事實並取回。

可以做什麼
  • 記住一則事實,並依主題與實體歸檔到執行中的 Fraise 守護程序
  • 依文字、主題或實體取回已存事實,並依相關度與時間新舊排序
  • 在多個以 @N 區分的獨立記憶圖之間操作
  • 也可透過 HTTP 介面或 Python SDK 呼叫同樣的兩個動詞
適用情境
適合需要跨工作階段保留長期事實(先前的決定、偏好、專案背景)的代理,並希望在步驟中途快速於本機取回,而不依賴託管的記憶服務。
執行需求
註冊橋接前須先執行 Fraise 守護程序(預設本機 9876 埠);橋接本身是本機 stdio 程序,可透過 Homebrew、Docker、Linux 套件、Go 或發行版二進位檔安裝。未宣告任何 API 金鑰或環境變數。
安裝前請注意
README 指出持久化尚未實作,且目前不適合長期正式環境使用,已存記憶可能在重新啟動後遺失。remember 呼叫會寫入記憶圖資料。橋接只是連線到本機 localhost 守護程序的輕量用戶端。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Fraise,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[圖片]

Fraise

Docs · Discord · Query language · Issues

[Stars] [Forks] [Release] [PyPI] [License: MIT]
[CI] [Python SDK] [Coverage] [OpenSSF Scorecard]
[Go Reference] [Discord]

Fraise is a memory database for AI agents. One they query directly, in a language built for tokens, not humans.

text
remember 'acme moved to annual billing' topic:billing entity:acme
recall billing entity:acme since:30d top:5

Two verbs. One binary. No infrastructure to run.

Install

sh
brew install fraisehq/tap/fraisebrew services start fraisecurl -X POST localhost:9876/api/v1/q -H 'content-type: application/json' \  -d "{\"query\": \"remember 'the parrot is turquoise' topic:color\"}"

Linux packages, Docker, go install and signed release binaries are all in Get Started below.

Read Durability before you deploy. Persistence is issue #171 and the next major piece of work.

How it compares

Measured on LoCoMo — 10 multi-session conversations, 1,986 questions — with every system ingesting the same conversations, using the same extraction model and the same embedding model, and answering the same questions. k=10, full data, latest run per system as of 2026-10-11.

systemretrieval recallp50 searchmemory tokens
fraise 0.3.30.9100.185 s7,453,109
hindsight 0.9.20.9135.836 s1,688,873
everos 1.2.30.8970.376 s10,030,966
letta 0.16.80.8970.349 s226,854
mem0 2.0.180.8860.576 s4,120,078
memos 2.0.330.8650.307 s4,000,552
graphiti 0.30.20.8280.290 s9,861,973
cognee 1.5.30.7906.273 s8,526,019
langmem 0.0.300.7830.227 s1,078,110

Fraise comes within 0.003 of the best recall, 31× faster than the one system that reaches it. Near enough the same evidence, in a fraction of the time. The token column is the price of that recall: the extractor (fraise-sdk 0.2.0) reads each message beside what the graph already holds, and that context is where the recall came from.

These come from agent-memory-benchmarks, an open harness — precision, recall and F1 across k ∈ {1, 3, 5, 10}, per category, every run tagged and reproducible from the tag. The full tables are in its RESULTS.md.

Why Fraise

  • A query language agents can actually write. FQL has two verbs — remember and recall — and one way to say each thing. Fewer degrees of freedom means fewer ways for a model to get it wrong, and fewer tokens spent saying it.
  • Hybrid retrieval. Facts are indexed for full-text, graph, and (optionally) vector search. One query, ranked across all three.
  • Temporal by default. Recent memories outrank older ones, so recall is recency-aware without asking for it.
  • The fastest system measured. 0.185 s p50 on LoCoMo, ahead of every other system and 31× faster than the one with matching recall. Remember and recall mid-step, while the user waits.
  • No infrastructure. A single binary. No database to provision, no service to stand up beside it.
  • Open source, MIT.

Status

v0.3.3. The core loop works end to end and the install paths are verified on clean machines. The benchmark row above was produced from this release. 0.4.0 (late October) changes the scorer and adds explain and describe; 0.5.0 (November) is persistence and forget.

Good for building agent memory today. Not yet for long term production use.

How it works

Fraise stores knowledge as a temporal memory graph built from three kinds of node:

  • facts — the things you remember, one statement each
  • entities — who or what a fact mentions
  • topics — what a fact is about

Edges connect facts to the entities they mention and the topics they're about, so a query can start from either side. A recall finds seed facts by text and, optionally, by vector similarity; a recall that names only topics or entities starts from the facts filed under them. With depth:1 or depth:2, a named topic or entity whose facts matched better than its size predicts passes that evidence on to the rest of its facts. Results are ranked by relevance and recency, and the best top come back.

Ranking is not a black box: a fact's score folds its own match strength with what it receives through anchors carrying more mass than their size would predict, each measured against the facts the recall could return. The background rate that "more" is measured against is estimated per query, from the part of the graph the query touched, so there is no relevance constant to tune. Hybrid retrieval has the full model.

A single Fraise instance holds several independent memory graphs (8 by default), addressed with @N — one per user, per session, per agent, however you like.

Get Started

Fraise is a single binary — no database to provision, nothing to configure. Every route below leaves you with a server listening on port 9876, at localhost:9876.

With Homebrew

sh
brew install fraisehq/tap/fraisebrew services start fraise

The service survives crashes and restarts on login (keep_alive), logs to $(brew --prefix)/var/log/fraise.log, and reads its config from $(brew --prefix)/etc/fraise/fraise.config.toml — installed with every setting commented at its default, and never overwritten on upgrade.

With Docker

sh
docker run -p 127.0.0.1:9876:9876 ghcr.io/fraisehq/fraise:latest

Published tags: one per release, latest for the newest stable, edge for the tip of main, and an immutable full-commit-SHA tag for every merge that touches the server.

Images are built with SLSA provenance, verifiable without pulling:

sh
gh attestation verify oci://ghcr.io/fraisehq/fraise:latest --repo FraiseHQ/fraise

With Go

sh
go install github.com/FraiseHQ/fraise/cmd/server@latest"$(go env GOPATH)/bin/server"

The binary installs as server, after its package path — rename it to fraise if that reads better.

Nothing further is needed to trust this: the Go toolchain checks every module download against the public checksum transparency log, and your own machine compiles the result.

Linux packages

.deb and .rpm packages ship with every release, with a systemd user unit:

sh
VERSION=0.3.0ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')curl -sSfLO "https://github.com/FraiseHQ/fraise/releases/download/v${VERSION}/fraise_${VERSION}_linux_${ARCH}.deb"sudo dpkg -i "fraise_${VERSION}_linux_${ARCH}.deb"systemctl --user enable --now fraise

Logs go to the journal (journalctl --user -u fraise -f), and the unit reads ~/.config/fraise/fraise.config.toml when present — a shipped default with every setting commented lives at /etc/fraise/fraise.config.toml to copy from. For agents that outlive your login session, let the user manager keep running: loginctl enable-linger $USER. A system-level (shared server) variant of the unit is described in Running as a managed service.

From a release binary

sh
VERSION=0.3.0OS=$(uname -s | tr '[:upper:]' '[:lower:]')                # linux | darwinARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')  # amd64 | arm64ASSET="fraise_${VERSION}_${OS}_${ARCH}.tar.gz"BASE="https://github.com/FraiseHQ/fraise/releases/download/v${VERSION}"
curl -sSfLO "${BASE}/${ASSET}"tar xzf "$ASSET"./fraise

Windows builds ship as .zip under the same naming scheme.

Verify a release

Releases carry a cosign signature over checksums.txt, using the same VERSION and BASE as above:

sh
curl -sSfLO "${BASE}/checksums.txt"curl -sSfLO "${BASE}/checksums.txt.sigstore.json"
# 1. the bundle proves checksums.txt came from this repo's release workflowcosign verify-blob \  --bundle checksums.txt.sigstore.json \  --certificate-identity-regexp 'https://github.com/FraiseHQ/fraise/.github/workflows/go.yaml@refs/tags/v.*' \  --certificate-oidc-issuer https://token.actions.githubusercontent.com \  checksums.txt
# 2. checksums.txt proves your archive is the one it coverssha256sum --ignore-missing -c checksums.txt   # macOS: shasum -a 256 --ignore-missing -c

Run from source

sh
git clone https://github.com/FraiseHQ/fraisecd fraisemake dev

Your first memory

sh
curl -X POST localhost:9876/api/v1/q \  -H 'content-type: application/json' \  -d "{\"query\": \"remember 'the parrot is turquoise' topic:color\"}"
curl -X POST localhost:9876/api/v1/q \  -H 'content-type: application/json' \  -d '{"query":"recall parrot"}'
json
{  "results": {    "count": 1,    "hits": [      { "value": "the parrot is turquoise", "timestamp": "...", "score": 0.2867 }    ]  }}

Use it from an agent

MCP

fraise mcp is a stdio MCP server — a thin bridge to a running daemon, so any MCP client can remember and recall. It exposes two tools, recall and remember, and needs no flags when the daemon is on its default address.

Start the daemon first (brew services start fraise, or systemctl --user start fraise on Linux), then register the bridge with whichever coding agent you use.

Claude Code
sh
claude mcp add fraise -- fraise mcp

That registers it for the current project; add --scope user to make it available in every project instead.

Codex
sh
codex mcp add fraise -- fraise mcp

Or write it into ~/.codex/config.toml directly:

toml
[mcp_servers.fraise]command = "fraise"args = ["mcp"]
OpenCode

Add it to opencode.json in your project root:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "fraise": {      "type": "local",      "command": ["fraise", "mcp"]    }  }}
Any other client
json
{  "mcpServers": {    "fraise": { "command": "fraise", "args": ["mcp"] }  }}

The bridge describes itself over MCP: each tool arrives with a description and a full JSON schema for its arguments and results — the FQL shapes, a worked example, what a score means — so a client knows what recall and remember do and how to call them without being told. What a tool description cannot carry is the policy: the habit of reaching for memory unprompted, and the judgement about what is worth keeping. That belongs in the file your agent already reads — CLAUDE.md for Claude Code, AGENTS.md for Codex and OpenCode — and two habits are enough: recall before answering anything that leans on earlier decisions or preferences, and remember only facts that will still matter in a later session, one self-contained fact per call with the topics and entities that will make it findable.

SDKs

Python (sdk/python) — the only SDK today:

sh
pip install --pre fraise-sdk
python
from fraise_sdk import FraiseClient
with FraiseClient("http://localhost:9876") as fraise:    fraise.remember("the parrot is turquoise", topics=["color"])    for hit in fraise.recall("parrot", top=5):        print(hit.value, hit.score)

The Python SDK is dependency-light and supports vector search when you supply an embedder. See its README for embeddings and the full API.

TypeScript — not available yet (#179). Until it lands, TypeScript callers use fraise mcp or talk to the HTTP endpoint directly; it is two verbs over one route, so a client is a short wrapper around fetch. See the HTTP API.

Claude Agent SDK

The Python SDK ships memory tools for the Claude Agent SDK, exposed as an in-process MCP server so the agent decides what to store and recall:

python
from claude_agent_sdk import ClaudeAgentOptionsfrom fraise_sdk import FraiseClientfrom fraise_sdk.integrations.claude_agents import memory_server, allowed_tools
fraise = FraiseClient("http://localhost:9876")options = ClaudeAgentOptions(    system_prompt="Remember durable facts the user shares, and recall them when relevant.",    mcp_servers={"fraise_memory": memory_server(fraise)},    allowed_tools=allowed_tools(),)

A complete, Docker-runnable agent lives in examples/claude-agent-sdk.

OpenAI Agents SDK

memory_tools(client) returns bound recall and remember tools:

python
from agents import Agent, Runnerfrom fraise_sdk import FraiseClientfrom fraise_sdk.integrations.openai_agents import memory_tools
fraise = FraiseClient("http://localhost:9876")agent = Agent(    name="Assistant",    instructions="Remember durable facts the user shares, and recall them when relevant.",    tools=memory_tools(fraise),)
result = Runner.run_sync(agent, "My favourite colour is orange.")print(result.final_output)

A complete, Docker-runnable agent lives in examples/openai-agents.

References

Contributing

Contributions are welcome — see CONTRIBUTING.md for how to build, test, and submit changes.

Code of Conduct

This project follows the Contributor Covenant.

Community

Questions, ideas, or building something with Fraise? Join the Discord. Bugs and feature requests belong in issues so they don't get lost.

License

MIT — see LICENSE.

來源:README.md,提交 6f7cda9

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

4
  1. v0.3.7最新Nov 5, 2026
  2. v0.3.6Nov 1, 2026
  3. v0.3.5Oct 26, 2026
  4. v0.3.4Oct 18, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分