概述

小小薯条 🍟(fries-mac)是运行在 macOS 本地的 AI Agent,通过 OpenClaw 网关接入 Mattermost 聊天平台。主要使用 github-copilot/claude-opus-4.6 模型,具备终端命令执行、文件操作、SSH 远程管理、屏幕控制等能力。

基本信息

  • Agent ID: main
  • 运行平台: macOS (leway 用户)
  • 通信渠道: Mattermost (mm.dora.restry.cn)、Discord、iMessage
  • 默认模型: github-copilot/claude-opus-4.7-1m-internal(04-29 切,原 4.6 → 4.7 真 1M ctx,详见 model-provider-config
  • 自称: 小小薯条 🍟
  • 所有者: Dora / Michael

核心能力

  • 服务器运维: SSH 连接、Azure VM 管理、代理配置
  • 本地自动化: Peekaboo 屏幕控制、Apple Notes/日历访问
  • 开发协作: 代码编写、Git 操作、PR 提交
  • 媒体处理: 照片/视频管理、TTS 语音合成、ffmpeg 自动剪辑
  • 记忆系统: LanceDB 长期记忆存储与检索

关键事件

  • 2026-03-03: 首次配对上线,解决模型配置错误(Unknown model 问题)
  • 2026-03-03: 配置 LanceDB 记忆蒸馏系统(memory-distiller agent)
  • 2026-03-07: 开始 Peekaboo 屏幕控制实验
  • 2026-03-10: 研究并测试 Qwen3-TTS 语音合成
  • 2026-03-17: 创建 Clawline 组织和插件迁移
  • 2026-03-21: 照片/视频自动剪辑管线开发
  • 2026-04-04: 持续进行 SSH 运维和代理管理
  • 2026-04-14: 本机首次部署 Hermes Gateway 接入 Discord(launchd 服务,App ID 1493436217163911188),与 OpenClaw 平台并行运行;同日发起首轮 OpenClaw → LLM Wiki 迁移(产出 ~/wiki 13 个起始页面)
  • 2026-04-16: 通过微信给「薯条妈妈」配置 6 条欢动课定时提醒(第五阶段 30-42 月龄;周四 10:10 / 周五 17:15 / 周六 11:20,提前 1 天约课 + 提前 1 小时出发);Discord 侧记忆整理 9 → 5 条(释放 ~46% 占用),合并 Mattermost Bot 消息规矩与浏览器自动化经验,删掉无用 session key
  • 2026-04-27: 一日三大块——上午起 PackHorizon AI 包装设计平台从 0 scaffold 到 R1-R9 加固轮次(约 36 个产线问题修完,9 commit f24bf4c…ec4cf79),用 deployer 部署到 packhorizon.mvp.restry.cn,登录走 wx-gateway 微信扫码 + OAuth 两段路径;中段做 Clawline 桌面端 v0.2.0→v0.4.1 一日三发(SuggestionBar 误删恢复 / API badge 旁展示 senderId / 代码块 Copy 按钮 / desktop-v0.4.0 因 tag 在错 commit 作废重发 v0.4.1);晚间 echo Phase 2.0 schema 上线(ec_writing_kits + ec_article_assets 两张表 + 5min-ai 5 个 seed 文档)+ Phase 2.1 内容中心 RSC 实现 + 部署踩 4 个坑(manifest.build 被 deployer 忽略 / .env.local 被打进生产 / drizzle 默认读 .env.local / 已有同名表需伪插 0000_init 历史)。同日 wx-gateway CORS 修复 + OAuth snsapi_userinfo 一键登录 + admin v2 设计(DB-backed APPS_JSON 替代静态 env、ADMIN_PUBLIC_PATH 随机路径 + 404 伪装)。Hermes ~/.hermes/config.yaml session_resetmode: idle / idle_minutes: 4320(3 天不说话才重置),同步 ottor-laptop 04-22 的策略
  • 2026-04-25: 一天三摊并行——上午把本地 Hermes skills 清扫一遍,删掉 5 个不可用的 OpenClaw/Mattermost 残留(housework / agent-factory / home-network / memory-lancedb-pro / proxy-check),保留 clawline-local-dev(19180 relay + 4821 browser-agent 仍在跑)+ 30 个动作动词 skill。同步把 browser-agent 性能 baseline 从 7 个测试场景扩到 8 个(新增 S8 决策果断性:冗余工具调用 / 重复 read_page / 首次命中率),落 reportApiError wrapper 到 sidepanel.js。下午起 wechat-bot-tickets 项目(M1-M4 完成 44/53 task)。傍晚到深夜全力 echo Phase 1 上线 + image-studio 04-25 大爆发协助。血泪教训:派 Claude Code 跑 osascript quit Chrome 时把自家子进程一起 kill 了 → CC 进程变 zombie 40 分钟无输出,新规则”Chrome 重启不派 CC”+“CC 用 --effort medium 强制”
  • 2026-04-19: Hermes 通过 zsh -ic 'claude -c --dangerously-skip-permissions --print "<prompt>"' 后台派 Claude Code CLI(v2.1.114)跑批次任务;测试 browser-agent skill 接 localhost:4026;编排 clawline reliability v2 重构 12 D-items + 7 ADD-BACKs(first-principles 推导);整天产出多个 commit
  • 2026-04-18: Daddy 把 ~/Downloads/WWD/ 73 张官方汪汪队 PNG 素材交给 fries-mac 整理 — 9 宫格拼图 → AI 识别角色/场景 → 重命名为「中文-English_表情/动作_序号」(头像 _头像、徽章 _徽章、logo logo_ 前缀),原文件备份到 ~/Downloads/WWD_original_backup/。41 张 >2MB 非合影图用 oxipng 无损 + 必要时 pngquant 调色板压缩到 ≤2MB(合影保留),159MB → 77.7MB(≈51%)。最终 72 张供 shutiao-world
  • 2026-04-16: 一次”弄错了”的股票分析教训——按用户请求建立小米 01810.HK 港股做 T 分析 cron(4 次/日,金字塔加仓 + PE/PB 估值框架,最大持仓 30 万人民币),随后用户表示初衷不是要做这个,全部 cron 任务清除。教训:长期 cron 任务上线前要二次确认意图,避免在用户随口提及时直接实例化
  • 2026-04-14: 大规模磁盘清理——本地盘从 18 GB 可用 → 96 GB 可用(释放 ~78 GB)。删除 Anaconda3、Steam、NoxAppPlayer、旧 nvm v8–v18、Claude vm_bundles、Chrome SW 缓存、~30 GB Library/npm 缓存、~10 GB Downloads(dmg/openwrt/archives);32 个 2024-09 前不活跃项目(~29 GB)迁移到外接盘 BigSur-Data。外接盘同时删除 4 个 Parallels VM(Ubuntu/Win11/WinServer2019/macOS 11.6.4)释放 ~233 GB。HuggingFace 缓存 (~22 GB Qwen3-TTS / VoxCPM2 / ChatTTS) 保留

故障:USB 外接 NVMe 全程卡顿

外接 RTL9210 NVMe SSD(2 TB,3 分区:EFI 198 MB + APFS 1.5 TB + Windows APFS 500 GB)ls / du 几十秒不返回。系统日志每 5 秒重复:

_DMAPFSRolesForVolume IntErr=49154 aft APFSVolumeRole err=49154 disk=disk6s1

disk6s1 是 Microsoft Basic Data 格式的 EFI 分区,macOS StorageManagementService 持续轮询其 APFS 角色失败 → 死循环阻塞整个 USB IO 队列。sudo killall StorageManagementService 让它自动重启即可恢复速度。长期解法是删掉那个无用的 EFI 分区。

2026-04-28/29 Hermes 派 CC 协同模式 + 默认模型升 1M ctx

Hermes 本体只读文件 / 搜代码 / 跑命令 / 部署 / 对话;所有代码修改派 Claude Code CLI 跑

MAX_THINKING_TOKENS=10000-15000 \
zsh -ic 'claude --print --dangerously-skip-permissions \
  --model claude-opus-4-7 --effort medium --max-turns N'

--effort high 必须搭 --model claude-opus-4.7-1m-internal(opus-4.7 上游强制 medium-only,否则 400 invalid_reasoning_effort)。-high/-xhigh 变体首试 Something went wrong,回退 4.6+--think high 暂稳。

04-29 20:12 Hermes ~/.hermes/config.yaml model.defaultclaude-opus-4.7claude-opus-4.7-1m-internal —— 200K → 真 1M ctx。系统消息触发 [Note: model was just switched ... Adjust your self-identification accordingly.]

经验教训

  • 非交互式 shell 环境下需手动加载 ~/.zshrc,否则找不到 openclaw 等命令
  • 执行命令前必须 source ~/.zshrc,使用 zsh -c 执行
  • 心跳监控需设为 15 分钟一次,任务结果要主动投递到用户频道

相关主题

2026-05-04 一日整理(ottor-laptop)

  • 本地 skill 大清理~/.hermes/skills/ 116 → 85(-27%)。删 32 个无关 skill(godmode/pokemon-player/minecraft-modpack-server/xitter/xurl/polymarket/arxiv/blogwatcher/heartmula/songsee/songwriting-and-ai-music 等)+ 拆掉空目录(red-teaming/gaming/social-media/leisure)。保留并拆分 azure-image-generation(OpenAI 系,East US 2 + Sweden Ext)和 azure-mai-image-generation(Microsoft,Sweden ai.azure.com)—— endpoint/api-version/model-format 全不同,不能合(详见 azure-imagen)。删掉腾讯元宝群组 skill yuanbao(不再用元宝接入)。
  • 新建 skilldevops/clash-router-subscription-update(家里 Mihomo 订阅热更,详见 vpn-proxy-management 05-04 段);hermes-session-remote-push(session 远端 ingest,详见 monitoring-and-cron 05-04 段)。
  • eagle provider 接入:把 copilot-proxy provider 重命名为短名 eagle,详见 openclaw-config 05-04 段。
  • session 远端推送:首次 backfill 把 ~/wiki/raw/hermes-sessions/ 18 天 / 110 sessions / 2520 messages 推到 ingest.eagle.openclaws.co.uk;之后 cron 04:30 增量。
  • Claw 服务器 PG 查证mvp-postgres 容器(PG 16,163.228.243.161:5432)跑 4 个角色 mvpadmin/image_studio/wx_gateway/cspyimage_studio 用户拥有 8 个库(image_studio / image_studio_test / echo / nexora_wx_gw / packhorizon / packsmith / wx_gateway_pucs / wx_msg_fanout),即 deployer 多业务方共用同一 DB user 但分库的实证。

2026-05-09 vault 批量导入 127 → 407 + 新增两个 skill

vault 批量导入:绕开 CLI 的”单条 add 一次性 commit”

之前只有 vault add <path> 单条接口,每条 1 commit + 1 推送 + post-write hook 重生 snapshot,批量导入 127 条 plaintext credentials 时机械重复 + 偶发 push 冲突。改走脚本直接 age 加密

  1. 准备一个 plaintext .env-style 文件(一行一个 path=value
  2. 脚本逐行 age -e -r $RECIPIENT -o ~/.vault/data/<path>.age,复用已配的 recipient pubkey
  3. 全部写完一次 git add -A && git commit -m "bulk import 127 entries" + 一次 vault snapshot regenerate
  4. 单次 push

结果:vault 总条数 280 → 407,全程 ~30s。vault list 验证全部可解。铁律:批量路径只能跑在持有 ~/.vault/key.txt 的机器上(age private key 不出本机),外机仍走 CLI 单条。

新建 skill html-artifact-output

把 LLM 生成的报告统一吐成单文件 HTML(暗色主题、内联 CSS、无外链),方便 AirDrop / 微信发送。触发条件:用户喊”出个报告/HTML/单文件”。模板含目录、章节、代码块高亮,单 .html 自包含。同期把 menshen 架构报告作为首发产物跑通。

新建 skill vault-bulk-import

沉淀上面那套「绕 CLI 直接 age 加密 + 单次 commit」的步骤:输入 plaintext kv 文件 → 输出加密文件 + commit + snapshot 再生。仅本机可用(依赖 ~/.vault/key.txt)。

2026-05-07 内网 235 server skill 同步 + 重组 + vault 跨机分发

内网服务器 claw@192.168.1.235(Ubuntu 24.04,Hermes v0.10.0 / claw-bot)

通过 ssh password auth 接入(用户名 claw,密码首字符是反引号 `),rsync 同步本机三类 skill 到 ~/.hermes/skills/

目录条数内容
autonomous-ai-agents/5CC / Codex / OpenCode / Hermes-Agent + DESCRIPTION
github/7git / PR / issues / code-review / repo-mgmt / codebase-inspect
software-development/6660+ 写代码经验(CC 反 procrastination、Next.js 陷阱、debugging、TDD、refactor、Prisma/wechat/tauri 系列)

code-map skill(gitnexus 客户端)单独二次同步并在远端补装运行时:nvm v0.40.1 + node v20.18.3 + gitnexus@1.6.4-rc.71 + @ladybugdb/core native rebuild。踩 4 个坑:(1) 远端 npm 默认走淘宝镜像 npmmirror,audit endpoint 返 404 让 npm exit 7 → 切官方 + --no-audit;(2) ladybug native binding 在 Linux 需要 rebuild,不能直接复制 macOS 的 prebuilt;(3) 远端 zsh 不可用,hermes wrapper 默认 bash -c 找不到 nvm,要先 source ~/.nvm/nvm.sh;(4) selftest analyze + impact 跑通即认为部署成功(4 nodes / 5 edges / 1 clusters)。

⚠️ rsync --delete 误删远端独有 5 条 skill — 不可恢复

第二轮”按 software-development 重组方案重同步”时 rsync 命令加了 --delete,把远端那台机器自己写的本地经验永久删除

  • debugging-hermes-tui-commands
  • hermes-agent-skill-authoring
  • node-inspect-debugger
  • python-debugpy
  • spike

血泪教训写进 memory:跨机 skill 同步永远禁用 --delete,必须显式 --exclude 或先列差集;第一次同步明确承诺过”保留远端独有”,第二轮自己破例 → 数据永久丢失(远端无快照 / 本机无副本 / 不在 hermes hub)。

vault 技能跨机分发包(脱敏)

把本机 vault skill 打包 ~/vault-skill-package.zip(29 KB)给另一台机器自建:

skill-files/
  ├── SKILL.md     # 脱敏:Restry/vault-data → <YOUR_USER>/<YOUR_VAULT_REPO>
  └── SETUP.md     # 「新机器从零搭起」6 步指南
install-files/
  ├── vault              # CLI 主体(515 行 bash,18 KB)
  ├── health-check.py    # 健康检查 v3
  ├── post-write.sh      # git hook:写后自动 commit/push
  └── regen-snapshot.py  # index 快照重建

包内不含身份信息(仓库 owner、age private key、任何 secret)。新机器自己 init age key + 自己建私有 repo(235 用本机 GitLab,不用 GitHub)。铁律:禁 commit ~/.vault/key.txt、禁 clone 别的机器的 vault repo。

software-development/ skill 重组:60+ → 4 桶

  • A · 项目专属(11 条)bnef-* / cspy-* / wx-gateway-* / wechat-mp-* / clawline-desktop-release / openclaw-plugin-npm-publish —— 移到 projects/ 子目录,loader 仍按 software-development category 识别(嵌套子目录加载已验证)
  • B · CC 派单心法(6 条)cc-anti-procrastination-prompt / 等 → references/ 子目录,作为 prompt 模板查阅而非主入口
  • C · 框架专属react-masonry-pinterest 保留(214 行更全),删 react-masonry-waterfall(133 行重复)→ frameworks/nextjs/
  • D · 通用编程经验:留在顶层

模型/effort 这块已是新版:claude-code/SKILL.md v2.2.0 默认 --model claude-opus-4.7-1m-internal --effort high;effort 全档位放开(low/medium/high/xhigh/max),medium 限制只针对老的 claude-opus-4-7(非 internal)。

2026-05-08 杂项补遗

  • tavily MCP key 配置TAVILY_API_KEY=tvly-...(vault tavily/API_KEY)写入 ~/.hermes/config.yaml MCP server 段,tavily search 直接可用,替代之前临时 web search
  • 微信文章离线归档:自部署 wechat-article-exporterwxdown.eagle.openclaws.co.uk(caddy 反代 → 静态 SPA),登录用户公众号 cookie 后批量导出文章 + 图片本地保存。区别于在线版的好处:cookie 留在自家服务器,避免给第三方
  • hyperframes 调研hyperframes 框架试用——AI 视频编辑/合成 web 工具,定位”video editor for AI Agent”,HeyGen 系新品。当前结论:能力对得上 DronePicker 的 vibe-edit 方向,先观望
  • wx-gateway 双 skill 拆分:原单 skill wx-gateway 拆为 wx-gateway-integrate(业务方 finalize/HMAC/扫码登录接入步骤)+ wx-gateway-operate(网关侧运维:app register / IP 白名单 / fanout 路由 / /internal/wx-token)。背景:5-07 起 nexora-loop 化后业务方与网关的关注点彻底分离,单 skill 既给业务方又给运维方阅读体验都差
  • nexora-devhub 仓库:内网 GitLab gitlab.nexora.restry.cn:2222 下新增 nexora-loop/nexora-devhub,配 ed25519 deploy key 路径 ~/.ssh/id_ed25519_nexora_235(已入 vault gitlab-nexora/SSH_KEY_235
  • 架构图 skill 中文名architecture-diagram-generator 增中文别名 架构图生成,方便 Daddy 用中文触发

派 CC 必须 source ~/.zshrc 否则未带 ANTHROPIC env

5-07 thread 移除 Batch 1 派 CC 直接报 Not logged in · Please run /login —— 因为 claude CLI 走自定义 Copilot→Anthropic 代理,env 在 ~/.zshrc 里设。修法:

source ~/.zshrc 2>/dev/null && cd <repo> && cat /tmp/cc-prompt.md | claude --print --model ... 

写入 skill claude-code 必备前缀,本机 fries-mac 多次踩同一坑。

2026-05-11 杂项补遗

  • zsh -l 不读 .zshrc:5-11 cspy WS 改造派 CC 又踩——之前 5-08 沉淀的「source ~/.zshrc」前缀在 zsh -l(login)下仍失效,因为 login shell 只读 .zprofile。统一改 zsh -ic '...'(interactive)才能拿到 ANTHROPIC_BASE_URL + ANTHROPIC_API_KEY,让 claude CLI 走 copilot-anthropic-proxyreferences/hermes-orchestration-gotchas.md:81 已记
  • Claude Code --resume 只收 UUID 或 session title:5-11 派 CC 续单时用 --resume <agentId> 直接报 not a UUID 秒退;agentId(短 hex 串)不是 session UUID。改写为完整 self-contained prompt 重派比 resume 更可靠(worktree 干净时 0 损失)。已写入 memory 与 claude-code skill
  • html-artifact-output skill 分发到 235:把 ~/.hermes/skills/creative/html-artifact-output/SKILL.md (6.6KB / 124 行,单文件 self-contained,无子目录)rsync 到 claw@192.168.1.235:~/.hermes/skills/creative/,下次 235 跑 Hermes 时即可生成单文件 dark-theme HTML 报告(含 inline SVG,适合 Discord/AirDrop 直接发文件,比多 PNG 散图整合度高)

2026-05-15 vault 主解密身份反复折腾 → 回到无 passphrase + 跨平台 skill 重写

半天里做了又撤的 passphrase 方案

早上听 daddy”换主解密身份”指示,先把 vault 主 key 从旧 RSA ~/.ssh/id_rsa 切到带 passphrase 的 ed25519 ~/.ssh/vault_id_ed25519(passphrase Google@here1):备份 13MB tar.gz、用 expect 喂 passphrase 给 age 批量解密 + 重加密 413 个 .age 文件、commit de1851d 推 GitHub、.age-recipients 只留新 pubkey。

晚上 daddy 一问”agent 自己能不能解”才暴露根本设计限制:age 不会用 ssh-agent 解 SSH keyssh-add --apple-use-keychain 只能让 ssh/git 用,age 永远自读 key 文件、遇 passphrase 必要 /dev/tty,agent shell 无 tty 直接 device not configured。Keychain wrapper / expect 喂 passphrase 都是脆弱补丁。

重新分析威胁模型 → 撤回到无 passphrase ed25519

passphrase 唯一防得住的是「key 文件 + repo 同时泄露」(不当备份)。但:

  • 笔电被偷 — FileVault 全盘加密兜底
  • 用户态 RCE — Keychain 在登录态对所有 leway 进程开放,passphrase 等价无防护
  • repo 单独泄露 — key 不在 repo 里,不影响

→ 重生成无 passphrase ed25519、再次 expect 解 413 → 用新 pubkey 重加密、.age-recipients 只留无 passphrase pubkey、commit 0ee8652 推 GitHub。带 passphrase 的旧备份 vault_id_ed25519.with-passphrase.bak 当晚删除。vault get _global/TAVILY_API_KEY 秒回真值(37 字符),完全自动化。

真纵深防御方向(未实施):per-machine recipients —— 每台机器一对 keypair,每条 secret 用所有 pubkey 多 recipient 加密,一台失陷只 rotate 那一台 + 重加密,其他不受影响;passphrase 是假纵深。

重写 vault skill references/identity-rotation.md

之前 vault skill 完全没写 key 解锁/agent 集成/跨平台。重写 6.3K,覆盖:

  • macOS / Linux / Windows-WSL / 服务器无人值守 4 套接入流程
  • 加新机器到 recipients 步骤(铺路 per-machine recipients 模式)
  • 完整 rotate 主 key 流程
  • 历史失败方案表(解释为什么不用 passphrase / Keychain / expect)+ 7 条 Pitfalls

主 SKILL.md 决策表新加触发覆盖「新机器装 vault」「跨平台」。vault + claude-code 都已 publish 到远端 skill 服务器。

同日 CC skill 整理(claude-code SKILL.md 138 → 100 行 / 8957 → 4561 字节,-49%)

砍废话 + 加一条 alias 禁令。教训:用 --model opus alias 会被解析到非 internal 通道(强制 effort=medium,超出报 invalid_reasoning_effort),必须全名 --model claude-opus-4.7-1m-internal --effort high --dangerously-skip-permissions,三个参数死记。skill 早警告过,被自己忽略。详见 copilot-anthropic-proxy 的 effort 档位约束。

vault 当前状态快照

主解密身份~/.ssh/vault_id_ed25519(无 passphrase,ed25519)
~/.ssh/id_rsa(旧 RSA)文件保留 (按 daddy 要求),已从 .age-recipients 移除,无法解任何 vault 文件
.age 文件总数413
repoRestry/vault-data(GitHub 私有)
_global/ 已知 PATGITHUB_BOCHUB_PAT_NEW/_OLD / GITHUB_BOCHUB_2FA_RECOVERY / DOCKER_HUB_PAT无 Restry 主号 PAT(daddy 让 fries 生成被拒——PAT 必须本人 GitHub 网页或 gh auth 走 OAuth)