{"id":"d0c32912-a0f6-4cd1-8ff2-b1a72adbfa84","entityType":"agent","slug":"clawhub-iswalle-getnote","name":"得到大脑（原 Get 笔记）","canonicalUrl":"https://www.xpersona.co/agent/clawhub-iswalle-getnote","canonicalPath":"/agent/clawhub-iswalle-getnote","generatedAt":"2026-10-09T13:16:43.589Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T01:31:34.585Z","emptyReason":null},"description":"通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索和管理真实笔记。用户要保存链接/图片、上传文件到知识库、查询文件限制、读取标记/发芽报告/时间线、整理知识库/文件夹、订阅博主、管理标签，或明确要求登录、诊断或升级时使用；不会自行安装或更新 Skill。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 31K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s171t5enkq601z81e66av5hzex83g0qm:getnote","sourceUrl":"https://clawhub.ai/iswalle/getnote","homepage":"https://clawhub.ai/iswalle/skills/getnote","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/iswalle/getnote","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/iswalle/skills/getnote","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":83,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"得到大脑（原 Get 笔记） technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T01:31:34.585Z","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-09T01:31:34.585Z","emptyReason":null},"stars":null,"forks":null,"downloads":30968,"packageName":null,"latestVersion":"2.1.0","tractionLabel":"31K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T01:31:34.585Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T01:31:34.585Z","lastCrawledAt":"2026-10-09T01:31:34.585Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T01:31:34.585Z","lastVerifiedAt":null,"highlights":[{"version":"2.1.0","createdAt":"2026-09-24T10:03:13.498Z","changelog":"新增知识库文件上传及实时格式限制，临时授权直传 OSS 无需 CLI 二次登录；标记、发芽、章节时间线独立读取。需要 CLI 1.6.0。","fileCount":8,"zipByteSize":20812},{"version":"2.0.4","createdAt":"2026-09-02T05:04:35.129Z","changelog":"知识库列表默认仅返回 DEFAULT；支持按 DEFAULT、CUSTOMER、BOOKSPACE、TEAMSPACE 指定 scope；订阅列表只返回真实订阅且排除自建知识库。","fileCount":9,"zipByteSize":20349},{"version":"2.0.3","createdAt":"2026-08-19T04:28:23.275Z","changelog":"统一安装、更新与诊断闭环；对齐 CLI capabilities 2.2；移除失效的 install.sh 引导。","fileCount":9,"zipByteSize":20139},{"version":"2.0.2","createdAt":"2026-08-18T17:37:09.497Z","changelog":"统一 ClawHub 对外展示名称为“得到大脑（原 Get 笔记）”。","fileCount":9,"zipByteSize":19935},{"version":"2.0.1","createdAt":"2026-08-17T04:00:17.231Z","changelog":"收紧安全边界：改由平台声明安装官方 CLI，移除自安装与自更新脚本，分离 CLI 与 Skill 更新并明确外部影响。","fileCount":9,"zipByteSize":19834},{"version":"2.0.0","createdAt":"2026-08-14T06:56:29.392Z","changelog":"以官方 CLI 为稳定执行核心；新增团队知识库、知识库文件夹与抖音博主订阅；强化链接和图片异步保存、结果校验及错误处理；简化安装和更新流程。","fileCount":10,"zipByteSize":22244},{"version":"1.9.1","createdAt":"2026-07-27T13:23:37.236Z","changelog":"安全审计修复：锁定官方 API 地址，补充权限与隐私说明，收窄触发条件，并为删除、移出和公开分享增加明确确认。","fileCount":15,"zipByteSize":35546},{"version":"1.9.0","createdAt":"2026-07-27T10:01:58.455Z","changelog":"对齐新版 OpenAPI 契约：结构化错误、雪花 ID、幂等、三类知识库、图片上传、分享与直播能力；更新会员购买渠道。","fileCount":15,"zipByteSize":33517}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171t5enkq601z81e66av5hzex83g0qm:getnote","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s171t5enkq601z81e66av5hzex83g0qm:getnote` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/iswalle/getnote before using production credentials."],"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-iswalle-getnote/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/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-09T13:16:43.583Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-iswalle-getnote/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":"medium","updatedAt":"2026-10-09T01:31:34.585Z","emptyReason":null},"readme":"Skill: 得到大脑（原 Get 笔记）\n\nOwner: iswalle\n\nSummary: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索和管理真实笔记。用户要保存链接/图片、上传文件到知识库、查询文件限制、读取标记/发芽报告/时间线、整理知识库/文件夹、订阅博主、管理标签，或明确要求登录、诊断或升级时使用；不会自行安装或更新 Skill。\n\nTags: latest:2.1.0\n\nVersion history:\n\nv2.1.0 | 2026-09-24T10:03:13.498Z | user\n\n新增知识库文件上传及实时格式限制，临时授权直传 OSS 无需 CLI 二次登录；标记、发芽、章节时间线独立读取。需要 CLI 1.6.0。\n\nv2.0.4 | 2026-09-02T05:04:35.129Z | user\n\n知识库列表默认仅返回 DEFAULT；支持按 DEFAULT、CUSTOMER、BOOKSPACE、TEAMSPACE 指定 scope；订阅列表只返回真实订阅且排除自建知识库。\n\nv2.0.3 | 2026-08-19T04:28:23.275Z | user\n\n统一安装、更新与诊断闭环；对齐 CLI capabilities 2.2；移除失效的 install.sh 引导。\n\nv2.0.2 | 2026-08-18T17:37:09.497Z | user\n\n统一 ClawHub 对外展示名称为“得到大脑（原 Get 笔记）”。\n\nv2.0.1 | 2026-08-17T04:00:17.231Z | user\n\n收紧安全边界：改由平台声明安装官方 CLI，移除自安装与自更新脚本，分离 CLI 与 Skill 更新并明确外部影响。\n\nv2.0.0 | 2026-08-14T06:56:29.392Z | user\n\n以官方 CLI 为稳定执行核心；新增团队知识库、知识库文件夹与抖音博主订阅；强化链接和图片异步保存、结果校验及错误处理；简化安装和更新流程。\n\nv1.9.1 | 2026-07-27T13:23:37.236Z | user\n\n安全审计修复：锁定官方 API 地址，补充权限与隐私说明，收窄触发条件，并为删除、移出和公开分享增加明确确认。\n\nv1.9.0 | 2026-07-27T10:01:58.455Z | user\n\n对齐新版 OpenAPI 契约：结构化错误、雪花 ID、幂等、三类知识库、图片上传、分享与直播能力；更新会员购买渠道。\n\nv1.8.9 | 2026-07-08T12:48:09.676Z | auto\n\n# getnote 1.8.9 Changelog\n\n- Documentation updates in `references/api-details.md`, `references/knowledge.md`, and `references/list.md` to improve API reference clarity.\n- Minor updates in `package.json`.\n- Removed the now-unnecessary `skill-card.md` file for simplification.\n- No user-facing features or breaking changes.\n\nv1.8.8 | 2026-05-26T10:21:12.874Z | auto\n\ngetnote 1.8.8 更新日志\n\n- 更新依赖与元数据：package.json 和相关依赖项同步更新，保障兼容性与安全性。\n- 优化文档：调整 SKILL.md/README.md 内容，明确接口使用规范和开发者注意事项，无功能性变更。\n- 改进 API 说明和安全边界文档，便利开发及集成。\n\nv1.8.7 | 2026-05-26T10:01:22.184Z | auto\n\n- 优化描述语句，统一 Skill 名称中的应用全称为“得到大脑（Get笔记）”\n- “配置”相关描述中，“连接 Get笔记”调整为“连接得到大脑（Get笔记）”\n- 文档标题、Skill 说明等细节表述优化，更贴合产品统一用语\n- 其他功能未变，API、路由和用法保持一致\n\nv1.8.6 | 2026-05-26T09:58:31.753Z | auto\n\n- Skill名称更新为「得到大脑（Get笔记）」以匹配品牌统一。\n- 所有功能描述及指令示例中的「Get笔记」补充为「得到大脑（Get笔记）」。\n- 其它功能、API 说明与行为未作更改。\n\nv1.8.5 | 2026-05-26T09:56:44.476Z | auto\n\ngetnote v1.8.5\n\n- No file changes detected in this version.\n- No updates to functionality, documentation, or metadata.\n\nv1.8.4 | 2026-05-26T09:40:33.092Z | auto\n\n- 更新会员开通引导链接，调整为新版产品地址。\n- 在相关安全提示和错误码说明中，统一了会员升级页面 URL。\n- 其他文档内容保持不变，仅细节修正，无接口或功能变更。\n\nv1.8.3 | 2026-05-06T12:14:18.808Z | user\n\n新增反幻觉边界、失败重试策略、执行流程概览\n\nv1.8.2 | 2026-04-28T03:50:03.085Z | auto\n\n- Updated documentation for knowledge base, list, and tag management in reference files.\n- No breaking changes to API or behavior; changes are documentation-only.\n- Ensured all routes, field names, and usage guidelines are current in the markdown files.\n\nv1.8.1 | 2026-04-27T03:58:19.363Z | auto\n\n- 优化了自然语言路由中“biji.com/note/{note_id}”内链的处理，默认返回笔记内链，只有在用户明确要求时才生成分享链接\n- 提升指令/自然语言路由描述的准确性和细节，消除歧义\n- 文档补充和润色，无功能性变更\n\nv1.8.0 | 2026-04-23T10:39:59.659Z | auto\n\n- 优化自然语言路由：根据链接类型（如 biji.com/note/share_note/*、d.biji.com/* 和内部链接）细化处理逻辑，支持同步/异步返回对应 ID，内部链接直接进入详情页。\n- 明确正文引用其他笔记的内链要求和路径。\n- 路由表新增区分“同步返回 note_id”和“异步返回 task_id”场景。\n- 其他说明和细节说明同步增强，提升自然语言指令识别准确性。\n\nv1.7.0 | 2026-04-16T07:20:13.569Z | auto\n\ngetnote v1.7.0\n\n- Updated documentation for knowledge base (references/knowledge.md) and note list functionality (references/list.md).\n- Minor changes to package.json and internal references docs for improved accuracy and clarity.\n- No API or functional changes; documentation and metadata only.\n\nv1.6.0 | 2026-04-11T15:35:06.209Z | auto\n\n- Updated references/list.md with additional details or changes.\n- Updated package.json, likely to revise version or dependencies.\n- No breaking changes; existing functionality remains the same.\n\nv1.5.9 | 2026-04-11T15:25:41.519Z | auto\n\n- Updated note ID handling: removed next_cursor from the int64-safe JSON string replacements (use the returned cursor string for paging instead).\n- Cleaned comments and guidance regarding int64 parsing rules in JavaScript.\n- Documentation and instruction clarifications for agent implementers (SKILL.md, references/list.md, references/knowledge.md).\n- Removed the obsolete _meta.json file.\n\nv1.5.8 | 2026-04-09T12:06:38.093Z | auto\n\n- Added an explicit \"API 路由表\" section in SKILL.md, listing all available API endpoints with methods and paths.\n- No changes to core functionality—this version adds documentation to clarify endpoint usage.\n- Added _meta.json metadata file.\n- Updated package.json (details not shown).\n\nv1.3.3 | 2026-04-03T09:20:18.480Z | auto\n\ngetnote v1.3.3\n\n- Updated references/knowledge.md.  \n- No functional or breaking changes to core logic.\n\nv1.3.2 | 2026-04-03T05:46:47.796Z | auto\n\n- Updated references/knowledge.md.\n- No logic, interface, or routing changes in this release.\n- Documentation improved or supplemented for knowledge base-related content.\n\nv1.5.7 | 2026-03-26T11:08:18.598Z | auto\n\n- 提示用户通过 `/note config` 命令完成配置，不再自动发起 OAuth 授权流程。\n- `/note config` 指令说明更新为“配置 API Key 和 Client ID”。\n- 认证流程相关说明文字优化，移除了自动授权描述。\n- 其他文档内容未变。\n\nv1.5.6 | 2026-03-26T11:02:58.060Z | auto\n\ngetnote 1.5.6\n\n- Updated dependencies in package.json. \n- No changes to user-facing features or documentation.\n\nv1.5.5 | 2026-03-26T10:58:56.340Z | auto\n\nGetnote 1.5.5 provides a major documentation and structure update.\n\n- Completely restructured and condensed the main documentation in SKILL.md for clarity and fast decision-making.\n- Introduced a concise “指令路由表” (Command Routing Table), mapping common user actions to references and API endpoints.\n- Added new detailed reference files: knowledge.md, list.md, oauth.md, save.md, search.md, tags.md, to modularize API documentation.\n- Enhanced and clarified natural language routing and intent matching guidance.\n- Expanded and clarified error handling instructions.\n- Updated references/api-details.md with improved scope documentation.\n\nv1.5.2 | 2026-03-24T11:54:04.832Z | user\n\n安装后自动触发 OAuth 授权\n\nv1.5.1 | 2026-03-20T03:47:10.325Z | user\n\nSome details optimized\n\nv1.5.0 | 2026-03-19T10:31:38.327Z | user\n\n笔记详情支持原图、OAuth 增加确认码\n\nv1.3.1 | 2026-03-16T11:37:10.324Z | user\n\ngetnote 1.3.1\n\n- 新增全局和知识库范围的“语义搜索召回”相关说明和接口（支持新意图如“搜一下”“找找我哪些笔记提到了 XX”）。\n- SKILL.md 增加了“笔记 ID 处理规则”详细说明，强调 int64 ID 必须字符串化，保证跨语言调用安全。\n- SKILL.md 细化了接口请求、响应字段的 int64 相关兼容问题，明确各端代码适配与容错细节。\n- 更新意图和 API 范围，描述支持“语义召回、知识库搜索”等扩展功能。\n- 移除 upload_image.sh 脚本，不影响核心 API 或召回能力。\n\nv1.3.0 | 2026-03-12T10:21:30.676Z | user\n\nGet笔记 1.3.0\n\n- 新增支持“知识库博主订阅”和“直播总结”等相关意图，可查询订阅博主列表、博主内容和知识库内直播详情\n- API权限全量补充，新增 topic.blogger.read 和 topic.live.read 等相关接口和场景\n- 知识库查询结果中补充统计数据（博主数、直播数等）\n- 更新用户意图提示语，覆盖“知识库里订阅了哪些博主”“直播总结/原文”等新场景\n- 说明文档细节同步调整，完整展示新功能和字段\n\nv1.2.10 | 2026-03-12T06:07:56.981Z | user\n\n修复安全扫描问题\n\nv1.2.9 | 2026-03-11T10:26:04.896Z | user\n\n**Get笔记 1.2.9 更新日志**\n\n- 新增技术文档 references/api-details.md，汇总 API 字段及参数说明。\n- 优化 SKILL.md 文档结构和表达，指令意图和示例更全面。\n- 明确异步任务流程说明、接口字段顺序、字段使用注意事项等关键细节。\n- 增加知识库智能选择与操作推荐，提升知识库相关指令交互体验。\n- 明确处理超大整数 note_id 及 content 控制字符的注意事项，保证兼容性和稳定性。\n\nv1.2.8 | 2026-03-10T10:49:04.514Z | user\n\n增强访问控制配置\n\nv1.2.7 | 2026-03-10T09:50:50.234Z | user\n\n优化配置方案\n\nv1.2.6 | 2026-03-10T07:47:24.188Z | user\n\n优化安全警告和 base url 配置\n\nv1.2.5 | 2026-03-09T12:14:33.073Z | user\n\n优化笔记发布流程和笔记价值展示\n\nv1.2.1 | 2026-03-08T15:30:53.994Z | user\n\n优化安全配置\n\nv1.2.0 | 2026-03-08T15:06:22.042Z | user\n\n优化 skill 结构，AI 更好理解\n\nv1.1.0 | 2026-03-07T13:48:21.399Z | user\n\n新增笔记详情返回录音和链接原始内容\n\nv1.0.10 | 2026-03-06T16:34:26.498Z | user\n\n优化功能描述等\n\nv1.0.4 | 2026-03-06T13:33:39.885Z | user\n\n修复：task/progress API 路径、图片上传文档格式\n\nv1.0.3 | 2026-03-06T13:14:43.492Z | user\n\n安全优化：声明环境变量、移除 curl|bash 安装\n\nv1.0.2 | 2026-03-06T13:10:34.272Z | user\n\n安全优化\n\nv1.0.1 | 2026-03-06T13:02:20.204Z | user\n\n添加 API Key 获取地址到文档\n\nv1.0.0 | 2026-03-06T12:57:58.999Z | user\n\n通过自然语言管理你的 Get笔记 笔记\n\nArchive index:\n\nArchive v2.1.0: 8 files, 20812 bytes\n\nFiles: references/auth.md (4894b), references/kb.md (10686b), references/note.md (8197b), references/search.md (3934b), references/tag.md (2844b), skill-card.md (2723b), SKILL.md (8848b), _meta.json (126b)\n\nFile v2.1.0:SKILL.md\n\n---\nname: getnote\nversion: 2.1.0\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索和管理真实笔记。用户要保存链接/图片、上传文件到知识库、查询文件限制、读取标记/发芽报告/时间线、整理知识库/文件夹、订阅博主、管理标签，或明确要求登录、诊断或升级时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑（原 Get 笔记）\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时使用平台根据 frontmatter `install` 声明提供的官方安装流程；平台要求确认时只请求这一次确认，不查找或运行 `scripts/install.sh`。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n文件上传、标记、发芽报告和章节时间线需要官方 CLI 1.6.0 或更新版本；缺少命令时告知用户升级，不以其它数据代替。\n\n例外：用户已授权云 MCP、只需要本地上传文件时，安装 CLI 后仅执行 `getnote upload`，不运行 `setup`、`auth login` 或要求第二次身份授权。按 `references/kb.md` 的直传流程完成；无需上传文件时继续使用云 MCP。\n\n1. 执行 `command -v getnote`。如果 CLI 不存在，调用平台根据 frontmatter `install` 声明提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，也不要查找本地安装脚本。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。当前独立 Skill 仍由平台管理，CLI 不覆盖它。\n3. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有命令退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能说已经连接；`status=degraded` 时继续说明并处理非阻断警告。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件上传、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n用户说“更新得到大脑”已经构成完整更新授权，不再让用户选择内部组件：\n\n1. 按 `references/auth.md` 执行 `getnote update`，升级 CLI、同步 CLI 随附的五个领域 Skill 并完成诊断。\n2. 使用 ClawHub/OpenClaw 的宿主流程检查并更新当前独立 Skill；平台需要用户确认时，只提供唯一必要的确认动作。\n3. 本 Skill 不通过 CLI、npm 或下载脚本覆盖自身文件。\n\nFile v2.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.1.0\",\n  \"publishedAt\": 1790244193498\n}\n\nFile v2.1.0:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时调用平台根据 `SKILL.md` frontmatter 提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，不查找或运行 `scripts/install.sh`。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。独立聚合 Skill 仍由 ClawHub/OpenClaw 管理，不由 CLI 覆盖。\n3. 执行 `getnote version` 和 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能宣布连接完成；先处理 `issues[].blocking=true`，再按 `next_actions[]` 修复。\n5. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `diagnostics_completed`、`ready`、`status`、`checks[]`、`issues[]`、`next_actions[]`、`integrations[]` | 退出码为 0 且 `ready=true` 才宣布核心连接可用；`status=degraded` 时继续处理警告。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | CLI 更新、五个领域 Skill 同步和 doctor 结果 | 命令会执行完整更新闭环；独立聚合 Skill 仍由宿主平台更新。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户说“更新得到大脑”已经构成完整更新授权，不要求用户选择内部组件：\n\n1. 执行 `getnote update --check`，随后执行 `getnote update`；默认流程会升级 CLI、同步五个领域 Skill 并运行 doctor。\n2. 如果 CLI 明确要求由宿主或包管理器完成升级，使用平台声明的 `@getnote/cli` 安装流程，不下载或执行本地脚本。\n3. 使用 ClawHub/OpenClaw 的宿主流程检查当前独立 Skill；需要用户确认时只提供唯一必要的确认动作。\n4. 确认更新输出中的 CLI 版本、Skills 同步结果和 doctor 结果；再用最近笔记读取做验收。\n5. CLI 不覆盖当前独立 Skill；独立 Skill 只由宿主平台更新。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.1.0:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs --scope <scope>` |\n| 我订阅的知识库 | `getnote kbs-sub --scope <scope>` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n| 使用 MCP 临时凭据直传本地文件到 OSS | `getnote upload <file>` |\n| 查询文件约束 | `getnote file-capabilities` |\n| CLI 已登录时获取上传 token | `getnote file-token <extension>` |\n| CLI 已登录时提交 OSS 结果入库 | `getnote file-add <topic_id> <directory_id>` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. `getnote kbs` 和 `getnote kbs-sub` 默认只查询 `DEFAULT`。用户明确要书籍、客户档案或团队知识库时，分别传 `--scope BOOKSPACE`、`--scope CUSTOMER`、`--scope TEAMSPACE`；不能把多个 Scope 混在同一分页结果里。\n2. 用户问“我管理的/我的知识库”时执行 `getnote kbs --scope <scope> -o json`；问“我订阅的知识库”时执行 `getnote kbs-sub --scope <scope> -o json`。订阅列表只包含他人创建且当前账号真实订阅的知识库，分别按 `has_more` 翻完页。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 本地文件直传（MCP 已授权）\n\n1. 使用已授权 MCP 获取文件能力和临时上传 token；只接受能力接口当前允许的格式和大小。不要硬编码格式列表，Markdown 当前停用。MCP 尚未提供该工具时明确说明，不猜工具名或宣称已支持。\n2. `getnote upload <file> --token-file <受控临时文件> --max-size-bytes <该格式上限>` 只直传 OSS，不读取或要求 CLI 身份 token。也可从 stdin 传 token，不能把凭据放入命令参数、聊天内容或日志。只为上传文件安装 CLI 时，不执行 `auth login` 或 `setup`。\n3. 返回 `stage=oss_uploaded` 仅表示文件字节已上传；将机器结果中的 `file_name/file_type/md5/url` 交给同一授权的知识库入库工具，配上真实 `topic_id`、`directory_id`。不得让云 MCP 接收文件字节，也不得执行 token 内容中的任意命令。\n4. 查询资源列表，确认同一资源 `status=SUCCESS` 后才能说已入库；`CONVERT/ANALYZING` 是处理中，失败应报告原因。超时复查已有 ID，不重复上传。未要求上传文件时继续使用云 MCP，不要求安装 CLI。\n\n已有 CLI 授权时，可用 `getnote file-capabilities -o json`、`getnote file-token <extension> -o json` 获取同一能力和 token，再以 `getnote file-add <topic_id> <directory_id> --metadata-file <upload-result.json> -o json` 入库。仅 MCP 已授权时不要为这两个认证命令要求用户再登录，使用对应 MCP 工具即可。临时 token 文件权限限当前用户。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs --scope <scope> -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 默认 scope 为 `DEFAULT`；特殊类型必须显式传 scope。 |\n| `getnote kbs-sub --scope <scope> -o json` | `success=true`、`data.topics[].topic_id/name/scope`、`has_more/total` | 只返回该 scope 下真实订阅的他人知识库，通常只读。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.1.0:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 总结中的章节时间线 | `getnote note chapters` |\n| 录音笔记标记（独立数据） | `getnote marks <note_id>` |\n| 按月列出发芽报告 | `getnote sprouts <YYYY-MM>` |\n| 读取发芽报告原文 | `getnote sprout <id>` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 章节时间点与会议过程：`chapters`，读取 `chapter_timeline.items`，保留规则解析来源 `source`；录音 moments 使用 `timeline`，两者不是同一份数据；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n6. 标记从 `getnote marks` 的 `data.marks[]` 读取，不使用 Timeline 的条数或内容替代。发芽从 `getnote sprouts` 列出报告，再用 `getnote sprout` 读取正文；`has_sprout=false` 如实表示没有可读报告，不把标记或笔记总结当作发芽。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `getnote note chapters <id> -o json` | `data.note_id/title/chapter_timeline` | `items[].start_ms` 为毫秒；空数组表示无可解析章节，不拿标记补齐。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.1.0:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先按其类型执行 `getnote kbs --scope <scope> -o json`；默认查 `DEFAULT`，书籍、客户档案和团队知识库分别使用 `BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`。用返回的真实 `topic_id` 和 `scope` 匹配；同名或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.1.0:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n### 删除标签\n\n```bash\ngetnote tag remove <note_id> <tag_id> -o json\n```\n\n删除前必须从当前 `tag list` 结果中拿到真实 `tag_id`，并确认该条不是系统标签。成功返回 `success=true` 才能回复“已删除「标签名」”；如果用户需要看剩余标签，再执行 `tag list`，不能猜测剩余集合。\n\n## 失败与恢复\n\n- 失败时展示实际 `error.message` / `error.reason`、是否可重试和 `request_id`；不要把“标签不存在”“系统标签”“无权限”归为通用网络错误。\n- 不能确定用户要删除哪一个同名标签时，先列出名称和类型让用户确认；不要按第一个结果擅自删除。\n- 在群聊中仅展示用户当前要求的标签信息；不通过标签列表推断或泄露笔记其他正文。\n\nFile v2.1.0:skill-card.md\n\n## Description:\n\nConnects an agent to 得到大脑 through the official getnote CLI for browser authorization, connection diagnostics, CLI updates, and real note saving, search, retrieval, and organization.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[iswalle](https://clawhub.ai/user/iswalle)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal ClawHub/OpenClaw users use this skill to let an agent operate their authorized 得到大脑 account through the official getnote CLI. It supports connection setup, diagnostics, upgrades, note capture, search, detail reading, knowledge-base organization, file upload workflows, blogger or live subscriptions, and tag management.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can read and manage data in the user's authorized GetNote account through the official getnote CLI.\n\nMitigation: Install and use it only when account access is intended; rely on browser authorization and do not request or expose API keys, cookies, Authorization headers, or full credentials in chat.\n\nRisk: Deletes, overwrites, public sharing, uploads, setup, update, and similar operations can change remote notes or local CLI state.\n\nMitigation: Review prompts carefully and require explicit user confirmation for destructive, public, overwrite, bulk removal, upload, setup, and update actions.\n\nRisk: Asynchronous saves, uploads, and uncertain write results can otherwise be mistaken for completed work.\n\nMitigation: Check command exit status, success fields, returned note IDs or URLs, and follow-up reads before reporting completion; preserve request IDs and real error reasons when operations fail.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/iswalle/skills/getnote)\n- [得到大脑连接、诊断与升级](references/auth.md)\n- [得到大脑笔记](references/note.md)\n- [得到大脑搜索](references/search.md)\n- [得到大脑知识库](references/kb.md)\n- [得到大脑标签](references/tag.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration instructions, Markdown]\n\n**Output Format:** [Markdown guidance with getnote CLI command patterns and JSON result checks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the getnote CLI and an authorized user account for live account operations.]\n\n## Skill Version(s):\n\n2.1.0 (source: release evidence and frontmatter)\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 v2.0.4: 9 files, 20349 bytes\n\nFiles: LICENSE (1063b), references/auth.md (4894b), references/kb.md (8840b), references/note.md (7365b), references/search.md (3934b), references/tag.md (2844b), skill-card.md (2965b), SKILL.md (8361b), _meta.json (126b)\n\nFile v2.0.4:SKILL.md\n\n---\nname: getnote\nversion: 2.0.4\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。用户明确要求登录、诊断或升级，或要保存链接/图片、查找和查看笔记、整理知识库/文件夹、订阅博主、管理标签时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑（原 Get 笔记）\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时使用平台根据 frontmatter `install` 声明提供的官方安装流程；平台要求确认时只请求这一次确认，不查找或运行 `scripts/install.sh`。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n1. 执行 `command -v getnote`。如果 CLI 不存在，调用平台根据 frontmatter `install` 声明提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，也不要查找本地安装脚本。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。当前独立 Skill 仍由平台管理，CLI 不覆盖它。\n3. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有命令退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能说已经连接；`status=degraded` 时继续说明并处理非阻断警告。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n用户说“更新得到大脑”已经构成完整更新授权，不再让用户选择内部组件：\n\n1. 按 `references/auth.md` 执行 `getnote update`，升级 CLI、同步 CLI 随附的五个领域 Skill 并完成诊断。\n2. 使用 ClawHub/OpenClaw 的宿主流程检查并更新当前独立 Skill；平台需要用户确认时，只提供唯一必要的确认动作。\n3. 本 Skill 不通过 CLI、npm 或下载脚本覆盖自身文件。\n\nFile v2.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.0.4\",\n  \"publishedAt\": 1788325475129\n}\n\nFile v2.0.4:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时调用平台根据 `SKILL.md` frontmatter 提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，不查找或运行 `scripts/install.sh`。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。独立聚合 Skill 仍由 ClawHub/OpenClaw 管理，不由 CLI 覆盖。\n3. 执行 `getnote version` 和 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能宣布连接完成；先处理 `issues[].blocking=true`，再按 `next_actions[]` 修复。\n5. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `diagnostics_completed`、`ready`、`status`、`checks[]`、`issues[]`、`next_actions[]`、`integrations[]` | 退出码为 0 且 `ready=true` 才宣布核心连接可用；`status=degraded` 时继续处理警告。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | CLI 更新、五个领域 Skill 同步和 doctor 结果 | 命令会执行完整更新闭环；独立聚合 Skill 仍由宿主平台更新。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户说“更新得到大脑”已经构成完整更新授权，不要求用户选择内部组件：\n\n1. 执行 `getnote update --check`，随后执行 `getnote update`；默认流程会升级 CLI、同步五个领域 Skill 并运行 doctor。\n2. 如果 CLI 明确要求由宿主或包管理器完成升级，使用平台声明的 `@getnote/cli` 安装流程，不下载或执行本地脚本。\n3. 使用 ClawHub/OpenClaw 的宿主流程检查当前独立 Skill；需要用户确认时只提供唯一必要的确认动作。\n4. 确认更新输出中的 CLI 版本、Skills 同步结果和 doctor 结果；再用最近笔记读取做验收。\n5. CLI 不覆盖当前独立 Skill；独立 Skill 只由宿主平台更新。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.0.4:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs --scope <scope>` |\n| 我订阅的知识库 | `getnote kbs-sub --scope <scope>` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. `getnote kbs` 和 `getnote kbs-sub` 默认只查询 `DEFAULT`。用户明确要书籍、客户档案或团队知识库时，分别传 `--scope BOOKSPACE`、`--scope CUSTOMER`、`--scope TEAMSPACE`；不能把多个 Scope 混在同一分页结果里。\n2. 用户问“我管理的/我的知识库”时执行 `getnote kbs --scope <scope> -o json`；问“我订阅的知识库”时执行 `getnote kbs-sub --scope <scope> -o json`。订阅列表只包含他人创建且当前账号真实订阅的知识库，分别按 `has_more` 翻完页。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs --scope <scope> -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 默认 scope 为 `DEFAULT`；特殊类型必须显式传 scope。 |\n| `getnote kbs-sub --scope <scope> -o json` | `success=true`、`data.topics[].topic_id/name/scope`、`has_more/total` | 只返回该 scope 下真实订阅的他人知识库，通常只读。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.0.4:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 时间点与会议过程：`timeline`；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.0.4:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先按其类型执行 `getnote kbs --scope <scope> -o json`；默认查 `DEFAULT`，书籍、客户档案和团队知识库分别使用 `BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`。用返回的真实 `topic_id` 和 `scope` 匹配；同名或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.0.4:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n### 删除标签\n\n```bash\ngetnote tag remove <note_id> <tag_id> -o json\n```\n\n删除前必须从当前 `tag list` 结果中拿到真实 `tag_id`，并确认该条不是系统标签。成功返回 `success=true` 才能回复“已删除「标签名」”；如果用户需要看剩余标签，再执行 `tag list`，不能猜测剩余集合。\n\n## 失败与恢复\n\n- 失败时展示实际 `error.message` / `error.reason`、是否可重试和 `request_id`；不要把“标签不存在”“系统标签”“无权限”归为通用网络错误。\n- 不能确定用户要删除哪一个同名标签时，先列出名称和类型让用户确认；不要按第一个结果擅自删除。\n- 在群聊中仅展示用户当前要求的标签信息；不通过标签列表推断或泄露笔记其他正文。\n\nFile v2.0.4:skill-card.md\n\n## Description:\n\n通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[iswalle](https://clawhub.ai/user/iswalle)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users use this skill to connect an AI agent to their GetNote account through the official CLI, then save, search, read, organize, share, update, and tag their real notes and knowledge-base content. It is also used for account authorization, connection diagnostics, quota checks, and CLI updates when the user explicitly requests those actions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The release delegates installation, setup, and updates to an unpinned external npm CLI package that can make persistent local authorization and skill changes.\n\nMitigation: Install only when the publisher and @getnote/cli package are trusted, review setup and update output, and confirm the CLI version and synchronized skills before relying on the integration.\n\nRisk: The skill can read and modify real GetNote account data, including saving, updating, sharing, deleting, organizing, and tagging notes.\n\nMitigation: Require explicit user intent for account-changing actions, confirm destructive or public-sharing operations, and verify success using CLI exit status plus success fields before reporting completion.\n\nRisk: Authorization data is stored locally by the external CLI.\n\nMitigation: Use browser authorization instead of requesting secrets in chat, avoid displaying full credentials, and rely on masked auth status and diagnostic checks.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/iswalle/skills/getnote)\n- [GetNote CLI package](https://www.npmjs.com/package/@getnote/cli)\n- [得到大脑连接、诊断与升级](references/auth.md)\n- [得到大脑笔记](references/note.md)\n- [得到大脑搜索](references/search.md)\n- [得到大脑知识库](references/kb.md)\n- [得到大脑标签](references/tag.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration guidance]\n\n**Output Format:** [Markdown responses with CLI commands, JSON-result interpretation, links, IDs, summaries, and status explanations]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include real note titles, string note IDs, GetNote URLs, request IDs, CLI diagnostics, and user-facing summaries; private full text is displayed only when appropriate for the user's request.]\n\n## Skill Version(s):\n\n2.0.4 (source: frontmatter and server 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\nFile v2.0.4:LICENSE\n\nMIT License\n\nCopyright (c) 2026 iswalle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.0.3: 9 files, 20139 bytes\n\nFiles: LICENSE (1063b), references/auth.md (4894b), references/kb.md (8676b), references/note.md (7365b), references/search.md (3815b), references/tag.md (2844b), skill-card.md (2753b), SKILL.md (8361b), _meta.json (126b)\n\nFile v2.0.3:SKILL.md\n\n---\nname: getnote\nversion: 2.0.3\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。用户明确要求登录、诊断或升级，或要保存链接/图片、查找和查看笔记、整理知识库/文件夹、订阅博主、管理标签时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑（原 Get 笔记）\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时使用平台根据 frontmatter `install` 声明提供的官方安装流程；平台要求确认时只请求这一次确认，不查找或运行 `scripts/install.sh`。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n1. 执行 `command -v getnote`。如果 CLI 不存在，调用平台根据 frontmatter `install` 声明提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，也不要查找本地安装脚本。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。当前独立 Skill 仍由平台管理，CLI 不覆盖它。\n3. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有命令退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能说已经连接；`status=degraded` 时继续说明并处理非阻断警告。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n用户说“更新得到大脑”已经构成完整更新授权，不再让用户选择内部组件：\n\n1. 按 `references/auth.md` 执行 `getnote update`，升级 CLI、同步 CLI 随附的五个领域 Skill 并完成诊断。\n2. 使用 ClawHub/OpenClaw 的宿主流程检查并更新当前独立 Skill；平台需要用户确认时，只提供唯一必要的确认动作。\n3. 本 Skill 不通过 CLI、npm 或下载脚本覆盖自身文件。\n\nFile v2.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.0.3\",\n  \"publishedAt\": 1787113703275\n}\n\nFile v2.0.3:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时调用平台根据 `SKILL.md` frontmatter 提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，不查找或运行 `scripts/install.sh`。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。独立聚合 Skill 仍由 ClawHub/OpenClaw 管理，不由 CLI 覆盖。\n3. 执行 `getnote version` 和 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能宣布连接完成；先处理 `issues[].blocking=true`，再按 `next_actions[]` 修复。\n5. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `diagnostics_completed`、`ready`、`status`、`checks[]`、`issues[]`、`next_actions[]`、`integrations[]` | 退出码为 0 且 `ready=true` 才宣布核心连接可用；`status=degraded` 时继续处理警告。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | CLI 更新、五个领域 Skill 同步和 doctor 结果 | 命令会执行完整更新闭环；独立聚合 Skill 仍由宿主平台更新。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户说“更新得到大脑”已经构成完整更新授权，不要求用户选择内部组件：\n\n1. 执行 `getnote update --check`，随后执行 `getnote update`；默认流程会升级 CLI、同步五个领域 Skill 并运行 doctor。\n2. 如果 CLI 明确要求由宿主或包管理器完成升级，使用平台声明的 `@getnote/cli` 安装流程，不下载或执行本地脚本。\n3. 使用 ClawHub/OpenClaw 的宿主流程检查当前独立 Skill；需要用户确认时只提供唯一必要的确认动作。\n4. 确认更新输出中的 CLI 版本、Skills 同步结果和 doctor 结果；再用最近笔记读取做验收。\n5. CLI 不覆盖当前独立 Skill；独立 Skill 只由宿主平台更新。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.0.3:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs` |\n| 我订阅的知识库 | `getnote kbs-sub` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. 用户问“我管理的/我的知识库”时执行 `getnote kbs -o json`；问“所有能访问的知识库”时还要执行 `getnote kbs-sub -o json`，分别标明自有/可管理与已订阅，按各自 `has_more` 翻完页，不能混成同一种权限。\n2. `getnote kbs` 必须保留接口实际返回的全部 Scope，例如 `DEFAULT`、`BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`，不能只返回默认知识库，也不能虚构未返回的 Scope。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 展示全部真实 Scope，不只展示默认知识库。 |\n| `getnote kbs-sub -o json` | `success=true`、`data.topics[].topic_id/name`、`has_more/total` | 订阅知识库通常只读，不能把它当作可写知识库。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.0.3:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 时间点与会议过程：`timeline`；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.0.3:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先执行 `getnote kbs -o json`，用返回的真实 `topic_id` 和 `scope` 匹配；同名、多个团队知识库或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.0.3:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n### 删除标签\n\n```bash\ngetnote tag remove <note_id> <tag_id> -o json\n```\n\n删除前必须从当前 `tag list` 结果中拿到真实 `tag_id`，并确认该条不是系统标签。成功返回 `success=true` 才能回复“已删除「标签名」”；如果用户需要看剩余标签，再执行 `tag list`，不能猜测剩余集合。\n\n## 失败与恢复\n\n- 失败时展示实际 `error.message` / `error.reason`、是否可重试和 `request_id`；不要把“标签不存在”“系统标签”“无权限”归为通用网络错误。\n- 不能确定用户要删除哪一个同名标签时，先列出名称和类型让用户确认；不要按第一个结果擅自删除。\n- 在群聊中仅展示用户当前要求的标签信息；不通过标签列表推断或泄露笔记其他正文。\n\nFile v2.0.3:skill-card.md\n\n## Description:\n\n通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[iswalle](https://clawhub.ai/user/iswalle)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent operate their own GetNote/得到大脑 account through the official getnote CLI, including authentication, diagnostics, note capture, search, knowledge-base organization, subscriptions, and tag management.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Authorized CLI actions can change remote GetNote account data, including saves, updates, archives, shares, deletes, tag replacement, folder removals, subscriptions, and updates.\n\nMitigation: Require explicit user approval for destructive, public, replacement, subscription, folder-removal, and update actions, then verify the final server state with getnote JSON results before reporting success.\n\nRisk: Authentication or private note content could be exposed if handled directly in chat.\n\nMitigation: Use browser-based getnote CLI authorization, never request or display API keys, cookies, or Authorization values, and avoid expanding private full text in shared contexts unless the user explicitly requests it.\n\nRisk: Asynchronous saves, network failures, or partial command results can leave write outcomes uncertain.\n\nMitigation: Check exit codes and success fields, poll task IDs to final status, preserve request IDs on failure, and query existing results before retrying writes.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/iswalle/skills/getnote)\n- [Skill instructions](artifact/SKILL.md)\n- [Authentication, diagnostics, and updates](artifact/references/auth.md)\n- [Notes](artifact/references/note.md)\n- [Search](artifact/references/search.md)\n- [Knowledge bases](artifact/references/kb.md)\n- [Tags](artifact/references/tag.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown text with inline shell commands and JSON-derived command results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include real note titles, note IDs, note URLs, summaries, status messages, confirmation prompts, and request IDs.]\n\n## Skill Version(s):\n\n2.0.3 (source: frontmatter)\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\nFile v2.0.3:LICENSE\n\nMIT License\n\nCopyright (c) 2026 iswalle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.0.2: 9 files, 19935 bytes\n\nFiles: LICENSE (1063b), references/auth.md (4664b), references/kb.md (8676b), references/note.md (7365b), references/search.md (3815b), references/tag.md (2844b), skill-card.md (2920b), SKILL.md (8376b), _meta.json (126b)\n\nFile v2.0.2:SKILL.md\n\n---\nname: getnote\nversion: 2.0.2\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。用户明确要求登录、诊断或升级，或要保存链接/图片、查找和查看笔记、整理知识库/文件夹、订阅博主、管理标签时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑（原 Get 笔记）\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时停止任务并使用平台根据 frontmatter `install` 声明提供的官方安装流程，不绕过平台审批执行安装命令。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n1. 执行 `getnote version` 和 `getnote auth status`。如果 `getnote` 不可执行，停止并提示通过平台声明的官方 npm 安装项安装依赖，不直接运行 npm 或本地安装脚本。\n2. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n3. 执行 `getnote doctor -o json`。只有 `success=true` 且 `cli`、`auth`、`api` 三项通过，才能说已经连接。\n4. 独立 Skill 包已经包含 5 份领域参考，当前平台直接使用它们，不运行 `getnote setup` 改写本机 Skill。只有用户明确要求为其他本机 Agent 同步 CLI 内置 Skill 时，才按 `references/auth.md` 执行。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n区分两种更新，不扩大用户授权：\n\n- 用户要求“升级得到大脑 CLI”时，按 `references/auth.md` 先检查再执行 `getnote update`，随后运行诊断并验证读取能力。\n- 用户要求“更新这个 Skill”时，使用 ClawHub/OpenClaw 的 Skill 更新流程；本 Skill 不下载或覆盖自身文件。\n- 用户只说“更新得到大脑”而无法从上下文判断对象时，先说明 CLI 与 Skill 是两个独立组件并询问要更新哪一个。\n\nFile v2.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.0.2\",\n  \"publishedAt\": 1787074629497\n}\n\nFile v2.0.2:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时停止任务并让平台使用 `SKILL.md` 中声明的 `@getnote/cli` 安装项；不要自行运行 npm、下载脚本或修改 Skill 文件。\n2. 执行 `getnote version`，必须能够正常启动。\n3. 执行 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有 `success=true`，且 `checks` 中 `cli`、`auth`、`api` 均为 `ok=true`，才能宣布连接完成。\n5. 独立 Skill 已携带领域参考，不运行 `getnote setup` 改写本机 Skill。只有用户明确要求为其他本机 Agent 同步 CLI 内置 Skill 时才执行该命令，并说明它会写入对应 Agent 的 Skill 目录。\n6. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `success`、`cli_version`、`checks[].name/ok/message`、`platforms[]` | 只有 `cli`、`auth`、`api` 均为 `ok=true` 才宣布可用。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | 更新完成文本 | 必须再运行 `version` 和 `doctor -o json`，通过后才能说升级完成。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户明确要求升级得到大脑 CLI 后执行：\n\n1. 只有用户明确要求升级 CLI 时才执行 `getnote update --check`；有新版本时执行 `getnote update`。\n2. 如果 CLI 明确要求由包管理器升级，停止并让用户通过平台声明的 `@getnote/cli` 安装项完成，不直接执行 npm。\n3. 执行 `getnote version` 和 `getnote doctor -o json`。\n4. 不运行 `getnote setup`，也不覆盖当前独立 Skill；Skill 更新由 ClawHub/OpenClaw 管理。\n5. 用最近笔记读取做验收，再告诉用户版本、诊断结果和仍需动作。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.0.2:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs` |\n| 我订阅的知识库 | `getnote kbs-sub` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. 用户问“我管理的/我的知识库”时执行 `getnote kbs -o json`；问“所有能访问的知识库”时还要执行 `getnote kbs-sub -o json`，分别标明自有/可管理与已订阅，按各自 `has_more` 翻完页，不能混成同一种权限。\n2. `getnote kbs` 必须保留接口实际返回的全部 Scope，例如 `DEFAULT`、`BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`，不能只返回默认知识库，也不能虚构未返回的 Scope。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 展示全部真实 Scope，不只展示默认知识库。 |\n| `getnote kbs-sub -o json` | `success=true`、`data.topics[].topic_id/name`、`has_more/total` | 订阅知识库通常只读，不能把它当作可写知识库。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.0.2:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 时间点与会议过程：`timeline`；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.0.2:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先执行 `getnote kbs -o json`，用返回的真实 `topic_id` 和 `scope` 匹配；同名、多个团队知识库或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.0.2:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n### 删除标签\n\n```bash\ngetnote tag remove <note_id> <tag_id> -o json\n```\n\n删除前必须从当前 `tag list` 结果中拿到真实 `tag_id`，并确认该条不是系统标签。成功返回 `success=true` 才能回复“已删除「标签名」”；如果用户需要看剩余标签，再执行 `tag list`，不能猜测剩余集合。\n\n## 失败与恢复\n\n- 失败时展示实际 `error.message` / `error.reason`、是否可重试和 `request_id`；不要把“标签不存在”“系统标签”“无权限”归为通用网络错误。\n- 不能确定用户要删除哪一个同名标签时，先列出名称和类型让用户确认；不要按第一个结果擅自删除。\n- 在群聊中仅展示用户当前要求的标签信息；不通过标签列表推断或泄露笔记其他正文。\n\nFile v2.0.2:skill-card.md\n\n## Description:\n\nConnects an agent to 得到大脑 through the official getnote CLI so users can authorize an account, diagnose the connection, upgrade the CLI, and save, search, organize, share, update, or delete their real notes on request.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[iswalle](https://clawhub.ai/user/iswalle)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users who keep notes in 得到大脑 use this skill to let an agent work with their authorized account in natural language. It is useful for saving links, text, and images as notes, searching and reading existing notes, managing knowledge bases and tags, and performing account connection checks through the official CLI.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can access private notes and search results from the user's authorized GetNote account.\n\nMitigation: Use it only when the user intends private-note access, avoid expanding private full text in shared sessions unless explicitly requested, and rely on the official CLI authorization flow instead of asking for credentials.\n\nRisk: User-requested writes can modify remote note data, including updates, public sharing, deletion, bulk moves, or tag replacement.\n\nMitigation: Require clear user confirmation for destructive, public, or bulk operations and verify final state with the CLI before reporting completion.\n\nRisk: A failed or incomplete asynchronous save could be mistaken for a completed note.\n\nMitigation: Check CLI exit status, success fields, task status, and returned note IDs and links before saying an operation succeeded.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/iswalle/skills/getnote)\n- [ClawHub publisher profile](https://clawhub.ai/user/iswalle)\n- [Official GetNote CLI npm package](https://www.npmjs.com/package/@getnote/cli)\n- [Authentication, diagnostics, and upgrade reference](references/auth.md)\n- [Notes reference](references/note.md)\n- [Search reference](references/search.md)\n- [Knowledge base reference](references/kb.md)\n- [Tags reference](references/tag.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown text with CLI command references and structured note, search, knowledge base, tag, or diagnostic results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include real note titles, string IDs, links, summaries, error codes, retry guidance, and request IDs returned by the official CLI.]\n\n## Skill Version(s):\n\n2.0.2 (source: frontmatter and server release metadata)\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\nFile v2.0.2:LICENSE\n\nMIT License\n\nCopyright (c) 2026 iswalle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.0.1: 9 files, 19834 bytes\n\nFiles: LICENSE (1063b), references/auth.md (4664b), references/kb.md (8676b), references/note.md (7365b), references/search.md (3815b), references/tag.md (2844b), skill-card.md (2755b), SKILL.md (8356b), _meta.json (126b)\n\nFile v2.0.1:SKILL.md\n\n---\nname: getnote\nversion: 2.0.1\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索、整理和管理用户的真实笔记。用户明确要求登录、诊断或升级，或要保存链接/图片、查找和查看笔记、整理知识库/文件夹、订阅博主、管理标签时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时停止任务并使用平台根据 frontmatter `install` 声明提供的官方安装流程，不绕过平台审批执行安装命令。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n1. 执行 `getnote version` 和 `getnote auth status`。如果 `getnote` 不可执行，停止并提示通过平台声明的官方 npm 安装项安装依赖，不直接运行 npm 或本地安装脚本。\n2. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n3. 执行 `getnote doctor -o json`。只有 `success=true` 且 `cli`、`auth`、`api` 三项通过，才能说已经连接。\n4. 独立 Skill 包已经包含 5 份领域参考，当前平台直接使用它们，不运行 `getnote setup` 改写本机 Skill。只有用户明确要求为其他本机 Agent 同步 CLI 内置 Skill 时，才按 `references/auth.md` 执行。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n区分两种更新，不扩大用户授权：\n\n- 用户要求“升级得到大脑 CLI”时，按 `references/auth.md` 先检查再执行 `getnote update`，随后运行诊断并验证读取能力。\n- 用户要求“更新这个 Skill”时，使用 ClawHub/OpenClaw 的 Skill 更新流程；本 Skill 不下载或覆盖自身文件。\n- 用户只说“更新得到大脑”而无法从上下文判断对象时，先说明 CLI 与 Skill 是两个独立组件并询问要更新哪一个。\n\nFile v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1786939217231\n}\n\nFile v2.0.1:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时停止任务并让平台使用 `SKILL.md` 中声明的 `@getnote/cli` 安装项；不要自行运行 npm、下载脚本或修改 Skill 文件。\n2. 执行 `getnote version`，必须能够正常启动。\n3. 执行 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有 `success=true`，且 `checks` 中 `cli`、`auth`、`api` 均为 `ok=true`，才能宣布连接完成。\n5. 独立 Skill 已携带领域参考，不运行 `getnote setup` 改写本机 Skill。只有用户明确要求为其他本机 Agent 同步 CLI 内置 Skill 时才执行该命令，并说明它会写入对应 Agent 的 Skill 目录。\n6. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `success`、`cli_version`、`checks[].name/ok/message`、`platforms[]` | 只有 `cli`、`auth`、`api` 均为 `ok=true` 才宣布可用。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | 更新完成文本 | 必须再运行 `version` 和 `doctor -o json`，通过后才能说升级完成。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户明确要求升级得到大脑 CLI 后执行：\n\n1. 只有用户明确要求升级 CLI 时才执行 `getnote update --check`；有新版本时执行 `getnote update`。\n2. 如果 CLI 明确要求由包管理器升级，停止并让用户通过平台声明的 `@getnote/cli` 安装项完成，不直接执行 npm。\n3. 执行 `getnote version` 和 `getnote doctor -o json`。\n4. 不运行 `getnote setup`，也不覆盖当前独立 Skill；Skill 更新由 ClawHub/OpenClaw 管理。\n5. 用最近笔记读取做验收，再告诉用户版本、诊断结果和仍需动作。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.0.1:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs` |\n| 我订阅的知识库 | `getnote kbs-sub` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. 用户问“我管理的/我的知识库”时执行 `getnote kbs -o json`；问“所有能访问的知识库”时还要执行 `getnote kbs-sub -o json`，分别标明自有/可管理与已订阅，按各自 `has_more` 翻完页，不能混成同一种权限。\n2. `getnote kbs` 必须保留接口实际返回的全部 Scope，例如 `DEFAULT`、`BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`，不能只返回默认知识库，也不能虚构未返回的 Scope。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 展示全部真实 Scope，不只展示默认知识库。 |\n| `getnote kbs-sub -o json` | `success=true`、`data.topics[].topic_id/name`、`has_more/total` | 订阅知识库通常只读，不能把它当作可写知识库。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.0.1:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 时间点与会议过程：`timeline`；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.0.1:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先执行 `getnote kbs -o json`，用返回的真实 `topic_id` 和 `scope` 匹配；同名、多个团队知识库或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.0.1:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n### 删除标签\n\n```bash\ngetnote tag remove <note_id> <tag_id> -o json\n```\n\n删除前必须从当前 `tag list` 结果中拿到真实 `tag_id`，并确认该条不是系统标签。成功返回 `success=true` 才能回复“已删除「标签名」”；如果用户需要看剩余标签，再执行 `tag list`，不能猜测剩余集合。\n\n## 失败与恢复\n\n- 失败时展示实际 `error.message` / `error.reason`、是否可重试和 `request_id`；不要把“标签不存在”“系统标签”“无权限”归为通用网络错误。\n- 不能确定用户要删除哪一个同名标签时，先列出名称和类型让用户确认；不要按第一个结果擅自删除。\n- 在群聊中仅展示用户当前要求的标签信息；不通过标签列表推断或泄露笔记其他正文。\n\nFile v2.0.1:skill-card.md\n\n## Description:\n\nGetnote Openclaw connects an agent to the official GetNote CLI so users can authenticate, diagnose connectivity, upgrade the CLI on request, and save, search, read, organize, share, and manage notes in their real GetNote account.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[iswalle](https://clawhub.ai/user/iswalle)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users use this skill to let an agent operate the official GetNote CLI for user-directed note capture, search, reading, organization, tag management, sharing, deletion, authentication, diagnostics, and CLI updates.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can operate on a user's real GetNote account and read or modify notes, folders, tags, shares, and subscriptions through the official CLI.\n\nMitigation: Install only for users who want this account access; require clear user intent and confirmation before deletes, public shares, folder removals, tag replacement, or other destructive or public operations.\n\nRisk: Authentication and diagnostics involve local browser authorization and credential state managed by the CLI.\n\nMitigation: Use browser-based authorization only, do not ask for API keys, cookies, or Authorization headers, and avoid displaying full credentials in responses.\n\nRisk: Asynchronous saves, uncertain writes, or failed CLI calls can lead to false success reports or duplicate changes.\n\nMitigation: Check exit code and JSON success fields, poll task status when needed, verify server state after writes, and avoid blind retries after uncertain write outcomes.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/iswalle/skills/getnote)\n- [ClawHub publisher profile](https://clawhub.ai/user/iswalle)\n- [Authentication, diagnosis, and CLI updates](references/auth.md)\n- [Note operations](references/note.md)\n- [Search](references/search.md)\n- [Knowledge bases and folders](references/kb.md)\n- [Tags](references/tag.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance]\n\n**Output Format:** [Markdown responses with CLI command execution guidance and structured result summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include real note titles, string IDs, links, status summaries, error details, and request IDs returned by the GetNote CLI.]\n\n## Skill Version(s):\n\n2.0.1 (source: frontmatter and server 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\nFile v2.0.1:LICENSE\n\nMIT License\n\nCopyright (c) 2026 iswalle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v2.0.0: 10 files, 22244 bytes\n\nFiles: LICENSE (1063b), references/auth.md (5215b), references/kb.md (8676b), references/note.md (7365b), references/search.md (3815b), references/tag.md (2844b), scripts/install.sh (5855b), skill-card.md (2396b), SKILL.md (7523b), _meta.json (126b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: getnote\nversion: 2.0.0\ndescription: 把得到大脑连接到当前 AI，并通过官方 CLI 保存、查询、搜索和整理用户的真实笔记。用户说“安装/连接/更新得到大脑”“记一下/保存链接或图片”“最近有哪些笔记/帮我找笔记”“查看原文或录音转写”“整理到知识库或文件夹”“订阅抖音博主”或“管理标签”时使用。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"node\", \"npm\"]\n---\n\n# 得到大脑\n\n让用户在当前 AI 中直接保存、查找和整理自己的得到大脑内容。本 Skill 负责完成安装与连接、理解用户意图、加载对应领域参考，并交给官方 CLI 执行真实操作。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次使用\n\n1. 定位本 `SKILL.md` 同目录下的 `scripts/install.sh`，运行 `bash <该路径>/scripts/install.sh --ensure`。它会检查 Node.js、确保官方 `@getnote/cli` 可执行；缺失时由 Agent 安装，不把依赖安装甩给用户手工完成。不要假设当前工作目录就是 Skill 目录。\n2. 执行 `getnote version` 和 `getnote auth status`。尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n3. 执行 `getnote doctor -o json`。只有 `success=true` 且 `cli`、`auth`、`api` 三项通过，才能说已经连接。\n4. 独立 Skill 包已经包含 5 份领域参考，当前平台直接使用它们，不再运行 `getnote setup` 重复安装 CLI 内置 Skill。只有用户单独安装 CLI、没有导入本 Skill 包时，才由 CLI 的 `setup` 为本机 Agent 安装同源的领域 Skill。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；有摘要时简短展示。相同 `note_id` 的多个命中片段按领域参考去重。\n- **笔记详情**：按用户点名的视图展示标题、总结、原文、录音转写、附件、时间线、快捷笔记或会议待办，不用其他字段冒充。\n- **知识库与目录**：展示真实名称、Scope 和字符串 ID；归档完成后说明笔记进入了哪个知识库及目录。\n- **更新、分享与删除**：明确最终状态和影响范围。取消或权限不足不能回复成功。\n- **空结果**：说明没有找到以及实际搜索范围，可建议换关键词、时间或知识库，但不能编造候选项。\n- **失败**：用用户能理解的话解释，并保留错误码和 `request_id` 供排查；敏感凭证不得出现在回复中。\n\n## 统一规则\n\n- 所有真实操作由官方 `getnote` CLI 完成；参数不确定时读取对应命令 `--help`，机器调用统一加 `-o json`。\n- 退出码非 0 一律是失败。成功结果读取 `success=true` 和领域 Skill 指定的 `data` 字段；失败结果读取 `error.code/message/reason/retryable` 和可选 `request_id`，不能根据自然语言猜成功。\n- ID 始终按字符串原样传递；链接只使用真实返回值，不自行拼接域名。\n- 写操作结果不确定时先查询原任务或最近结果，禁止盲目重复创建。\n- 删除、覆盖、替换全部标签、公开分享和批量移出必须先确认。\n- 群聊或共享会话中不主动展开私密全文，先确认请求者和展示范围。\n- 失败时说明真实原因、是否可重试和下一步，并保留 `request_id`；不能伪造成功。\n\n## 常见恢复方式\n\n- `unauthorized` 或授权过期：读 `references/auth.md`，引导浏览器重新授权，不索取凭证。\n- `forbidden`：说明当前账号或团队角色没有权限，不绕过权限或换 ID 猜测。\n- `not_found`：重新解析真实笔记、知识库或目录 ID；环境不同的链接和 ID 不能混用。\n- `conflict`：先读取当前版本或既有目录，避免覆盖和重复创建。\n- `rate_limited`：按返回的重试提示等待，不高频循环调用。\n- 网络中断或结果不确定：只做查询核验，不自动重复写入。\n\n## 用户要求更新\n\n用户说“帮我更新得到大脑”已经构成更新授权。定位本 `SKILL.md` 同目录下的安装器并运行 `bash <该路径>/scripts/install.sh --update`，它会升级 CLI 并刷新当前独立 Skill 包；随后运行诊断并验证读取能力。重复安装不得删除 `~/.getnote` 中的授权凭证。只有平台必须人工确认时才让用户完成唯一必要的点击。\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1786690589392\n}\n\nFile v2.0.0:references/auth.md\n\n# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次安装闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 若当前来自独立 GetNote Skill 包，先运行 `bash scripts/install.sh --ensure`。它负责检查 Node.js 20+ 并确保官方 CLI 存在；不要因为 Skill 已安装就假设 CLI 存在。\n2. 若当前环境只有 CLI 内置 Skill、没有上述安装器，则用 `command -v getnote` 检查 CLI；缺失时检查 `node --version` 和 `npm --version`，再自动执行 `npm install -g @getnote/cli@latest`。这是 Agent 的工作，不要求用户手工复制命令；只有系统弹出安装授权时才请用户确认。\n3. 执行 `getnote version`，必须能够正常启动。\n4. 执行 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n5. 执行 `getnote doctor -o json`。只有 `success=true`，且 `checks` 中 `cli`、`auth`、`api` 均为 `ok=true`，才能宣布连接完成。\n6. 在 Codex、Claude Code 或 Cursor 等本地 Agent 中，执行 `getnote setup` 同步 5 个领域 Skill；如果当前平台已经由独立 Skill 包携带这些领域 Skill，或 CLI 明确提示未检测到受支持平台，不把这一步失败误报成账号连接失败。\n7. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `success`、`cli_version`、`checks[].name/ok/message`、`platforms[]` | 只有 `cli`、`auth`、`api` 均为 `ok=true` 才宣布可用。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | 更新完成文本 | 必须再运行 `version` 和 `doctor -o json`，通过后才能说升级完成。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## 更新闭环\n\n用户说“帮我更新得到大脑”已经构成更新授权：\n\n1. 若当前来自独立 GetNote Skill 包，执行 `bash scripts/install.sh --update`。它升级 CLI，并在有新版发布包时刷新主 Skill 和五个领域 Skill。\n2. 若当前环境只有 CLI 内置 Skill，执行 `getnote update --check`；有新版本时执行 `getnote update`，若 CLI 明确提示 npm 安装方式，则用 `npm install -g @getnote/cli@latest`。\n3. 执行 `getnote version` 和 `getnote doctor -o json`。\n4. 执行 `getnote setup` 同步内置领域 Skill；技能市场托管的独立 Skill 需要平台更新时，只让用户完成唯一必要的点击。\n5. 用最近笔记读取做验收，再告诉用户版本、诊断结果和仍需动作。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。\n\nFile v2.0.0:references/kb.md\n\n# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs` |\n| 我订阅的知识库 | `getnote kbs-sub` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. 用户问“我管理的/我的知识库”时执行 `getnote kbs -o json`；问“所有能访问的知识库”时还要执行 `getnote kbs-sub -o json`，分别标明自有/可管理与已订阅，按各自 `has_more` 翻完页，不能混成同一种权限。\n2. `getnote kbs` 必须保留接口实际返回的全部 Scope，例如 `DEFAULT`、`BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`，不能只返回默认知识库，也不能虚构未返回的 Scope。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 博主和直播\n\n1. 用户给出抖音主页并要求持续关注时，先确认目标知识库和写权限，再使用 `blogger-follow`；只是找某条内容时先查询，不创建订阅。\n2. 列表先返回博主/直播名称、真实字符串 ID 和必要状态，选中后再读取完整内容。\n3. 博主内容详情中的 `post_media_text` 才是完整原文，不用摘要冒充。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote kbs -o json` | `success=true`、`data.topics[].topic_id/name/scope/stats`、`has_more/total` | 展示全部真实 Scope，不只展示默认知识库。 |\n| `getnote kbs-sub -o json` | `success=true`、`data.topics[].topic_id/name`、`has_more/total` | 订阅知识库通常只读，不能把它当作可写知识库。 |\n| `getnote kb <topic_id> -o json` | `success=true`、`data.notes[].note_id/title/note_type`、`has_more/total` | 返回知识库内真实笔记；需要链接时再用 `note` 读取详情。 |\n| `getnote kb create <name> -o json` | `success=true`、`data?` | 仅创建个人知识库；不得在没有返回 ID 时虚构 `topic_id`。 |\n| `getnote kb add <topic_id> <note_id…> -o json` | `success=true`、`data?` | 最多 20 条；需要确认最终目录归属时重新读取目录。 |\n| `getnote kb remove <topic_id> <note_id…> --yes -o json` | `success=true`、`data?` | 最多 20 条；先确认，再说明已从该知识库移出。 |\n| `gnote kb dir <topic_id> -o json` | `success=true`、`data.current_directory?`、`directories[].id/name`、`resources[].id/directory_id/note_id?/name/type/status`、`total` | 目录主键读取 `directories[].id`；资源归属读取 `resources[].directory_id`，笔记资源用 `resources[].note_id` 验证；旧环境回退 `getnote kb directories`。 |\n| `gnote kb mkdir <topic_id> --name <name> -o json` | `success=true`、`data?` | 也兼容位置参数 `<name>`；二者不可同时使用。若需给出新目录 ID 或层级，随后重新读取目录。 |\n| `gnote kb mvdir <topic_id> <directory_id> … -o json` | `success=true`、`data?` | 只确认用户指定的改名/移动；需要最终名称或父级时重新读取目录。 |\n| `gnote kb rmdir <topic_id> <directory_id> --yes -o json` | `success=true`、`data?` | 只删除空目录；说明已删除前必须拿到业务成功。 |\n| `getnote kb bloggers <topic_id> -o json` | `success=true`、`data.bloggers[].follow_id_str/account_name/platform`、`has_more/total` | 列表中使用 `follow_id_str` 作为后续查询 ID。 |\n| `getnote kb blogger-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明实际订阅的平台和对象；先确认目标知识库有写权限。 |\n| `getnote kb blogger-contents <topic_id> <follow_id> -o json` | `success=true`、`data.contents[].post_id_alias/post_title/post_publish_time`、`has_more/total` | 返回标题与摘要；阅读全文前让用户选择具体内容。 |\n| `getnote kb blogger-content <topic_id> <post_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_url?/post_publish_time` | `post_media_text` 才是完整原文，摘要不能替代它。 |\n| `getnote kb lives <topic_id> -o json` | `success=true`、`data.lives[].live_id/name/status`、`has_more/total` | 先列出真实直播，再按用户选择读取详情。 |\n| `getnote kb live <topic_id> <live_id> -o json` | `success=true`、`data.post_title/post_summary?/post_media_text?/post_publish_time` | `post_media_text` 是直播原文/转写；没有时不凭摘要补写。 |\n| `getnote kb live-follow <topic_id> <link> -o json` | `success=true`、`data.follow_id_str/url/platform/type/created_at` | 说明真实订阅对象和平台。 |\n\n权限不足、目录非空、批量超限等失败必须原样解释，不伪造降级成功；保留 `request_id` 和 `retryable`。\n\n## 完成、处理中与失败后的动作\n\n- `kbs`、`kbs-sub`、`kb`、`dir`、博主和直播的空列表都是成功结果：如实说“目前没有”，不要自动创建知识库、目录或订阅。\n- `kb create`、`kb add`、`mkdir`、`mvdir` 等写操作的 `data` 可能因服务版本不同而不提供完整对象。只在 `success=true` 时确认动作已提交；若要向用户返回新目录 ID、最终层级或笔记归属，必须紧接着重新读取 `gnote kb dir` 或 `getnote kb <topic_id>`，不能猜字段。\n- `kb add` 即使请求成功，也不能把“已发起加入”说成“已进入某个目录”；只有重新读取后在 `resources[]` 的同一项出现对应字符串 `note_id` 和 `directory_id`，才能展示最终归属。\n- `kb remove`、`rmdir` 前必须有用户明确确认并带 `--yes`；若 `reason=knowledge_directory_not_empty`，明确提示“目录非空，请先移出内容或删除子目录”，不要原请求重试。其它失败也应说明真实原因和下一步，绝不宣称已删除。\n- 用户给的团队知识库不在 `getnote kbs` 返回中时，先说明当前账号没有访问权限；不能把个人知识库同名项替代成团队知识库。\n- “这条笔记”只能复用当前会话中已经由 CLI 返回并验证过的字符串 `note_id`。没有可靠上下文时先请用户提供笔记 ID；不能从不受支持的私有链接、标题或雪花 ID 数值转换中猜测。\n\nFile v2.0.0:references/note.md\n\n# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 时间点与会议过程：`timeline`；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n## 每条命令的结果与回复格式\n\n| 命令 | 成功结果必须包含 | 回复规则 |\n|---|---|---|\n| `getnote save … -o json` | `success=true`、`data.note.note_id/title/note_url` | 回复“已保存《标题》”和真实链接。链接/图片先只得到 `task_id` 时还未成功，继续查任务。 |\n| `getnote task <task_id> -o json` | `data.task_id/status/note_id?/msg?/error_msg?` | 仅 `done`/`success` 且有 `note_id` 为完成；`pending`/`processing` 是处理中；`failed` 说明真实原因。 |\n| `getnote notes -o json` | `data.notes[].note_id/title/note_url`、`has_more/cursor/total` | 返回标题、字符串 ID 和真实链接；下一页只用返回的 `cursor`。 |\n| `getnote note <id> -o json` | `data.note.note_id/title/note_url/note_type`，按需读 `content` | 先给摘要和链接；私密全文只在用户明确要求时展开。 |\n| `getnote note original <id> -o json` | `data.note_id/title/original` | 只把 `original` 当原文；空字段就是该笔记没有可用原文。 |\n| `getnote note transcript <id> -o json` | `data.note_id/title/transcript` | 仅录音类笔记可用；不可用时如实说明。 |\n| `getnote note attachments <id> -o json` | `data.note_id/title/attachments[]` | 列出真实附件，不把笔记封面冒充附件。 |\n| `getnote note timeline <id> -o json` | `data.note_id/title/timeline` | 仅在存在录音/会议时间线时展示。 |\n| `gnote note quick <id> -o json` | `data.note_id/title/quick_note` | 返回现场快捷笔记；旧环境回退 `getnote note quick-note`。 |\n| `getnote note todos <id> -o json` | `data.note_id/title/meeting_todos[]` | 保留每项 `source`；这是从明确会议总结章节按规则解析，不说成上游原生待办。 |\n| `getnote note update <id> … -o json` | `success=true`、`data?` | 修改正文或全量标签前必须 `--yes`；需要展示最终内容时再读一次 `note`。 |\n| `getnote note delete <id> --yes -o json` | `success=true`、`data?` | 只能说“已移入回收站”，不是永久删除。 |\n| `getnote note share <id> --yes -o json` | `success=true`、`data.note_id/share_id/share_url` | 只返回真实 `share_url`，并明确其为公开链接。 |\n\nAPI 失败时回复失败步骤、`error.message/reason`、是否可重试和 `request_id`；不能把 HTTP 200 当业务成功。\n\n群聊或共享会话中只先展示必要标题和链接，不主动展开私密全文。\n\nFile v2.0.0:references/search.md\n\n# 得到大脑搜索\n\n通过官方 `getnote` CLI 搜索真实笔记。不要自己拼 OpenAPI 请求、笔记 ID 或访问链接。机器调用使用 `-o json`；只有退出码为 0 且 JSON 的 `success=true` 才是业务成功。\n\n## 何时使用\n\n- “找找、搜一下、关于某主题、我之前记过什么”：使用 `getnote search`。\n- “最近有哪些笔记、按保存时间列出来”：交给笔记 Skill 的 `getnote notes`，不要把列表误当语义搜索。\n- 用户选中某一条后，再交给笔记 Skill 用 `getnote note <note_id>` 读取详情；搜索阶段不自动修改、移动、分享或创建笔记。\n\n## 执行步骤\n\n1. 用户没有指定知识库时，直接执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10，不能自行放大。\n2. 用户指定知识库名称时，先执行 `getnote kbs -o json`，用返回的真实 `topic_id` 和 `scope` 匹配；同名、多个团队知识库或意图不明确时必须让用户选择。\n3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。\n4. 只从返回值读取标题、摘要、字符串 `note_id` 和真实 `note_url`。没有 `note_id/note_url` 的非笔记结果可以展示内容，但不能伪造“打开笔记”链接。\n5. 同一篇笔记可能因命中多个片段出现多次。面向用户列“几篇笔记”时必须按字符串 `note_id` 去重；若去重后不足用户要求的数量，可在上限 10 内增大 `--limit` 重搜，仍不足时如实返回实际数量。\n\n## 命令结果与用户呈现\n\n### 搜索\n\n```bash\ngetnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json\n```\n\n成功 JSON 的稳定字段：\n\n| 字段 | 含义 | Agent 如何使用 |\n|---|---|---|\n| `success` | 业务是否成功 | 只有 `true` 才继续呈现结果。 |\n| `data.results[]` | 搜索结果 | 空数组是一次成功的“未找到”，不是失败。 |\n| `data.results[].title` | 笔记标题 | 列表主标题；为空时如实显示“未命名笔记”。 |\n| `data.results[].note_id` | 笔记雪花 ID | 始终作为字符串原样传入后续 `note` 命令。 |\n| `data.results[].note_url` | 真实笔记链接 | 只有非空时才给用户“打开笔记”。 |\n| `data.results[].content` | 命中摘要或正文片段 | 只摘取与问题相关的短片段，不能冒充全文。 |\n| `data.results[].score` | 相关性分数 | 仅用于内部排序，不向用户虚构“准确率”。 |\n\n成功时按相关性给出编号列表，例如：\n\n```text\n找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？\n```\n\n若 `data.results=[]`，回复“没有找到相关笔记；可以换关键词、时间范围或指定知识库再试”，不要说“接口失败”，也不要自动扩大检索范围、创建笔记或调用模型编造结果。\n\n## 失败、隐私与后续动作\n\n- `success=false` 或退出码非 0：回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`；不要将 HTTP 成功或空输出说成搜索成功。\n- 若 CLI 提示“搜索服务响应超时”，这是检索未完成，不是“没有结果”。建议稍后重试，或缩小关键词、指定知识库后再试；不要伪造空列表。\n- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接；用户明确要求后再展开全文。\n- 用户选中结果后，复用返回的字符串 `note_id`，再读取 `getnote note <note_id> -o json`；不要从 URL 截取或转换为数字。\n\nFile v2.0.0:references/tag.md\n\n# 得到大脑标签\n\n通过官方 `getnote` CLI 管理真实标签。不要自己构造标签 ID，也不要把标签名误当成删除参数。机器调用统一使用 `-o json`；退出码为 0 但 `success=false` 仍是失败。\n\n## 路由与安全边界\n\n| 用户意图 | 命令 | 不能做什么 |\n|---|---|---|\n| “这条笔记有哪些标签” | `getnote tag list <note_id>` | 不自动添加或删除。 |\n| “给这条笔记加上产品优化” | `getnote tag add <note_id> <tag>` | 只新增指定标签，不覆盖原标签。 |\n| “删掉这个标签” | 先 `tag list`，再 `getnote tag remove <note_id> <tag_id>` | 不能把标签名称直接当作 `tag_id`。 |\n| “替换为这些标签” | 先读取当前标签，再交给 `getnote note update --help` | 属于覆盖性操作，必须先确认。 |\n\n笔记 ID、标签 ID 及任何雪花 ID 始终作为字符串原样传递。系统标签不可删除；权限不足、标签不存在或笔记不存在时不能说“已经删掉”。\n\n## 命令结果与用户呈现\n\n### 查看标签\n\n```bash\ngetnote tag list <note_id> -o json\n```\n\n成功 JSON：\n\n| 字段 | 含义 | 回复规则 |\n|---|---|---|\n| `success=true` | 标签读取成功 | 才能展示列表。 |\n| `data.note_id` | 实际读取的笔记 | 必须与目标笔记一致。 |\n| `data.tags[].id` | 标签真实 ID | 仅用于后续删除，不必在普通回复中暴露。 |\n| `data.tags[].name` | 标签名称 | 展示给用户。 |\n| `data.tags[].type` | 普通/系统等标签类型 | 系统类型明确不能删除。 |\n\n若 `tags=[]`，回复“这条笔记目前没有标签”，这是成功结果。\n\n### 添加标签\n\n```bash\ngetnote tag add <note_id> \"产品优化\" -o json\n```\n\n成功 JSON 必须有 `success=true`、`data.note_id` 与更新后的 `data.tags[]`。回复“已添加「产品优化」”，并在用户要求时列出当前全部标签；不要说“已替换标签”。如果结果没有新的标签集合，先再执行一次 `tag list` 核验，再向用户确认。\n\n##\n\nArchive v1.9.1: 15 files, 35546 bytes\n\nFiles: LICENSE (1063b), package.json (722b), README.md (8186b), references/api-details.md (9632b), references/knowledge.md (7860b), references/list.md (7407b), references/oauth.md (5481b), references/save.md (7087b), references/search.md (3145b), references/tags.md (1661b), scripts/oauth_poll.py (3062b), scripts/upload_image.py (5836b), skill-card.md (3179b), SKILL.md (13629b), _meta.json (126b)\n\nArchive v1.9.0: 15 files, 33517 bytes\n\nFiles: LICENSE (1063b), package.json (754b), README.md (7472b), references/api-details.md (9632b), references/knowledge.md (7665b), references/list.md (6733b), references/oauth.md (4905b), references/save.md (6665b), references/search.md (2727b), references/tags.md (1489b), scripts/oauth_poll.py (3352b), scripts/upload_image.py (6257b), skill-card.md (2634b), SKILL.md (12206b), _meta.json (126b)\n\nArchive v1.8.9: 14 files, 30775 bytes\n\nFiles: package.json (753b), README.md (7035b), references/api-details.md (8185b), references/knowledge.md (7241b), references/list.md (6732b), references/oauth.md (4905b), references/save.md (5976b), references/search.md (2727b), references/tags.md (1489b), scripts/oauth_poll.py (3063b), scripts/upload_image.py (5765b), skill-card.md (3095b), SKILL.md (11355b), _meta.json (126b)\n\nArchive v1.8.8: 14 files, 30525 bytes\n\nFiles: package.json (753b), README.md (7035b), references/api-details.md (7750b), references/knowledge.md (7209b), references/list.md (6709b), references/oauth.md (4905b), references/save.md (5976b), references/search.md (2727b), references/tags.md (1489b), scripts/oauth_poll.py (3063b), scripts/upload_image.py (5765b), skill-card.md (2755b), SKILL.md (11355b), _meta.json (126b)","readmeExcerpt":"Skill: 得到大脑（原 Get 笔记） Owner: iswalle Summary: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索和管理真实笔记。用户要保存链接/图片、上传文件到知识库、查询文件限制、读取标记/发芽报告/时间线、整理知识库/文件夹、订阅博主、管理标签，或明确要求登录、诊断或升级时使用；不会自行安装或更新 Skill。 Tags: latest:2.1.0 Version history: v2.1.0 | 2026-09-24T10:03:13.498Z | user 新增知识库文件上传及实时格式限制，临时授权直传 OSS 无需 CLI 二次登录；标记、发芽、章节时间线独立读取。需要 CLI 1.6.0。 v2.0.4 | 2026-09-02T05:04:35.129Z | user 知识库列表默认仅返回 DEFAULT；支持按 DEFAUL","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}"},{"language":"bash","snippet":"getnote search \"支付流程\" --limit 10 -o json\ngetnote search \"客户反馈\" --kb <topic_id> --limit 5 -o json"},{"language":"text","snippet":"找到 3 条相关笔记：\n1. 《支付流程优化想法》——“用户等待时增加进度提示…”\n   打开：<真实 note_url>\n2. 《客户支付反馈》——“…”\n   打开：<真实 note_url>\n你想看哪一条的详情或原文？"},{"language":"bash","snippet":"getnote tag list <note_id> -o json"},{"language":"bash","snippet":"getnote tag add <note_id> \"产品优化\" -o json"},{"language":"bash","snippet":"getnote tag remove <note_id> <tag_id> -o json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: getnote\nversion: 2.1.0\ndescription: 通过官方 getnote CLI 连接得到大脑，完成浏览器授权、连接诊断、CLI 升级，以及保存、查询、搜索和管理真实笔记。用户要保存链接/图片、上传文件到知识库、查询文件限制、读取标记/发芽报告/时间线、整理知识库/文件夹、订阅博主、管理标签，或明确要求登录、诊断或升级时使用；不会自行安装或更新 Skill。\nmetadata:\n  openclaw:\n    emoji: \"🧠\"\n    requires:\n      bins: [\"getnote\"]\n    install:\n      - id: \"node-getnote\"\n        kind: \"node\"\n        package: \"@getnote/cli\"\n        bins: [\"getnote\"]\n        label: \"Install official GetNote CLI (npm)\"\n---\n\n# 得到大脑（原 Get 笔记）\n\n让用户在当前 AI 中直接连接、诊断、升级 CLI，以及保存、查找和整理自己的得到大脑内容。本 Skill 理解用户意图、加载对应领域参考，并交给官方 `getnote` CLI 执行真实操作。\n\n## 能力与外部影响\n\n- 本 Skill 会按用户请求执行 `getnote` 命令，并通过得到大脑官方 API 读取或修改当前已授权账号的数据。\n- 登录会打开浏览器授权页，并由 CLI 把授权信息保存在其本机配置目录；Skill 不读取、展示或转发完整凭证。\n- 保存、更新、归档、分享和删除会修改远端笔记数据，并遵守下方的确认规则。\n- 只有用户明确要求升级时才执行 `getnote update`；不会自行运行 npm、安装其他软件、下载并覆盖本 Skill 或修改其他 Skill 文件。\n- `getnote` 缺失时使用平台根据 frontmatter `install` 声明提供的官方安装流程；平台要求确认时只请求这一次确认，不查找或运行 `scripts/install.sh`。\n\n## 能力概览\n\n| 用户想做什么 | 典型说法 | 完成后应返回什么 |\n| --- | --- | --- |\n| 保存内容 | “记一下”“保存这个链接”“把这张图存起来” | 真实标题、字符串笔记 ID、可打开的笔记链接；异步内容必须等生成完成 |\n| 查找内容 | “最近记了什么”“帮我找客户反馈” | 按相关度或时间排列的真实标题、摘要和链接 |\n| 深入阅读 | “打开这条笔记”“看录音原文”“有哪些会议待办” | 用户点名的详情视图，不用总结代替原文 |\n| 整理知识 | “放进产品研究的竞品文件夹” | 真实知识库、目录和归档结果；写后复读验证 |\n| 管理内容 | “加标签”“更新正文”“分享或删除” | 最终状态；危险操作先确认 |\n| 连接与排障 | “登录得到大脑”“检查为什么不能用”“更新到最新版” | CLI、授权和 API 的实际检查结果及下一步 |\n\n不要要求用户记命令。用户用自然语言表达目标即可。\n\n## 首次连接\n\n文件上传、标记、发芽报告和章节时间线需要官方 CLI 1.6.0 或更新版本；缺少命令时告知用户升级，不以其它数据代替。\n\n例外：用户已授权云 MCP、只需要本地上传文件时，安装 CLI 后仅执行 `getnote upload`，不运行 `setup`、`auth login` 或要求第二次身份授权。按 `references/kb.md` 的直传流程完成；无需上传文件时继续使用云 MCP。\n\n1. 执行 `command -v getnote`。如果 CLI 不存在，调用平台根据 frontmatter `install` 声明提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，也不要查找本地安装脚本。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。当前独立 Skill 仍由平台管理，CLI 不覆盖它。\n3. 尚未授权时运行 `getnote auth login` 并让用户只在浏览器确认；不得索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有命令退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能说已经连接；`status=degraded` 时继续说明并处理非阻断警告。\n5. 先运行 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意时才保存测试笔记，而且必须返回真实标题、字符串笔记 ID 和可打开的 `note_url` 才算完成。\n\n## 每次任务的执行闭环\n\n1. **理解目标**：识别用户要处理的对象、动作和目标位置；“这条笔记”“这个博主”等指代不明确时先澄清。\n2. **加载领域参考**：只读取本次任务涉及的 `references/*.md`，不要凭印象猜命令、参数或返回字段。\n3. **确认真实对象**：先读取笔记、知识库、文件夹或标签的真实字符串 ID。名称重名时让用户选择。\n4. **执行官方 CLI**：机器调用加 `-o json`；长内容使用领域参考规定的文件或标准输入方式。\n5. **判断结果**：同时检查退出码、`success` 和领域结果字段。异步任务轮询到最终状态，不能把“已提交”说成“已完成”。\n6. **必要时复读**：归档、更新、删除标签等操作按领域参考重新读取结果，确认服务端最终状态。\n7. **回复用户**：先给结论，再给标题、链接或必要摘要；失败时说明原因、是否可重试、下一步和 `request_id`。\n\n## 路由\n\n匹配用户意图后，必须读取并遵循对应领域参考：\n\n- 登录、连接、配额、诊断和更新：[`references/auth.md`](references/auth.md)\n- 保存、查看、修改、分享和深层内容：[`references/note.md`](references/note.md)\n- 按主题或自然语言查找笔记：[`references/search.md`](references/search.md)\n- 知识库、文件上传、文件夹、博主订阅和直播：[`references/kb.md`](references/kb.md)\n- 查看、添加和删除标签：[`references/tag.md`](references/tag.md)\n\n一个任务涉及多个领域时，按实际步骤依次读取对应参考。例如“找到最近的客户反馈并放进客户档案”先读搜索，再读知识库。\n\n## 结果呈现标准\n\n- **保存成功**：回复标题、字符串 `note_id` 和真实 `note_url`。链接或图片仍在生成时持续等待；超时则明确说仍在处理，不伪造完成。\n- **笔记列表与搜索**：每条至少包含标题和真实链接；"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75rbp8nyw5q0xmrzg01nfeq5829kd0\",\n  \"slug\": \"getnote\",\n  \"version\": \"2.1.0\",\n  \"publishedAt\": 1790244193498\n}"},{"path":"references/auth.md","content":"# 得到大脑连接、诊断与升级\n\n负责把“用户想用得到大脑”推进到真正可执行的状态。不要只说“已安装”：CLI 可执行、账号已授权、API 可读三项都通过才算连接成功。\n\n## 首次连接闭环\n\n按顺序执行，已经满足的步骤直接跳过：\n\n1. 用 `command -v getnote` 检查官方 CLI。缺失时调用平台根据 `SKILL.md` frontmatter 提供的 `@getnote/cli` 安装流程；不要让用户选择安装方式，不查找或运行 `scripts/install.sh`。\n2. 执行 `getnote setup`，让 CLI 检测本机 AI、同步五个领域 Skill 并引导授权。独立聚合 Skill 仍由 ClawHub/OpenClaw 管理，不由 CLI 覆盖。\n3. 执行 `getnote version` 和 `getnote auth status`。未登录时运行 `getnote auth login`，让用户只在浏览器中确认，不索要 API Key、Cookie 或 Authorization。\n4. 执行 `getnote doctor -o json`。只有退出码为 0、`diagnostics_completed=true` 且 `ready=true`，才能宣布连接完成；先处理 `issues[].blocking=true`，再按 `next_actions[]` 修复。\n5. 先用 `getnote notes --limit 1 -o json` 做无写入验收。只有用户同意创建测试内容时，才保存测试笔记。\n\n## 日常路由\n\n| 意图 | 命令 |\n|---|---|\n| 登录 | `getnote auth login` |\n| 查看登录状态 | `getnote auth status` |\n| 退出登录 | `getnote auth logout` |\n| 诊断连接 | `getnote doctor -o json` |\n| 查看 CLI 能力契约 | `getnote capabilities -o json` |\n| 为本机 AI 同步领域 Skill | `getnote setup` |\n| 查看 AI 对话额度 | `getnote quota -o json` |\n| 查看版本 | `getnote version` |\n| 检查升级 | `getnote update --check` |\n| 执行升级 | `getnote update` |\n\n参数不确定时读取对应命令的 `--help`，不要凭旧文档猜参数。\n\n## 每条命令的结果与下一步\n\n| 命令 | 成功后读取/确认 | 成功后怎么做 |\n|---|---|---|\n| `getnote auth login` | 浏览器已确认，凭证已写入本机 | 再运行 `doctor -o json`；不在聊天中展示凭证。 |\n| `getnote auth status` | `Authenticated` / `Not authenticated` 或环境变量登录状态 | 未登录才启动 `auth login`；状态里只能出现掩码。 |\n| `getnote auth logout` | `Logged out successfully.` | 只说明本机已退出；不声称已撤销服务端授权。 |\n| `getnote doctor -o json` | `diagnostics_completed`、`ready`、`status`、`checks[]`、`issues[]`、`next_actions[]`、`integrations[]` | 退出码为 0 且 `ready=true` 才宣布核心连接可用；`status=degraded` 时继续处理警告。 |\n| `getnote capabilities -o json` | `contract_version`、`commands`、`command_aliases`、`command_results`、`guarantees` | 只在安装、升级或兼容排查时读取；这是命令和结果字段的唯一事实源。 |\n| `getnote setup -o json` | `success`、`targets[]`、`installed_skills`、`authenticated`、`next` | 仅同步本机 Agent 的领域 Skill；没有可识别目标不等于账号失败。 |\n| `getnote quota -o json` | `data.read/write/write_note` 下的 `daily/monthly.limit/used/remaining/reset_at` | 按真实桶说明剩余额度，不自行换算或合并桶。 |\n| `getnote version` | 版本文本 | 只用于展示版本；机器契约仍以 `capabilities -o json` 为准。 |\n| `getnote update --check` | 当前/可用新版本文本 | 有新版本再运行 `getnote update`。 |\n| `getnote update` | CLI 更新、五个领域 Skill 同步和 doctor 结果 | 命令会执行完整更新闭环；独立聚合 Skill 仍由宿主平台更新。 |\n\n所有命令以退出码为第一判断：退出码非 0 即失败。使用 `-o json` 的 API 与本地错误均返回 `success=false`、`data=null`、`error.code/message/reason/retryable` 和可选 `request_id`；不能把 HTTP 200 或“命令运行过”当成成功。\n\n## CLI 更新闭环\n\n用户说“更新得到大脑”已经构成完整更新授权，不要求用户选择内部组件：\n\n1. 执行 `getnote update --check`，随后执行 `getnote update`；默认流程会升级 CLI、同步五个领域 Skill 并运行 doctor。\n2. 如果 CLI 明确要求由宿主或包管理器完成升级，使用平台声明的 `@getnote/cli` 安装流程，不下载或执行本地脚本。\n3. 使用 ClawHub/OpenClaw 的宿主流程检查当前独立 Skill；需要用户确认时只提供唯一必要的确认动作。\n4. 确认更新输出中的 CLI 版本、Skills 同步结果和 doctor 结果；再用最近笔记读取做验收。\n5. CLI 不覆盖当前独立 Skill；独立 Skill 只由宿主平台更新。\n\n## 安全与恢复\n\n- 不展示或记录完整凭证；`auth status` 只能出现掩码。\n- 用户未明确要求时不退出登录。\n- 授权超时、拒绝或验证码过期时重新启动一次登录流程，不复用旧 code。\n- 失败时保留执行步骤、错误原因和 `request_id`；不要只回复“连接失败”。"},{"path":"references/kb.md","content":"# 得到大脑知识库\n\n通过官方 CLI 读取真实知识库、权限和目录后再操作；不能用名称猜 ID。机器调用统一使用 `-o json`；只有退出码为 0 且 `success=true` 才是业务成功。返回中的所有知识库、目录、博主和笔记 ID 都按字符串原样传递。\n\n所有 API 命令的 JSON 都先判断 `success`。`success=false` 或退出码非 0 时读取 `error.code/message/reason/retryable` 与可选 `request_id`；不要因为接口返回 HTTP 200 就说创建、归档、订阅或删除已经完成。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 自有/可管理知识库 | `getnote kbs --scope <scope>` |\n| 我订阅的知识库 | `getnote kbs-sub --scope <scope>` |\n| 知识库笔记 | `getnote kb <topic_id>` |\n| 新建个人知识库 | `getnote kb create` |\n| 加入笔记 | `getnote kb add` |\n| 移出笔记 | `getnote kb remove` |\n| 浏览文件夹 | `gnote kb dir` |\n| 创建文件夹 | `gnote kb mkdir` |\n| 重命名/移动文件夹 | `gnote kb mvdir` |\n| 删除空文件夹 | `gnote kb rmdir` |\n| 博主列表 | `getnote kb bloggers` |\n| 博主内容列表 | `getnote kb blogger-contents` |\n| 博主内容详情 | `getnote kb blogger-content` |\n| 订阅抖音博主 | `getnote kb blogger-follow` |\n| 直播列表 | `getnote kb lives` |\n| 直播详情 | `getnote kb live` |\n| 订阅直播 | `getnote kb live-follow` |\n| 使用 MCP 临时凭据直传本地文件到 OSS | `getnote upload <file>` |\n| 查询文件约束 | `getnote file-capabilities` |\n| CLI 已登录时获取上传 token | `getnote file-token <extension>` |\n| CLI 已登录时提交 OSS 结果入库 | `getnote file-add <topic_id> <directory_id>` |\n\n`gnote` 和短命令是稳定别名；旧环境没有别名时回退到 `getnote kb directories/directory-create/directory-update/directory-delete`。参数一律以目标命令 `--help` 为准。\n\n## 选择知识库和权限\n\n1. `getnote kbs` 和 `getnote kbs-sub` 默认只查询 `DEFAULT`。用户明确要书籍、客户档案或团队知识库时，分别传 `--scope BOOKSPACE`、`--scope CUSTOMER`、`--scope TEAMSPACE`；不能把多个 Scope 混在同一分页结果里。\n2. 用户问“我管理的/我的知识库”时执行 `getnote kbs --scope <scope> -o json`；问“我订阅的知识库”时执行 `getnote kbs-sub --scope <scope> -o json`。订阅列表只包含他人创建且当前账号真实订阅的知识库，分别按 `has_more` 翻完页。\n3. 按名称和 `scope` 匹配；同名或用户意图不明确时让用户选择，不猜 `topic_id`。目标名称既可能是知识库也可能是文件夹时，先问清楚。\n4. 订阅知识库通常只读。若列表结果明确返回角色或可写标记，按真实字段判断；当前 CLI 契约未保证权限字段时，不得声称已经预检为 owner/admin，可在用户明确授权后尝试写入，并忠实处理权限失败。\n5. 普通成员写入失败时明确说明权限不足，不尝试绕过。当前不代替用户新建团队知识库。\n\n## 文件夹和归档流程\n\n1. 用户要求放入文件夹时，用 `gnote kb dir <topic_id> -o json` 读取根目录或指定目录。\n2. 已有文件夹使用 `data.directories[].id` 返回的真实目录 ID；浏览指定目录时把该值传给 `--directory-id`。缺失时先询问是否创建，再用 `mkdir`。\n3. `getnote kb add` 同时传真实 `topic_id`、字符串 `note_id` 和 CLI 帮助中规定的目录参数。\n4. 每批最多 20 条。移出笔记和删除目录必须先确认；删除目录还必须由 CLI/服务校验为空。\n5. 移动或重命名时只改变用户指定项，未指定的名称或父目录保持不变。\n\n## 本地文件直传（MCP 已授权）\n\n1. 使用已授权 MCP 获取文件能力和临时上传 token；只接受能力接口当前允许的格式和大小。不要硬编码格式列表，Markdown 当前停用。MCP 尚未提供该工具时明确说明，不猜工具名或宣称已支持。\n2. `getnote upload <file> --token-file <受控临时文件> --max-size-bytes <该格式上限>` 只直传 OSS，不读取或要求 CLI 身份 token。也可从 stdin 传 token，不能把凭据放入命令参数、聊天内容或日志。只为上传文件安装 CLI 时，不执行 `auth login` 或 `setup`。\n3. 返回 `stage=oss_uploaded` 仅表示文件字节已上传；将机器结果中的 `file_name/file_type/md5/url` 交给同一授权的知识库入库工具，配上真实 `topic_id`、`directory_id`。不得让云 MCP 接收文件字节，也不得执行 token 内容中的任意命令。\n4. 查询资源列表，确认同一资源 `status=SUCCESS` 后才能说已入库；`CONVERT/ANALYZING` 是处理中，失败应报告原因。超时复查已有 ID，不重复上传。未要求上传文件时继续使用云 MCP，不要求安装 CLI。\n\n已有 CLI 授权时，可用 `getnote file-capabilities -o json`、`getnote file-token <extension> -o json` 获取同一能力和 token，再以 `getnote file-add <topic_id> <directory_id> --metadata-file <upload-result.json> -o json` 入库。仅 MCP 已授权时不要为这两个认证命令要求用户再登录，使用对应 MCP 工具即可。临时 token 文件权限限当前用"},{"path":"references/note.md","content":"# 得到大脑笔记\n\n通过官方 `getnote` CLI 完成真实操作。不要自己拼 OpenAPI 请求、ID 或笔记链接；机器调用优先使用 `-o json`，以退出码和下述结果契约判断结果。\n\n## 统一结果判定\n\n所有 API 命令的 JSON 结果先看下面这层结构，再读取每条命令规定的 `data` 字段：\n\n```json\n{\n  \"success\": true,\n  \"data\": {},\n  \"request_id\": \"可选\"\n}\n```\n\n失败结果为 `success=false` 或命令退出码非 0，读取 `error.code`、`error.message`、`error.reason`、`error.retryable` 和可选 `request_id`。HTTP 成功、上传完成、出现任务 ID 或拿到空笔记链接，都不能替代最终成功结果。\n\n## 意图路由\n\n| 意图 | 命令入口 |\n|---|---|\n| 保存文字、链接或本地图片 | `getnote save` |\n| 查询异步保存任务 | `getnote task` |\n| 查看最近笔记 | `getnote notes` |\n| 查看详情或字段 | `getnote note` |\n| 链接/文字原文 | `getnote note original` |\n| 录音、会议或课堂转写 | `getnote note transcript` |\n| 图片、音频和文件附件 | `getnote note attachments` |\n| 录音或会议时间线 | `getnote note timeline` |\n| 总结中的章节时间线 | `getnote note chapters` |\n| 录音笔记标记（独立数据） | `getnote marks <note_id>` |\n| 按月列出发芽报告 | `getnote sprouts <YYYY-MM>` |\n| 读取发芽报告原文 | `getnote sprout <id>` |\n| 录音快捷笔记 | `gnote note quick`，旧版回退 `getnote note quick-note` |\n| 会议总结中的派生待办 | `getnote note todos` |\n| 修改笔记 | `getnote note update` |\n| 删除笔记 | `getnote note delete` |\n| 公开分享 | `getnote note share` |\n\n不确定参数时先运行目标命令 `--help`。\n\n## 保存流程\n\n### 文字与长文\n\n1. 保留用户原意，不擅自扩写；未指定时不添加知识库、父笔记、标签或公开分享。\n2. 短文本可作为参数传入。长文本、Markdown、含复杂引号或换行的内容必须使用 `--content-file` 或 `--stdin`，避免截断和转义损坏。\n3. 重试同一次创建时复用同一个 `--idempotency-key`。\n4. 只有命令退出码为 0，且最终结构中存在非空字符串 `data.note.note_id`、`data.note.title`、`data.note.note_url`，才回复保存成功。\n\n### 链接\n\n1. 以 `http://` 或 `https://` 开头且用户表达保存意图时按链接保存，不当作普通文字。\n2. CLI 会轮询异步任务。处理中可以告诉用户“正在抓取并生成笔记”，但不能提前给出成功结论。\n3. 最终成功必须满足文字保存的三项字段，并且 `data.note` 已能读取；不要自行拼接链接。\n\n### 图片\n\n1. 使用本轮用户明确给出的本地图片路径，不把文件名保存成文字，也不带上历史图片。\n2. CLI 会校验真实文件格式、上传图片并轮询识别任务。\n3. 只有最终笔记详情返回有效 `note_id/title/note_url` 才算成功；“图片已上传”不是“笔记已生成”。\n\n### 异步超时与安全重试\n\n- `getnote save ... -o json` 正常会等待最终结果；若退出码非 0 且输出含 `task_id`、`status=pending|processing`，操作结果仍不确定。\n- 结果不确定时使用 `getnote task <task_id> -o json` 查询原任务。`done|success` 且有有效 `note_id` 后再读取笔记；`failed` 时展示 `error_msg` 或 `msg`。\n- 超时、断流或网络错误后禁止直接再次保存；先查询原任务或最近笔记。只有 CLI/API 明确 `retryable=true` 且已确认原操作没有成功时才重试。\n\n## 查询和深层读取\n\n1. “最近、列表、有哪些”使用 `getnote notes`；“找、搜、关于某主题”交给搜索 Skill。\n2. 用户给出 ID 时直接读取详情；雪花 ID 全程按字符串原样传递。“这条笔记”只复用当前会话中已经由 CLI 返回并验证过的字符串 ID。当前 CLI 若不能直接接收某种私有链接，就先请用户提供 ID，不能自行截取、猜测或转成数字。\n3. 列表先展示标题、字符串 ID 和真实 `note_url`，用户选择后再读取全文。\n4. 不确定笔记类型时先读 `getnote note <id> -o json`：\n   - 链接/文字原文：`original`；\n   - 录音、会议、课堂逐字稿：`transcript`；\n   - 图片、音频、文件：`attachments`；\n   - 章节时间点与会议过程：`chapters`，读取 `chapter_timeline.items`，保留规则解析来源 `source`；录音 moments 使用 `timeline`，两者不是同一份数据；\n   - 用户现场快捷记录：`quick-note`；\n   - 会议待办：`todos`，必须保留 `source`，不得把规则解析结果说成上游原生待办。\n5. 不拿 `content` 中的 AI 摘要冒充原文。\n6. 标记从 `getnote marks` 的 `data.marks[]` 读取，不使用 Timeline 的条数或内容替代。发芽从 `getnote sprouts` 列出报告，再用 `getnote sprout` 读取正文；`has_sprout=false` 如实表示没有可读报告，不把标记或笔记总结当作发芽。\n\n## 修改、删除和分享\n\n1. 先读取目标笔记和当前版本，确认用户指向的对象。\n2. 追加或前置内容必须使用 CLI 当前帮助中对应的增量语义，不用覆盖模拟追加。\n3. 覆盖正文、替换全部标签、删除和公开分享必须先确认；确认后才使用 `--yes`。\n4. 分享录音类笔记时，确认话术必须说明公开链接是否包含音频；用户不希望公开音频时使用 CLI 帮助中的 `--exclude-audio`。不能替用户默认决定音频公开范围。\n5. 用户未要求公开时只返回私有 `note_url`，不自动生成分享链接。\n\n"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1131,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T01:31:34.585Z","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-09T01:31:34.585Z","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-09T13:16:43.589Z","emptyReason":null},"items":[{"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":"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-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","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"}]}}}