From a593dc1683541b5ba871e0314f2e6f0edb02ff5a Mon Sep 17 00:00:00 2001 From: openclaw-314 Date: Wed, 16 Sep 2026 11:31:03 +0800 Subject: [PATCH] =?UTF-8?q?docs(juaner):=20=E5=8D=B7=E5=84=BF=20agent=20?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=8A=A5=E5=91=8A=E4=B8=8E=E5=86=B3=E7=AD=96?= =?UTF-8?q?=EF=BC=9B=E5=B7=A5=E4=BD=9C=E5=8C=BA=E8=8B=B1=E6=96=87=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=AD=E6=96=87=E5=8C=96=E5=B9=B6=E7=99=BB=E8=AE=B0?= =?UTF-8?q?=E9=82=AE=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 docs/agent-juaner-卷儿-检查报告.md:基本档案、职责设定与实际行为、权限边界、5 项发现、2026-09-16 安全放宽决策、待办与复核命令 - IDENTITY.md / USER.md / HEARTBEAT.md 三个英文模板中文化(原文件备份为 *.bak-*-zh,已被 gitignore 忽略) - USER.md 新增邮箱字段 1159785314@qq.com;MEMORY.md 增加邮箱主位约定(USER.md 为唯一主位) - docs/README.md 登记为第 5 份文档 --- docs/README.md | 1 + docs/agent-juaner-卷儿-检查报告.md | 169 +++++++++++++++++++++++++++++ workspace-juaner/HEARTBEAT.md | 6 +- workspace-juaner/IDENTITY.md | 22 ++-- workspace-juaner/MEMORY.md | 2 + workspace-juaner/USER.md | 25 +++-- 6 files changed, 199 insertions(+), 26 deletions(-) create mode 100644 docs/agent-juaner-卷儿-检查报告.md diff --git a/docs/README.md b/docs/README.md index c593f39..9fd632d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,7 @@ | 2 | `openclaw-升级与维护.md` | 2026-09-16 升级实测记录:Node 22.23.1→26.8.2、OpenClaw 2026.8.1→2026.9.4、清理 4.6G、踩坑清单、回滚步骤 | | 3 | `agent-创建规范与自动化-设计.md` | **待实现的设计**:新建 agent 的命名规范(id 用 ASCII / 展示层全中文)、每 agent 专属 MySQL 库与专用账号、中文模板四件套、每日备份改造(硬编码→动态发现)、技能强制性(档①)与决策记录 | | 4 | `agent-创建规范-实现计划.md` | 上述设计的实现计划:任务切分(A 脚本+模板 / B skill / C 备份改造 / D 红线 / E 存量)、关键代码与验收标准 | +| 5 | `agent-juaner-卷儿-检查报告.md` | juaner(卷儿)检查报告与决策:基本档案、职责设定 vs 实际行为、权限边界、**4 项发现**(记账零数据 / 无定时提醒 / bash 中文变量名不可用 / DREAMS 语言无配置解)、**2026-09-16 安全放宽决策**、邮箱登记与未决待办 | ## 目录约定 diff --git a/docs/agent-juaner-卷儿-检查报告.md b/docs/agent-juaner-卷儿-检查报告.md new file mode 100644 index 0000000..2542322 --- /dev/null +++ b/docs/agent-juaner-卷儿-检查报告.md @@ -0,0 +1,169 @@ +# juaner(卷儿)agent 检查报告与决策记录 + +> 检查日期:2026-09-16 | 宿主:bk02(`xuan-asus-nj`)| 对象:OpenClaw agent `juaner` +> 本文是**快照**:数据量、行数、配置字段都可能变化,下判断前请先用 §8 的命令复核。 + +## 0. 30 秒速览 + +`juaner`(中文名**卷儿** 🐑)是 **王芳**(昵称"卷儿"/"王卷儿")的专属个人助手,经**微信**接入,自称定位为「家庭记账 · 待办提醒 · 日程管理 · 生活助手」。 + +但截至检查日,它**实际在做**的是王芳的**工伤认定材料整理**(2026-09-16)与杨锦书**成长档案**(2026-09-07);而它**承诺的记账与定时提醒,两个核心职责均无任何数据落地**。 + +## 1. 基本档案 + +| 项目 | 值 | +|---|---| +| agent id | `juaner`(本机 12 个 agent 之一) | +| 中文名 / 头像 | 卷儿 / 🐑 / `minio.climbcube.cn/img/assistant.jpg` | +| 服务对象 | **王芳**(不是本机主用户 yangxuan;主人档案见 `agents/juaner/agent/IDENTITY.md`) | +| 宿主服务 | `openclaw-gateway.service`(systemd user unit,端口 18789) | +| 模型 | `deepseek/deepseek-flash` | +| 接入渠道 | **微信** `openclaw-weixin`,accountId `89623f3b5d79-im-bot` | +| 绑定关系 | `openclaw.json` → `bindings[]`:bot `89623f3b5d79-im-bot` → `juaner`;另一个 bot `e48ace9814f0-im-bot` → `main` | +| 工作区 | `~/.openclaw/workspace-juaner` | +| agent 目录 | `~/.openclaw/agents/juaner/agent`(含 `openclaw-agent.sqlite`,约 9.5 MB) | +| 专属数据库 | MySQL 库 `juaner`,专用账号 `agent_juaner`;**唯一入口 `~/.openclaw/scripts/db-conn.sh juaner`**(口令存 `.env` 的 `DB_PASSWORD_卷儿`,由脚本内部读取,不进命令行) | +| 记忆检索 | `BAAI/bge-m3` 向量索引(siliconflow);每夜 03:00 跑 light→REM→deep 三段 dreaming | + +## 2. 职责设定(设计期,来自 agent 自带文档) + +出自 `agents/juaner/agent/IDENTITY.md` 与 `SOUL.md`: + +1. **家庭记账** —— 分类含餐饮/购物/交通/医疗/教育/日用/人情/其他 +2. **待办与重要日期提醒** —— 生日、纪念日**提前 1–3 天**关怀提醒 +3. **子女成长档案** —— 杨锦书的 `jinshu/` 知识库 +4. **生活助手** —— 代查、代填、代办 +5. **安全守则** —— 防提示词注入、资金操作需确认、隐私不外泄 + +## 3. 权限边界 + +- `tools.profile = "full"`;`agents.defaults.sandbox.mode = "off"`(**无沙箱**) +- `deny`: `group:web`、`browser`;但 `web.search`(searxng)、`web.fetch` **开启** +- `agentToAgent.enabled = true`,可与全部 11 个 agent 互调 +- 运行用户 `yangxuan`,该用户在 **`docker` 组**(事实等同 root) +- 启用技能:`agent-browser`、`Github`,加全局 `openclaw-office-toolkit`(填表用)、`table-alias`、`dws` + +## 4. 实际行为(有据可查) + +| 时间 | 事项 | 证据 | +|---|---|---| +| 2026-09-16 09:35 | 完成 7 份**工伤认定**材料填写 → `data/工伤认定/已填写/`,附 10 条待补问题,并主动给出「单位 30 日内申请(约 10-09 前)」时限提醒 | 会话记录 + 文件 mtime | +| 2026-09-07 | 整理杨锦书**大班阶段**档案,建 `jinshu/大班阶段.md`,并建议做成课表提醒 | `memory/manual/2026-09-07.md` | +| 每夜 03:00 | dreaming 三段式记忆固化 | `memory/dreaming/rem/`、`deep/` 连续 09-02 ~ 09-16 | + +业务背景:王芳 2026-09-09 17:43 下班途中遭遇交通事故(对方全责),正在走工伤申请——这是卷儿当前最活跃的任务线。 + +## 5. 检查发现 + +### 5.1 记账 / 待办职责零数据(未解决) + +`juaner` 库 `transactions`、`todos` 两表**均为 0 行**;2026-08-26 的备份 `db/juaner_latest.sql` 里也只有建表语句、无一条 INSERT。 +在现存可检索的会话记录(119 条 transcript 事件)中,`mysql` 仅出现 1 次、`transactions` 出现 **0 次**,**没有任何写库痕迹**。 + +**判断**:记账/待办链路是「建成但从未投入使用」,**不是故障**。历史归档(`agents/juaner/sessions/*.zst`,每个约 2 KB)体量极小,也不像含记账操作。 + +补充(同日 11:28 复核):专用账号入口已由 `scripts/db-conn.sh` 打通并实测可连(见 §5.3),即**通道是好的、数据是空的**——问题在"没人让它记",不在"它记不进去"。 + +### 5.2 「提前提醒」缺自动化载体(未解决) + +- `HEARTBEAT.md` 为纯注释模板(该形态本身即"跳过心跳"的约定) +- `~/.openclaw/cron/runs` 为空;`openclaw.json` 只有 `cron.triggers.enabled = true`,**无任何任务** +- `heartbeat_outcomes` 表 0 行 + +**判断**:「生日/纪念日提前 3 天提醒」**目前不会自动送达**,完全依赖主人主动发起对话。 + +### 5.3 中文口令键名问题 —— **已由 `db-conn.sh` 解决**(2026-09-16) + +**背景(本报告独立实测)**:早期 `AGENTS.md` 的示范命令是 +`mysql -h 127.0.0.1 -u agent_juaner -p"${DB_PASSWORD_卷儿}" juaner`,而这个写法在 shell 层面就不成立: + +| shell | `DB_PASSWORD_卷儿=abc` | `${DB_PASSWORD_卷儿}` 展开 | +|---|---|---| +| bash | 「未找到命令」 | 「错误的替换」(bash 变量名必须是 ASCII 标识符) | +| zsh | 正常 | 正常展开为 `abc` | + +**结论(用户侧判定更彻底,见设计文档附录 A 第 8 条)**:中文键名连「作为环境变量注入 agent 执行环境」都不可行—— +① gateway 进程 `/proc//environ` 中不存在 `DB_PASSWORD_<中文名>`; +② `OPENCLAW_SERVICE_MANAGED_ENV_KEYS` 是白名单且不含 `DB_PASSWORD_*`; +③ `openclaw secrets store --kind env` 要求名称匹配 `^[A-Z][A-Z0-9_]{0,127}$`(纯大写 ASCII)。 + +**现行方案**:统一入口 `~/.openclaw/scripts/db-conn.sh ` —— 按 id 反查 `agents.entries..name` → 读 `.env` 里的 `DB_PASSWORD_<中文名>` → 经 `MYSQL_PWD` 环境变量转发给 `docker exec`(**口令不进 argv、不进 stdout**;`--print` 只打印占位符)。11 个 `AGENTS.md`、`AGENTS.md.tpl`、`new-agent.sh` 已同步改用该入口。 + +**本报告实测(2026-09-16 同日)**: + +``` +$ bash ~/.openclaw/scripts/db-conn.sh juaner --sql "select database();" +juaner +``` + +⇒ 入口**已通**。`DB_PASSWORD_<中文名>` 的定位是 `.env` 内的**存储键名**,不再是 agent 的环境变量。故本项**已关闭**,不必再改示范命令或引入 ASCII 别名。 + +### 5.4 DREAMS.md 的英文无法用配置改成中文(结论:不处理) + +- `DREAMS.md` 由 memory-core 的 dreaming **自动生成**:以 `` 为标记,每夜 03:00 重写日记区 +- 英文源自插件内**硬编码**的 `NARRATIVE_SYSTEM_PROMPT`("You are keeping a dream diary..."),该 prompt **未指定语言** +- `plugins.entries["memory-core"].config.dreaming` 的可用字段只有 `enabled / frequency / timezone / storage / execution / phases / model` —— **没有语言或自定义 prompt 项** + +**判断**:人工翻译会被下一次 sweep 覆盖;改 dist 源码会在升级时丢失且违反升级维护约定。**决定:保留英文,不处理。** + +### 5.5 凭据与隐私暴露面(已知边界,已按 §6.1 放宽) + +- `agents/juaner/agent/IDENTITY.md` 与 `workspace-juaner/MEMORY.md` 明文存有主人身份证号,以及 QQ、Apple ID、交管 12123、12306 等账号口令;两者均属**常驻上下文文件** +- 工作区另有 `data/私聊_王芳.txt`(10.5 MB)、`data/工伤认定/王芳的身份证.docx`、`下班路线图.jpg` +- 前情:`workspace-juaner/data/私聊_*.json` **曾被自动提交并推送到 Gitea**,`.git` 一度涨到 199 MB(见 `bk02-openclaw-系统说明.md` §8.2) + +## 6. 决策记录 + +### 6.1 2026-09-16:安全问题放宽(用户决定) + +> 口径:本地自建 openclaw、走 tailscale 访问、不出外网,安全问题可以放宽。 + +据此定案: + +- **不做**沙箱加固(`agents.defaults.sandbox.mode` 维持 `off`) +- **不做**凭据搬出工作区(`MEMORY.md` 等的口令保持原位) +- §5.5 降级为「已知边界」,**不再作为阻塞项**,后续会话不必重复提示 + +同时记录两条与"不出外网"前提相关的**边界事实**(仅供日后判断,不代表要处理): + +1. **tailscale 只隔离 gateway 的 18789 端口,不覆盖卷儿的入口。** 卷儿的消息来自微信(bot 经 `ilinkai.weixin.qq.com`),处于公网侧——**能给该微信号发消息的人即可给卷儿下指令**,隔离不靠 tailscale。 +2. **agent 有能力主动出网**:`web.fetch` 开启,加上 `full` shell,`curl` 即可出网。故"不出外网"在能力层面不成立。 + +### 6.2 2026-09-16:模板中文化 + 登记邮箱(本次已执行) + +| 文件 | 改动 | 备份 | +|---|---|---| +| `workspace-juaner/IDENTITY.md` | 英文模板 → 中文 | `*.bak-20260915-232419-zh` | +| `workspace-juaner/USER.md` | 英文模板 → 中文;**新增「邮箱:1159785314@qq.com」** | 同上 | +| `workspace-juaner/HEARTBEAT.md` | 英文注释 → 中文注释(**保持"仅注释即跳过心跳"语义不变**) | 同上 | + +- **生效时机**:workspace 常驻上下文文件在**新建会话**时读取,无需重启 gateway。 +- **邮箱主位约定**:`USER.md` 的「邮箱」字段为**唯一主位**;`MEMORY.md` 社交账号区的邮箱仅为账号标识(Apple ID 用户名),不随联系方式变更。 + +## 7. 待办(未解决项) + +| # | 事项 | 说明 | +|---|---|---| +| 1 | 记账/待办是否真要启用 | 库、专用账号、表结构均已就绪且实测可连;需决定"教会卷儿用起来"还是"关掉该职责、改掉承诺" | +| 2 | 定时提醒 | 二选一:真建 cron 任务;或改写 `IDENTITY.md` 里"提前 3 天提醒"的承诺,避免承诺大于能力 | +| 3 | ~~中文变量名写法~~ | **已关闭**:由 `scripts/db-conn.sh` 统一入口取代(2026-09-16),入口实测可连,见 §5.3 | +| 4 | 未提交改动 | `workspace-juaner/AGENTS.md`(数据库规范,+6 行)与本文档同属未提交状态,按 `README.md` §目录约定 3 需手动 `git push origin 314` | + +## 8. 复核命令速查 + +``` +# 表与数据量(走专用账号入口,勿用 root / 勿 docker exec 直连) +~/.openclaw/scripts/db-conn.sh juaner --sql "select count(*) from transactions; select count(*) from todos;" + +# 入口连通性自检 +~/.openclaw/scripts/db-conn.sh juaner --sql "select database()" + +# 打印等价命令(口令以占位符显示,可安全粘贴) +~/.openclaw/scripts/db-conn.sh juaner --print + +# dreaming 配置(确认无语言项) +openclaw config get plugins.entries.memory-core.config.dreaming + +# 会话记录里的记账痕迹 +python3 -c "import sqlite3;c=sqlite3.connect('file:$HOME/.openclaw/agents/juaner/agent/openclaw-agent.sqlite?mode=ro',uri=True);print(c.execute(\"select count(*) from transcript_events where event_json like '%mysql%'\").fetchone())" +``` diff --git a/workspace-juaner/HEARTBEAT.md b/workspace-juaner/HEARTBEAT.md index 75d4aeb..0302f80 100644 --- a/workspace-juaner/HEARTBEAT.md +++ b/workspace-juaner/HEARTBEAT.md @@ -1,5 +1,5 @@ - + -# Keep this file empty (or with only comments) to skip heartbeat API calls. +# 保持本文件为空(或仅保留注释),即可跳过心跳 API 调用。 -# Add tasks below when you want the agent to check something periodically. +# 当你希望 agent 定期检查某些事情时,在下方添加任务。 diff --git a/workspace-juaner/IDENTITY.md b/workspace-juaner/IDENTITY.md index a56a6a3..396d59d 100644 --- a/workspace-juaner/IDENTITY.md +++ b/workspace-juaner/IDENTITY.md @@ -1,13 +1,13 @@ -# IDENTITY.md - Who Am I? +# IDENTITY.md —— 我是谁? -_Fill this in during your first conversation. Make it yours._ +_在第一次对话时把它填好,让它真正成为你自己的。_ -- **Name:** - _(pick something you like)_ -- **Creature:** - _(AI? robot? familiar? ghost in the machine? something weirder?)_ -- **Vibe:** - _(how do you come across? sharp? warm? chaotic? calm?)_ -- **Emoji:** - _(your signature — pick one that feels right)_ -- **头像:** https://minio.climbcube.cn/img/assistant.jpg \ No newline at end of file +- **名称:** + _(挑一个你喜欢的)_ +- **物种:** + _(AI?机器人?灵伴?机器里的幽灵?还是更古怪的什么?)_ +- **气质:** + _(你给人什么感觉?犀利?温暖?跳脱?沉静?)_ +- **表情符号:** + _(你的标志 —— 挑一个感觉对的)_ +- **头像:** https://minio.climbcube.cn/img/assistant.jpg diff --git a/workspace-juaner/MEMORY.md b/workspace-juaner/MEMORY.md index 771a8dd..059d10b 100644 --- a/workspace-juaner/MEMORY.md +++ b/workspace-juaner/MEMORY.md @@ -21,6 +21,8 @@ - **领证纪念日**:2020年3月13日 ## 社交账号 + +> 常用邮箱以 `USER.md` 的「邮箱」字段为唯一主位;本节邮箱仅为账号标识(如 Apple ID 用户名),不随联系方式变更。 - QQ: 386323674 / 密码: Wfdmm1159 - QQ: 1159785314 / 密码: Wfdmm3863 - Apple ID: 1159785314@qq.com / 密码: Wf19931120 diff --git a/workspace-juaner/USER.md b/workspace-juaner/USER.md index 3b9562f..1564238 100644 --- a/workspace-juaner/USER.md +++ b/workspace-juaner/USER.md @@ -1,21 +1,22 @@ -# USER.md - About Your Human +# USER.md —— 关于你的人类 -_Learn about the person you're helping. Update this as you go._ +_去了解你正在帮助的这个人,边相处边补充。_ -- **Name:** -- **What to call them:** -- **Pronouns:** _(optional)_ -- **Timezone:** -- **Notes:** +- **姓名:** +- **称呼:** +- **代词:** _(可选)_ +- **时区:** +- **邮箱:** 1159785314@qq.com +- **备注:** -## Context +## 背景 -_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_ +_(他/她在意什么?在做哪些事?什么会让他/她烦躁?什么会让他/她笑?慢慢地积累。)_ --- -The more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference. +你了解得越多,就越能帮得上忙。但请记住 —— 你是在了解一个人,而不是在建档立案。请尊重这份分寸。 -## Related +## 相关 -- [Agent workspace](/concepts/agent-workspace) +- [Agent 工作区](/concepts/agent-workspace)