概述
小小薯条 🍟(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 修复 + OAuthsnsapi_userinfo一键登录 + admin v2 设计(DB-backed APPS_JSON 替代静态 env、ADMIN_PUBLIC_PATH随机路径 + 404 伪装)。Hermes~/.hermes/config.yamlsession_reset改mode: 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 / 首次命中率),落reportApiErrorwrapper 到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_表情/动作_序号」(头像_头像、徽章_徽章、logologo_前缀),原文件备份到~/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.default 从 claude-opus-4.7 切 claude-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 分钟一次,任务结果要主动投递到用户频道
相关主题
- research-fries
- openclaw-config
- lancedb-memory-system
- mattermost-config
- peekaboo-screen-control
- homeassistant-smart-home — HomeAssistant 智能家居与 USB 网卡排障
- sentrysearch-video — SentrySearch 视频搜索分析
- vim-learning — Vim 渐进式学习计划
- dronepicker — DronePicker 视频管理
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)。删掉腾讯元宝群组 skillyuanbao(不再用元宝接入)。 - 新建 skill :
devops/clash-router-subscription-update(家里 Mihomo 订阅热更,详见 vpn-proxy-management 05-04 段);hermes-session-remote-push(session 远端 ingest,详见 monitoring-and-cron 05-04 段)。 - eagle provider 接入:把
copilot-proxyprovider 重命名为短名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/cspy,image_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 加密:
- 准备一个 plaintext
.env-style 文件(一行一个path=value) - 脚本逐行
age -e -r $RECIPIENT -o ~/.vault/data/<path>.age,复用已配的 recipient pubkey - 全部写完一次
git add -A && git commit -m "bulk import 127 entries"+ 一次vault snapshot regenerate - 单次 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/ | 5 | CC / Codex / OpenCode / Hermes-Agent + DESCRIPTION |
github/ | 7 | git / PR / issues / code-review / repo-mgmt / codebase-inspect |
software-development/ | 66 | 60+ 写代码经验(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-commandshermes-agent-skill-authoringnode-inspect-debuggerpython-debugpyspike
血泪教训写进 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-developmentcategory 识别(嵌套子目录加载已验证) - 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.mdv2.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-...(vaulttavily/API_KEY)写入~/.hermes/config.yamlMCP server 段,tavily search 直接可用,替代之前临时 web search - 微信文章离线归档:自部署 wechat-article-exporter 到
wxdown.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(已入 vaultgitlab-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,让claudeCLI 走 copilot-anthropic-proxy。references/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-codeskill html-artifact-outputskill 分发到 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 key。ssh-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 |
| repo | Restry/vault-data(GitHub 私有) |
_global/ 已知 PAT | GITHUB_BOCHUB_PAT_NEW/_OLD / GITHUB_BOCHUB_2FA_RECOVERY / DOCKER_HUB_PAT;无 Restry 主号 PAT(daddy 让 fries 生成被拒——PAT 必须本人 GitHub 网页或 gh auth 走 OAuth) |