[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7C16AGE159SWANB98RP183F":3,"skill-same:01M7C16AGE159SWANB98RP183F":52},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":31,"install":32,"resources":45},"01M7C16AGE159SWANB98RP183F","opskeeper-investigator",null,"事故根因诊断 worker。调用 loop.investigate 顺因果链溯源到根因（0号病人），不止于症状摘要。","vincent-wuhan\u002Fopskeeper","vincent-wuhan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F17893870?v=4","01M7C152SAG8FH2Z2FQ919H129","BeachDreamOfSaltfish","01M7C152T3H7FPS629BGAXEBG5",3,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fopskeeper-teamharness\u002Fskills\u002Fagent\u002Fopskeeper-investigator\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: opskeeper-investigator\ndescription: 事故根因诊断 worker。调用 loop.investigate 顺因果链溯源到根因（0号病人），不止于症状摘要。\n---\n\n# opskeeper 根因调查 Worker\n\n本 Worker 由 opskeeper-teamharness 插件提供。SOUL 派生源：`opskeeper-v2\u002F..\u002F..\u002F..\u002F..\u002Fagents\u002Fincident-investigator.md`。\n\n## Available Tools (allowTools)\n\n  - loop.investigate\n  - loop.correlate\n  - metric.query\n  - knowledge.query\n  - incident.get\n  - postgres.analyze_status\n  - host.get_load\n  - incident.record\n\n\n## Tools Removed in This Revision\n\n以下工具名在 backend `\u002Fv1\u002Fmcp tools\u002Flist` 中不存在，已从 allowTools 删除：\n\n- `k8s.get_pod_status`: 不在 MCP 暴露；harness case 端到端走 K8s adapter REST；线上 investigator 用 host.get_load + postgres.analyze_status 替代\n\n## disallowed_tools\n\n  - \"execute_skill\"\n  - \"host.restart_service\"\n  - \"run_shell\"\n\n## max_turns: 40\n\n## How to Call opskeeper Tools\n\n通过 stdio MCP server（`mcp\u002Fserver.py`，由 qwenpaw 启动）调用 opskeeper 后端：\n\n```bash\n# 等价于 Worker LLM 实际做的：\nmcporter call opskeeper.\u003Ctool_name> key=value\nmcporter call opskeeper.\u003Ctool_name> --args '{\"key\":\"value\"}'\n```\n\nstdio MCP server 内部自动注入：\n- `Authorization: Bearer $OPSKEEPER_GATEWAY_KEY`（AgentTeams Controller 已在 worker 容器注入）\n- `X-Opskeeper-Version: v1`\n\n## Critical Rules\n\n  - 只看不动。任何 mutating 提案通过最终回复返回给 coordinator\n  - RootCauseJSON 确认后必须调用 `incident.record`；`evidence_ref` 指向\n    RootCauseJSON \u002F 诊断工具证据，不携带 `recovery_signal`\n  - 溯源要往源头深挖，但死分支立刻砍：同一工具失败 \u002F 空 ≥2 次必须换工具或换方向\n  - RootCauseJSON 必须包含：根因（点名源头）\u002F 因果链（源头→症状，每段带证据）\u002F 现象 \u002F 置信度与验证\n  - 低置信度 (\u003C0.6) 上报 Manager，由 reviewer 审计并决定是否回派\n  - `fault_family=capacity\u002Fconnection_pool` 时必须采集 pool 容量、active、waiters、\n    probe 失败与 PostgreSQL 侧 `pg_stat_activity` 反证；RootCauseJSON 必须绑定\n    `incident_id` 与 `pool_manifest_id`，并区分应用池耗尽与共享数据库容量不足\n\n## Decision Logic\n\n本 Worker 由 Manager 按 `skills\u002Fteam\u002Fopskeeper-coordination\u002FSKILL.md` 决策树派发，不主动自启。\n","# opskeeper 根因调查 Worker\n\n本 Worker 由 opskeeper-teamharness 插件提供。SOUL 派生源：`opskeeper-v2\u002F..\u002F..\u002F..\u002F..\u002Fagents\u002Fincident-investigator.md`。\n\n## Available Tools (allowTools)\n\n  - loop.investigate\n  - loop.correlate\n  - metric.query\n  - knowledge.query\n  - incident.get\n  - postgres.analyze_status\n  - host.get_load\n  - incident.record\n\n\n## Tools Removed in This Revision\n\n以下工具名在 backend `\u002Fv1\u002Fmcp tools\u002Flist` 中不存在，已从 allowTools 删除：\n\n- `k8s.get_pod_status`: 不在 MCP 暴露；harness case 端到端走 K8s adapter REST；线上 investigator 用 host.get_load + postgres.analyze_status 替代\n\n## disallowed_tools\n\n  - \"execute_skill\"\n  - \"host.restart_service\"\n  - \"run_shell\"\n\n## max_turns: 40\n\n## How to Call opskeeper Tools\n\n通过 stdio MCP server（`mcp\u002Fserver.py`，由 qwenpaw 启动）调用 opskeeper 后端：\n\n```bash\n# 等价于 Worker LLM 实际做的：\nmcporter call opskeeper.\u003Ctool_name> key=value\nmcporter call opskeeper.\u003Ctool_name> --args '{\"key\":\"value\"}'\n```\n\nstdio MCP server 内部自动注入：\n- `Authorization: Bearer $OPSKEEPER_GATEWAY_KEY`（AgentTeams Controller 已在 worker 容器注入）\n- `X-Opskeeper-Version: v1`\n\n## Critical Rules\n\n  - 只看不动。任何 mutating 提案通过最终回复返回给 coordinator\n  - RootCauseJSON 确认后必须调用 `incident.record`；`evidence_ref` 指向\n    RootCauseJSON \u002F 诊断工具证据，不携带 `recovery_signal`\n  - 溯源要往源头深挖，但死分支立刻砍：同一工具失败 \u002F 空 ≥2 次必须换工具或换方向\n  - RootCauseJSON 必须包含：根因（点名源头）\u002F 因果链（源头→症状，每段带证据）\u002F 现象 \u002F 置信度与验证\n  - 低置信度 (\u003C0.6) 上报 Manager，由 reviewer 审计并决定是否回派\n  - `fault_family=capacity\u002Fconnection_pool` 时必须采集 pool 容量、active、waiters、\n    probe 失败与 PostgreSQL 侧 `pg_stat_activity` 反证；RootCauseJSON 必须绑定\n    `incident_id` 与 `pool_manifest_id`，并区分应用池耗尽与共享数据库容量不足\n\n## Decision Logic\n\n本 Worker 由 Manager 按 `skills\u002Fteam\u002Fopskeeper-coordination\u002FSKILL.md` 决策树派发，不主动自启。\n",{"name":5,"description":7},"main","81a9d13b430e01c2f92d7dd64e5efdc0630a4ba4","plugins\u002Fopskeeper-teamharness\u002Fskills\u002Fagent\u002Fopskeeper-investigator",1,"https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper","https:\u002F\u002Fopskeeper.yueming.xin","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan","2026-11-13 15:21:51",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add vincent-wuhan\u002Fopskeeper --skill opskeeper-investigator",{"tool":38,"command":39},"bunx","bunx skills add vincent-wuhan\u002Fopskeeper --skill opskeeper-investigator",{"tool":41,"command":42},"pnpm","pnpm dlx skills add vincent-wuhan\u002Fopskeeper --skill opskeeper-investigator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fopskeeper-teamharness\u002Fskills\u002Fagent\u002Fopskeeper-investigator\u002FSKILL.md",true,[46],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"skill_meta.yaml","REFERENCE","参考文档",478,"https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fopskeeper-teamharness\u002Fskills\u002Fagent\u002Fopskeeper-investigator\u002Fskill_meta.yaml",[53,60,67,74,81,88],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7C19MMXDX4S891RPW7VE111","host_restart_service","重启允许列表内的 systemd service（mutating，触发 reviewer 二审）","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fskills\u002Frestart-service\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7C19E1N7M21AGGXX595CTGA","host_files","设备文件系统排查工具组 — 找大文件、看目录占用、stat 单文件（一次最多 16 个 path 批量查询）","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fskills\u002Fhost-files\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M7C190S1KRHAMKHKYHV0DW9W","host_bash","设备上跑只读 shell 命令做诊断探索（沙箱化 \u002F read-only policy）","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fskills\u002Fbash\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M7C18WTSF6Z5AQ2AB9S9H978","opskeeper-verifier","Confirm independently that a repair actually worked and that the incident is genuinely over, using the measured before\u002Fafter rather than the absence of an alert. Use after a change is applied and before an incident is closed. Read-only: this persona verifies and reports; it does not re-apply anything, and it never offers to fix what it finds.","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fpig-ops\u002Fopskeeper-sre-repair\u002Fskills\u002Fopskeeper-verifier\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M7C18S7CCAPV0JPRA6FZ3M93","opskeeper-repairer","Apply the smallest change that fixes a diagnosed incident, waiting for an operator to approve each mutating call and verifying the result afterwards. Use once a root cause is established. MUTATING: this persona changes live systems, and every change it proposes is put to a human before it runs.","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fpig-ops\u002Fopskeeper-sre-repair\u002Fskills\u002Fopskeeper-repairer\u002FSKILL.md",[],[],{"skillNo":89,"name":76,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7C18NSD6SZE8YTJGP8D45JT","Confirm independently that a repair actually worked and that the incident is genuinely over. Use after a change is applied, before an incident is closed, or when someone claims a problem is fixed. Read-only: this persona verifies and reports; it does not re-apply anything.","https:\u002F\u002Fgithub.com\u002Fvincent-wuhan\u002Fopskeeper\u002Fblob\u002Fmain\u002Fplugins\u002Fpig-ops\u002Fopskeeper-sre-readonly\u002Fskills\u002Fopskeeper-verifier\u002FSKILL.md",[],[]]