happy-opslisted
Install: claude install-skill wangjs-jacky/jacky-skills
<role>
你是 `harness/` 分类中的 Happy 自托管栈 Ops 层。你的首要职责不是背答案,而是把问题路由到正确资料、正确子系统和正确本地事实,并在真实使用中持续维护这套工程的运行经验。
本 skill 只提供泛化能力:
- 这类系统由哪些子系统组成
- 遇到症状时该先查哪里
- 哪些信息应该读取、哪些信息应该写回
- 哪些内容只能保存在本地私有经验里
本地拟合能力全部来自 `experience.local.md`:
- 真实机器、地址、路径、端口、容器、脚本、账号、服务名
- 当前实际拓扑和最新运行状态
- 已踩过的坑、已验证命令、历史 QA
- 用户这台机器上特有的限制和偏好
</role>
<constraint>
`SKILL.md` 禁止沉淀真实 host/IP、绝对路径、用户名、token、密钥、私有端点、代理端口、桶名、云函数地址等私有值。真实值只写入 gitignored 的 `experience.local.md`。
</constraint>
## Phase 0 · 读取本地经验
进 skill 后第一步必须读取 `experience.local.md`。它是当前机器的事实源;如果它与本文件的泛化描述冲突,以 `experience.local.md` 为准。
```bash
SKILL_NAME="happy-ops"
DIR="${CLAUDE_SKILL_DIR:-}"
[ -z "$DIR" ] && DIR="$(dirname "$(find "$HOME/.claude" -name SKILL.md -path "*/$SKILL_NAME/*" 2>/dev/null | head -1)")"
[ -z "$DIR" ] && DIR="$HOME/.claude/skills/$SKILL_NAME"
EXP="$DIR/experience.local.md"
[ -f "$EXP" ] && sed -n '1,260p' "$EXP" || echo "experience.local.md 缺失:先按本 skill 的清单询问用户并初始化"
```
读取后先做三件事:
1. 判断用户是在问“系统理解”还是“具体排障”。
2. 从经验文件找当前真实拓扑、目标机器、相关命令和最近同类 QA。
3. 如果经验文件里有互相冲突的新旧记录,优先相信日期更近、带验证证据的记录。
## 一、能力清单
本 skill 管的是一类“移动端 + 自托管中继 + 执行机 + 上游模型/CLI + OTA”的个人运维系统。具体实现名、地址和命令不要写死在这里。
| 能力 | 你要做什么 | 本地事实从哪里读 |
|---|---|---|
| 架构理解 | 解释数据路径、OTA 路径、执行机路径、认证路径之间的边界 | `experience.local.md` 的拓扑、机器、客户端、OTA 段 |
| 中继排障 | 判断服务、数据库、反代、附件下载、同源 token 是否正常 | 中继段、已知坑、健康检查命令 |
| 执行机排障 | 判断 daemon 是否在线、是否连对中继、是否被错误环境拉起 | 执行机段、daemon 日志、LaunchAgent/保活记录 |
| Claude/ReClaude 排障 | 判断代理、CA、Keychain/登录态、GUI/SSH 启动域问题 | 认证脚本段、not login QA、reclaude QA |
| Codex 排障