本 skill 需要以下工具权限:
exec:调用 getnote CLI 获取笔记数据(只读操作)feishu_wiki、feishu_doc:写入飞书文档sessions_list、sessions_history:读取对话记录不会执行任何本地文件写入之外的 shell 命令,所有外部 API 调用均为只读请求。
重要:禁止直接调用 https://openapi.biji.com/... HTTPS API(会返回 10004 未授权),必须使用 getnote CLI。
Get笔记 API 凭证存储在 openclaw.json 中:
{
"skills": {
"entries": {
"getnote": {
"apiKey": "<从配置文件读取,勿硬编码>",
"env": {
"GETNOTE_CLIENT_ID": "<从配置文件读取>"
}
}
}
}
}
飞书机器人需已加入知识库成员,否则 feishu_wiki(spaces) 返回空。
飞书文档统一存放在共享文件夹「牛管家日志」,确保张公子有删除权限。
| 配置项 | 值 |
|---|---|
| -------- | --- |
| 文件夹名称 | 牛管家日志 |
| 文件夹 token | FQfXfYBGGllxxydJ1SgcJZWqnpf |
| 文件夹 URL | https://qcnu4qzh46f0.feishu.cn/drive/folder/FQfXfYBGGllxxydJ1SgcJZWqnpf |
| 张公子权限 | full_access(可删除文档) |
每天自动生成日志简报,三端同步归档。
> ⚠️ 重要:Get笔记 CLI 维护独立于 openclaw.json 的登录状态,电脑重启后可能被重置(显示 Not authenticated)。本步骤自动检测并修复,无需用户手动操作。
操作流程:
getnote auth status 检查当前认证状态Not authenticated:~/.openclaw/openclaw.json 读取 skills.entries.getnote.apiKey 和 skills.entries.getnote.env.GETNOTE_CLIENT_IDgetnote auth login --api-key "" --client-id "" (API Key 直接传给 CLI,不记录到任何日志)Logged in successfully. 确认Authenticated):直接继续,不做任何操作注意:API Key 从配置文件读取后直接作为命令行参数传给 getnote auth login,不写入任何日志文件或工作记忆,防止隐私泄露。
date 命令获取当前日期:date +%Y-%m-%ddate 命令计算昨天的日期:date -v-1d +%Y-%m-%ddate 命令验证星期:date -jf "%Y-%m-%d" "<目标日期>" +%A目标日期:YYYY-MM-DD(周X),并用 date 命令确认YYYY-MM-DD(用于字符串前缀匹配)> ⚠️ 重要:Get笔记 API 必须通过 getnote CLI 调用,禁止直接调用 https://openapi.biji.com/...(会返回 10004 未授权)。
读取步骤:
```bash
GETNOTE_CLI="/Users/openclawer/.npm-global/lib/node_modules/@getnote/cli/bin/getnote"
```
```bash
${GETNOTE_CLI} auth status
```
Not authenticated:从 ~/.openclaw/openclaw.json 读取 skills.entries.getnote.apiKey 和 skills.entries.getnote.env.GETNOTE_CLIENT_ID,然后执行 getnote auth login --api-key "" --client-id "" Authenticated:直接继续```bash
# 读取最新笔记(自动分页),输出为 table 格式
${GETNOTE_CLI} notes --since-id 0 --limit 50
# 读取指定知识库的笔记
${GETNOTE_CLI} kb eYzMmvnm --limit 20
# 搜索笔记
${GETNOTE_CLI} search "<关键词>" --limit 10
```
grep 过滤 created 列包含目标日期的行:```bash
${GETNOTE_CLI} notes --since-id 0 --limit 200 2>/dev/null | \
grep "^2026-05-13" | head -20
```
```bash
${GETNOTE_CLI} note
${GETNOTE_CLI} note
```
> ⚠️ API Key 凭证来源:从 ~/.openclaw/openclaw.json 的 skills.entries.getnote.apiKey 读取(不要硬编码)。API Key 从配置文件读取后直接作为命令行参数传给 CLI,不记录到任何日志。
> ⚠️ 重要:Get笔记 API 必须通过 getnote CLI 调用,不支持直接 HTTPS API 调用(直接调 https://openapi.biji.com/... 会返回 10004 未授权)。
读取方式 A(推荐):用 CLI 的 --since-id 0 --all 拿到全部笔记,自动分页:
GETNOTE_CLI="${HOME}/.npm-global/lib/node_modules/@getnote/cli/bin/getnote"
${GETNOTE_CLI} notes --since-id 0 --all 2>/dev/null | grep -v "^ID\|^--\|^$" | awk -F'|' '{print $1,$2,$3,$4}' | while read id title type created; do
# 过滤目标日期 created_at ~ target_date
done
读取方式 B(直接 API,备用):如果 CLI 因 PATH 问题不可用,用 Python 读配置文件后通过 getnote CLI 保存:
# 不要直接调 openapi.biji.com(会10004未授权)
# 必须通过 getnote CLI
GETNOTE_CLI="${HOME}/.npm-global/lib/node_modules/@getnote/cli/bin/getnote"
${GETNOTE_CLI} notes --since-id 0 --limit 20 # 分页读取,每页20条,用 next_cursor 翻页
修复 getnote: command not found:如果执行报错 command not found,改用完整路径:
GETNOTE_CLI="/Users/openclawer/.npm-global/lib/node_modules/@getnote/cli/bin/getnote"
> ⚠️ PATH 问题说明:cron isolated session 的 PATH 不包含 ~/.npm-global/bin,使用 getnote 命令会报 command not found。必须使用完整路径或确保 PATH 包含 npm 全局 bin 目录。
sessions_list 获取所有 session(设置足够的 activeMinutes 覆盖目标日期)updatedAt >= 目标日期开始时间 AND updatedAt < 今日开始时间sessions_history 读取符合条件的 session 内容(includeTools=false)role: user)作为对话记录exec + cat 读取 workspace/vocabulary/{target_date}.md,若文件不存在或读取失败则跳过,不阻断流程> ⚠️ 路径处理规范:所有从 memory_search 或 sessions_list 等工具返回的路径,返回格式可能为 Markdown 链接(如 2026-04-05.md 包装,保留 text 部分作为文件路径)。
> ⚠️ 内容过滤规则(v0.1.6 新增,必须执行)
> 整理前需剔除【科技新闻日报】自动生成的内容,避免日志简报被机器人生成内容稀释:
> - 排除文件:memory/YYYY-MM-DD-tech-news.md(科技新闻日报生成的本地新闻文件)
> - 排除文档:飞书文档标题含「科技新闻日报」或「科技新闻热榜」的文档及其内容
> - 排除笔记:Get笔记标签或来源为「科技新闻日报」相关条目
> - 仅保留张公子个人学习、播客、录音、网页剪藏、手动笔记等主动获取内容
用户行为分析:
tags、title、source 推断用户关注领域张公子画像维度(供参考):
| 维度 | 观察点 |
|---|---|
| ------ | -------- |
| 学习风格 | 主动深度 vs 被动浏览 |
| 知识关联 | 是否跨领域建立联系 |
| 方法论倾向 | 重底层原理 vs 碎片技巧 |
| 时间感知 | 是否主动管理精力/时间 |
| 决策态度 | 务实程度、换方法频率 |
生成日志简报结构(见 references/briefing-template.md)
> ⚠️ 强制完整输出规则(v0.1.7 新增):无论输入数据多少,哪怕只有1条笔记,也必须生成完整模板的所有区块(主题关联图、数据概览、核心主题、每条笔记的详细分析、张公子关注什么、可以改进什么、明日关注、关键词、今日洞察)。简报不是摘要,是完整的结构化记录。当某日数据较少时,每个主题下的「分析/联想」部分可以简短,但不得省略整个区块。
生成主题关联图(v0.1.5 新增):
根据当日笔记和对话记录,自动提取3-5个核心主题,标注主题间的关联关系,帮助快速定位知识节点。
关联类型标签:
→ 因果关系(A导致B)⟶ 支撑关系(A证实/支持B)⇄ 竞争关系(A与B竞争)↙ 衍生关系(A衍生出B)生成规则:
必须先确保目录存在:
mkdir -p /Users/openclawer/.openclaw/workspace/日志管理
文件路径:/Users/openclawer/.openclaw/workspace/日志管理/{target_date}-日志简报.md
① Get笔记(必须写入完整简报全文,不得简写):
POST https://openapi.biji.com/open/api/v1/resource/note/save
Headers:
Authorization: {从配置文件读取}
X-Client-ID: {从配置文件读取}
Body:
title: "日志简报 {target_date} | {姓名}"
content: 【必须写入完整简报全文】,包含所有章节、分析、统计数据,不得写入摘要或简短版本
note_type: "plain_text"
tags: ["AI整理", "日志简报"]
> ⚠️ 重要:Get笔记的 content 字段必须包含日志简报的完整正文(与写入本地文件和飞书文档的内容完全一致),不得以"详见链接"为由缩减内容。
② 飞书知识库(必须同步,否则简报缺失):
> ⚠️ 节点层级结构(v0.1.10 修复):
> - 个人知识库(space_id: 7621391289904516315)
> - 日志简报 节点(node_token: SERDwHBAniUqqBkx5vNctvgKn6f,obj_token: 对应文件夹下的日志简报)
> - 每日日志简报文档(创建在此节点下)
>
> 执行顺序:
> 1. 用 lark-cli wiki +node-create --space-id 7621391289904516315 --parent-node-token SERDwHBAniUqqBkx5vNctvgKn6f --title "日志简报 {target_date} | 张公子" 创建 wiki 节点
> 2. 获取返回的 obj_token(新文档的 doc token)
> 3. 用 lark-cli docs +update --api-version v2 --doc 写入内容
> 4. 用 lark-cli wiki +move --node-token <新节点token> --target-parent-token SERDwHBAniUqqBkx5vNctvgKn6f --source-space-id 7621391289904516315 --target-space-id 7621391289904516315 确保节点在正确位置(如创建到了错误位置)
> 5. 记录知识库 URL 到反馈消息
> ⚠️ 注意:飞书知识库操作需要机器人已加入知识库成员。如果 feishu_wiki(spaces) 返回空,说明权限不足。
③ 飞书文档(主归档通道):
tenant_access_token:```bash
curl -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \
-H 'Content-Type: application/json' \
-d '{"app_id":"cli_a94b4a1e43781cc7","app_secret":"{从 openclaw.json 读取 appSecret}"}'
```
exec + curl 在共享文件夹中创建文档(需指定 folder_token):```bash
curl -X POST 'https://open.feishu.cn/open-apis/docx/v1/documents' \
-H 'Authorization: Bearer {tenant_access_token}' \
-H 'Content-Type: application/json' \
-d '{"title":"日志简报 {target_date} | 张公子","folder_token":"FQfXfYBGGllxxydJ1SgcJZWqnpf"}'
```
feishu_doc(action=write, doc_token=..., content=...) 写入简报内容full_access 权限(确保可删除):```bash
curl -X POST 'https://open.feishu.cn/open-apis/drive/v1/permissions/{doc_token}/members?type=docx' \
-H 'Authorization: Bearer {tenant_access_token}' \
-H 'Content-Type: application/json' \
-d '{"member_type":"openid","member_id":"ou_d8ace8a146610ca26bc07d8e68a5620f","perm":"full_access"}'
```
> ⚠️ 注意:飞书知识库操作需要机器人已加入知识库成员。如果 feishu_wiki(spaces) 返回空,说明权限不足。
向用户发送完成通知,包含:
共 2 个版本