
Homestead Memory
io.github.fuckbigtech-ai由 GitHub 账号 fuckbigtech-ai 发布v0.5.2更新于 Oct 24, 2026
Tamper-evident record of what your AI agent did, plus local-first verifiable memory.
发布方自己的服务:Memory.fit
概览
本地优先、可防篡改的 AI 代理记忆与审计账本:以哈希链记录工具调用,并提供可验证的 Markdown 记忆库供助手查询。
- 可以做什么
- 对本地 Markdown 记忆库进行提问、检索与完整性验证,并报告检索引擎与降级原因
- 导入笔记目录,可选地蒸馏出带引用、可审计的事实层
- 按指定日期查询某条笔记的历史,了解当时为真的内容
- 对记忆库做完整性校验并按 0-100 打分,检测腐化、篡改与投毒,异常时以非零码退出以便接入 CI
- 把代理的工具调用写入哈希链账本,并导出可验证的证据包或审计轨迹格式
- 导入 Codex 会话记录到账本
- 适用场景
- 适合需要让助手拥有留在本机、人类可读且可被核验而非仅凭信任的记忆的场景;也适合需要留存代理实际行为的可证明记录,用于复核、CI 门禁或交给第三方查验。
- 运行要求
- 以 Python 包形式通过 stdio 在本机运行,需要 Python 3.10 以上(uvx 可自动获取合适解释器)。未声明任何账号、密钥或环境变量。可选的混合检索需另行安装 qmd 运行时;逐次调用的完整捕获依赖 Claude Code 钩子,Codex 仅支持会话导入。
安装
在 SourceWeft 中
- 打开 控制台中的 Homestead Memory,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
homestead-memory
[PyPI] [CI] [Python] [License: MIT]
Stop renting your mind.
A tamper-evident record of what your AI agent actually did, in a local file, that someone who does not trust you can verify. Tamper-evident, not tamper-proof: what it defends against and what it does not.
Agents fail quietly. The run reports success, the tool returns 200, and the thing you asked for did not happen. There is usually no record to contradict it. This keeps one, and every entry is hash-chained to the one before it, so see it catch a forged record, live:
Got
No matching distribution found? macOS still ships Python 3.9 as its built-inpython3, and this needs 3.10+. Nothing is wrong with the package. Either use a newer Python, or skip installing entirely:uvx --from homestead-memory hsm watch --demo(uv fetches a suitable Python for you.)
Record your own agent
Every entry is hash-chained to the one before it, so editing, deleting, or reordering
any record breaks every hash after it. hsm watch reports the break at the exact index
and exits non-zero. Sign it and a wholly rebuilt chain is caught too.
Both phases are recorded, which is what makes it evidence rather than a log. The hook captures the decision before a tool runs and the outcome after. A record of outcomes alone shows what happened; it cannot show that anything was authorised first. As the IETF Agent Audit Trail draft puts it, "a denial that is only logged after execution provides no evidence that the denial was enforced".
That draft maps explicitly to EU AI Act Article 12, and this emits it alongside the native format rather than replacing it, so nothing already on disk changes. Where we differ we say so: it specifies ECDSA P-256, which the AAT export uses, while the native EvidencePack stays Ed25519 so its verifier can remain standard-library only and a recipient needs nothing installed.
Know this before you rely on the AAT export. That draft is an individual
Internet-Draft, not an adopted standard: it has no working group behind it and carries the
usual notice that it "is not endorsed by the IETF". Its author has also filed
IPR disclosure 7558, covering revisions 00 and 01
in full, declaring "Reasonable and Non-Discriminatory License to All Implementers with
Possible Royalty/Fee". RAND with a possible fee is not royalty-free, and this package is
MIT, which grants you no patent licence. We ship the export because interoperability is
worth having and we have asked the author to clarify what implementers are taking on.
Until there is an answer, treat --format aat as a convenience rather than something to
build a compliance programme on. The native ledger and EvidencePack carry no such
disclosure, and they are what the rest of this README argues for.
What it costs you: about 124ms per tool call (median; 138ms p95, measured on an M3 Pro with a 4KB tool response). Since 0.4.0 the hook records both phases, so it runs as a fresh process twice per call, once before your tool runs and once after: about 61ms and 63ms respectively. On a 100-call session that is roughly 12 seconds spread across the run. Almost all of it is Python interpreter and import startup rather than the recording itself. If that is too much for your loop, do not install the hook: the number is here so you can decide before you find out.
Earlier releases documented 68ms, which was correct when only PostToolUse was recorded.
Recording the decision phase is what makes the ledger evidence of enforcement rather than
of observation, and it costs a second process. Stating the higher number rather than the
one that flatters us is the same reason the rest of these figures are here.
This is a file, not a platform. Agent observability tools are far richer than this
and they want a deployment: the self-hosted ones document a production floor of several
services and roughly 16 GB of RAM. This is pip install, one hook line, and a JSONL
file on your disk. Different job. If you need dashboards, evals, and span analytics,
use one of those. If you want a record you can grep and prove, use this.
Secret-shaped values are redacted and payloads truncated to a 200-character head, with a SHA-256 of the full original kept so the evidence survives redaction. That is a mitigation, not a guarantee: no pattern list is complete.
The pack carries the records, the signature, the public key, an integrity report, and a standard-library verifier a third party can read in full and run. It states what it does NOT prove, including that a signature only establishes origin if you already know which key to expect.
What this defends against, and what it does not
Tamper-evident, not tamper-proof. The difference matters, so here it is plainly.
It catches:
-
A record edited in place. The hash stops matching and
hsm watchnames the index. -
A record deleted or reordered. Every hash after it breaks.
-
A silently dropped write. Drops are recorded and reported, never swallowed.
-
A whole chain rebuilt from scratch by someone who recomputed every hash, provided you ran
hsm checkpoint, you pin the expected signer, and they do not hold your key. All three matter. A checkpoint verified without a pinned key is self-asserted: it checks the signature against whichever key sits beside it, so a rebuilt chain re-signed with the attacker's own key also passes.hsm verify --deepnow says so when no key is pinned. -
Anything altered after you handed someone an EvidencePack, which they can check with no install and nothing from us.
A checkpoint covers its prefix, not the future. Records appended after your last
checkpoint can be replaced with a correctly re-chained forgery and still verify, because a
signature cannot cover records that did not exist when it was made. hsm verify tells you
how many records are uncovered. Re-checkpoint often, or that tail grows.
It does not catch:
- An attacker who holds your signing key. The key lives at
~/.config/homestead-memory/ed25519_key, on the same machine as the ledger. Anyone who can rewrite the file can usually read that key, re-sign the rewrite, and pass. If that is your threat model, runhsm checkpoint --export, publish the line somewhere they do not control, and check the ledger against it later withhsm checkpoint --verify. A head hash reveals nothing about the records, so publishing one leaks nothing. - A tool that lies. See below.
- Anything that never reached the ledger at all, such as a hook you did not install.
hsm watch reports how much of the ledger the checkpoint covers, and fails if the
checkpoint no longer verifies. Everything appended since your last checkpoint is uncovered,
so re-checkpoint often.
It records what your harness reported
The hook receives what the harness says a tool did. It is not independent observation.
If a tool reports success while doing nothing, that is precisely the failure this exists to catch, because you get a durable record of the claim and can compare it against reality. But if a tool reports something false about what it did, the ledger will faithfully record a hash-chained, signed falsehood.
The record proves the record was not altered. It does not make the harness truthful.
Why not just OpenTelemetry, or signed logs, or Langfuse
Reasonable questions, and mostly they are different jobs.
- OpenTelemetry gives you far richer tracing and an ecosystem this does not have. It is not built to be tamper-evident, and spans usually leave the machine. Use both if you want: they answer "what happened, in detail" and this answers "can I prove it was not edited".
- Signing your log files gets you most of the way, and if you already do it you may not need this. The differences are per-record chaining, so a single altered line is located rather than the whole file being invalidated, and a pack whose verifier a recipient runs with nothing installed.
- Langfuse, Braintrust, Phoenix are observability platforms with dashboards, evals and span analytics this will never have. They also want a deployment. The self-hosted ones document a production floor of several services and roughly 16 GB of RAM. This is one hook line and a JSONL file. If you want dashboards, use them.
The narrow thing this does that those do not: produce a record a third party can verify without trusting you, without installing anything, and without the data leaving your machine.
And the memory it reads is yours too
The same tool owns the memory your agent reads and writes: plain markdown you can read,
git diff, and walk away with. It catches its own rot, tampering, and poisoning with
mechanical checks rather than an LLM judge, scores it 0 to 100, and exits non-zero so it
gates CI and cron like a test suite.
That scoring is RotBench, published as an open spec so the number is reproducible rather than self-reported.
Capture is Claude Code only right now. The MCP integration below works anywhere MCP
does; the hooks that record every tool call use Claude Code's PreToolUse and
PostToolUse. Cursor and Codex need their own mechanisms and those are not built yet.
Codex is supported by import, not by hook, since 0.4.1:
Codex's tool hooks did not fire under codex exec when measured, but its rollout files
record every call with input, output and a pairing id. Imported rows carry
meta.source=codex-rollout and hsm watch prints (imported) beside them, because a
row read from a file afterwards must never look like one witnessed as it happened.
Coverage is high despite Codex's hooks being shell-only: Codex has no separate Read, Edit
or Write tools and does its file work by shelling out. Measured over 60 sessions and 848
tool calls, exec is 94% of them. Full reasoning, including two positions this project got
wrong first, is in docs/CODEX_CAPTURE.md.
Quickstart (60 seconds)
Python agents can use the SDK directly:
The local HTTP API is documented in docs/openapi.yaml.
Retrieval profiles
Homestead keeps qmd in dedicated cache and config directories. It never runs
maintenance against qmd's global index. Every structured result reports engine,
retrieval_mode, degraded, reason, elapsed_ms, and index_age_seconds.
The route is persistent qmd MCP, then the dedicated qmd CLI, then a read-only
direct scan. Run hsm qmd doctor, hsm qmd refresh, and hsm qmd status to inspect
the runtime without touching any other qmd collection.
Refresh is explicit and incremental. It writes an atomic checkpoint beneath
.hsm/refresh-state.json, refuses foreign or unhealthy QMD runtimes, emits a
live heartbeat while QMD works, and commits the vault fingerprint only after
embedding reaches zero pending vectors. Reads never trigger an implicit
refresh; if QMD is unavailable, retrieval falls back to a read-only scan and
reports the degraded engine and reason.
For a Linux/systemd reference deployment, see deploy/reference/.
Memory under the router
Routers can swap the served model while homestead-memory keeps the same vault
underneath. The model name is just the runtime argument; provenance is stamped as
name@model in the agent field when a write happens.
LiteLLM can use the same pattern with a pre-call injection helper and a success logger:
MCP already sits above harness-level routers. In a claude-code-router-style
setup that swaps the backend model, homestead-memory keeps working with
zero config because memory is external to the model. history() and verify
then attribute every recorded fact to the exact name@model that wrote it.
Integrations
Adapters target the public framework interfaces listed here as of the current releases and may need version bumps as those APIs evolve. Core remains stdlib-only; install only the extra for the framework you use.
Universal tools work with any orchestrator that can register callables or JSON-schema function tools:
LangGraph BaseStore (targets langgraph>=0.2):
CrewAI storage/memory (targets crewai>=0.70, storage-style
save/search/reset):
AutoGen autogen_core Memory protocol (targets autogen-core>=0.4):
OpenAI Agents SDK Session protocol or function tools (targets
openai-agents>=0.0.1):
Claude Code / Desktop / Cursor (MCP: memory tools, not action capture):
Why this exists
"Runs on your device" is table stakes now. Every memory tool stores locally. Nobody verifies. Memory rots quietly: a note contradicts itself, an extracted "fact" loses its source, a body drifts past its own changelog, the current value gets shadowed by a stale one. You find out weeks later, when your agent confidently tells you something that stopped being true in March.
Rot is only the passive failure. Memory also gets tampered with (a fact
edited after it was written) and poisoned (untrusted input injects a "memory"
that was never true, a named 2026 attack class). homestead-memory catches all
three mechanically. Sign the vault and any edited byte breaks the signature. A
distilled claim must cite a source that resolves, or it is dropped. Recall benchmarks
measure whether the model remembers. RotBench measures whether the memory can be
trusted. See benchmarks/ROTBENCH.md.
homestead-memory is built around three commitments:
- Markdown-primary. The human-readable files ARE the memory. Indexes and
projections are derived and disposable. You can leave any time. It is your folder.
Import/export Google's Open Knowledge Format (
hsm export --format okf) plus Mem0/Zep: we are OKF, but signed and verifiable. - Verification over trust. Integrity is a number (RotBench, 0–100), computed
by mechanical checks, with no LLM judging its own homework. See
benchmarks/ROTBENCH.md. - Auditable extraction. The optional distilled layer (
docs/DISTILL_SPEC.md) extracts entity facts with verbatim quotes, checked in code. A claim either cites a real source or it is dropped. Contradictions append a changelog line (update current_crm: "Salesforce" -> "HubSpot" (source: chat-042.md)), never a silent overwrite. Extraction you can audit is extraction you can trust.
The two camps (where this sits)
Honest numbers (LongMemEval)
Measured on the full 500-question _s set (48-session haystacks with distractors),
scored with the official per-type judge methodology, reader glm-5.2,
independent judge deepseek-v4-pro. Reproduce: benchmarks/README.md.
Full run history including the failures: benchmarks/RESULTS.md.
Read the RotBench row carefully: it scores the vault this harness builds, so it is a
statement about this run, not a promise that your vault will score 99. Pointed at a
real working vault it usually will not, and that is the tool doing its job. See
benchmarks/ROTBENCH.md for what the score does and does
not measure.
What we will and will not claim: recall is elite and reader-independent. QA is honest and mid. Published systems self-report higher on their own harnesses (Mem0 94.4%, Zep 63.8% independent). We publish the harness, the judge, and every failed experiment instead. No number here is from a harness you cannot run yourself.
Design
- Cross-platform. Pure Python except for
cryptography, which does the signing. CI: ubuntu / macos / windows. The pack's bundled verifier stays stdlib-only, so a recipient checks a pack with nothing installed, which is the part that matters. - Degrades explicitly. qmd 2.1+ is optional. MCP failure falls back to the dedicated CLI; qmd failure falls back to a read-only scan. Machine-readable output names the engine and reason instead of silently pretending the fast path worked.
- Local by default. The HTTP API binds loopback with bearer auth + DNS-rebind protection; the MCP server is stdio (client-spawned). Nothing phones home.
- Temporal. Changelog lines make history queryable:
hsm history note --as-of DATE.
Status
v0.5, building in public. Roadmap: ROADMAP.md. Break our benchmark:
benchmarks/ROTBENCH.md. Adversarial fixtures get merged.
MIT © Kinetic Labs Inc. · a FuckBigTech / HOMESTEAD project.
来源:README.md,提交 f0e4218
工具
0版本历史
3- v0.5.2最新Oct 1, 2026
- v0.5.1Sep 30, 2026
- v0.5.0Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Memory 集成

Memory.fit
fit.memory官方发布者
托管式 Memory.fit 服务器,让 AI 读取你的训练、睡眠、恢复与饮食数据,并写回每周计划、每日目标和饮食计划。
pg.ddx.io: the PostgreSQL community's memory
io.ddx.pg官方发布者
pg.ddx.io: the PostgreSQL community's memory 的托管 MCP 服务,由 pg.ddx.io 发布;无需登录;Streamable HTTP;29 个工具。
var.gg Naming Memory
gg.var官方发布者
远程 MCP 服务器,可根据领域概念推荐并检索韩、日、中、越、英多语言的代码标识符名称,并提供 ERD 结构查询。

Counterparts
ai.counterparts
面向 Claude Code 与 Claude Desktop 的本地优先长期记忆:助手自行写下关于你和项目的笔记,并在之后的会话中回忆起来。

LAHZE - Persian AI Memory Platform
由 GitHub 账号 pedramgholizadeh 发布
以波斯语为先的地理记忆平台:发现地点,起草并发布仅限波斯语的记忆。AI 翻译