{"id":"8a72527c-a25e-44bb-9490-f9bd6f734091","entityType":"agent","slug":"clawhub-lephix-youdaonote-llm-wiki","name":"YoudaoNote LLM Wiki","canonicalUrl":"https://www.xpersona.co/agent/clawhub-lephix-youdaonote-llm-wiki","canonicalPath":"/agent/clawhub-lephix-youdaonote-llm-wiki","generatedAt":"2026-10-11T03:56:19.789Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":null},"description":"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi... Skill: YoudaoNote LLM Wiki Owner: lephix Summary: 当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-05-11T01:07:58.713Z | auto - minCliVersion 由 1.3.2 升级为 1.3.3，要求新版有道云笔记 CLI。 - 其他内容及功能保持不变。 v1.0.4 | 2026-05-05T00:30:39.807Z | auto - Requires youdaonote CLI v","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17bx0c27sghyvg48kbx2h94dn83yp1p:youdaonote-llm-wiki","sourceUrl":"https://clawhub.ai/lephix/youdaonote-llm-wiki","homepage":"https://clawhub.ai/lephix/skills/youdaonote-llm-wiki","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/lephix/youdaonote-llm-wiki","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/lephix/skills/youdaonote-llm-wiki","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":null},"stars":null,"forks":null,"downloads":1203,"packageName":null,"latestVersion":"1.0.5","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:38:56.923Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T01:38:56.938Z","lastCrawledAt":"2026-10-11T01:38:56.923Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T01:38:56.923Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.5","createdAt":"2026-05-11T01:07:58.713Z","changelog":"- minCliVersion 由 1.3.2 升级为 1.3.3，要求新版有道云笔记 CLI。 - 其他内容及功能保持不变。","fileCount":3,"zipByteSize":12892},{"version":"1.0.4","createdAt":"2026-05-05T00:30:39.807Z","changelog":"- Requires youdaonote CLI version 1.3.2 or higher (was 1.2.3). - All Wiki-related commands must now add the global parameter `-s wiki` to enable feature usage statistics. - Documentation updated: examples and procedures in SKILL.md now consistently use `-s wiki`. - No functional logic changes beyond statistics tracking and CLI version enforcement.","fileCount":2,"zipByteSize":11637},{"version":"1.0.3","createdAt":"2026-04-26T10:30:59.073Z","changelog":"- Improved CLI version check: now supports `youdaonote upgrade` if available, and provides installation guide for Windows or upgrade failures. - Updated minimum CLI version required remains at 1.2.3. - Enhanced upgrade guidance with a direct link to the official CLI installation guide for better user experience. - Documentation fully reflects the improved installation and upgrade protocol.","fileCount":2,"zipByteSize":11436},{"version":"1.0.2","createdAt":"2026-04-23T01:24:41.235Z","changelog":"Version 1.0.2 - 增加数据持久化和权限说明，明确 skill 会对用户笔记账户做写入（写入类别、时机与内容）。 - 强化写入边界和安全机制描述（只影响已授权账号，仅在用户同意后执行敏感写操作）。 - 优化会话启动协议，注册表重建必须征得用户明确同意，流程更透明。 - 修正前置检查流程，CLI 未安装/鉴权失败/版本不符时仅提示操作不自动执行命令。 - 文档结构梳理更清晰：数据写入声明、前置检查、注册表构建步骤和安全规则单独列出。 - 在技能元数据中新增环境变量要求（YOUDAONOTE_API_KEY）。","fileCount":2,"zipByteSize":11343},{"version":"1.0.1","createdAt":"2026-04-21T10:06:41.194Z","changelog":"首次公开发布：LLM Wiki skill","fileCount":2,"zipByteSize":9161},{"version":"1.0.0","createdAt":"2026-04-13T01:34:15.455Z","changelog":"Initial release of Youdaonote LLM Wiki — persistent, interlinked Markdown wiki for Youdao Note, using the Karpathy LLM Wiki mode. - Enables seamless knowledge ingestion, querying, and consistency check within Youdao Note. - Auto-creates standard folder structure (Raw, Entities, Concepts, Comparisons, Queries) based on Wiki mode. - Implements YAML frontmatter and cross-reference conventions for every wiki page. - Provides detailed initialization and core workflow for ingest (素材摄入), query (知识查询), and lint (一致性检查). - All content persists in Youdao Note cloud for multi-device access and easy sharing.","fileCount":2,"zipByteSize":6279}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17bx0c27sghyvg48kbx2h94dn83yp1p:youdaonote-llm-wiki","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T03:56:19.787Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lephix-youdaonote-llm-wiki/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":null},"readme":"Skill: YoudaoNote LLM Wiki\n\nOwner: lephix\n\nSummary: 当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi...\n\nTags: latest:1.0.5\n\nVersion history:\n\nv1.0.5 | 2026-05-11T01:07:58.713Z | auto\n\n- minCliVersion 由 1.3.2 升级为 1.3.3，要求新版有道云笔记 CLI。\n- 其他内容及功能保持不变。\n\nv1.0.4 | 2026-05-05T00:30:39.807Z | auto\n\n- Requires youdaonote CLI version 1.3.2 or higher (was 1.2.3).\n- All Wiki-related commands must now add the global parameter `-s wiki` to enable feature usage statistics.\n- Documentation updated: examples and procedures in SKILL.md now consistently use `-s wiki`.\n- No functional logic changes beyond statistics tracking and CLI version enforcement.\n\nv1.0.3 | 2026-04-26T10:30:59.073Z | auto\n\n- Improved CLI version check: now supports `youdaonote upgrade` if available, and provides installation guide for Windows or upgrade failures.\n- Updated minimum CLI version required remains at 1.2.3.\n- Enhanced upgrade guidance with a direct link to the official CLI installation guide for better user experience.\n- Documentation fully reflects the improved installation and upgrade protocol.\n\nv1.0.2 | 2026-04-23T01:24:41.235Z | auto\n\nVersion 1.0.2\n\n- 增加数据持久化和权限说明，明确 skill 会对用户笔记账户做写入（写入类别、时机与内容）。\n- 强化写入边界和安全机制描述（只影响已授权账号，仅在用户同意后执行敏感写操作）。\n- 优化会话启动协议，注册表重建必须征得用户明确同意，流程更透明。\n- 修正前置检查流程，CLI 未安装/鉴权失败/版本不符时仅提示操作不自动执行命令。\n- 文档结构梳理更清晰：数据写入声明、前置检查、注册表构建步骤和安全规则单独列出。\n- 在技能元数据中新增环境变量要求（YOUDAONOTE_API_KEY）。\n\nv1.0.1 | 2026-04-21T10:06:41.194Z | user\n\n首次公开发布：LLM Wiki skill\n\nv1.0.0 | 2026-04-13T01:34:15.455Z | auto\n\nInitial release of Youdaonote LLM Wiki — persistent, interlinked Markdown wiki for Youdao Note, using the Karpathy LLM Wiki mode.\n\n- Enables seamless knowledge ingestion, querying, and consistency check within Youdao Note.\n- Auto-creates standard folder structure (Raw, Entities, Concepts, Comparisons, Queries) based on Wiki mode.\n- Implements YAML frontmatter and cross-reference conventions for every wiki page.\n- Provides detailed initialization and core workflow for ingest (素材摄入), query (知识查询), and lint (一致性检查).\n- All content persists in Youdao Note cloud for multi-device access and easy sharing.\n\nArchive index:\n\nArchive v1.0.5: 3 files, 12892 bytes\n\nFiles: skill-card.md (2290b), SKILL.md (29718b), _meta.json (138b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.5\nminCliVersion: \"1.3.3\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n      env:\n        - YOUDAONOTE_API_KEY\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 数据写入声明（Persistence Disclosure）\n\n本 skill 是一个**写操作密集型 Agent**：在您的授权下，会对您的有道云笔记账户做以下持久化修改，请在开始使用前知悉：\n\n| 动作类别 | 触发时机 | 写入内容 |\n|---------|---------|---------|\n| 创建文件夹 | 初始化 Wiki 时 | 1 个根文件夹 + 5 个子文件夹（`raw/`、`entities/`、`concepts/`、`comparisons/`、`queries/`） |\n| 系统笔记 | 初始化 Wiki 时 | 根文件夹下创建 `schema.md`、`index.md`、`log.md` 三个笔记 |\n| 全局注册表 | 首次创建 Wiki 或注册表缺失时（**需用户确认**） | 根目录下的 `youdaonote-wiki-registry.md` 笔记（记录所有 Wiki 元信息） |\n| 内容笔记 | 用户主动执行 Ingest / Archive 时 | 在对应子文件夹中创建或更新 Wiki 页面（一次 Ingest 可能更新 5-10 个页面） |\n| 日志与索引 | 每次写入操作后 | 更新 `index.md`、追加 `log.md` |\n\n**安全边界**：\n\n- 本 skill 只读写您通过 `youdaonote config set apiKey` 配置的有道云笔记账号内的数据，不涉及账号权限之外的任何操作。\n- 不会修改 `type: raw` 的原始素材（素材 immutable）。\n- 所有写入操作都在有道云笔记客户端 / Web 端可见、可编辑、可删除。\n- 大批量写入（单次操作将影响 10+ 已有页面）前，Agent **必须与用户确认**后再执行。\n\n## 前置检查（安装由用户手动执行）\n\n执行任何操作前，Agent 必须先运行 `youdaonote list` 检测 CLI 是否可用：\n\n- **`command not found`** → 跳转「CLI 未安装处理」小节，仅向用户提供官方安装命令并提示用户手动执行；等待用户回复\"已安装\"后再继续原请求\n- **API Key 错误**（未配置 / 鉴权失败）→ 提示用户访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号），然后执行 `youdaonote config set apiKey <用户提供的Key>`。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n- **版本过低**（低于 `1.3.3`）→ CLI 支持 `upgrade` 命令时提示用户执行 `youdaonote upgrade`，否则跳转「CLI 未安装处理」小节的升级指引，由用户手动执行升级；Windows 用户或升级失败时参考安装指南（https://note.youdao.com/help-center/cli-install-guide.html）\n- **正常返回目录列表** → 继续执行用户请求\n\n**使用统计**：CLI 安装确认后，后续所有 Wiki 操作命令**必须**加 `-s wiki` 全局参数（置于 `youdaonote` 之后、子命令之前），用于统计 Wiki Skill 的使用情况。示例：`youdaonote -s wiki list`、`youdaonote -s wiki search \"关键词\"`。仅安装检查（`youdaonote list`）、版本检查（`youdaonote version`）、升级（`youdaonote upgrade`）、API Key 配置（`youdaonote config set apiKey`）等诊断/设置命令无需添加。\n\n### Wiki 文件夹结构（由 Agent 在用户同意初始化后创建）\n\n初始化 Wiki 时（用户确认创建后），Agent 会执行 `youdaonote -s wiki mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果\n```\n\n## 会话启动协议（每次对话必执行）\n\n每次新会话开始时，Agent **必须按下列步骤推进**，并在每一步向用户说明当前动作，再响应用户请求。**不得静默执行**。\n\n### 第一步：定位全局注册表（只读扫描）\n\nAgent 先向用户说明：\"正在扫描有道云笔记根目录，定位 Wiki 全局注册表。\"，然后执行：\n\n```bash\nyoudaonote -s wiki list   # 扫描根目录（只读）\n```\n\n在结果中查找标题为 `youdaonote-wiki-registry.md` 的笔记：\n- **找到** → `youdaonote -s wiki read <registryFileId>` 读取注册表，解析所有知识库\n- **未找到** → 进入第二步，**在征得用户同意后**再重建\n\n### 第二步：重建注册表（仅在注册表缺失时执行，需用户确认）\n\n注册表缺失时，Agent **不得直接执行搜索或写入**，必须先向用户申请授权：\n\n> 未找到 `youdaonote-wiki-registry.md`。我可以通过搜索您账号内已有 Wiki 的 `schema.md` 文件自动重建一份注册表（**只读搜索 + 在根目录创建 1 份注册表笔记**，不会修改任何现有内容）。是否允许？\n\n用户**明确同意**（回复「是/好/允许/继续」等）后，才执行：\n\n```bash\nyoudaonote -s wiki search \"schema.md\"\n```\n\n逐一读取所有搜索结果，过滤包含 `## Wiki 元信息` 块的笔记，从中提取：\n- `name`（知识库名称）\n- `description`（主题描述）\n- 文件夹 ID 注册表中的 `ROOT`\n- schema.md 笔记自身的 fileId（来自 `youdaonote -s wiki list` 结果）\n\n提取完毕后，重建注册表笔记并保存到根目录：\n\n```bash\n# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote -s wiki save --json\n```\n\n重建完成后，Agent 向用户**简要汇报**本次重建的结果（例：\"已重建注册表，共发现 N 个 Wiki 并录入：A-wiki、B-wiki、...\"），然后继续执行用户原始请求。若用户**拒绝重建**，则直接按\"无可用注册表\"处理，后续按第三步的\"注册表为空\"分支提示用户先创建知识库。\n\n### 第三步：选择目标知识库（A+B 策略）\n\n从注册表中选定本次操作的知识库：\n\n| 情况 | 策略 | 行为 |\n|------|------|------|\n| 用户消息含明确知识库名 | B（自动） | 直接从注册表匹配，无需询问 |\n| 上下文有线索（如「继续整理 AI 的内容」） | B（自动） | 选最相关的，先说一句「我理解你要操作的是「AI研究」知识库，继续了」 |\n| 无法判断 | A（询问） | 列出注册表中所有知识库，让用户选 |\n| 注册表为空 | — | 提示用户先创建知识库 |\n\n### 注册表维护规则\n\n- **创建新知识库后**：自动追加一行到注册表\n- **每次操作知识库后**：更新「最近访问」列为当天日期\n- **注册表保护说明**：注册表为缓存，即使被删除也可按\"会话启动协议·第二步\"流程（**需用户确认**）从各知识库的 schema.md 重建；schema.md 是真相源，请勿删除\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `<知识库名>/`（根） | 系统笔记：schema.md、index.md、log.md | Wiki 管理中枢 |\n| `raw/` | 原始素材（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个知识库有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `schema.md` | 结构约定、领域定义、fileId 注册表 |\n| `index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `log.md` | 操作日志（只追加） |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | 标题示例 |\n|--------|----------|\n| `raw/` | `karpathy-llm-wiki-2026.md` |\n| `entities/` | `andrej-karpathy.md` |\n| `concepts/` | `transformer-architecture.md` |\n| `comparisons/` | `gpt4o-vs-claude-sonnet.md` |\n| `queries/` | `2026-agent-framework-comparison.md` |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ self-attention`）\n- Agent 通过 index.md 或 `youdaonote -s wiki search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建知识库时：\n\n① **询问并确认知识库名称**：\n\n向用户提出命名建议（推荐小写 `xxx-wiki` 格式，如 `ai-wiki`、`invest-wiki`，更易识别为 LLM 知识库），然后等待用户确认后再创建：\n\n> 建议将知识库命名为 `[推荐名称]-wiki`（小写、连字符分隔）。\n> 你也可以自定义名称，无硬性要求。\n> 确认名称后我将开始创建。\n\n**收到用户确认的名称后**，再执行后续步骤。知识库统一创建在有道云笔记根目录下。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建知识库根文件夹\nyoudaonote -s wiki mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote -s wiki list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote -s wiki mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote -s wiki list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote -s wiki list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| 根文件夹 | `ROOT_ID` | 存放系统笔记 |\n| raw | `RAW_ID` | 存放原始素材 |\n| entities | `ENTITY_ID` | 存放实体页 |\n| concepts | `CONCEPT_ID` | 存放概念页 |\n| comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 schema.md**（存放在根文件夹，向用户询问知识库主题后定制）：\n```bash\n# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑤ **创建 index.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 index 内容写入 /tmp/wiki-index.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-index.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑥ **创建 log.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 log 内容写入 /tmp/wiki-log.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-log.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote -s wiki list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 schema.md 的「笔记 fileId 注册表」中。\n\n⑧ **写入全局注册表**：\n\n读取根目录，找到 `youdaonote-wiki-registry.md` 笔记：\n- **存在** → `youdaonote -s wiki read <registryFileId>`，在表格末尾追加新行：\n  ```\n  | <WIKI_NAME> | <WIKI_DESCRIPTION> | <ROOT_ID> | <SCHEMA_FID> | <TODAY> | <TODAY> |\n  ```\n  然后：**Step 1** 用 Write 工具将完整更新后的注册表内容写入 `/tmp/registry.md`；**Step 2** 执行 `youdaonote -s wiki update <registryFileId> --file /tmp/registry.md`\n- **不存在** → 创建注册表（执行会话启动协议·第二步的创建命令，包含本次知识库信息）\n\n⑨ **向用户确认** 知识库已就绪，注册表已更新。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**\n\n- **URL** → 自动化摄入流程：\n\n  ```bash\n  # 抓取网页内容并保存到 raw/（.md 格式，便于 Agent 读写）\n  # 使用 Agent 内置工具（web_fetch / browser_navigate 等）抓取网页文本，写入临时文件\n  # Step 1：Write 工具将文章内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"article-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote -s wiki save --json\n  ```\n\n  > **降级路径**：若 fetch 失败（SPA、登录墙等），请手动复制页面内容，改走「纯文本 / 粘贴内容」路径存入 `raw/`。\n\n  保存完成后，Agent **自动执行以下分析**（无需用户逐步指导）：\n\n  **自动分析流程**：\n  ```\n  读取 raw/ 中的 .md 笔记内容（`youdaonote -s wiki read <fileId>`）\n    ↓\n  识别关键实体（人物/组织/产品/工具）\n    → 对每个实体：youdaonote -s wiki search \"<实体名>\" 检查是否已有\n    → 已有 → 读取已有页面，追加新信息并更新\n    → 未有 → 创建新 entity 页面，存入 entities/\n  识别关键概念（技术/方法论/主题）\n    → 对每个概念：youdaonote -s wiki search \"<概念名>\" 检查是否已有\n    → 已有 → 更新；未有 → 创建新 concept 页面，存入 concepts/\n  建立交叉引用（在新旧页面间添加 → 标记）\n    ↓\n  更新 index.md + log.md\n    ↓\n  汇报：「已摄入，新建 X 页，更新 Y 页，以下内容你可能想深入讨论：[最多3个要点]」\n  ```\n\n  **防重复规则**：每个页面创建/更新前，必须先 `youdaonote -s wiki search <页面名称>` 确认是否已存在，避免创建重复页面。\n\n- **纯文本 / 粘贴内容** → 存入 `raw/`：\n  ```bash\n  # Step 1：Write 工具将原始内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"source-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote -s wiki save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个摘要页（→ `raw/`）\n- 为关键人物/组织/工具创建或更新 entity 页（→ `entities/`）\n- 为关键概念/想法创建或更新 concept 页（→ `concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题`）\n\n创建新 Wiki 页面（以 concept 为例，其他类型换对应的 parentId）：\n```bash\n# Step 1：Write 工具将页面内容写入 /tmp/wiki-page.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"page-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"contentFile\": \"/tmp/wiki-page.md\"\n}' | youdaonote -s wiki save --json\n```\n\n**笔记分类与 parentId 对应关系**：\n\n| 笔记分类 | parentId | 说明 |\n|----------|----------|------|\n| `raw` | `<RAW_ID>` | 网页剪藏或手动保存 |\n| `entity` | `<ENTITY_ID>` | |\n| `concept` | `<CONCEPT_ID>` | |\n| `comparison` | `<COMPARISON_ID>` | |\n| `query` | `<QUERY_ID>` | |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote -s wiki update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 index.md 中添加新页面条目（`youdaonote -s wiki update <indexFileId> ...`）\n- 在 log.md 中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 index.md**定位相关页面：\n```bash\nyoudaonote -s wiki read <indexFileId>\n```\n\n**② 读取所有相关页面**（通常 3-8 个）：\n```bash\nyoudaonote -s wiki read <fileId1>\nyoudaonote -s wiki read <fileId2>\n# ...\n```\n\n**大规模 Wiki（50+ 页面）** 时，先用 search 缩小范围：\n```bash\nyoudaonote -s wiki search \"关键词\"\n# 搜索仅返回前 15 条；更多结果：youdaonote -s wiki call searchNotes keyword=xxx startIndex=15\n```\n\n**③ 跨页面综合分析，生成带来源引用的答案**：\n\n- 每个关键论点标注来源页面：`（→ 页面标题）`\n- 检测矛盾：若两个页面在同一点有不同说法，明确标出：`⚠️ 「页面A」与「页面B」在此点有分歧`\n\n示例输出格式：\n```\nTransformer 的核心是 Self-Attention 机制（→ self-attention），\n由 Vaswani 等人在 2017 年提出（→ andrej-karpathy）。\n与 RNN 相比，Transformer 可以并行计算（→ gpt4o-vs-rnn）。\n```\n\n**④ 判断是否归档**：\n\n- 答案是一次深度对比分析或重要发现 → 询问用户：「这个分析值得保存，是否存入 queries/？」\n- 简单事实查询 → 不归档\n\n**⑤ 更新 log.md**（记录本次查询）。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计知识库时：\n\n**① 从注册表自动定位知识库**（无需用户提供任何 fileId）：\n\n执行会话启动协议，通过 A+B 策略确定目标知识库，从 schema.md 获取所有 fileId：ROOT_ID、RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID。\n\n**② 列出各文件夹的笔记**：\n```bash\nyoudaonote -s wiki list -f <ROOT_ID>          # 系统笔记\nyoudaonote -s wiki list -f <RAW_ID>           # 原始素材\nyoudaonote -s wiki list -f <ENTITY_ID>        # 实体\nyoudaonote -s wiki list -f <CONCEPT_ID>       # 概念\nyoudaonote -s wiki list -f <COMPARISON_ID>    # 对比\nyoudaonote -s wiki list -f <QUERY_ID>         # 查询\n```\n\n**③ 读取 index.md**，对比实际笔记列表。\n\n**④ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查页面内容中的 `→` 交叉引用，找出没有被任何其他页面引用的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 index.md 中\n\n**⑤ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑥ 追加到 log.md**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n### 4. Archive（归档对话内容）\n\n将当前 AI 对话中有价值的结论直接存入知识库，无需切换工具。\n\n**触发词**（任意一种均可触发）：\n- 「把刚才说的存进去」\n- 「这个结论存入知识库」\n- 「记下来」\n- 「归档这段对话」\n- 「存入知识库」\n\n**Agent 执行流程**：\n\n**① 确定目标知识库**：执行 A+B 策略（见会话启动协议）。\n\n**② 识别要存的内容**：最近相关对话轮次或用户明确指定的结论段落。\n\n**③ 判断内容类型**：\n\n| 内容特征 | 类型 | 目标文件夹 |\n|---------|------|-----------|\n| 概念解释、技术原理 | `concept` | `concepts/` |\n| 两个或多个事物的对比分析 | `comparison` | `comparisons/` |\n| 有价值的问答、深度分析结论 | `query` | `queries/` |\n| 无法判断 | — | 询问用户 |\n\n**④ 生成笔记并保存**：\n\n```bash\n# Step 1：Write 工具将整理后的内容写入 /tmp/wiki-archive.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"<笔记标题>.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<对应子文件夹ID>\",\n  \"contentFile\": \"/tmp/wiki-archive.md\"\n}' | youdaonote -s wiki save --json\n```\n\n**⑤ 更新 index.md + log.md**。\n\n**⑥ 回复确认**：「已存入 `concepts/<标题>.md`（fileId: WEBxxx）」\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 schema.md 底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- index.md: WEB1a2b3c4d5e6f\n- log.md: WEB7a8b9c0d1e2f\n- schema.md: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 index.md**：先读 index.md，通过目录定位\n2. **关键词搜索**：`youdaonote -s wiki search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote -s wiki list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 笔记内容写入标准模式\n\n所有含换行的 Markdown 内容，统一使用 **`contentFile` 两步模式**（Write 工具写纯 Markdown → `save` JSON 传路径）：\n\n```bash\n# Step 1：Write 工具将 Markdown 内容写入本地文件（纯 Markdown，无需任何 JSON 转义）\n# 写入 /tmp/wiki-xxx.md，内容就是普通的 Markdown\n\n# Step 2：save JSON 中只放路径，CLI 自行读取文件\nprintf '%s\\n' '{\n  \"title\": \"note-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<FOLDER_ID>\",\n  \"contentFile\": \"/tmp/wiki-xxx.md\"\n}' | youdaonote -s wiki save --json\n\n# 更新已有笔记：同样先 Write 工具写文件，再 --file 传递\nyoudaonote -s wiki update <fileId> --file /tmp/wiki-xxx.md\n```\n\n> ⚠️ **必须先完成 Step 1**：`/tmp/` 文件不会凭空存在，Agent 必须用 Write 工具显式创建。若 `/tmp/` 权限受限，可改用相对路径如 `./wiki-temp.md`，操作完成后删除。\n>\n> **为何用 `contentFile` 而非内联 `content`**：内联 `content` 需要将所有换行、引号、反斜杠进行 JSON 转义（`\\n`、`\\\"`、`\\\\`），极易出错。`contentFile` 只是路径字符串，无转义问题。\n\n### 会话间恢复\n\n新会话开始时，遵循文档开头的**会话启动协议**（强制执行）：\n\n1. `youdaonote -s wiki list` 扫描根目录，定位 `youdaonote-wiki-registry.md`\n2. 读取注册表，确定目标知识库（A+B 策略）\n3. 读取目标知识库的 schema.md，获取所有 fileId\n4. 可选：读取 index.md 了解当前知识库状态\n5. 可选：读取 log.md 了解最近操作\n\n> 注册表不存在时自动重建，无需用户干预。\n\n## 切换知识库\n\n**触发词**（任意一种均可触发）：\n- `wiki-switch`\n- 「切换知识库」\n- 「用哪个知识库」\n- 「换一个知识库」\n- 「选知识库」\n- \"switch wiki\"\n- \"use another wiki\"\n- \"which wiki\"\n- \"change wiki\"\n\n**Agent 执行流程**：\n\n**① 读取全局注册表**：\n\n```bash\nyoudaonote -s wiki list   # 扫描根目录，找到 youdaonote-wiki-registry.md\nyoudaonote -s wiki read <registryFileId>\n```\n\n**② 列出所有知识库**：\n\n从注册表中解析出所有已注册的知识库，展示给用户：\n\n> 当前已有以下知识库：\n> 1. `ai-wiki` — AI 研究（最近访问：2026-04-15）\n> 2. `invest-wiki` — 投资笔记（最近访问：2026-04-10）\n>\n> 请选择要操作的知识库（输入编号或名称）：\n\n**③ 切换到用户选择的知识库**：\n\n读取目标知识库的 `schema.md`，获取所有 fileId，后续操作均在该知识库上执行。\n\n**边界情况**：\n\n| 情况 | 行为 |\n|------|------|\n| 仅 1 个知识库 | 告知用户只有一个知识库且已处于活跃状态，无需切换 |\n| 注册表为空或不存在 | 告知无知识库，建议用 `wiki-init` 创建 |\n\n## CLI 未安装处理（用户手动执行安装）\n\n收到 `command not found` 或需要升级到 `minCliVersion` 以上时，Agent 仅提供官方安装命令，由用户在终端手动执行。Agent 不自动执行安装命令，不进行系统级变更。\n\n确认文案建议：\n\n```text\n检测到未安装 youdaonote-cli（或版本低于 1.3.3）。请在终端手动执行以下命令完成安装 / 升级；执行后回复\"已安装\"，我将继续处理当前任务。\n```\n\n安全边界（必须遵守）：\n\n- 仅允许使用官方安装源：`https://artifact.lx.netease.com/download/youdaonote-cli/install.sh`\n- 禁止执行任何非官方来源的远程脚本或替代安装命令\n- 安装仅用于补齐 `youdaonote` CLI 依赖；Agent 不执行与当前任务无关的系统操作\n- 安装与环境变量导出步骤均由用户手动执行，Agent 不写入 shell 启动文件（如 `~/.zshrc` / `~/.bashrc`）\n- 建议用户在执行前确认命令来源可信；如对管道执行有顾虑，可先下载脚本后本地查看再执行\n\n### 安全验证建议（推荐）\n\n如对直接管道执行有顾虑，可先下载脚本审查后再执行：\n\n```bash\n# 步骤 1：下载脚本到本地\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh -o install.sh\n# 步骤 2：审查脚本内容\ncat install.sh\n# 步骤 3：确认无误后执行\nbash install.sh -f -b ~/.local/bin\n```\n\n**macOS / Linux / WSL**：\n\n```bash\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin\nexport PATH=\"$HOME/.local/bin:$PATH\"\n# 执行完成后回复\"已安装\"，Agent 将继续原始请求\n```\n\n**Windows（CMD / PowerShell）**：由用户手动下载对应平台的压缩包，解压后将 `youdaonote.exe` 所在目录加入系统 PATH。Agent 仅提供下载地址与操作指引，不自动执行下载、解压或修改系统环境变量。下载地址：\n\n- x64（常见新 CPU）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-x64.tar.gz`\n- x64（旧 CPU，无 AVX2 等，运行默认包秒退 / 退出码约 `0xC000001D`）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-win-x64-bl.tar.gz`\n- ARM64：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-arm64.tar.gz`\n\n安装提示：先尝试默认 x64 包，若运行闪退或退出码为 `0xC000001D`，请换用 x64 baseline 包重试。\n\n### 凭据（API Key）配置\n\nCLI 安装完成后，若 `youdaonote list` 返回 API Key 错误：\n\n1. 访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号）。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n2. 在终端手动执行：`youdaonote config set apiKey <用户提供的 Key>`\n3. 凭据由 CLI 自行维护，Agent 不直接读写凭据文件；Agent 也不会将 API Key 回显到对话中。\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 index.md 和 log.md**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少用 `→` 引用一个其他页面\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **❌ 禁止在笔记内容中使用 shell 命令替换**——`$(cat /tmp/xxx.md)` 在单引号 heredoc（`cat <<'EOF'`）或 `printf '%s\\n' '...'` 中不会展开，会被字面量写入笔记。保存笔记内容必须使用两步模式：先用 Write 工具将内容写入文件，再通过 `--file` 参数传递。\n  ```bash\n  # ❌ 错误：单引号 'EOF' 禁用 shell 展开，$(cat ...) 成为字面量\n  cat <<'EOF' | youdaonote -s wiki save --json\n  {\"content\": \"$(cat /tmp/file.md)\"}\n  EOF\n\n  # ✅ 正确：Step 1 Write 工具写文件，Step 2 --file 传递\n  # （Step 1 已完成：Write 工具已将内容写入 /tmp/wiki-note.json）\n  youdaonote -s wiki save --file /tmp/wiki-note.json --json\n  ```\n- **笔记标题使用小写加连字符**——如 `transformer-architecture.md`，避免使用空格和特殊字符\n- **保持 schema.md 的 fileId 注册表更新**——这是跨会话恢复和注册表自动重建的基础\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1778461678713\n}\n\nFile v1.0.5:skill-card.md\n\n## Description:\n\nYoudaoNote LLM Wiki helps an agent create, maintain, query, lint, and archive a persistent LLM-style knowledge base in YoudaoNote.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[lephix](https://clawhub.ai/user/lephix)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to turn YoudaoNote into a structured wiki for research notes, source ingestion, cross-linked summaries, archived conversations, and consistency checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can read and write persistent YoudaoNote wiki content.\n\nMitigation: Use it only for accounts and workspaces where agent access to wiki content is acceptable, and review proposed changes before write operations.\n\nRisk: Archived notes may contain secrets, credentials, personal identifiers, or sensitive business content.\n\nMitigation: Ask the agent to show exactly what will be saved before archiving and remove sensitive content before writing notes.\n\nRisk: The release evidence flags an unverified remote installer command and recommends caution.\n\nMitigation: Prefer a verified YoudaoNote CLI installation path and review installer contents before running curl-to-bash commands.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/lephix/skills/youdaonote-llm-wiki)\n- [YoudaoNote homepage](https://note.youdao.com)\n- [YoudaoNote CLI install guide](https://note.youdao.com/help-center/cli-install-guide.html)\n- [LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown responses with YoudaoNote CLI commands and note content guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create or update cloud note folders and Markdown notes through the YoudaoNote CLI.]\n\n## Skill Version(s):\n\n1.0.5 (source: frontmatter and release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.4: 2 files, 11637 bytes\n\nFiles: SKILL.md (29718b), _meta.json (138b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.4\nminCliVersion: \"1.3.2\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n      env:\n        - YOUDAONOTE_API_KEY\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 数据写入声明（Persistence Disclosure）\n\n本 skill 是一个**写操作密集型 Agent**：在您的授权下，会对您的有道云笔记账户做以下持久化修改，请在开始使用前知悉：\n\n| 动作类别 | 触发时机 | 写入内容 |\n|---------|---------|---------|\n| 创建文件夹 | 初始化 Wiki 时 | 1 个根文件夹 + 5 个子文件夹（`raw/`、`entities/`、`concepts/`、`comparisons/`、`queries/`） |\n| 系统笔记 | 初始化 Wiki 时 | 根文件夹下创建 `schema.md`、`index.md`、`log.md` 三个笔记 |\n| 全局注册表 | 首次创建 Wiki 或注册表缺失时（**需用户确认**） | 根目录下的 `youdaonote-wiki-registry.md` 笔记（记录所有 Wiki 元信息） |\n| 内容笔记 | 用户主动执行 Ingest / Archive 时 | 在对应子文件夹中创建或更新 Wiki 页面（一次 Ingest 可能更新 5-10 个页面） |\n| 日志与索引 | 每次写入操作后 | 更新 `index.md`、追加 `log.md` |\n\n**安全边界**：\n\n- 本 skill 只读写您通过 `youdaonote config set apiKey` 配置的有道云笔记账号内的数据，不涉及账号权限之外的任何操作。\n- 不会修改 `type: raw` 的原始素材（素材 immutable）。\n- 所有写入操作都在有道云笔记客户端 / Web 端可见、可编辑、可删除。\n- 大批量写入（单次操作将影响 10+ 已有页面）前，Agent **必须与用户确认**后再执行。\n\n## 前置检查（安装由用户手动执行）\n\n执行任何操作前，Agent 必须先运行 `youdaonote list` 检测 CLI 是否可用：\n\n- **`command not found`** → 跳转「CLI 未安装处理」小节，仅向用户提供官方安装命令并提示用户手动执行；等待用户回复\"已安装\"后再继续原请求\n- **API Key 错误**（未配置 / 鉴权失败）→ 提示用户访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号），然后执行 `youdaonote config set apiKey <用户提供的Key>`。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n- **版本过低**（低于 `1.3.2`）→ CLI 支持 `upgrade` 命令时提示用户执行 `youdaonote upgrade`，否则跳转「CLI 未安装处理」小节的升级指引，由用户手动执行升级；Windows 用户或升级失败时参考安装指南（https://note.youdao.com/help-center/cli-install-guide.html）\n- **正常返回目录列表** → 继续执行用户请求\n\n**使用统计**：CLI 安装确认后，后续所有 Wiki 操作命令**必须**加 `-s wiki` 全局参数（置于 `youdaonote` 之后、子命令之前），用于统计 Wiki Skill 的使用情况。示例：`youdaonote -s wiki list`、`youdaonote -s wiki search \"关键词\"`。仅安装检查（`youdaonote list`）、版本检查（`youdaonote version`）、升级（`youdaonote upgrade`）、API Key 配置（`youdaonote config set apiKey`）等诊断/设置命令无需添加。\n\n### Wiki 文件夹结构（由 Agent 在用户同意初始化后创建）\n\n初始化 Wiki 时（用户确认创建后），Agent 会执行 `youdaonote -s wiki mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果\n```\n\n## 会话启动协议（每次对话必执行）\n\n每次新会话开始时，Agent **必须按下列步骤推进**，并在每一步向用户说明当前动作，再响应用户请求。**不得静默执行**。\n\n### 第一步：定位全局注册表（只读扫描）\n\nAgent 先向用户说明：\"正在扫描有道云笔记根目录，定位 Wiki 全局注册表。\"，然后执行：\n\n```bash\nyoudaonote -s wiki list   # 扫描根目录（只读）\n```\n\n在结果中查找标题为 `youdaonote-wiki-registry.md` 的笔记：\n- **找到** → `youdaonote -s wiki read <registryFileId>` 读取注册表，解析所有知识库\n- **未找到** → 进入第二步，**在征得用户同意后**再重建\n\n### 第二步：重建注册表（仅在注册表缺失时执行，需用户确认）\n\n注册表缺失时，Agent **不得直接执行搜索或写入**，必须先向用户申请授权：\n\n> 未找到 `youdaonote-wiki-registry.md`。我可以通过搜索您账号内已有 Wiki 的 `schema.md` 文件自动重建一份注册表（**只读搜索 + 在根目录创建 1 份注册表笔记**，不会修改任何现有内容）。是否允许？\n\n用户**明确同意**（回复「是/好/允许/继续」等）后，才执行：\n\n```bash\nyoudaonote -s wiki search \"schema.md\"\n```\n\n逐一读取所有搜索结果，过滤包含 `## Wiki 元信息` 块的笔记，从中提取：\n- `name`（知识库名称）\n- `description`（主题描述）\n- 文件夹 ID 注册表中的 `ROOT`\n- schema.md 笔记自身的 fileId（来自 `youdaonote -s wiki list` 结果）\n\n提取完毕后，重建注册表笔记并保存到根目录：\n\n```bash\n# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote -s wiki save --json\n```\n\n重建完成后，Agent 向用户**简要汇报**本次重建的结果（例：\"已重建注册表，共发现 N 个 Wiki 并录入：A-wiki、B-wiki、...\"），然后继续执行用户原始请求。若用户**拒绝重建**，则直接按\"无可用注册表\"处理，后续按第三步的\"注册表为空\"分支提示用户先创建知识库。\n\n### 第三步：选择目标知识库（A+B 策略）\n\n从注册表中选定本次操作的知识库：\n\n| 情况 | 策略 | 行为 |\n|------|------|------|\n| 用户消息含明确知识库名 | B（自动） | 直接从注册表匹配，无需询问 |\n| 上下文有线索（如「继续整理 AI 的内容」） | B（自动） | 选最相关的，先说一句「我理解你要操作的是「AI研究」知识库，继续了」 |\n| 无法判断 | A（询问） | 列出注册表中所有知识库，让用户选 |\n| 注册表为空 | — | 提示用户先创建知识库 |\n\n### 注册表维护规则\n\n- **创建新知识库后**：自动追加一行到注册表\n- **每次操作知识库后**：更新「最近访问」列为当天日期\n- **注册表保护说明**：注册表为缓存，即使被删除也可按\"会话启动协议·第二步\"流程（**需用户确认**）从各知识库的 schema.md 重建；schema.md 是真相源，请勿删除\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `<知识库名>/`（根） | 系统笔记：schema.md、index.md、log.md | Wiki 管理中枢 |\n| `raw/` | 原始素材（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个知识库有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `schema.md` | 结构约定、领域定义、fileId 注册表 |\n| `index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `log.md` | 操作日志（只追加） |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | 标题示例 |\n|--------|----------|\n| `raw/` | `karpathy-llm-wiki-2026.md` |\n| `entities/` | `andrej-karpathy.md` |\n| `concepts/` | `transformer-architecture.md` |\n| `comparisons/` | `gpt4o-vs-claude-sonnet.md` |\n| `queries/` | `2026-agent-framework-comparison.md` |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ self-attention`）\n- Agent 通过 index.md 或 `youdaonote -s wiki search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建知识库时：\n\n① **询问并确认知识库名称**：\n\n向用户提出命名建议（推荐小写 `xxx-wiki` 格式，如 `ai-wiki`、`invest-wiki`，更易识别为 LLM 知识库），然后等待用户确认后再创建：\n\n> 建议将知识库命名为 `[推荐名称]-wiki`（小写、连字符分隔）。\n> 你也可以自定义名称，无硬性要求。\n> 确认名称后我将开始创建。\n\n**收到用户确认的名称后**，再执行后续步骤。知识库统一创建在有道云笔记根目录下。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建知识库根文件夹\nyoudaonote -s wiki mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote -s wiki list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote -s wiki mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote -s wiki list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote -s wiki list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| 根文件夹 | `ROOT_ID` | 存放系统笔记 |\n| raw | `RAW_ID` | 存放原始素材 |\n| entities | `ENTITY_ID` | 存放实体页 |\n| concepts | `CONCEPT_ID` | 存放概念页 |\n| comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 schema.md**（存放在根文件夹，向用户询问知识库主题后定制）：\n```bash\n# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑤ **创建 index.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 index 内容写入 /tmp/wiki-index.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-index.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑥ **创建 log.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 log 内容写入 /tmp/wiki-log.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-log.md\"\n}' | youdaonote -s wiki save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote -s wiki list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 schema.md 的「笔记 fileId 注册表」中。\n\n⑧ **写入全局注册表**：\n\n读取根目录，找到 `youdaonote-wiki-registry.md` 笔记：\n- **存在** → `youdaonote -s wiki read <registryFileId>`，在表格末尾追加新行：\n  ```\n  | <WIKI_NAME> | <WIKI_DESCRIPTION> | <ROOT_ID> | <SCHEMA_FID> | <TODAY> | <TODAY> |\n  ```\n  然后：**Step 1** 用 Write 工具将完整更新后的注册表内容写入 `/tmp/registry.md`；**Step 2** 执行 `youdaonote -s wiki update <registryFileId> --file /tmp/registry.md`\n- **不存在** → 创建注册表（执行会话启动协议·第二步的创建命令，包含本次知识库信息）\n\n⑨ **向用户确认** 知识库已就绪，注册表已更新。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**\n\n- **URL** → 自动化摄入流程：\n\n  ```bash\n  # 抓取网页内容并保存到 raw/（.md 格式，便于 Agent 读写）\n  # 使用 Agent 内置工具（web_fetch / browser_navigate 等）抓取网页文本，写入临时文件\n  # Step 1：Write 工具将文章内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"article-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote -s wiki save --json\n  ```\n\n  > **降级路径**：若 fetch 失败（SPA、登录墙等），请手动复制页面内容，改走「纯文本 / 粘贴内容」路径存入 `raw/`。\n\n  保存完成后，Agent **自动执行以下分析**（无需用户逐步指导）：\n\n  **自动分析流程**：\n  ```\n  读取 raw/ 中的 .md 笔记内容（`youdaonote -s wiki read <fileId>`）\n    ↓\n  识别关键实体（人物/组织/产品/工具）\n    → 对每个实体：youdaonote -s wiki search \"<实体名>\" 检查是否已有\n    → 已有 → 读取已有页面，追加新信息并更新\n    → 未有 → 创建新 entity 页面，存入 entities/\n  识别关键概念（技术/方法论/主题）\n    → 对每个概念：youdaonote -s wiki search \"<概念名>\" 检查是否已有\n    → 已有 → 更新；未有 → 创建新 concept 页面，存入 concepts/\n  建立交叉引用（在新旧页面间添加 → 标记）\n    ↓\n  更新 index.md + log.md\n    ↓\n  汇报：「已摄入，新建 X 页，更新 Y 页，以下内容你可能想深入讨论：[最多3个要点]」\n  ```\n\n  **防重复规则**：每个页面创建/更新前，必须先 `youdaonote -s wiki search <页面名称>` 确认是否已存在，避免创建重复页面。\n\n- **纯文本 / 粘贴内容** → 存入 `raw/`：\n  ```bash\n  # Step 1：Write 工具将原始内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"source-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote -s wiki save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个摘要页（→ `raw/`）\n- 为关键人物/组织/工具创建或更新 entity 页（→ `entities/`）\n- 为关键概念/想法创建或更新 concept 页（→ `concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题`）\n\n创建新 Wiki 页面（以 concept 为例，其他类型换对应的 parentId）：\n```bash\n# Step 1：Write 工具将页面内容写入 /tmp/wiki-page.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"page-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"contentFile\": \"/tmp/wiki-page.md\"\n}' | youdaonote -s wiki save --json\n```\n\n**笔记分类与 parentId 对应关系**：\n\n| 笔记分类 | parentId | 说明 |\n|----------|----------|------|\n| `raw` | `<RAW_ID>` | 网页剪藏或手动保存 |\n| `entity` | `<ENTITY_ID>` | |\n| `concept` | `<CONCEPT_ID>` | |\n| `comparison` | `<COMPARISON_ID>` | |\n| `query` | `<QUERY_ID>` | |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote -s wiki update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 index.md 中添加新页面条目（`youdaonote -s wiki update <indexFileId> ...`）\n- 在 log.md 中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 index.md**定位相关页面：\n```bash\nyoudaonote -s wiki read <indexFileId>\n```\n\n**② 读取所有相关页面**（通常 3-8 个）：\n```bash\nyoudaonote -s wiki read <fileId1>\nyoudaonote -s wiki read <fileId2>\n# ...\n```\n\n**大规模 Wiki（50+ 页面）** 时，先用 search 缩小范围：\n```bash\nyoudaonote -s wiki search \"关键词\"\n# 搜索仅返回前 15 条；更多结果：youdaonote -s wiki call searchNotes keyword=xxx startIndex=15\n```\n\n**③ 跨页面综合分析，生成带来源引用的答案**：\n\n- 每个关键论点标注来源页面：`（→ 页面标题）`\n- 检测矛盾：若两个页面在同一点有不同说法，明确标出：`⚠️ 「页面A」与「页面B」在此点有分歧`\n\n示例输出格式：\n```\nTransformer 的核心是 Self-Attention 机制（→ self-attention），\n由 Vaswani 等人在 2017 年提出（→ andrej-karpathy）。\n与 RNN 相比，Transformer 可以并行计算（→ gpt4o-vs-rnn）。\n```\n\n**④ 判断是否归档**：\n\n- 答案是一次深度对比分析或重要发现 → 询问用户：「这个分析值得保存，是否存入 queries/？」\n- 简单事实查询 → 不归档\n\n**⑤ 更新 log.md**（记录本次查询）。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计知识库时：\n\n**① 从注册表自动定位知识库**（无需用户提供任何 fileId）：\n\n执行会话启动协议，通过 A+B 策略确定目标知识库，从 schema.md 获取所有 fileId：ROOT_ID、RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID。\n\n**② 列出各文件夹的笔记**：\n```bash\nyoudaonote -s wiki list -f <ROOT_ID>          # 系统笔记\nyoudaonote -s wiki list -f <RAW_ID>           # 原始素材\nyoudaonote -s wiki list -f <ENTITY_ID>        # 实体\nyoudaonote -s wiki list -f <CONCEPT_ID>       # 概念\nyoudaonote -s wiki list -f <COMPARISON_ID>    # 对比\nyoudaonote -s wiki list -f <QUERY_ID>         # 查询\n```\n\n**③ 读取 index.md**，对比实际笔记列表。\n\n**④ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查页面内容中的 `→` 交叉引用，找出没有被任何其他页面引用的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 index.md 中\n\n**⑤ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑥ 追加到 log.md**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n### 4. Archive（归档对话内容）\n\n将当前 AI 对话中有价值的结论直接存入知识库，无需切换工具。\n\n**触发词**（任意一种均可触发）：\n- 「把刚才说的存进去」\n- 「这个结论存入知识库」\n- 「记下来」\n- 「归档这段对话」\n- 「存入知识库」\n\n**Agent 执行流程**：\n\n**① 确定目标知识库**：执行 A+B 策略（见会话启动协议）。\n\n**② 识别要存的内容**：最近相关对话轮次或用户明确指定的结论段落。\n\n**③ 判断内容类型**：\n\n| 内容特征 | 类型 | 目标文件夹 |\n|---------|------|-----------|\n| 概念解释、技术原理 | `concept` | `concepts/` |\n| 两个或多个事物的对比分析 | `comparison` | `comparisons/` |\n| 有价值的问答、深度分析结论 | `query` | `queries/` |\n| 无法判断 | — | 询问用户 |\n\n**④ 生成笔记并保存**：\n\n```bash\n# Step 1：Write 工具将整理后的内容写入 /tmp/wiki-archive.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"<笔记标题>.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<对应子文件夹ID>\",\n  \"contentFile\": \"/tmp/wiki-archive.md\"\n}' | youdaonote -s wiki save --json\n```\n\n**⑤ 更新 index.md + log.md**。\n\n**⑥ 回复确认**：「已存入 `concepts/<标题>.md`（fileId: WEBxxx）」\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 schema.md 底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- index.md: WEB1a2b3c4d5e6f\n- log.md: WEB7a8b9c0d1e2f\n- schema.md: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 index.md**：先读 index.md，通过目录定位\n2. **关键词搜索**：`youdaonote -s wiki search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote -s wiki list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 笔记内容写入标准模式\n\n所有含换行的 Markdown 内容，统一使用 **`contentFile` 两步模式**（Write 工具写纯 Markdown → `save` JSON 传路径）：\n\n```bash\n# Step 1：Write 工具将 Markdown 内容写入本地文件（纯 Markdown，无需任何 JSON 转义）\n# 写入 /tmp/wiki-xxx.md，内容就是普通的 Markdown\n\n# Step 2：save JSON 中只放路径，CLI 自行读取文件\nprintf '%s\\n' '{\n  \"title\": \"note-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<FOLDER_ID>\",\n  \"contentFile\": \"/tmp/wiki-xxx.md\"\n}' | youdaonote -s wiki save --json\n\n# 更新已有笔记：同样先 Write 工具写文件，再 --file 传递\nyoudaonote -s wiki update <fileId> --file /tmp/wiki-xxx.md\n```\n\n> ⚠️ **必须先完成 Step 1**：`/tmp/` 文件不会凭空存在，Agent 必须用 Write 工具显式创建。若 `/tmp/` 权限受限，可改用相对路径如 `./wiki-temp.md`，操作完成后删除。\n>\n> **为何用 `contentFile` 而非内联 `content`**：内联 `content` 需要将所有换行、引号、反斜杠进行 JSON 转义（`\\n`、`\\\"`、`\\\\`），极易出错。`contentFile` 只是路径字符串，无转义问题。\n\n### 会话间恢复\n\n新会话开始时，遵循文档开头的**会话启动协议**（强制执行）：\n\n1. `youdaonote -s wiki list` 扫描根目录，定位 `youdaonote-wiki-registry.md`\n2. 读取注册表，确定目标知识库（A+B 策略）\n3. 读取目标知识库的 schema.md，获取所有 fileId\n4. 可选：读取 index.md 了解当前知识库状态\n5. 可选：读取 log.md 了解最近操作\n\n> 注册表不存在时自动重建，无需用户干预。\n\n## 切换知识库\n\n**触发词**（任意一种均可触发）：\n- `wiki-switch`\n- 「切换知识库」\n- 「用哪个知识库」\n- 「换一个知识库」\n- 「选知识库」\n- \"switch wiki\"\n- \"use another wiki\"\n- \"which wiki\"\n- \"change wiki\"\n\n**Agent 执行流程**：\n\n**① 读取全局注册表**：\n\n```bash\nyoudaonote -s wiki list   # 扫描根目录，找到 youdaonote-wiki-registry.md\nyoudaonote -s wiki read <registryFileId>\n```\n\n**② 列出所有知识库**：\n\n从注册表中解析出所有已注册的知识库，展示给用户：\n\n> 当前已有以下知识库：\n> 1. `ai-wiki` — AI 研究（最近访问：2026-04-15）\n> 2. `invest-wiki` — 投资笔记（最近访问：2026-04-10）\n>\n> 请选择要操作的知识库（输入编号或名称）：\n\n**③ 切换到用户选择的知识库**：\n\n读取目标知识库的 `schema.md`，获取所有 fileId，后续操作均在该知识库上执行。\n\n**边界情况**：\n\n| 情况 | 行为 |\n|------|------|\n| 仅 1 个知识库 | 告知用户只有一个知识库且已处于活跃状态，无需切换 |\n| 注册表为空或不存在 | 告知无知识库，建议用 `wiki-init` 创建 |\n\n## CLI 未安装处理（用户手动执行安装）\n\n收到 `command not found` 或需要升级到 `minCliVersion` 以上时，Agent 仅提供官方安装命令，由用户在终端手动执行。Agent 不自动执行安装命令，不进行系统级变更。\n\n确认文案建议：\n\n```text\n检测到未安装 youdaonote-cli（或版本低于 1.3.2）。请在终端手动执行以下命令完成安装 / 升级；执行后回复\"已安装\"，我将继续处理当前任务。\n```\n\n安全边界（必须遵守）：\n\n- 仅允许使用官方安装源：`https://artifact.lx.netease.com/download/youdaonote-cli/install.sh`\n- 禁止执行任何非官方来源的远程脚本或替代安装命令\n- 安装仅用于补齐 `youdaonote` CLI 依赖；Agent 不执行与当前任务无关的系统操作\n- 安装与环境变量导出步骤均由用户手动执行，Agent 不写入 shell 启动文件（如 `~/.zshrc` / `~/.bashrc`）\n- 建议用户在执行前确认命令来源可信；如对管道执行有顾虑，可先下载脚本后本地查看再执行\n\n### 安全验证建议（推荐）\n\n如对直接管道执行有顾虑，可先下载脚本审查后再执行：\n\n```bash\n# 步骤 1：下载脚本到本地\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh -o install.sh\n# 步骤 2：审查脚本内容\ncat install.sh\n# 步骤 3：确认无误后执行\nbash install.sh -f -b ~/.local/bin\n```\n\n**macOS / Linux / WSL**：\n\n```bash\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin\nexport PATH=\"$HOME/.local/bin:$PATH\"\n# 执行完成后回复\"已安装\"，Agent 将继续原始请求\n```\n\n**Windows（CMD / PowerShell）**：由用户手动下载对应平台的压缩包，解压后将 `youdaonote.exe` 所在目录加入系统 PATH。Agent 仅提供下载地址与操作指引，不自动执行下载、解压或修改系统环境变量。下载地址：\n\n- x64（常见新 CPU）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-x64.tar.gz`\n- x64（旧 CPU，无 AVX2 等，运行默认包秒退 / 退出码约 `0xC000001D`）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-win-x64-bl.tar.gz`\n- ARM64：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-arm64.tar.gz`\n\n安装提示：先尝试默认 x64 包，若运行闪退或退出码为 `0xC000001D`，请换用 x64 baseline 包重试。\n\n### 凭据（API Key）配置\n\nCLI 安装完成后，若 `youdaonote list` 返回 API Key 错误：\n\n1. 访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号）。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n2. 在终端手动执行：`youdaonote config set apiKey <用户提供的 Key>`\n3. 凭据由 CLI 自行维护，Agent 不直接读写凭据文件；Agent 也不会将 API Key 回显到对话中。\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 index.md 和 log.md**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少用 `→` 引用一个其他页面\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **❌ 禁止在笔记内容中使用 shell 命令替换**——`$(cat /tmp/xxx.md)` 在单引号 heredoc（`cat <<'EOF'`）或 `printf '%s\\n' '...'` 中不会展开，会被字面量写入笔记。保存笔记内容必须使用两步模式：先用 Write 工具将内容写入文件，再通过 `--file` 参数传递。\n  ```bash\n  # ❌ 错误：单引号 'EOF' 禁用 shell 展开，$(cat ...) 成为字面量\n  cat <<'EOF' | youdaonote -s wiki save --json\n  {\"content\": \"$(cat /tmp/file.md)\"}\n  EOF\n\n  # ✅ 正确：Step 1 Write 工具写文件，Step 2 --file 传递\n  # （Step 1 已完成：Write 工具已将内容写入 /tmp/wiki-note.json）\n  youdaonote -s wiki save --file /tmp/wiki-note.json --json\n  ```\n- **笔记标题使用小写加连字符**——如 `transformer-architecture.md`，避免使用空格和特殊字符\n- **保持 schema.md 的 fileId 注册表更新**——这是跨会话恢复和注册表自动重建的基础\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1777941039807\n}\n\nArchive v1.0.3: 2 files, 11436 bytes\n\nFiles: SKILL.md (28815b), _meta.json (138b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.3\nminCliVersion: \"1.2.3\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n      env:\n        - YOUDAONOTE_API_KEY\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 数据写入声明（Persistence Disclosure）\n\n本 skill 是一个**写操作密集型 Agent**：在您的授权下，会对您的有道云笔记账户做以下持久化修改，请在开始使用前知悉：\n\n| 动作类别 | 触发时机 | 写入内容 |\n|---------|---------|---------|\n| 创建文件夹 | 初始化 Wiki 时 | 1 个根文件夹 + 5 个子文件夹（`raw/`、`entities/`、`concepts/`、`comparisons/`、`queries/`） |\n| 系统笔记 | 初始化 Wiki 时 | 根文件夹下创建 `schema.md`、`index.md`、`log.md` 三个笔记 |\n| 全局注册表 | 首次创建 Wiki 或注册表缺失时（**需用户确认**） | 根目录下的 `youdaonote-wiki-registry.md` 笔记（记录所有 Wiki 元信息） |\n| 内容笔记 | 用户主动执行 Ingest / Archive 时 | 在对应子文件夹中创建或更新 Wiki 页面（一次 Ingest 可能更新 5-10 个页面） |\n| 日志与索引 | 每次写入操作后 | 更新 `index.md`、追加 `log.md` |\n\n**安全边界**：\n\n- 本 skill 只读写您通过 `youdaonote config set apiKey` 配置的有道云笔记账号内的数据，不涉及账号权限之外的任何操作。\n- 不会修改 `type: raw` 的原始素材（素材 immutable）。\n- 所有写入操作都在有道云笔记客户端 / Web 端可见、可编辑、可删除。\n- 大批量写入（单次操作将影响 10+ 已有页面）前，Agent **必须与用户确认**后再执行。\n\n## 前置检查（安装由用户手动执行）\n\n执行任何操作前，Agent 必须先运行 `youdaonote list` 检测 CLI 是否可用：\n\n- **`command not found`** → 跳转「CLI 未安装处理」小节，仅向用户提供官方安装命令并提示用户手动执行；等待用户回复\"已安装\"后再继续原请求\n- **API Key 错误**（未配置 / 鉴权失败）→ 提示用户访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号），然后执行 `youdaonote config set apiKey <用户提供的Key>`。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n- **版本过低**（低于 `1.2.3`）→ CLI 支持 `upgrade` 命令时提示用户执行 `youdaonote upgrade`，否则跳转「CLI 未安装处理」小节的升级指引，由用户手动执行升级；Windows 用户或升级失败时参考安装指南（https://note.youdao.com/help-center/cli-install-guide.html）\n- **正常返回目录列表** → 继续执行用户请求\n\n### Wiki 文件夹结构（由 Agent 在用户同意初始化后创建）\n\n初始化 Wiki 时（用户确认创建后），Agent 会执行 `youdaonote mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果\n```\n\n## 会话启动协议（每次对话必执行）\n\n每次新会话开始时，Agent **必须按下列步骤推进**，并在每一步向用户说明当前动作，再响应用户请求。**不得静默执行**。\n\n### 第一步：定位全局注册表（只读扫描）\n\nAgent 先向用户说明：\"正在扫描有道云笔记根目录，定位 Wiki 全局注册表。\"，然后执行：\n\n```bash\nyoudaonote list   # 扫描根目录（只读）\n```\n\n在结果中查找标题为 `youdaonote-wiki-registry.md` 的笔记：\n- **找到** → `youdaonote read <registryFileId>` 读取注册表，解析所有知识库\n- **未找到** → 进入第二步，**在征得用户同意后**再重建\n\n### 第二步：重建注册表（仅在注册表缺失时执行，需用户确认）\n\n注册表缺失时，Agent **不得直接执行搜索或写入**，必须先向用户申请授权：\n\n> 未找到 `youdaonote-wiki-registry.md`。我可以通过搜索您账号内已有 Wiki 的 `schema.md` 文件自动重建一份注册表（**只读搜索 + 在根目录创建 1 份注册表笔记**，不会修改任何现有内容）。是否允许？\n\n用户**明确同意**（回复「是/好/允许/继续」等）后，才执行：\n\n```bash\nyoudaonote search \"schema.md\"\n```\n\n逐一读取所有搜索结果，过滤包含 `## Wiki 元信息` 块的笔记，从中提取：\n- `name`（知识库名称）\n- `description`（主题描述）\n- 文件夹 ID 注册表中的 `ROOT`\n- schema.md 笔记自身的 fileId（来自 `youdaonote list` 结果）\n\n提取完毕后，重建注册表笔记并保存到根目录：\n\n```bash\n# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote save --json\n```\n\n重建完成后，Agent 向用户**简要汇报**本次重建的结果（例：\"已重建注册表，共发现 N 个 Wiki 并录入：A-wiki、B-wiki、...\"），然后继续执行用户原始请求。若用户**拒绝重建**，则直接按\"无可用注册表\"处理，后续按第三步的\"注册表为空\"分支提示用户先创建知识库。\n\n### 第三步：选择目标知识库（A+B 策略）\n\n从注册表中选定本次操作的知识库：\n\n| 情况 | 策略 | 行为 |\n|------|------|------|\n| 用户消息含明确知识库名 | B（自动） | 直接从注册表匹配，无需询问 |\n| 上下文有线索（如「继续整理 AI 的内容」） | B（自动） | 选最相关的，先说一句「我理解你要操作的是「AI研究」知识库，继续了」 |\n| 无法判断 | A（询问） | 列出注册表中所有知识库，让用户选 |\n| 注册表为空 | — | 提示用户先创建知识库 |\n\n### 注册表维护规则\n\n- **创建新知识库后**：自动追加一行到注册表\n- **每次操作知识库后**：更新「最近访问」列为当天日期\n- **注册表保护说明**：注册表为缓存，即使被删除也可按\"会话启动协议·第二步\"流程（**需用户确认**）从各知识库的 schema.md 重建；schema.md 是真相源，请勿删除\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `<知识库名>/`（根） | 系统笔记：schema.md、index.md、log.md | Wiki 管理中枢 |\n| `raw/` | 原始素材（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个知识库有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `schema.md` | 结构约定、领域定义、fileId 注册表 |\n| `index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `log.md` | 操作日志（只追加） |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | 标题示例 |\n|--------|----------|\n| `raw/` | `karpathy-llm-wiki-2026.md` |\n| `entities/` | `andrej-karpathy.md` |\n| `concepts/` | `transformer-architecture.md` |\n| `comparisons/` | `gpt4o-vs-claude-sonnet.md` |\n| `queries/` | `2026-agent-framework-comparison.md` |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ self-attention`）\n- Agent 通过 index.md 或 `youdaonote search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建知识库时：\n\n① **询问并确认知识库名称**：\n\n向用户提出命名建议（推荐小写 `xxx-wiki` 格式，如 `ai-wiki`、`invest-wiki`，更易识别为 LLM 知识库），然后等待用户确认后再创建：\n\n> 建议将知识库命名为 `[推荐名称]-wiki`（小写、连字符分隔）。\n> 你也可以自定义名称，无硬性要求。\n> 确认名称后我将开始创建。\n\n**收到用户确认的名称后**，再执行后续步骤。知识库统一创建在有道云笔记根目录下。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建知识库根文件夹\nyoudaonote mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| 根文件夹 | `ROOT_ID` | 存放系统笔记 |\n| raw | `RAW_ID` | 存放原始素材 |\n| entities | `ENTITY_ID` | 存放实体页 |\n| concepts | `CONCEPT_ID` | 存放概念页 |\n| comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 schema.md**（存放在根文件夹，向用户询问知识库主题后定制）：\n```bash\n# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote save --json\n```\n\n⑤ **创建 index.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 index 内容写入 /tmp/wiki-index.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-index.md\"\n}' | youdaonote save --json\n```\n\n⑥ **创建 log.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 log 内容写入 /tmp/wiki-log.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-log.md\"\n}' | youdaonote save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 schema.md 的「笔记 fileId 注册表」中。\n\n⑧ **写入全局注册表**：\n\n读取根目录，找到 `youdaonote-wiki-registry.md` 笔记：\n- **存在** → `youdaonote read <registryFileId>`，在表格末尾追加新行：\n  ```\n  | <WIKI_NAME> | <WIKI_DESCRIPTION> | <ROOT_ID> | <SCHEMA_FID> | <TODAY> | <TODAY> |\n  ```\n  然后：**Step 1** 用 Write 工具将完整更新后的注册表内容写入 `/tmp/registry.md`；**Step 2** 执行 `youdaonote update <registryFileId> --file /tmp/registry.md`\n- **不存在** → 创建注册表（执行会话启动协议·第二步的创建命令，包含本次知识库信息）\n\n⑨ **向用户确认** 知识库已就绪，注册表已更新。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**\n\n- **URL** → 自动化摄入流程：\n\n  ```bash\n  # 抓取网页内容并保存到 raw/（.md 格式，便于 Agent 读写）\n  # 使用 Agent 内置工具（web_fetch / browser_navigate 等）抓取网页文本，写入临时文件\n  # Step 1：Write 工具将文章内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"article-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n  > **降级路径**：若 fetch 失败（SPA、登录墙等），请手动复制页面内容，改走「纯文本 / 粘贴内容」路径存入 `raw/`。\n\n  保存完成后，Agent **自动执行以下分析**（无需用户逐步指导）：\n\n  **自动分析流程**：\n  ```\n  读取 raw/ 中的 .md 笔记内容（`youdaonote read <fileId>`）\n    ↓\n  识别关键实体（人物/组织/产品/工具）\n    → 对每个实体：youdaonote search \"<实体名>\" 检查是否已有\n    → 已有 → 读取已有页面，追加新信息并更新\n    → 未有 → 创建新 entity 页面，存入 entities/\n  识别关键概念（技术/方法论/主题）\n    → 对每个概念：youdaonote search \"<概念名>\" 检查是否已有\n    → 已有 → 更新；未有 → 创建新 concept 页面，存入 concepts/\n  建立交叉引用（在新旧页面间添加 → 标记）\n    ↓\n  更新 index.md + log.md\n    ↓\n  汇报：「已摄入，新建 X 页，更新 Y 页，以下内容你可能想深入讨论：[最多3个要点]」\n  ```\n\n  **防重复规则**：每个页面创建/更新前，必须先 `youdaonote search <页面名称>` 确认是否已存在，避免创建重复页面。\n\n- **纯文本 / 粘贴内容** → 存入 `raw/`：\n  ```bash\n  # Step 1：Write 工具将原始内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"source-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个摘要页（→ `raw/`）\n- 为关键人物/组织/工具创建或更新 entity 页（→ `entities/`）\n- 为关键概念/想法创建或更新 concept 页（→ `concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题`）\n\n创建新 Wiki 页面（以 concept 为例，其他类型换对应的 parentId）：\n```bash\n# Step 1：Write 工具将页面内容写入 /tmp/wiki-page.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"page-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"contentFile\": \"/tmp/wiki-page.md\"\n}' | youdaonote save --json\n```\n\n**笔记分类与 parentId 对应关系**：\n\n| 笔记分类 | parentId | 说明 |\n|----------|----------|------|\n| `raw` | `<RAW_ID>` | 网页剪藏或手动保存 |\n| `entity` | `<ENTITY_ID>` | |\n| `concept` | `<CONCEPT_ID>` | |\n| `comparison` | `<COMPARISON_ID>` | |\n| `query` | `<QUERY_ID>` | |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 index.md 中添加新页面条目（`youdaonote update <indexFileId> ...`）\n- 在 log.md 中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 index.md**定位相关页面：\n```bash\nyoudaonote read <indexFileId>\n```\n\n**② 读取所有相关页面**（通常 3-8 个）：\n```bash\nyoudaonote read <fileId1>\nyoudaonote read <fileId2>\n# ...\n```\n\n**大规模 Wiki（50+ 页面）** 时，先用 search 缩小范围：\n```bash\nyoudaonote search \"关键词\"\n# 搜索仅返回前 15 条；更多结果：youdaonote call searchNotes keyword=xxx startIndex=15\n```\n\n**③ 跨页面综合分析，生成带来源引用的答案**：\n\n- 每个关键论点标注来源页面：`（→ 页面标题）`\n- 检测矛盾：若两个页面在同一点有不同说法，明确标出：`⚠️ 「页面A」与「页面B」在此点有分歧`\n\n示例输出格式：\n```\nTransformer 的核心是 Self-Attention 机制（→ self-attention），\n由 Vaswani 等人在 2017 年提出（→ andrej-karpathy）。\n与 RNN 相比，Transformer 可以并行计算（→ gpt4o-vs-rnn）。\n```\n\n**④ 判断是否归档**：\n\n- 答案是一次深度对比分析或重要发现 → 询问用户：「这个分析值得保存，是否存入 queries/？」\n- 简单事实查询 → 不归档\n\n**⑤ 更新 log.md**（记录本次查询）。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计知识库时：\n\n**① 从注册表自动定位知识库**（无需用户提供任何 fileId）：\n\n执行会话启动协议，通过 A+B 策略确定目标知识库，从 schema.md 获取所有 fileId：ROOT_ID、RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID。\n\n**② 列出各文件夹的笔记**：\n```bash\nyoudaonote list -f <ROOT_ID>          # 系统笔记\nyoudaonote list -f <RAW_ID>           # 原始素材\nyoudaonote list -f <ENTITY_ID>        # 实体\nyoudaonote list -f <CONCEPT_ID>       # 概念\nyoudaonote list -f <COMPARISON_ID>    # 对比\nyoudaonote list -f <QUERY_ID>         # 查询\n```\n\n**③ 读取 index.md**，对比实际笔记列表。\n\n**④ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查页面内容中的 `→` 交叉引用，找出没有被任何其他页面引用的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 index.md 中\n\n**⑤ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑥ 追加到 log.md**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n### 4. Archive（归档对话内容）\n\n将当前 AI 对话中有价值的结论直接存入知识库，无需切换工具。\n\n**触发词**（任意一种均可触发）：\n- 「把刚才说的存进去」\n- 「这个结论存入知识库」\n- 「记下来」\n- 「归档这段对话」\n- 「存入知识库」\n\n**Agent 执行流程**：\n\n**① 确定目标知识库**：执行 A+B 策略（见会话启动协议）。\n\n**② 识别要存的内容**：最近相关对话轮次或用户明确指定的结论段落。\n\n**③ 判断内容类型**：\n\n| 内容特征 | 类型 | 目标文件夹 |\n|---------|------|-----------|\n| 概念解释、技术原理 | `concept` | `concepts/` |\n| 两个或多个事物的对比分析 | `comparison` | `comparisons/` |\n| 有价值的问答、深度分析结论 | `query` | `queries/` |\n| 无法判断 | — | 询问用户 |\n\n**④ 生成笔记并保存**：\n\n```bash\n# Step 1：Write 工具将整理后的内容写入 /tmp/wiki-archive.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"<笔记标题>.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<对应子文件夹ID>\",\n  \"contentFile\": \"/tmp/wiki-archive.md\"\n}' | youdaonote save --json\n```\n\n**⑤ 更新 index.md + log.md**。\n\n**⑥ 回复确认**：「已存入 `concepts/<标题>.md`（fileId: WEBxxx）」\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 schema.md 底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- index.md: WEB1a2b3c4d5e6f\n- log.md: WEB7a8b9c0d1e2f\n- schema.md: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 index.md**：先读 index.md，通过目录定位\n2. **关键词搜索**：`youdaonote search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 笔记内容写入标准模式\n\n所有含换行的 Markdown 内容，统一使用 **`contentFile` 两步模式**（Write 工具写纯 Markdown → `save` JSON 传路径）：\n\n```bash\n# Step 1：Write 工具将 Markdown 内容写入本地文件（纯 Markdown，无需任何 JSON 转义）\n# 写入 /tmp/wiki-xxx.md，内容就是普通的 Markdown\n\n# Step 2：save JSON 中只放路径，CLI 自行读取文件\nprintf '%s\\n' '{\n  \"title\": \"note-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<FOLDER_ID>\",\n  \"contentFile\": \"/tmp/wiki-xxx.md\"\n}' | youdaonote save --json\n\n# 更新已有笔记：同样先 Write 工具写文件，再 --file 传递\nyoudaonote update <fileId> --file /tmp/wiki-xxx.md\n```\n\n> ⚠️ **必须先完成 Step 1**：`/tmp/` 文件不会凭空存在，Agent 必须用 Write 工具显式创建。若 `/tmp/` 权限受限，可改用相对路径如 `./wiki-temp.md`，操作完成后删除。\n>\n> **为何用 `contentFile` 而非内联 `content`**：内联 `content` 需要将所有换行、引号、反斜杠进行 JSON 转义（`\\n`、`\\\"`、`\\\\`），极易出错。`contentFile` 只是路径字符串，无转义问题。\n\n### 会话间恢复\n\n新会话开始时，遵循文档开头的**会话启动协议**（强制执行）：\n\n1. `youdaonote list` 扫描根目录，定位 `youdaonote-wiki-registry.md`\n2. 读取注册表，确定目标知识库（A+B 策略）\n3. 读取目标知识库的 schema.md，获取所有 fileId\n4. 可选：读取 index.md 了解当前知识库状态\n5. 可选：读取 log.md 了解最近操作\n\n> 注册表不存在时自动重建，无需用户干预。\n\n## 切换知识库\n\n**触发词**（任意一种均可触发）：\n- `wiki-switch`\n- 「切换知识库」\n- 「用哪个知识库」\n- 「换一个知识库」\n- 「选知识库」\n- \"switch wiki\"\n- \"use another wiki\"\n- \"which wiki\"\n- \"change wiki\"\n\n**Agent 执行流程**：\n\n**① 读取全局注册表**：\n\n```bash\nyoudaonote list   # 扫描根目录，找到 youdaonote-wiki-registry.md\nyoudaonote read <registryFileId>\n```\n\n**② 列出所有知识库**：\n\n从注册表中解析出所有已注册的知识库，展示给用户：\n\n> 当前已有以下知识库：\n> 1. `ai-wiki` — AI 研究（最近访问：2026-04-15）\n> 2. `invest-wiki` — 投资笔记（最近访问：2026-04-10）\n>\n> 请选择要操作的知识库（输入编号或名称）：\n\n**③ 切换到用户选择的知识库**：\n\n读取目标知识库的 `schema.md`，获取所有 fileId，后续操作均在该知识库上执行。\n\n**边界情况**：\n\n| 情况 | 行为 |\n|------|------|\n| 仅 1 个知识库 | 告知用户只有一个知识库且已处于活跃状态，无需切换 |\n| 注册表为空或不存在 | 告知无知识库，建议用 `wiki-init` 创建 |\n\n## CLI 未安装处理（用户手动执行安装）\n\n收到 `command not found` 或需要升级到 `minCliVersion` 以上时，Agent 仅提供官方安装命令，由用户在终端手动执行。Agent 不自动执行安装命令，不进行系统级变更。\n\n确认文案建议：\n\n```text\n检测到未安装 youdaonote-cli（或版本低于 1.2.3）。请在终端手动执行以下命令完成安装 / 升级；执行后回复\"已安装\"，我将继续处理当前任务。\n```\n\n安全边界（必须遵守）：\n\n- 仅允许使用官方安装源：`https://artifact.lx.netease.com/download/youdaonote-cli/install.sh`\n- 禁止执行任何非官方来源的远程脚本或替代安装命令\n- 安装仅用于补齐 `youdaonote` CLI 依赖；Agent 不执行与当前任务无关的系统操作\n- 安装与环境变量导出步骤均由用户手动执行，Agent 不写入 shell 启动文件（如 `~/.zshrc` / `~/.bashrc`）\n- 建议用户在执行前确认命令来源可信；如对管道执行有顾虑，可先下载脚本后本地查看再执行\n\n### 安全验证建议（推荐）\n\n如对直接管道执行有顾虑，可先下载脚本审查后再执行：\n\n```bash\n# 步骤 1：下载脚本到本地\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh -o install.sh\n# 步骤 2：审查脚本内容\ncat install.sh\n# 步骤 3：确认无误后执行\nbash install.sh -f -b ~/.local/bin\n```\n\n**macOS / Linux / WSL**：\n\n```bash\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin\nexport PATH=\"$HOME/.local/bin:$PATH\"\n# 执行完成后回复\"已安装\"，Agent 将继续原始请求\n```\n\n**Windows（CMD / PowerShell）**：由用户手动下载对应平台的压缩包，解压后将 `youdaonote.exe` 所在目录加入系统 PATH。Agent 仅提供下载地址与操作指引，不自动执行下载、解压或修改系统环境变量。下载地址：\n\n- x64（常见新 CPU）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-x64.tar.gz`\n- x64（旧 CPU，无 AVX2 等，运行默认包秒退 / 退出码约 `0xC000001D`）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-win-x64-bl.tar.gz`\n- ARM64：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-arm64.tar.gz`\n\n安装提示：先尝试默认 x64 包，若运行闪退或退出码为 `0xC000001D`，请换用 x64 baseline 包重试。\n\n### 凭据（API Key）配置\n\nCLI 安装完成后，若 `youdaonote list` 返回 API Key 错误：\n\n1. 访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号）。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n2. 在终端手动执行：`youdaonote config set apiKey <用户提供的 Key>`\n3. 凭据由 CLI 自行维护，Agent 不直接读写凭据文件；Agent 也不会将 API Key 回显到对话中。\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 index.md 和 log.md**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少用 `→` 引用一个其他页面\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **❌ 禁止在笔记内容中使用 shell 命令替换**——`$(cat /tmp/xxx.md)` 在单引号 heredoc（`cat <<'EOF'`）或 `printf '%s\\n' '...'` 中不会展开，会被字面量写入笔记。保存笔记内容必须使用两步模式：先用 Write 工具将内容写入文件，再通过 `--file` 参数传递。\n  ```bash\n  # ❌ 错误：单引号 'EOF' 禁用 shell 展开，$(cat ...) 成为字面量\n  cat <<'EOF' | youdaonote save --json\n  {\"content\": \"$(cat /tmp/file.md)\"}\n  EOF\n\n  # ✅ 正确：Step 1 Write 工具写文件，Step 2 --file 传递\n  # （Step 1 已完成：Write 工具已将内容写入 /tmp/wiki-note.json）\n  youdaonote save --file /tmp/wiki-note.json --json\n  ```\n- **笔记标题使用小写加连字符**——如 `transformer-architecture.md`，避免使用空格和特殊字符\n- **保持 schema.md 的 fileId 注册表更新**——这是跨会话恢复和注册表自动重建的基础\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1777199459073\n}\n\nArchive v1.0.2: 2 files, 11343 bytes\n\nFiles: SKILL.md (28656b), _meta.json (138b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.2\nminCliVersion: \"1.2.3\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n      env:\n        - YOUDAONOTE_API_KEY\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 数据写入声明（Persistence Disclosure）\n\n本 skill 是一个**写操作密集型 Agent**：在您的授权下，会对您的有道云笔记账户做以下持久化修改，请在开始使用前知悉：\n\n| 动作类别 | 触发时机 | 写入内容 |\n|---------|---------|---------|\n| 创建文件夹 | 初始化 Wiki 时 | 1 个根文件夹 + 5 个子文件夹（`raw/`、`entities/`、`concepts/`、`comparisons/`、`queries/`） |\n| 系统笔记 | 初始化 Wiki 时 | 根文件夹下创建 `schema.md`、`index.md`、`log.md` 三个笔记 |\n| 全局注册表 | 首次创建 Wiki 或注册表缺失时（**需用户确认**） | 根目录下的 `youdaonote-wiki-registry.md` 笔记（记录所有 Wiki 元信息） |\n| 内容笔记 | 用户主动执行 Ingest / Archive 时 | 在对应子文件夹中创建或更新 Wiki 页面（一次 Ingest 可能更新 5-10 个页面） |\n| 日志与索引 | 每次写入操作后 | 更新 `index.md`、追加 `log.md` |\n\n**安全边界**：\n\n- 本 skill 只读写您通过 `youdaonote config set apiKey` 配置的有道云笔记账号内的数据，不涉及账号权限之外的任何操作。\n- 不会修改 `type: raw` 的原始素材（素材 immutable）。\n- 所有写入操作都在有道云笔记客户端 / Web 端可见、可编辑、可删除。\n- 大批量写入（单次操作将影响 10+ 已有页面）前，Agent **必须与用户确认**后再执行。\n\n## 前置检查（安装由用户手动执行）\n\n执行任何操作前，Agent 必须先运行 `youdaonote list` 检测 CLI 是否可用：\n\n- **`command not found`** → 跳转「CLI 未安装处理」小节，仅向用户提供官方安装命令并提示用户手动执行；等待用户回复\"已安装\"后再继续原请求\n- **API Key 错误**（未配置 / 鉴权失败）→ 提示用户访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号），然后执行 `youdaonote config set apiKey <用户提供的Key>`。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n- **版本过低**（低于 `1.2.3`）→ 跳转「CLI 未安装处理」小节的升级指引，由用户手动执行升级；Agent 不自动执行升级命令\n- **正常返回目录列表** → 继续执行用户请求\n\n### Wiki 文件夹结构（由 Agent 在用户同意初始化后创建）\n\n初始化 Wiki 时（用户确认创建后），Agent 会执行 `youdaonote mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果\n```\n\n## 会话启动协议（每次对话必执行）\n\n每次新会话开始时，Agent **必须按下列步骤推进**，并在每一步向用户说明当前动作，再响应用户请求。**不得静默执行**。\n\n### 第一步：定位全局注册表（只读扫描）\n\nAgent 先向用户说明：\"正在扫描有道云笔记根目录，定位 Wiki 全局注册表。\"，然后执行：\n\n```bash\nyoudaonote list   # 扫描根目录（只读）\n```\n\n在结果中查找标题为 `youdaonote-wiki-registry.md` 的笔记：\n- **找到** → `youdaonote read <registryFileId>` 读取注册表，解析所有知识库\n- **未找到** → 进入第二步，**在征得用户同意后**再重建\n\n### 第二步：重建注册表（仅在注册表缺失时执行，需用户确认）\n\n注册表缺失时，Agent **不得直接执行搜索或写入**，必须先向用户申请授权：\n\n> 未找到 `youdaonote-wiki-registry.md`。我可以通过搜索您账号内已有 Wiki 的 `schema.md` 文件自动重建一份注册表（**只读搜索 + 在根目录创建 1 份注册表笔记**，不会修改任何现有内容）。是否允许？\n\n用户**明确同意**（回复「是/好/允许/继续」等）后，才执行：\n\n```bash\nyoudaonote search \"schema.md\"\n```\n\n逐一读取所有搜索结果，过滤包含 `## Wiki 元信息` 块的笔记，从中提取：\n- `name`（知识库名称）\n- `description`（主题描述）\n- 文件夹 ID 注册表中的 `ROOT`\n- schema.md 笔记自身的 fileId（来自 `youdaonote list` 结果）\n\n提取完毕后，重建注册表笔记并保存到根目录：\n\n```bash\n# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote save --json\n```\n\n重建完成后，Agent 向用户**简要汇报**本次重建的结果（例：\"已重建注册表，共发现 N 个 Wiki 并录入：A-wiki、B-wiki、...\"），然后继续执行用户原始请求。若用户**拒绝重建**，则直接按\"无可用注册表\"处理，后续按第三步的\"注册表为空\"分支提示用户先创建知识库。\n\n### 第三步：选择目标知识库（A+B 策略）\n\n从注册表中选定本次操作的知识库：\n\n| 情况 | 策略 | 行为 |\n|------|------|------|\n| 用户消息含明确知识库名 | B（自动） | 直接从注册表匹配，无需询问 |\n| 上下文有线索（如「继续整理 AI 的内容」） | B（自动） | 选最相关的，先说一句「我理解你要操作的是「AI研究」知识库，继续了」 |\n| 无法判断 | A（询问） | 列出注册表中所有知识库，让用户选 |\n| 注册表为空 | — | 提示用户先创建知识库 |\n\n### 注册表维护规则\n\n- **创建新知识库后**：自动追加一行到注册表\n- **每次操作知识库后**：更新「最近访问」列为当天日期\n- **注册表保护说明**：注册表为缓存，即使被删除也可按\"会话启动协议·第二步\"流程（**需用户确认**）从各知识库的 schema.md 重建；schema.md 是真相源，请勿删除\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `<知识库名>/`（根） | 系统笔记：schema.md、index.md、log.md | Wiki 管理中枢 |\n| `raw/` | 原始素材（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个知识库有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `schema.md` | 结构约定、领域定义、fileId 注册表 |\n| `index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `log.md` | 操作日志（只追加） |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | 标题示例 |\n|--------|----------|\n| `raw/` | `karpathy-llm-wiki-2026.md` |\n| `entities/` | `andrej-karpathy.md` |\n| `concepts/` | `transformer-architecture.md` |\n| `comparisons/` | `gpt4o-vs-claude-sonnet.md` |\n| `queries/` | `2026-agent-framework-comparison.md` |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ self-attention`）\n- Agent 通过 index.md 或 `youdaonote search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建知识库时：\n\n① **询问并确认知识库名称**：\n\n向用户提出命名建议（推荐小写 `xxx-wiki` 格式，如 `ai-wiki`、`invest-wiki`，更易识别为 LLM 知识库），然后等待用户确认后再创建：\n\n> 建议将知识库命名为 `[推荐名称]-wiki`（小写、连字符分隔）。\n> 你也可以自定义名称，无硬性要求。\n> 确认名称后我将开始创建。\n\n**收到用户确认的名称后**，再执行后续步骤。知识库统一创建在有道云笔记根目录下。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建知识库根文件夹\nyoudaonote mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| 根文件夹 | `ROOT_ID` | 存放系统笔记 |\n| raw | `RAW_ID` | 存放原始素材 |\n| entities | `ENTITY_ID` | 存放实体页 |\n| concepts | `CONCEPT_ID` | 存放概念页 |\n| comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 schema.md**（存放在根文件夹，向用户询问知识库主题后定制）：\n```bash\n# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote save --json\n```\n\n⑤ **创建 index.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 index 内容写入 /tmp/wiki-index.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-index.md\"\n}' | youdaonote save --json\n```\n\n⑥ **创建 log.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 log 内容写入 /tmp/wiki-log.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-log.md\"\n}' | youdaonote save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 schema.md 的「笔记 fileId 注册表」中。\n\n⑧ **写入全局注册表**：\n\n读取根目录，找到 `youdaonote-wiki-registry.md` 笔记：\n- **存在** → `youdaonote read <registryFileId>`，在表格末尾追加新行：\n  ```\n  | <WIKI_NAME> | <WIKI_DESCRIPTION> | <ROOT_ID> | <SCHEMA_FID> | <TODAY> | <TODAY> |\n  ```\n  然后：**Step 1** 用 Write 工具将完整更新后的注册表内容写入 `/tmp/registry.md`；**Step 2** 执行 `youdaonote update <registryFileId> --file /tmp/registry.md`\n- **不存在** → 创建注册表（执行会话启动协议·第二步的创建命令，包含本次知识库信息）\n\n⑨ **向用户确认** 知识库已就绪，注册表已更新。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**\n\n- **URL** → 自动化摄入流程：\n\n  ```bash\n  # 抓取网页内容并保存到 raw/（.md 格式，便于 Agent 读写）\n  # 使用 Agent 内置工具（web_fetch / browser_navigate 等）抓取网页文本，写入临时文件\n  # Step 1：Write 工具将文章内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"article-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n  > **降级路径**：若 fetch 失败（SPA、登录墙等），请手动复制页面内容，改走「纯文本 / 粘贴内容」路径存入 `raw/`。\n\n  保存完成后，Agent **自动执行以下分析**（无需用户逐步指导）：\n\n  **自动分析流程**：\n  ```\n  读取 raw/ 中的 .md 笔记内容（`youdaonote read <fileId>`）\n    ↓\n  识别关键实体（人物/组织/产品/工具）\n    → 对每个实体：youdaonote search \"<实体名>\" 检查是否已有\n    → 已有 → 读取已有页面，追加新信息并更新\n    → 未有 → 创建新 entity 页面，存入 entities/\n  识别关键概念（技术/方法论/主题）\n    → 对每个概念：youdaonote search \"<概念名>\" 检查是否已有\n    → 已有 → 更新；未有 → 创建新 concept 页面，存入 concepts/\n  建立交叉引用（在新旧页面间添加 → 标记）\n    ↓\n  更新 index.md + log.md\n    ↓\n  汇报：「已摄入，新建 X 页，更新 Y 页，以下内容你可能想深入讨论：[最多3个要点]」\n  ```\n\n  **防重复规则**：每个页面创建/更新前，必须先 `youdaonote search <页面名称>` 确认是否已存在，避免创建重复页面。\n\n- **纯文本 / 粘贴内容** → 存入 `raw/`：\n  ```bash\n  # Step 1：Write 工具将原始内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"source-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个摘要页（→ `raw/`）\n- 为关键人物/组织/工具创建或更新 entity 页（→ `entities/`）\n- 为关键概念/想法创建或更新 concept 页（→ `concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题`）\n\n创建新 Wiki 页面（以 concept 为例，其他类型换对应的 parentId）：\n```bash\n# Step 1：Write 工具将页面内容写入 /tmp/wiki-page.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"page-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"contentFile\": \"/tmp/wiki-page.md\"\n}' | youdaonote save --json\n```\n\n**笔记分类与 parentId 对应关系**：\n\n| 笔记分类 | parentId | 说明 |\n|----------|----------|------|\n| `raw` | `<RAW_ID>` | 网页剪藏或手动保存 |\n| `entity` | `<ENTITY_ID>` | |\n| `concept` | `<CONCEPT_ID>` | |\n| `comparison` | `<COMPARISON_ID>` | |\n| `query` | `<QUERY_ID>` | |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 index.md 中添加新页面条目（`youdaonote update <indexFileId> ...`）\n- 在 log.md 中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 index.md**定位相关页面：\n```bash\nyoudaonote read <indexFileId>\n```\n\n**② 读取所有相关页面**（通常 3-8 个）：\n```bash\nyoudaonote read <fileId1>\nyoudaonote read <fileId2>\n# ...\n```\n\n**大规模 Wiki（50+ 页面）** 时，先用 search 缩小范围：\n```bash\nyoudaonote search \"关键词\"\n# 搜索仅返回前 15 条；更多结果：youdaonote call searchNotes keyword=xxx startIndex=15\n```\n\n**③ 跨页面综合分析，生成带来源引用的答案**：\n\n- 每个关键论点标注来源页面：`（→ 页面标题）`\n- 检测矛盾：若两个页面在同一点有不同说法，明确标出：`⚠️ 「页面A」与「页面B」在此点有分歧`\n\n示例输出格式：\n```\nTransformer 的核心是 Self-Attention 机制（→ self-attention），\n由 Vaswani 等人在 2017 年提出（→ andrej-karpathy）。\n与 RNN 相比，Transformer 可以并行计算（→ gpt4o-vs-rnn）。\n```\n\n**④ 判断是否归档**：\n\n- 答案是一次深度对比分析或重要发现 → 询问用户：「这个分析值得保存，是否存入 queries/？」\n- 简单事实查询 → 不归档\n\n**⑤ 更新 log.md**（记录本次查询）。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计知识库时：\n\n**① 从注册表自动定位知识库**（无需用户提供任何 fileId）：\n\n执行会话启动协议，通过 A+B 策略确定目标知识库，从 schema.md 获取所有 fileId：ROOT_ID、RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID。\n\n**② 列出各文件夹的笔记**：\n```bash\nyoudaonote list -f <ROOT_ID>          # 系统笔记\nyoudaonote list -f <RAW_ID>           # 原始素材\nyoudaonote list -f <ENTITY_ID>        # 实体\nyoudaonote list -f <CONCEPT_ID>       # 概念\nyoudaonote list -f <COMPARISON_ID>    # 对比\nyoudaonote list -f <QUERY_ID>         # 查询\n```\n\n**③ 读取 index.md**，对比实际笔记列表。\n\n**④ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查页面内容中的 `→` 交叉引用，找出没有被任何其他页面引用的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 index.md 中\n\n**⑤ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑥ 追加到 log.md**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n### 4. Archive（归档对话内容）\n\n将当前 AI 对话中有价值的结论直接存入知识库，无需切换工具。\n\n**触发词**（任意一种均可触发）：\n- 「把刚才说的存进去」\n- 「这个结论存入知识库」\n- 「记下来」\n- 「归档这段对话」\n- 「存入知识库」\n\n**Agent 执行流程**：\n\n**① 确定目标知识库**：执行 A+B 策略（见会话启动协议）。\n\n**② 识别要存的内容**：最近相关对话轮次或用户明确指定的结论段落。\n\n**③ 判断内容类型**：\n\n| 内容特征 | 类型 | 目标文件夹 |\n|---------|------|-----------|\n| 概念解释、技术原理 | `concept` | `concepts/` |\n| 两个或多个事物的对比分析 | `comparison` | `comparisons/` |\n| 有价值的问答、深度分析结论 | `query` | `queries/` |\n| 无法判断 | — | 询问用户 |\n\n**④ 生成笔记并保存**：\n\n```bash\n# Step 1：Write 工具将整理后的内容写入 /tmp/wiki-archive.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"<笔记标题>.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<对应子文件夹ID>\",\n  \"contentFile\": \"/tmp/wiki-archive.md\"\n}' | youdaonote save --json\n```\n\n**⑤ 更新 index.md + log.md**。\n\n**⑥ 回复确认**：「已存入 `concepts/<标题>.md`（fileId: WEBxxx）」\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 schema.md 底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- index.md: WEB1a2b3c4d5e6f\n- log.md: WEB7a8b9c0d1e2f\n- schema.md: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 index.md**：先读 index.md，通过目录定位\n2. **关键词搜索**：`youdaonote search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 笔记内容写入标准模式\n\n所有含换行的 Markdown 内容，统一使用 **`contentFile` 两步模式**（Write 工具写纯 Markdown → `save` JSON 传路径）：\n\n```bash\n# Step 1：Write 工具将 Markdown 内容写入本地文件（纯 Markdown，无需任何 JSON 转义）\n# 写入 /tmp/wiki-xxx.md，内容就是普通的 Markdown\n\n# Step 2：save JSON 中只放路径，CLI 自行读取文件\nprintf '%s\\n' '{\n  \"title\": \"note-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<FOLDER_ID>\",\n  \"contentFile\": \"/tmp/wiki-xxx.md\"\n}' | youdaonote save --json\n\n# 更新已有笔记：同样先 Write 工具写文件，再 --file 传递\nyoudaonote update <fileId> --file /tmp/wiki-xxx.md\n```\n\n> ⚠️ **必须先完成 Step 1**：`/tmp/` 文件不会凭空存在，Agent 必须用 Write 工具显式创建。若 `/tmp/` 权限受限，可改用相对路径如 `./wiki-temp.md`，操作完成后删除。\n>\n> **为何用 `contentFile` 而非内联 `content`**：内联 `content` 需要将所有换行、引号、反斜杠进行 JSON 转义（`\\n`、`\\\"`、`\\\\`），极易出错。`contentFile` 只是路径字符串，无转义问题。\n\n### 会话间恢复\n\n新会话开始时，遵循文档开头的**会话启动协议**（强制执行）：\n\n1. `youdaonote list` 扫描根目录，定位 `youdaonote-wiki-registry.md`\n2. 读取注册表，确定目标知识库（A+B 策略）\n3. 读取目标知识库的 schema.md，获取所有 fileId\n4. 可选：读取 index.md 了解当前知识库状态\n5. 可选：读取 log.md 了解最近操作\n\n> 注册表不存在时自动重建，无需用户干预。\n\n## 切换知识库\n\n**触发词**（任意一种均可触发）：\n- `wiki-switch`\n- 「切换知识库」\n- 「用哪个知识库」\n- 「换一个知识库」\n- 「选知识库」\n- \"switch wiki\"\n- \"use another wiki\"\n- \"which wiki\"\n- \"change wiki\"\n\n**Agent 执行流程**：\n\n**① 读取全局注册表**：\n\n```bash\nyoudaonote list   # 扫描根目录，找到 youdaonote-wiki-registry.md\nyoudaonote read <registryFileId>\n```\n\n**② 列出所有知识库**：\n\n从注册表中解析出所有已注册的知识库，展示给用户：\n\n> 当前已有以下知识库：\n> 1. `ai-wiki` — AI 研究（最近访问：2026-04-15）\n> 2. `invest-wiki` — 投资笔记（最近访问：2026-04-10）\n>\n> 请选择要操作的知识库（输入编号或名称）：\n\n**③ 切换到用户选择的知识库**：\n\n读取目标知识库的 `schema.md`，获取所有 fileId，后续操作均在该知识库上执行。\n\n**边界情况**：\n\n| 情况 | 行为 |\n|------|------|\n| 仅 1 个知识库 | 告知用户只有一个知识库且已处于活跃状态，无需切换 |\n| 注册表为空或不存在 | 告知无知识库，建议用 `wiki-init` 创建 |\n\n## CLI 未安装处理（用户手动执行安装）\n\n收到 `command not found` 或需要升级到 `minCliVersion` 以上时，Agent 仅提供官方安装命令，由用户在终端手动执行。Agent 不自动执行安装命令，不进行系统级变更。\n\n确认文案建议：\n\n```text\n检测到未安装 youdaonote-cli（或版本低于 1.2.3）。请在终端手动执行以下命令完成安装 / 升级；执行后回复\"已安装\"，我将继续处理当前任务。\n```\n\n安全边界（必须遵守）：\n\n- 仅允许使用官方安装源：`https://artifact.lx.netease.com/download/youdaonote-cli/install.sh`\n- 禁止执行任何非官方来源的远程脚本或替代安装命令\n- 安装仅用于补齐 `youdaonote` CLI 依赖；Agent 不执行与当前任务无关的系统操作\n- 安装与环境变量导出步骤均由用户手动执行，Agent 不写入 shell 启动文件（如 `~/.zshrc` / `~/.bashrc`）\n- 建议用户在执行前确认命令来源可信；如对管道执行有顾虑，可先下载脚本后本地查看再执行\n\n### 安全验证建议（推荐）\n\n如对直接管道执行有顾虑，可先下载脚本审查后再执行：\n\n```bash\n# 步骤 1：下载脚本到本地\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh -o install.sh\n# 步骤 2：审查脚本内容\ncat install.sh\n# 步骤 3：确认无误后执行\nbash install.sh -f -b ~/.local/bin\n```\n\n**macOS / Linux / WSL**：\n\n```bash\ncurl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin\nexport PATH=\"$HOME/.local/bin:$PATH\"\n# 执行完成后回复\"已安装\"，Agent 将继续原始请求\n```\n\n**Windows（CMD / PowerShell）**：由用户手动下载对应平台的压缩包，解压后将 `youdaonote.exe` 所在目录加入系统 PATH。Agent 仅提供下载地址与操作指引，不自动执行下载、解压或修改系统环境变量。下载地址：\n\n- x64（常见新 CPU）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-x64.tar.gz`\n- x64（旧 CPU，无 AVX2 等，运行默认包秒退 / 退出码约 `0xC000001D`）：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-win-x64-bl.tar.gz`\n- ARM64：`https://artifact.lx.netease.com/download/youdaonote-cli/youdaonote-cli-windows-arm64.tar.gz`\n\n安装提示：先尝试默认 x64 包，若运行闪退或退出码为 `0xC000001D`，请换用 x64 baseline 包重试。\n\n### 凭据（API Key）配置\n\nCLI 安装完成后，若 `youdaonote list` 返回 API Key 错误：\n\n1. 访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号）。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n2. 在终端手动执行：`youdaonote config set apiKey <用户提供的 Key>`\n3. 凭据由 CLI 自行维护，Agent 不直接读写凭据文件；Agent 也不会将 API Key 回显到对话中。\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 index.md 和 log.md**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少用 `→` 引用一个其他页面\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **❌ 禁止在笔记内容中使用 shell 命令替换**——`$(cat /tmp/xxx.md)` 在单引号 heredoc（`cat <<'EOF'`）或 `printf '%s\\n' '...'` 中不会展开，会被字面量写入笔记。保存笔记内容必须使用两步模式：先用 Write 工具将内容写入文件，再通过 `--file` 参数传递。\n  ```bash\n  # ❌ 错误：单引号 'EOF' 禁用 shell 展开，$(cat ...) 成为字面量\n  cat <<'EOF' | youdaonote save --json\n  {\"content\": \"$(cat /tmp/file.md)\"}\n  EOF\n\n  # ✅ 正确：Step 1 Write 工具写文件，Step 2 --file 传递\n  # （Step 1 已完成：Write 工具已将内容写入 /tmp/wiki-note.json）\n  youdaonote save --file /tmp/wiki-note.json --json\n  ```\n- **笔记标题使用小写加连字符**——如 `transformer-architecture.md`，避免使用空格和特殊字符\n- **保持 schema.md 的 fileId 注册表更新**——这是跨会话恢复和注册表自动重建的基础\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1776907481235\n}\n\nArchive v1.0.1: 2 files, 9161 bytes\n\nFiles: SKILL.md (22585b), _meta.json (138b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.1\nminCliVersion: \"1.2.3\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 前置条件\n\n1. **youdaonote CLI 可用**：运行 `youdaonote list` 确认 CLI 已安装且 API Key 已配置\n2. **CLI 版本 ≥ 1.2.3**：运行 `youdaonote version` 确认版本，低于此版本需升级（`curl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin`）\n3. **文件夹结构由 Agent 自动创建**：初始化时 Agent 会自动执行 `youdaonote mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果\n```\n\n## 会话启动协议（每次对话必执行）\n\n每次新会话开始时，Agent **必须先执行以下步骤**，再响应用户请求。\n\n### 第一步：定位全局注册表\n\n```bash\nyoudaonote list   # 扫描根目录\n```\n\n在结果中查找标题为 `youdaonote-wiki-registry.md` 的笔记：\n- **找到** → `youdaonote read <registryFileId>` 读取注册表，解析所有知识库\n- **未找到** → 执行自动重建（见下）\n\n### 第二步：自动重建注册表（仅在注册表缺失时执行）\n\n```bash\nyoudaonote search \"schema.md\"\n```\n\n逐一读取所有搜索结果，过滤包含 `## Wiki 元信息` 块的笔记，从中提取：\n- `name`（知识库名称）\n- `description`（主题描述）\n- 文件夹 ID 注册表中的 `ROOT`\n- schema.md 笔记自身的 fileId（来自 `youdaonote list` 结果）\n\n提取完毕后，重建注册表笔记并保存到根目录：\n\n```bash\n# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote save --json\n```\n\n重建过程对用户**无感知**，完成后继续执行用户原始请求。\n\n### 第三步：选择目标知识库（A+B 策略）\n\n从注册表中选定本次操作的知识库：\n\n| 情况 | 策略 | 行为 |\n|------|------|------|\n| 用户消息含明确知识库名 | B（自动） | 直接从注册表匹配，无需询问 |\n| 上下文有线索（如「继续整理 AI 的内容」） | B（自动） | 选最相关的，先说一句「我理解你要操作的是「AI研究」知识库，继续了」 |\n| 无法判断 | A（询问） | 列出注册表中所有知识库，让用户选 |\n| 注册表为空 | — | 提示用户先创建知识库 |\n\n### 注册表维护规则\n\n- **创建新知识库后**：自动追加一行到注册表\n- **每次操作知识库后**：更新「最近访问」列为当天日期\n- **注册表保护说明**：注册表为缓存，即使被删除也可从各知识库的 schema.md 自动重建；schema.md 是真相源，请勿删除\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `<知识库名>/`（根） | 系统笔记：schema.md、index.md、log.md | Wiki 管理中枢 |\n| `raw/` | 原始素材（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个知识库有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `schema.md` | 结构约定、领域定义、fileId 注册表 |\n| `index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `log.md` | 操作日志（只追加） |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | 标题示例 |\n|--------|----------|\n| `raw/` | `karpathy-llm-wiki-2026.md` |\n| `entities/` | `andrej-karpathy.md` |\n| `concepts/` | `transformer-architecture.md` |\n| `comparisons/` | `gpt4o-vs-claude-sonnet.md` |\n| `queries/` | `2026-agent-framework-comparison.md` |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ self-attention`）\n- Agent 通过 index.md 或 `youdaonote search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建知识库时：\n\n① **询问并确认知识库名称**：\n\n向用户提出命名建议（推荐小写 `xxx-wiki` 格式，如 `ai-wiki`、`invest-wiki`，更易识别为 LLM 知识库），然后等待用户确认后再创建：\n\n> 建议将知识库命名为 `[推荐名称]-wiki`（小写、连字符分隔）。\n> 你也可以自定义名称，无硬性要求。\n> 确认名称后我将开始创建。\n\n**收到用户确认的名称后**，再执行后续步骤。知识库统一创建在有道云笔记根目录下。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建知识库根文件夹\nyoudaonote mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| 根文件夹 | `ROOT_ID` | 存放系统笔记 |\n| raw | `RAW_ID` | 存放原始素材 |\n| entities | `ENTITY_ID` | 存放实体页 |\n| concepts | `CONCEPT_ID` | 存放概念页 |\n| comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 schema.md**（存放在根文件夹，向用户询问知识库主题后定制）：\n```bash\n# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote save --json\n```\n\n⑤ **创建 index.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 index 内容写入 /tmp/wiki-index.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-index.md\"\n}' | youdaonote save --json\n```\n\n⑥ **创建 log.md**（存放在根文件夹）：\n```bash\n# Step 1：Write 工具将 log 内容写入 /tmp/wiki-log.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-log.md\"\n}' | youdaonote save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 schema.md 的「笔记 fileId 注册表」中。\n\n⑧ **写入全局注册表**：\n\n读取根目录，找到 `youdaonote-wiki-registry.md` 笔记：\n- **存在** → `youdaonote read <registryFileId>`，在表格末尾追加新行：\n  ```\n  | <WIKI_NAME> | <WIKI_DESCRIPTION> | <ROOT_ID> | <SCHEMA_FID> | <TODAY> | <TODAY> |\n  ```\n  然后：**Step 1** 用 Write 工具将完整更新后的注册表内容写入 `/tmp/registry.md`；**Step 2** 执行 `youdaonote update <registryFileId> --file /tmp/registry.md`\n- **不存在** → 创建注册表（执行会话启动协议·第二步的创建命令，包含本次知识库信息）\n\n⑨ **向用户确认** 知识库已就绪，注册表已更新。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**\n\n- **URL** → 自动化摄入流程：\n\n  ```bash\n  # 抓取网页内容并保存到 raw/（.md 格式，便于 Agent 读写）\n  # 使用 Agent 内置工具（web_fetch / browser_navigate 等）抓取网页文本，写入临时文件\n  # Step 1：Write 工具将文章内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"article-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n  > **降级路径**：若 fetch 失败（SPA、登录墙等），请手动复制页面内容，改走「纯文本 / 粘贴内容」路径存入 `raw/`。\n\n  保存完成后，Agent **自动执行以下分析**（无需用户逐步指导）：\n\n  **自动分析流程**：\n  ```\n  读取 raw/ 中的 .md 笔记内容（`youdaonote read <fileId>`）\n    ↓\n  识别关键实体（人物/组织/产品/工具）\n    → 对每个实体：youdaonote search \"<实体名>\" 检查是否已有\n    → 已有 → 读取已有页面，追加新信息并更新\n    → 未有 → 创建新 entity 页面，存入 entities/\n  识别关键概念（技术/方法论/主题）\n    → 对每个概念：youdaonote search \"<概念名>\" 检查是否已有\n    → 已有 → 更新；未有 → 创建新 concept 页面，存入 concepts/\n  建立交叉引用（在新旧页面间添加 → 标记）\n    ↓\n  更新 index.md + log.md\n    ↓\n  汇报：「已摄入，新建 X 页，更新 Y 页，以下内容你可能想深入讨论：[最多3个要点]」\n  ```\n\n  **防重复规则**：每个页面创建/更新前，必须先 `youdaonote search <页面名称>` 确认是否已存在，避免创建重复页面。\n\n- **纯文本 / 粘贴内容** → 存入 `raw/`：\n  ```bash\n  # Step 1：Write 工具将原始内容写入 /tmp/wiki-raw.md（纯 Markdown）\n  printf '%s\\n' '{\n    \"title\": \"source-title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"contentFile\": \"/tmp/wiki-raw.md\"\n  }' | youdaonote save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个摘要页（→ `raw/`）\n- 为关键人物/组织/工具创建或更新 entity 页（→ `entities/`）\n- 为关键概念/想法创建或更新 concept 页（→ `concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题`）\n\n创建新 Wiki 页面（以 concept 为例，其他类型换对应的 parentId）：\n```bash\n# Step 1：Write 工具将页面内容写入 /tmp/wiki-page.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"page-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"contentFile\": \"/tmp/wiki-page.md\"\n}' | youdaonote save --json\n```\n\n**笔记分类与 parentId 对应关系**：\n\n| 笔记分类 | parentId | 说明 |\n|----------|----------|------|\n| `raw` | `<RAW_ID>` | 网页剪藏或手动保存 |\n| `entity` | `<ENTITY_ID>` | |\n| `concept` | `<CONCEPT_ID>` | |\n| `comparison` | `<COMPARISON_ID>` | |\n| `query` | `<QUERY_ID>` | |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 index.md 中添加新页面条目（`youdaonote update <indexFileId> ...`）\n- 在 log.md 中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 index.md**定位相关页面：\n```bash\nyoudaonote read <indexFileId>\n```\n\n**② 读取所有相关页面**（通常 3-8 个）：\n```bash\nyoudaonote read <fileId1>\nyoudaonote read <fileId2>\n# ...\n```\n\n**大规模 Wiki（50+ 页面）** 时，先用 search 缩小范围：\n```bash\nyoudaonote search \"关键词\"\n# 搜索仅返回前 15 条；更多结果：youdaonote call searchNotes keyword=xxx startIndex=15\n```\n\n**③ 跨页面综合分析，生成带来源引用的答案**：\n\n- 每个关键论点标注来源页面：`（→ 页面标题）`\n- 检测矛盾：若两个页面在同一点有不同说法，明确标出：`⚠️ 「页面A」与「页面B」在此点有分歧`\n\n示例输出格式：\n```\nTransformer 的核心是 Self-Attention 机制（→ self-attention），\n由 Vaswani 等人在 2017 年提出（→ andrej-karpathy）。\n与 RNN 相比，Transformer 可以并行计算（→ gpt4o-vs-rnn）。\n```\n\n**④ 判断是否归档**：\n\n- 答案是一次深度对比分析或重要发现 → 询问用户：「这个分析值得保存，是否存入 queries/？」\n- 简单事实查询 → 不归档\n\n**⑤ 更新 log.md**（记录本次查询）。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计知识库时：\n\n**① 从注册表自动定位知识库**（无需用户提供任何 fileId）：\n\n执行会话启动协议，通过 A+B 策略确定目标知识库，从 schema.md 获取所有 fileId：ROOT_ID、RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID。\n\n**② 列出各文件夹的笔记**：\n```bash\nyoudaonote list -f <ROOT_ID>          # 系统笔记\nyoudaonote list -f <RAW_ID>           # 原始素材\nyoudaonote list -f <ENTITY_ID>        # 实体\nyoudaonote list -f <CONCEPT_ID>       # 概念\nyoudaonote list -f <COMPARISON_ID>    # 对比\nyoudaonote list -f <QUERY_ID>         # 查询\n```\n\n**③ 读取 index.md**，对比实际笔记列表。\n\n**④ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查页面内容中的 `→` 交叉引用，找出没有被任何其他页面引用的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 index.md 中\n\n**⑤ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑥ 追加到 log.md**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n### 4. Archive（归档对话内容）\n\n将当前 AI 对话中有价值的结论直接存入知识库，无需切换工具。\n\n**触发词**（任意一种均可触发）：\n- 「把刚才说的存进去」\n- 「这个结论存入知识库」\n- 「记下来」\n- 「归档这段对话」\n- 「存入知识库」\n\n**Agent 执行流程**：\n\n**① 确定目标知识库**：执行 A+B 策略（见会话启动协议）。\n\n**② 识别要存的内容**：最近相关对话轮次或用户明确指定的结论段落。\n\n**③ 判断内容类型**：\n\n| 内容特征 | 类型 | 目标文件夹 |\n|---------|------|-----------|\n| 概念解释、技术原理 | `concept` | `concepts/` |\n| 两个或多个事物的对比分析 | `comparison` | `comparisons/` |\n| 有价值的问答、深度分析结论 | `query` | `queries/` |\n| 无法判断 | — | 询问用户 |\n\n**④ 生成笔记并保存**：\n\n```bash\n# Step 1：Write 工具将整理后的内容写入 /tmp/wiki-archive.md（纯 Markdown）\nprintf '%s\\n' '{\n  \"title\": \"<笔记标题>.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<对应子文件夹ID>\",\n  \"contentFile\": \"/tmp/wiki-archive.md\"\n}' | youdaonote save --json\n```\n\n**⑤ 更新 index.md + log.md**。\n\n**⑥ 回复确认**：「已存入 `concepts/<标题>.md`（fileId: WEBxxx）」\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 schema.md 底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- index.md: WEB1a2b3c4d5e6f\n- log.md: WEB7a8b9c0d1e2f\n- schema.md: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 index.md**：先读 index.md，通过目录定位\n2. **关键词搜索**：`youdaonote search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 笔记内容写入标准模式\n\n所有含换行的 Markdown 内容，统一使用 **`contentFile` 两步模式**（Write 工具写纯 Markdown → `save` JSON 传路径）：\n\n```bash\n# Step 1：Write 工具将 Markdown 内容写入本地文件（纯 Markdown，无需任何 JSON 转义）\n# 写入 /tmp/wiki-xxx.md，内容就是普通的 Markdown\n\n# Step 2：save JSON 中只放路径，CLI 自行读取文件\nprintf '%s\\n' '{\n  \"title\": \"note-title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<FOLDER_ID>\",\n  \"contentFile\": \"/tmp/wiki-xxx.md\"\n}' | youdaonote save --json\n\n# 更新已有笔记：同样先 Write 工具写文件，再 --file 传递\nyoudaonote update <fileId> --file /tmp/wiki-xxx.md\n```\n\n> ⚠️ **必须先完成 Step 1**：`/tmp/` 文件不会凭空存在，Agent 必须用 Write 工具显式创建。若 `/tmp/` 权限受限，可改用相对路径如 `./wiki-temp.md`，操作完成后删除。\n>\n> **为何用 `contentFile` 而非内联 `content`**：内联 `content` 需要将所有换行、引号、反斜杠进行 JSON 转义（`\\n`、`\\\"`、`\\\\`），极易出错。`contentFile` 只是路径字符串，无转义问题。\n\n### 会话间恢复\n\n新会话开始时，遵循文档开头的**会话启动协议**（强制执行）：\n\n1. `youdaonote list` 扫描根目录，定位 `youdaonote-wiki-registry.md`\n2. 读取注册表，确定目标知识库（A+B 策略）\n3. 读取目标知识库的 schema.md，获取所有 fileId\n4. 可选：读取 index.md 了解当前知识库状态\n5. 可选：读取 log.md 了解最近操作\n\n> 注册表不存在时自动重建，无需用户干预。\n\n## 切换知识库\n\n**触发词**（任意一种均可触发）：\n- `wiki-switch`\n- 「切换知识库」\n- 「用哪个知识库」\n- 「换一个知识库」\n- 「选知识库」\n- \"switch wiki\"\n- \"use another wiki\"\n- \"which wiki\"\n- \"change wiki\"\n\n**Agent 执行流程**：\n\n**① 读取全局注册表**：\n\n```bash\nyoudaonote list   # 扫描根目录，找到 youdaonote-wiki-registry.md\nyoudaonote read <registryFileId>\n```\n\n**② 列出所有知识库**：\n\n从注册表中解析出所有已注册的知识库，展示给用户：\n\n> 当前已有以下知识库：\n> 1. `ai-wiki` — AI 研究（最近访问：2026-04-15）\n> 2. `invest-wiki` — 投资笔记（最近访问：2026-04-10）\n>\n> 请选择要操作的知识库（输入编号或名称）：\n\n**③ 切换到用户选择的知识库**：\n\n读取目标知识库的 `schema.md`，获取所有 fileId，后续操作均在该知识库上执行。\n\n**边界情况**：\n\n| 情况 | 行为 |\n|------|------|\n| 仅 1 个知识库 | 告知用户只有一个知识库且已处于活跃状态，无需切换 |\n| 注册表为空或不存在 | 告知无知识库，建议用 `wiki-init` 创建 |\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 index.md 和 log.md**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少用 `→` 引用一个其他页面\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **❌ 禁止在笔记内容中使用 shell 命令替换**——`$(cat /tmp/xxx.md)` 在单引号 heredoc（`cat <<'EOF'`）或 `printf '%s\\n' '...'` 中不会展开，会被字面量写入笔记。保存笔记内容必须使用两步模式：先用 Write 工具将内容写入文件，再通过 `--file` 参数传递。\n  ```bash\n  # ❌ 错误：单引号 'EOF' 禁用 shell 展开，$(cat ...) 成为字面量\n  cat <<'EOF' | youdaonote save --json\n  {\"content\": \"$(cat /tmp/file.md)\"}\n  EOF\n\n  # ✅ 正确：Step 1 Write 工具写文件，Step 2 --file 传递\n  # （Step 1 已完成：Write 工具已将内容写入 /tmp/wiki-note.json）\n  youdaonote save --file /tmp/wiki-note.json --json\n  ```\n- **笔记标题使用小写加连字符**——如 `transformer-architecture.md`，避免使用空格和特殊字符\n- **保持 schema.md 的 fileId 注册表更新**——这是跨会话恢复和注册表自动重建的基础\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1776766001194\n}\n\nArchive v1.0.0: 2 files, 6279 bytes\n\nFiles: SKILL.md (14443b), _meta.json (138b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: youdaonote-llm-wiki\ndescription: \"有道云笔记知识库 Skill。当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」等场景时使用此 Skill，而非 youdaonote Skill。基于 Karpathy LLM Wiki 模式，在有道云笔记中构建持久化、可互联的 Markdown 知识库，支持素材摄入、知识查询、一致性检查。\"\nversion: 1.0.0\nminCliVersion: \"1.2.3\"\ncategory: research\ntags: [wiki, knowledge-base, research, notes, markdown]\nbased_on: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n---\n\n# YoudaoNote LLM Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查、可分享**，不限于本地开发环境。\n\n## 前置条件\n\n1. **youdaonote CLI 可用**：运行 `youdaonote list` 确认 CLI 已安装且 API Key 已配置\n2. **CLI 版本 ≥ 1.2.3**：运行 `youdaonote version` 确认版本，低于此版本需升级（`curl -fsSL https://artifact.lx.netease.com/download/youdaonote-cli/install.sh | bash -s -- -f -b ~/.local/bin`）\n3. **文件夹结构由 Agent 自动创建**：初始化时 Agent 会自动执行 `youdaonote mkdir` 建立以下结构：\n\n```\nWiki/                       ← 根文件夹（名称可自定义）\n├── Raw/                    ← 原始素材（immutable，不可修改已有笔记）\n├── Entities/               ← 实体页（人物、组织、产品、工具）\n├── Concepts/               ← 概念页（主题、技术、方法论）\n├── Comparisons/            ← 对比分析页\n└── Queries/                ← 值得保留的查询结果\n```\n\n## 架构\n\n### 文件夹结构与用途\n\n| 文件夹 | 存放内容 | 说明 |\n|--------|----------|------|\n| `Wiki/`（根） | 系统笔记：Index、Log、Schema | Wiki 管理中枢 |\n| `Wiki/Raw/` | 原始素材笔记（type: `raw`） | **只读**——Agent 不修改已有素材，修正写在 Wiki 页面中 |\n| `Wiki/Entities/` | 实体页（type: `entity`） | 人物、组织、产品、工具，每个实体一个笔记 |\n| `Wiki/Concepts/` | 概念页（type: `concept`） | 主题、技术、方法论，每个概念一个笔记 |\n| `Wiki/Comparisons/` | 对比分析页（type: `comparison`） | 并排分析，表格形式优先 |\n| `Wiki/Queries/` | 查询归档页（type: `query`） | 值得保留的深度分析或综合回答 |\n\n**系统笔记**（存放在根文件夹，每个 Wiki 有且仅有一份）：\n\n| 笔记标题 | 用途 |\n|----------|------|\n| `Wiki Index.md` | 内容目录——每个 Wiki 页面的一行摘要，按文件夹分组 |\n| `Wiki Log.md` | 操作日志（只追加） |\n| `Wiki Schema.md` | 结构约定、领域定义、fileId 注册表 |\n\n**内容笔记**（标题自由命名，存放在对应文件夹中）：\n\n| 文件夹 | frontmatter type | 标题示例 |\n|--------|------------------|----------|\n| `Raw/` | `raw` | `Karpathy LLM Wiki 2026.md` |\n| `Entities/` | `entity` | `Andrej Karpathy.md` |\n| `Concepts/` | `concept` | `Transformer Architecture.md` |\n| `Comparisons/` | `comparison` | `GPT-4o vs Claude Sonnet.md` |\n| `Queries/` | `query` | `2026年主流 Agent 框架对比.md` |\n\n### Frontmatter 规范\n\n每个内容笔记必须以 YAML frontmatter 开头：\n\n```yaml\n---\ntitle: Transformer Architecture\ncreated: 2026-04-11\nupdated: 2026-04-11\ntype: concept\ntags: [ai, architecture, deep-learning]\nsources: [Karpathy LLM Wiki 2026, Attention Is All You Need]\nrefs: [Self-Attention, GPT-4o vs Claude Sonnet]\n---\n```\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| `title` | 是 | 页面标题（与笔记标题一致，不含 `.md`） |\n| `created` | 是 | 创建日期 YYYY-MM-DD |\n| `updated` | 是 | 最后更新日期 |\n| `type` | 是 | `entity` / `concept` / `comparison` / `query` / `raw` |\n| `tags` | 是 | 标签列表，用于分类和检索 |\n| `sources` | 否 | 引用的原始素材标题列表 |\n| `refs` | 否 | 交叉引用的其他 Wiki 页面标题列表 |\n\n### 交叉引用\n\n云端笔记不支持 `[[wikilinks]]`，使用以下约定：\n\n- 文中提到其他 Wiki 页面时，使用 **`→ 页面标题`** 标记（如 `→ Self-Attention`）\n- `refs` 字段列出所有交叉引用的页面标题，供 Agent 解析\n- Agent 通过 Index 笔记或 `youdaonote search` 定位被引用页面\n\n## 初始化 Wiki\n\n当用户要求创建 Wiki 时：\n\n① **询问 Wiki 根文件夹名称**（默认 `Wiki`）及放置位置（默认根目录）。\n\n② **自动创建文件夹结构**（共 6 个文件夹）：\n```bash\n# 在根目录下创建 Wiki 根文件夹\nyoudaonote mkdir \"Wiki\"\n# 获取刚创建的 Wiki 文件夹 ID\nyoudaonote list              # 找到「Wiki」条目，记录 id → ROOT_ID\n\n# 在 Wiki 根文件夹下创建 5 个子文件夹\nyoudaonote mkdir \"Raw\"       -f <ROOT_ID>\nyoudaonote mkdir \"Entities\"  -f <ROOT_ID>\nyoudaonote mkdir \"Concepts\"  -f <ROOT_ID>\nyoudaonote mkdir \"Comparisons\" -f <ROOT_ID>\nyoudaonote mkdir \"Queries\"   -f <ROOT_ID>\n\n# 获取 5 个子文件夹 ID\nyoudaonote list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID\n```\n\n> 若同名文件夹已存在，`mkdir` 不会报错（服务端幂等处理），但也不会返回已有文件夹的 ID。此时直接通过 `youdaonote list` 找到该文件夹并获取其 ID 即可，无需重建。\n\n③ **记录所有文件夹 ID**（6 个）：\n\n| 文件夹 | 变量名 | 用途 |\n|--------|--------|------|\n| Wiki（根） | `ROOT_ID` | 存放系统笔记 |\n| Raw | `RAW_ID` | 存放原始素材 |\n| Entities | `ENTITY_ID` | 存放实体页 |\n| Concepts | `CONCEPT_ID` | 存放概念页 |\n| Comparisons | `COMPARISON_ID` | 存放对比分析页 |\n| Queries | `QUERY_ID` | 存放查询归档页 |\n\n④ **创建 Schema 笔记**（存放在根文件夹，向用户询问 Wiki 主题后定制）：\n```bash\nprintf '%s\\n' '{\n  \"title\": \"Wiki Schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"content\": \"---\\ntitle: Wiki Schema\\ncreated: 2026-04-11\\nupdated: 2026-04-11\\ntype: schema\\ntags: [wiki, config]\\n---\\n\\n# Wiki Schema\\n\\n## 领域\\n[用户指定的主题]\\n\\n## 约定\\n- 每个笔记以 YAML frontmatter 开头\\n- 交叉引用使用「→ 页面标题」\\n- 更新页面时必须更新 updated 日期\\n- 每个新页面必须加入 Index\\n- 每个操作必须追加到 Log\\n- 素材笔记不可修改，修正写在对应 Wiki 页面中\\n\\n## 文件夹 ID 注册表\\n- ROOT: <ROOT_ID>\\n- RAW: <RAW_ID>\\n- ENTITY: <ENTITY_ID>\\n- CONCEPT: <CONCEPT_ID>\\n- COMPARISON: <COMPARISON_ID>\\n- QUERY: <QUERY_ID>\\n\\n## 笔记 fileId 注册表\\n- Wiki Index: (待填)\\n- Wiki Log: (待填)\\n- Wiki Schema: (待填)\"\n}' | youdaonote save --json\n```\n\n⑤ **创建 Index 笔记**（存放在根文件夹）：\n```bash\nprintf '%s\\n' '{\n  \"title\": \"Wiki Index.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"content\": \"# Wiki Index\\n\\n> 内容目录，所有 Wiki 页面的一行摘要。\\n> 查询前先读此文件定位相关页面。\\n\\n## 素材（Raw）\\n\\n## 实体（Entity）\\n\\n## 概念（Concept）\\n\\n## 对比（Comparison）\\n\\n## 查询（Query）\"\n}' | youdaonote save --json\n```\n\n⑥ **创建 Log 笔记**（存放在根文件夹）：\n```bash\nprintf '%s\\n' '{\n  \"title\": \"Wiki Log.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"content\": \"# Wiki Log\\n\\n> 按时间顺序记录所有 Wiki 操作，只追加不修改。\\n\\n## [2026-04-11] create - Wiki 初始化\\n- 领域：[领域]\\n- 文件夹结构已确认\\n- 创建 Schema、Index、Log\"\n}' | youdaonote save --json\n```\n\n⑦ **记录系统笔记的 fileId**：\n```bash\nyoudaonote list -f <ROOT_ID>    # 获取刚创建的三个笔记 ID\n```\n将三个 fileId 回填到 Schema 笔记的「笔记 fileId 注册表」中。\n\n⑧ **向用户确认** Wiki 已就绪。\n\n## 核心操作\n\n### 1. Ingest（摄入素材）\n\n当用户提供素材（URL、文本、文件）时，将其整合进知识库。\n\n**① 捕获原始素材**（存入 `Raw/` 文件夹）\n\n- **URL** → 优先使用 `youdaonote clip` 剪藏到 Raw 文件夹：\n  ```bash\n  youdaonote clip \"https://example.com/article\" -f <RAW_ID> --json\n  ```\n  剪藏完成后，获取生成笔记的 fileId 和内容。\n\n- **纯文本 / 粘贴内容** → 用 `save` 创建 Raw 笔记：\n  ```bash\n  printf '%s\\n' '{\n    \"title\": \"Source Title.md\",\n    \"type\": \"md\",\n    \"parentId\": \"<RAW_ID>\",\n    \"content\": \"---\\ntitle: Source Title\\ncreated: 2026-04-11\\nupdated: 2026-04-11\\ntype: raw\\ntags: [tag1, tag2]\\n---\\n\\n# Source Title\\n\\n[原始内容]\"\n  }' | youdaonote save --json\n  ```\n\n**② 与用户讨论要点**——什么有趣、什么对当前领域重要。\n\n**③ 创建或更新 Wiki 页面**（存入对应子文件夹）：\n- 素材较长时先创建一个 Raw 摘要页（→ `Raw/`）\n- 为关键人物/组织/工具创建或更新 Entity 页（→ `Entities/`）\n- 为关键概念/想法创建或更新 Concept 页（→ `Concepts/`）\n- 在新旧页面之间添加交叉引用（`→ 页面标题` + `refs` 字段）\n\n创建新 Wiki 页面（以 Concept 为例，其他类型换对应的 parentId）：\n```bash\nprintf '%s\\n' '{\n  \"title\": \"Page Title.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<CONCEPT_ID>\",\n  \"content\": \"---\\ntitle: Page Title\\ncreated: 2026-04-11\\nupdated: 2026-04-11\\ntype: concept\\ntags: [tag1]\\nsources: [Source Title]\\nrefs: [Related Page]\\n---\\n\\n# Page Title\\n\\n内容...\"\n}' | youdaonote save --json\n```\n\n**type 与 parentId 对应关系**：\n\n| type | parentId |\n|------|----------|\n| `raw` | `<RAW_ID>` |\n| `entity` | `<ENTITY_ID>` |\n| `concept` | `<CONCEPT_ID>` |\n| `comparison` | `<COMPARISON_ID>` |\n| `query` | `<QUERY_ID>` |\n\n更新已有页面（需要已知 fileId）：\n```bash\nyoudaonote update <fileId> --file updated-content.md\n```\n\n**④ 更新导航**：\n- 在 Index 笔记中添加新页面条目（`youdaonote update <indexFileId> ...`）\n- 在 Log 笔记中追加操作记录\n\n**⑤ 报告变更**——列出创建和更新的所有笔记。\n\n> 一个素材可能触发 5-10 个页面的更新，这是正常的复合增长效应。\n\n### 2. Query（查询知识）\n\n当用户提问时：\n\n**① 读取 Index 笔记**定位相关页面：\n```bash\nyoudaonote read <indexFileId>\n```\n\n**② 读取相关页面**：\n```bash\nyoudaonote read <fileId>\n```\n\n**③ 从编译好的知识中综合答案**。\n\n**④ 归档有价值的答案**——如果答案是一次有深度的对比分析或发现，创建一个 Query 类型的 Wiki 页面保存下来，避免对话结束后丢失。\n\n**⑤ 更新 Log 笔记**。\n\n**大规模 Wiki（50+ 页面）**：用 `youdaonote search` 按关键词搜索：\n```bash\nyoudaonote search \"transformer\"\n```\n\n> 注意：搜索仅返回前 15 条结果。若需要更多，使用 `youdaonote call searchNotes keyword=xxx startIndex=15`。\n\n### 3. Lint（一致性检查）\n\n当用户要求审计 Wiki 时：\n\n**① 列出各文件夹的笔记**：\n```bash\nyoudaonote list -f <ROOT_ID>          # 系统笔记\nyoudaonote list -f <RAW_ID>           # 素材\nyoudaonote list -f <ENTITY_ID>        # 实体\nyoudaonote list -f <CONCEPT_ID>       # 概念\nyoudaonote list -f <COMPARISON_ID>    # 对比\nyoudaonote list -f <QUERY_ID>         # 查询\n```\n\n**② 读取 Index 笔记**，对比实际笔记列表。\n\n**③ 逐项检查**：\n- **矛盾检测**：读取同主题页面，标记冲突的声明\n- **孤立页面**：检查每个页面的 `refs` 字段，找出没有被任何其他页面引用的页面\n- **过期内容**：`updated` 日期相对于新素材过于陈旧的页面\n- **数据空白**：被引用但尚无专门页面的主题\n- **Index 完整性**：每个 Wiki 页面都应出现在 Index 中\n\n**④ 报告发现**，给出具体笔记标题和建议操作。\n\n**⑤ 追加到 Log**：`## [YYYY-MM-DD] lint - 发现 N 个问题`\n\n## 工作流技巧\n\n### fileId 管理\n\nAgent 需要维护关键笔记的 fileId 映射。建议在 Schema 笔记底部维护一个 ID 注册表：\n\n```markdown\n## fileId 注册表（Agent 维护）\n- Wiki Index: WEB1a2b3c4d5e6f\n- Wiki Log: WEB7a8b9c0d1e2f\n- Wiki Schema: WEB3a4b5c6d7e8f\n```\n\n每次创建新笔记后，将 fileId 追加到此表。这样 Agent 在后续会话中可以直接查找 fileId，无需重新 `list`。\n\n### 搜索策略\n\n1. **首选 Index**：先读 Index 笔记，通过目录定位\n2. **关键词搜索**：`youdaonote search \"关键词\"` 覆盖标题和内容\n3. **按类型浏览**：`youdaonote list -f <对应子文件夹ID>` 列出某类所有笔记\n\n### 大内容处理\n\n笔记内容超过 10KB 时，使用文件中转：\n```bash\n# 将内容写入临时文件\n# 然后通过 --file 参数传递\nyoudaonote save --file /tmp/wiki-page.json --json\nyoudaonote update <fileId> --file /tmp/wiki-content.md\n```\n\n### 会话间恢复\n\n新会话开始时，Agent 应：\n1. 读取 Schema 笔记获取 Wiki 配置和 fileId 注册表\n2. 读取 Index 笔记了解当前知识库状态\n3. 可选：读取 Log 笔记了解最近操作\n\n## 注意事项\n\n- **不要修改 type: raw 的笔记**——素材是不可变的，修正和补充写在 Wiki 页面中\n- **每次操作都更新 Index 和 Log**——跳过会让知识库逐渐退化\n- **不要创建没有交叉引用的页面**——孤立页面等于不存在。每个页面至少引用一个其他页面\n- **Frontmatter 必须完整**——它支撑搜索、过滤和过期检测\n- **摘要要简洁**——一个 Wiki 页面应该 30 秒内可扫读。深度分析放到专门的页面\n- **大批量更新前先确认**——如果一次 Ingest 会影响 10+ 个已有页面，先与用户确认范围\n- **笔记标题避免特殊字符**——不要使用 `\\ / : * ? \" < > |`，用中划线 `-` 或空格分隔\n- **保持 fileId 注册表更新**——这是跨会话恢复的关键\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776044055455\n}","readmeExcerpt":"Skill: YoudaoNote LLM Wiki Owner: lephix Summary: 当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-05-11T01:07:58.713Z | auto - minCliVersion 由 1.3.2 升级为 1.3.3，要求新版有道云笔记 CLI。 - 其他内容及功能保持不变。 v1.0.4 | 2026-05-05T00:30:39.807Z | auto - Requires youdaonote CLI v","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ← 实体页（人物、组织、产品、工具）\n├── concepts/            ← 概念页（主题、技术、方法论）\n├── comparisons/         ← 对比分析页\n└── queries/             ← 值得保留的查询结果"},{"language":"bash","snippet":"youdaonote -s wiki list   # 扫描根目录（只读）"},{"language":"bash","snippet":"youdaonote -s wiki search \"schema.md\""},{"language":"bash","snippet":"# Step 1：Write 工具将注册表内容写入 /tmp/wiki-registry.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"youdaonote-wiki-registry.md\",\n  \"type\": \"md\",\n  \"parentId\": \"0\",\n  \"contentFile\": \"/tmp/wiki-registry.md\"\n}' | youdaonote -s wiki save --json"},{"language":"bash","snippet":"# 在根目录下创建知识库根文件夹\nyoudaonote -s wiki mkdir \"<知识库名称>\"\n# 获取根文件夹 ID\nyoudaonote -s wiki list              # 找到「<知识库名称>」条目，记录 id → ROOT_ID\n\n# 在根文件夹下创建 5 个子文件夹\nyoudaonote -s wiki mkdir \"raw\"         -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"entities\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"concepts\"    -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"comparisons\" -f <ROOT_ID>\nyoudaonote -s wiki mkdir \"queries\"     -f <ROOT_ID>\n\n# 获取子文件夹 ID\nyoudaonote -s wiki list -f <ROOT_ID>   # 记录 RAW_ID、ENTITY_ID、CONCEPT_ID、COMPARISON_ID、QUERY_ID"},{"language":"bash","snippet":"# Step 1：Write 工具将 schema 内容写入 /tmp/wiki-schema.md（纯 Markdown，无需 JSON 转义）\nprintf '%s\\n' '{\n  \"title\": \"schema.md\",\n  \"type\": \"md\",\n  \"parentId\": \"<ROOT_ID>\",\n  \"contentFile\": \"/tmp/wiki-schema.md\"\n}' | youdaonote -s wiki save --json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: youdaonote-llm-wiki\ndescription: \"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wiki-query、wiki-lint、wiki-archive、wiki-switch 时使用此 Skill，而非 youdaonote Skill。\"\nversion: 1.0.5\nminCliVersion: \"1.3.3\"\nhomepage: https://note.youdao.com\nauthor: lephix\nmetadata:\n  openclaw:\n    homepage: https://note.youdao.com\n    requires:\n      bins:\n        - youdaonote\n      env:\n        - YOUDAONOTE_API_KEY\n    basedOn: \"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\n    category: research\n    tags: [wiki, knowledge-base, research, notes, markdown]\n---\n\n# YoudaoNote Wiki — 有道云笔记知识库\n\n在有道云笔记中构建持久化、可复合增长的知识库。\n基于 [Andrej Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)。\n\n传统 RAG 每次查询从零开始检索，知识不复合。Wiki 模式将知识**编译一次、持续维护**——交叉引用已经建好，矛盾已经标记，综合分析反映全部素材。\n\n**分工**：人类策划素材方向、指导分析重点；Agent 负责摘要、交叉引用、归档、维护一致性。\n\n**独特优势**：知识库存储在有道云笔记云端，天然**多端同步、随时可查**，不限于本地开发环境。\n\n## 数据写入声明（Persistence Disclosure）\n\n本 skill 是一个**写操作密集型 Agent**：在您的授权下，会对您的有道云笔记账户做以下持久化修改，请在开始使用前知悉：\n\n| 动作类别 | 触发时机 | 写入内容 |\n|---------|---------|---------|\n| 创建文件夹 | 初始化 Wiki 时 | 1 个根文件夹 + 5 个子文件夹（`raw/`、`entities/`、`concepts/`、`comparisons/`、`queries/`） |\n| 系统笔记 | 初始化 Wiki 时 | 根文件夹下创建 `schema.md`、`index.md`、`log.md` 三个笔记 |\n| 全局注册表 | 首次创建 Wiki 或注册表缺失时（**需用户确认**） | 根目录下的 `youdaonote-wiki-registry.md` 笔记（记录所有 Wiki 元信息） |\n| 内容笔记 | 用户主动执行 Ingest / Archive 时 | 在对应子文件夹中创建或更新 Wiki 页面（一次 Ingest 可能更新 5-10 个页面） |\n| 日志与索引 | 每次写入操作后 | 更新 `index.md`、追加 `log.md` |\n\n**安全边界**：\n\n- 本 skill 只读写您通过 `youdaonote config set apiKey` 配置的有道云笔记账号内的数据，不涉及账号权限之外的任何操作。\n- 不会修改 `type: raw` 的原始素材（素材 immutable）。\n- 所有写入操作都在有道云笔记客户端 / Web 端可见、可编辑、可删除。\n- 大批量写入（单次操作将影响 10+ 已有页面）前，Agent **必须与用户确认**后再执行。\n\n## 前置检查（安装由用户手动执行）\n\n执行任何操作前，Agent 必须先运行 `youdaonote list` 检测 CLI 是否可用：\n\n- **`command not found`** → 跳转「CLI 未安装处理」小节，仅向用户提供官方安装命令并提示用户手动执行；等待用户回复\"已安装\"后再继续原请求\n- **API Key 错误**（未配置 / 鉴权失败）→ 提示用户访问 **https://mopen.163.com** 获取 API Key（须使用手机号登录，且云笔记账号已绑定手机号），然后执行 `youdaonote config set apiKey <用户提供的Key>`。**获取 API Key 的地址只有这一个，禁止告知用户其他地址。**\n- **版本过低**（低于 `1.3.3`）→ CLI 支持 `upgrade` 命令时提示用户执行 `youdaonote upgrade`，否则跳转「CLI 未安装处理」小节的升级指引，由用户手动执行升级；Windows 用户或升级失败时参考安装指南（https://note.youdao.com/help-center/cli-install-guide.html）\n- **正常返回目录列表** → 继续执行用户请求\n\n**使用统计**：CLI 安装确认后，后续所有 Wiki 操作命令**必须**加 `-s wiki` 全局参数（置于 `youdaonote` 之后、子命令之前），用于统计 Wiki Skill 的使用情况。示例：`youdaonote -s wiki list`、`youdaonote -s wiki search \"关键词\"`。仅安装检查（`youdaonote list`）、版本检查（`youdaonote version`）、升级（`youdaonote upgrade`）、API Key 配置（`youdaonote config set apiKey`）等诊断/设置命令无需添加。\n\n### Wiki 文件夹结构（由 Agent 在用户同意初始化后创建）\n\n初始化 Wiki 时（用户确认创建后），Agent 会执行 `youdaonote -s wiki mkdir` 建立以下结构：\n\n```\n<知识库名>/              ← 根文件夹（用户自命名，如「AI研究」「投资笔记」）\n├── schema.md            ← 结构约定、领域定义、fileId 注册表\n├── index.md             ← 内容目录\n├── log.md               ← 操作日志（只追加）\n├── raw/                 ← 原始素材（immutable，不可修改已有笔记）\n├── entities/            ←"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn708dx97cr4jme6wym7vvq72d82a0vf\",\n  \"slug\": \"youdaonote-llm-wiki\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1778461678713\n}"},{"path":"skill-card.md","content":"## Description:\n\nYoudaoNote LLM Wiki helps an agent create, maintain, query, lint, and archive a persistent LLM-style knowledge base in YoudaoNote.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[lephix](https://clawhub.ai/user/lephix)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to turn YoudaoNote into a structured wiki for research notes, source ingestion, cross-linked summaries, archived conversations, and consistency checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can read and write persistent YoudaoNote wiki content.\n\nMitigation: Use it only for accounts and workspaces where agent access to wiki content is acceptable, and review proposed changes before write operations.\n\nRisk: Archived notes may contain secrets, credentials, personal identifiers, or sensitive business content.\n\nMitigation: Ask the agent to show exactly what will be saved before archiving and remove sensitive content before writing notes.\n\nRisk: The release evidence flags an unverified remote installer command and recommends caution.\n\nMitigation: Prefer a verified YoudaoNote CLI installation path and review installer contents before running curl-to-bash commands.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/lephix/skills/youdaonote-llm-wiki)\n- [YoudaoNote homepage](https://note.youdao.com)\n- [YoudaoNote CLI install guide](https://note.youdao.com/help-center/cli-install-guide.html)\n- [LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown responses with YoudaoNote CLI commands and note content guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create or update cloud note folders and Markdown notes through the YoudaoNote CLI.]\n\n## Skill Version(s):\n\n1.0.5 (source: frontmatter and release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi... Skill: YoudaoNote LLM Wiki Owner: lephix Summary: 当用户提到「知识库」「Wiki」「新建知识库」「创建 Wiki」「初始化 Wiki」「LLM Wiki」「素材摄入」「知识查询」「知识库审计」「一致性检查」「归档对话」「记下来」「存入知识库」「切换知识库」「用哪个知识库」「换一个知识库」「选知识库」，或使用助记词 wiki-init、wiki-ingest、wi... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-05-11T01:07:58.713Z | auto - minCliVersion 由 1.3.2 升级为 1.3.3，要求新版有道云笔记 CLI。 - 其他内容及功能保持不变。 v1.0.4 | 2026-05-05T00:30:39.807Z | auto - Requires youdaonote CLI v","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1036,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:38:56.938Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:56:19.789Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}