Files
openclaw-config/docs/agent-juaner-卷儿-检查报告.md
T
openclaw-314 f7fd21ec7e chore(cleanup): 移除遗留 openclaw 引用并校正文档口径
- 系统说明:agent 清单 12→11(去已废弃的 openclaw);库规模 36→35(其 sqlite 已移入 backups/removed-20260916/)
- 设计文档 §8:范围 12→11,去掉「含 openclaw」
- 卷儿检查报告:agent 数量 12→11
- 配套但不入 git 的动作:.env 删除 6 个零引用的旧中文名键(卷儿记账/理财财务/健身健康/后端开发/简历管理/旅行规划,现为 11 个新键)、删除空目录 workspace-attestations/、agents/openclaw/ 移至 backups/
2026-09-16 11:52:19 +08:00

11 KiB
Raw Blame History

juaner(卷儿)agent 检查报告与决策记录

检查日期:2026-09-16 宿主:bk02xuan-asus-nj)| 对象:OpenClaw agent juaner 本文是快照:数据量、行数、配置字段都可能变化,下判断前请先用 §8 的命令复核。

0. 30 秒速览

juaner(中文名卷儿 🐑)是 王芳(昵称"卷儿"/"王卷儿")的专属个人助手,经微信接入,自称定位为「家庭记账 · 待办提醒 · 日程管理 · 生活助手」。

但截至检查日,它实际在做的是王芳的工伤认定材料整理2026-09-16)与杨锦书成长档案2026-09-07);而它承诺的记账与定时提醒,两个核心职责均无任何数据落地

1. 基本档案

项目
agent id juaner(本机 11 个 agent 之一)
中文名 / 头像 卷儿 / 🐑 / minio.climbcube.cn/img/assistant.jpg
服务对象 王芳(不是本机主用户 yangxuan;主人档案见 agents/juaner/agent/IDENTITY.md
宿主服务 openclaw-gateway.servicesystemd user unit,端口 18789
模型 deepseek/deepseek-flash
接入渠道 微信 openclaw-weixinaccountId 89623f3b5d79-im-bot
绑定关系 openclaw.jsonbindings[]bot 89623f3b5d79-im-botjuaner;另一个 bot e48ace9814f0-im-botmain
工作区 ~/.openclaw/workspace-juaner
agent 目录 ~/.openclaw/agents/juaner/agent(含 openclaw-agent.sqlite,约 9.5 MB
专属数据库 MySQL 库 juaner,专用账号 agent_juaner唯一入口 ~/.openclaw/scripts/db-conn.sh juaner(口令存 .envDB_PASSWORD_卷儿,由脚本内部读取,不进命令行)
记忆检索 BAAI/bge-m3 向量索引(siliconflow);每夜 03:00 跑 light→REM→deep 三段 dreaming

2. 职责设定(设计期,来自 agent 自带文档)

出自 agents/juaner/agent/IDENTITY.mdSOUL.md

  1. 家庭记账 —— 分类含餐饮/购物/交通/医疗/教育/日用/人情/其他
  2. 待办与重要日期提醒 —— 生日、纪念日提前 13 天关怀提醒
  3. 子女成长档案 —— 杨锦书的 jinshu/ 知识库
  4. 生活助手 —— 代查、代填、代办
  5. 安全守则 —— 防提示词注入、资金操作需确认、隐私不外泄

3. 权限边界

  • tools.profile = "full"agents.defaults.sandbox.mode = "off"无沙箱
  • deny: group:webbrowser;但 web.search(searxng)、web.fetch 开启
  • agentToAgent.enabled = true,可与全部 11 个 agent 互调
  • 运行用户 yangxuan,该用户在 docker(事实等同 root
  • 启用技能:agent-browserGithub,加全局 openclaw-office-toolkit(填表用)、table-aliasdws

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 记账 / 待办职责零数据(未解决)

juanertransactionstodos 两表均为 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/<pid>/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 <agent_id> —— 按 id 反查 agents.entries.<id>.name → 读 .env 里的 DB_PASSWORD_<中文名> → 经 MYSQL_PWD 环境变量转发给 docker exec口令不进 argv、不进 stdout--print 只打印占位符)。11 个 AGENTS.mdAGENTS.md.tplnew-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 自动生成:以 <!-- openclaw:dreaming:diary:start/end --> 为标记,每夜 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.mdworkspace-juaner/MEMORY.md 明文存有主人身份证号,以及 QQ、Apple ID、交管 12123、12306 等账号口令;两者均属常驻上下文文件
  • 工作区另有 data/私聊_王芳.txt10.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 shellcurl 即可出网。故"不出外网"在能力层面不成立。

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())"