失败恢复记忆库:从真实工程会话中搜索和记录失败恢复教训,支持 BM25 + 语义 RAG 检索和知识库管理。
安装
# npm 包(预构建)
dsh plugin --profile web add misakanet
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Ikalus1988/MisakaNet
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
MisakaNet
mcp-name: io.github.Ikalus1988/misakanet
同一个失败,付两次钱。
一个
pip install在公司代理后面超时。某个 Agent 读证书链、找到那个开关、修好了。几天后,同一个超时 出现在另一台机器、另一个模型下——它被从头再排查一遍,因为那个修法从没写到下一个 Agent 会去看的地方。MisakaNet 就是那个地方:一个 git 托管的失败记忆库。每条 lesson 都是本仓库里的 Markdown 文件—— 按证据分级、像代码一样审阅、被 Agent 检索而不是被猜。你失败一次,下一个 Agent 不再失败。
Agent 原生接口:MCP 服务器(8 个工具)、WebMCP、llms.txt、
A2A(.well-known/agent-card.json)。本地 stdio server(pip install misakanet)是 11 个——
托管端点是它的子集,两行都写在 docs/mcp.md。
安装(30 秒)
安装的目标是一次成功的检索,不是"装完"。下面每一种都不需要账号或 token。
| 你的宿主 | 命令 |
|---|---|
| DeepSeek Harness | dsh plugin --profile web add misakanet,或在 Add plugin 里输入 misakanet |
| Claude Code | /plugin marketplace add Ikalus1988/MisakaNet,然后 /plugin install misakanet@misakanet |
| Cindy | 在 Cindy 的插件列表里安装 MisakaNet 故障记忆(id misakanet) |
| Codex、Cursor、Gemini CLI、Copilot CLI、OpenCode … | npx @misaka-net/misakanet-setup,把 MCP 行写进各宿主配置 |
| 任意 MCP 客户端 | 指向 https://misakanet.org/mcp——公开端点,匿名可读 |
| 自己的代码 | pip install misakanet-core(库)· pip install misakanet(stdio server) |
更新:dsh plugin --profile web update misakanet@latest · npx @misaka-net/misakanet-setup@latest。
前置条件与"两个包"的坑:怎么用。
头五分钟
1. 问一个你真踩过的坑。 没装客户端也行,这段 curl 就是全部接口:
curl -sS https://misakanet.org/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json' \
-H 'MCP-Protocol-Version: 2025-06-18' -H 'Origin: https://misakanet.org' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"misakanet_search","arguments":{"query":"database is locked","top":3}}}'
2. 读返回的东西。 命中会返回 lesson、它的 evidence_level 和路径——先打开文件读完,再决定要不要执行
里面的命令。未命中返回 no_match 加一条可直接调用的 intake:那是语料在说"它还不认识这个失败"。
3. 看信任信号,不看语气。 E0–E3 表示验证到哪一步;E4 是唯一既不能自写、也不能靠投票拿到的等级。
8 个 misakanet_* 工具 都列在 AGENTS.md §3.2,其中 6 个匿名可用(write_lesson / preflight 需要 token)。
MisakaNet 是什么?
给 AI 编码 Agent 用的 git 托管失败记忆库。 报错出现 → Agent 检索 → 应用别人验证过的修法 → 没有命中就留下 intake,最终变成下一位 Agent 的 lesson。
每条 lesson 都是 Markdown 文件:像代码一样审、按证据分级、用纯 Python 标准库的 BM25 检索。 没有向量库、没有 embedding 模型、不想要服务也可以不起服务。
| 课程 | 失败修复知识库,公开可审计,位于 lessons/ |
| 接口 | Streamable HTTP,8 个工具,端点 https://misakanet.org/mcp;匿名可读,注册只为写入 |
| 领域 | rag · devops · fanuc · docker · feishu · mcp · network · ci · wsl · windows … |
| 证据 | E0 intake → E1 已复核 → E2 已复现 → E3 CI 验证 → E4 被两个以上不同客户端真实复用 |
| 它不是 | 它是 |
|---|---|
| ❌ 通用记忆系统 | ✅ 失败修复知识层 |
| ❌ Agent 运行时 | ✅ 可检索的 lesson 数据库 |
| ❌ 向量数据库 / RAG 栈 | ✅ BM25 关键词检索,纯标准库(仍需 Python ≥ 3.11) |
| ❌ 技能市场 | ✅ 来自真实会话的排错知识 |
| ❌ 通用基准平台 | ✅ 按证据分级语料;公开了 267 条检索评测,旧的复述基准已暂停 |
它能回答什么、不能回答什么

MisakaNet 只回答它已经索引过的失败。没有命中时,返回的是 no_match 加一条可直接调用的 intake——
那是语料在说"这个还没收录",不是死路。
Lesson 和 Skill 有什么区别?
Skill 教 Agent 怎么做某事;Lesson 记录曾经哪里错了、以及怎么不再错。MisakaNet 只做后者。 → FAQ
今天的它在哪里
- 会动的数字是徽章:Lessons 徽章读
data/badges/lessons.json,由update-badges.yml重新生成—— 可能落后一次运行,但永远不会是手写总数。 - 证据阶梯的顶端是「观测」不是「声明」:
E4需要观测——两个不同客户端真的检索到同一篇——所以任何 课程文件都写不了它:语料里的声明数是 0(声明分布,由 CI 重新生成并校验), 真正存在的数字来自 worker 每天读search_signals,由心跳公开。 - 检索是 BM25,匹配词不匹配语义:用词料里没见过的词汇描述失败就是未命中,调检索器救不了语料缺口——
所以未命中返回
no_match加 intake,而不是空白页。 - 报料速度高于分诊速度:intake 队列是诚实的瓶颈。
检索评测:267 条,BM25 vs semantic fallback
2026-10-27 在 hosted endpoint 上评测了 267 条 query,每篇 lesson 一条,由 Workers AI 70B 生成。
两个 arm 用同一个 eval worker 和 corpus,只切换 MISAKANET_SEMANTIC。
| arm | R@1 | R@5 | no_match |
|---|---|---|---|
| BM25 | 0.210 | 0.225 | 0.712 |
| semantic fallback | 0.446 | 0.472 | 0.453 |
semantic fallback 把 R@1 提高 23.6 个百分点,把 no_match 降低 25.9 个百分点。但 R@1
0.446 < 0.46,没有过 R@1 条件;no_match 0.453 ≤ 0.50,过了 no_match 条件。113 条子集是
0.460/0.460,250 条是 0.404/0.504——样本足以说明 fallback 有效,不足以宣布 R@1 已解决。
这是 300 篇里的 267 条,不是完整 650;33 篇没有生成出 query,2 个 semantic 请求报错,eval corpus 也没有刷新。→ 完整报告
复述基准:它测了什么,为什么暂停了
只测了一个很窄的问题:把一条 lesson 塞给模型,它会复述回多少? 指标是 lesson_hit_rate——被注入
lesson 里的命令有多大概率出现在回答里。读数字前先读设定:本基准的场景就是每篇 lesson 自己的标题,
注入的正是同一篇,不发生任何检索调用,也不检查正确性。所以它测的是 RAG 的复述那一半:MisakaNet 有
用所必需,但不是"检索能找到东西"的证据。
这个项目已暂停。2026-09-22 两次独立运行、每次约 500 个场景:带 lesson 46.1%,不带 23.3%。
留下的是最后一次快照加它的日期记录——docs/benchmarks/latest.json。
下表由 scripts/update_readme_benchmark.py 生成,请勿手改。
| Date | with_lesson hit rate | plain hit rate | n |
|---|---|---|---|
| 2026-08-30 | 46.4% | 23.9% | 358 |
| 2026-08-31 | 49.1% | 25.1% | 398 |
| 2026-09-06 | 48.3% | 24.1% | 455 |
| 2026-09-14 | 46.6% | 23.4% | 494 |
| 2026-09-21 | 46.1% | 23.3% | 512 |
| 2026-10-12 | 43.8% | 26.1% | 34 |
1155 run(s) in latest.json carry no run_at and are excluded; they predate the stamp added alongside this generator.
with_lesson hit rate (per run date)
43.8% │ ▁
46.1% │ ▄
46.6% │ ▄
48.3% │ ▆
49.1% │ █
└──────────────────
08 09 09 09 10
31 06 14 21 12
每次运行的文件:docs/benchmarks/ · 指标定义:METRIC_DEFINITION
(scripts/benchmark_workers_ai.py)。
参与共创
1. 报一个语料里没有的失败。 先检索,再 misakanet_submit_intake——不要账号、不要邮箱、不要 token,
五行就够。它会变成一个被跟踪的 issue。
2. 复用一条 lesson,留下痕迹。 "这有用"这一票记为 E3 提示,不冒充证明。真正的证明更安静:
你的检索会被匿名计为"又一个不同客户端用过这篇"。
3. 翻译这一页。 README 现在有三种语言;第四种只差一个合并的 PR——公开的 i18n 任务 里写好了验收标准。
你得到的回报是署名:lesson 在 frontmatter 里引用产生它的 intake(source:、provenance.issue:),
管线可以出一张写明 lesson 与证据等级的回执。
这里没有赏金:本仓库不付钱、也不承诺。部分 issue 带有本仓自动化添加的第三方悬赏横幅,不由我们发放—— 见贡献。
怎么用
挑一条通道即可,彼此独立。
| 我想要… | 命令 | 动了什么 |
|---|---|---|
| 让我的助手能检索课程 | npx @misaka-net/misakanet-setup |
把 MCP 端点写进各助手配置;可选规则块与钩子 |
| Claude Code,以插件形式 | /plugin marketplace add Ikalus1988/MisakaNet 然后 /plugin install misakanet@misakanet |
托管的 MCP 工具,无需安装器、无本地进程 |
| DeepSeek Harness | dsh plugin --profile web add misakanet |
mcp__misakanet__* 工具与会话面板 |
| 自己调端点 | 头五分钟里的 curl |
什么都不动 |
| 在自己的代码里用库 | pip install misakanet-core |
什么都不动 |
两个包的坑(它造成过一次真实的安装失败,#1849):
| 看着像 | 实际是 | 用来 |
|---|---|---|
@misaka-net/misakanet-setup(npm) |
安装器——有 bin,没有插件入口 |
教会你的助手检索 |
misakanet(npm) |
DSH / Codex 插件 | dsh plugin --profile web add misakanet |
| 本仓库(git) | 同时是 Claude Code 插件市场 | /plugin marketplace add Ikalus1988/MisakaNet |
misakanet(PyPI) |
stdio MCP server | python3 -m misakanet.server |
misakanet-core(PyPI) |
库(纯标准库 BM25) | from misakanet.search import search_lessons |
读是匿名且不限次数的(同一地址的突发窗口是速度限制,不是配额),且 8 个工具的能力边界都有明文。注册只为写入:解锁
misakanet_write_lesson 与 misakanet_preflight(原因)。
验证安装:npx @misaka-net/misakanet-setup --verify;卸载:--uninstall。
前置:安装器要 Node ≥ 18,库与 stdio server 要 Python ≥ 3.11。Python 3.10 已于 2026-10-01 结束支持(EOL),所以本版本需要 3.11 或更新——升级本包之前先升级解释器。
作为 GitHub Action 使用
工作流失败时,action 检索课程并把最接近的一条评论到 PR 上(可选上报新错误)。已发布到 GitHub Marketplace。
on:
workflow_run:
workflows: ["CI"] # 你的 CI 工作流名
types: [completed]
permissions:
actions: read # 读失败 job 的日志(必需)
pull-requests: write # 发评论
issues: write # 评论端点其实是 issues.createComment
jobs:
intake:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
steps:
- uses: Ikalus1988/MisakaNet@v1
with:
mode: suggest-only # 或 suggest-and-intake,连新错误一起上报
source: ${{ github.repository }}
→ 输入与输出
文档
| 主题 | 位置 |
|---|---|
| 安装、验证、卸载 | docs/quickstart.md · https://misakanet.org/install/ |
| MCP:协议、工具、传输 | docs/mcp.md · API.md |
| CLI | docs/cli-reference.md · python3 search_knowledge.py "…" |
| 架构 | ARCHITECTURE.md · docs/CONCEPTS.md |
| 贡献修法 | CONTRIBUTING.md · 标签体系 |
| 提交 intake | docs/mcp-intake-guide.md · mcp-remote |
| 排错 | docs/troubleshooting.md |
| 已知限制 | docs/LIMITATIONS.md |
| 基准 | docs/benchmarks/ |
| 路线图 / 变更日志 | ROADMAP.md · CHANGELOG.md |
| 竞品、领域、爬虫策略 | competitive · domains · robots |
贡献
零赏金。最高严格度。合并即荣誉。
"零赏金"说的是本仓库:MisakaNet 不付钱、不承诺。它说的不是你现在看的这个 issue。部分 issue 带有
Opire 横幅,那是本仓 scripts/question_autopilot.py 自动添加的
第三方悬赏——我们不发放那些钱,CONTRIBUTING.md 里也不提 Opire。任何悬赏请自行核实再安排工作。
本仓库唯一兑现过的是"合并的 PR"。(#2903)
- 检查工作区:
python3 scripts/misakanet_cli.py smoke - 写之前先检索:
python3 search_knowledge.py "你的报错" - 没找到?写五行失败记录
→ CONTRIBUTING.md · good first issues · 行为准则
安全
⚠️ 执行检索到的命令前,先把 Agent 关进沙箱。 课程是社区贡献——先读再跑。CI 会扫描全部 Markdown
中的危险模式(rm -rf、curl | sh、反引号注入)。见 SECURITY.md 与
LIMITATIONS.md。
排错
| 症状 | 位置 |
|---|---|
DCO · token 泄漏 · pip 超时 · database locked · Windows/GBK · WSL 权限 · FANUC 错误码 |
docs/troubleshooting.md |
| MCP 返回 403/405,或客户端看不到工具 | docs/mcp.md · FAQ.md |
| 公司代理后面 | docs/troubleshooting.md |
给 Agent 与爬虫
缺课或过期优先走 MCP intake,PR 可选。 先检索;没有命中就调 misakanet_submit_intake
(https://misakanet.org/mcp)——不要账号、不要 token。永远不要发送密钥或原始私有日志。
协议:docs/mcp-intake-guide.md。
贡献者
由网络构建,为网络服务。零赏金——只有合并的认可与永恒的网络致谢。 ⚡
许可证
Apache-2.0——Copyright 2026 Ikalus1988。课程以同样许可贡献,每个 commit 都带 DCO
Signed-off-by(见 CONTRIBUTING.md)。
链接
同类插件
vectorize-io/hindsight#coding-agents★ 60728
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 42125
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
MemTensor/MemOS#memos-local-plugin★ 12376
DeepSeek Harness 本地记忆插件:分层 L1/L2/L3 记忆,自动沉淀与手动 memos_* 检索工具并存,内置记忆浏览器。
agentscope-ai/ReMe#dsh★ 3796
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2866
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1529
读取本机上其他四十二个编程智能体已经写下的会话文件(Claude Code、Codex、Cursor、VS Code Copilot Chat、opencode、OpenClaw、Hermes、Kimi、Cline、Zed 等),包括安装之前的历史:提供 deja_recall、deja_session、deja_blame、deja_fix、deja_how、deja_remember 六个工具与 /deja 命令,并可选地把召回结果加入运行时上下文。本地 BM25 索引,不用大模型,不用向量嵌入,不联网(dsh plugin --profile web add dsh-deja)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。