opencode-skills-doctor 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/docs/README.zh-CN.md +13 -0
- package/docs/REFERENCE.md +19 -4
- package/package.json +1 -1
- package/src/discover.mjs +8 -3
package/README.md
CHANGED
|
@@ -116,6 +116,7 @@ All commands accept `--json`, `--lang en|zh`, `--budget`, `--root` and `--no-glo
|
|
|
116
116
|
| **DeepSeek Harness** | `install --client dsh` adds the MCP entry and the `skills-doctor-audit` skill |
|
|
117
117
|
| **Claude Code / Codex** | MCP server (`npx -y opencode-skills-doctor mcp`) |
|
|
118
118
|
| **Grok CLI / Cursor** | their skill roots are scanned natively |
|
|
119
|
+
| **Hermes Agent** | MCP entry in `~/.hermes/config.yaml`; `~/.hermes/skills` is scanned |
|
|
119
120
|
|
|
120
121
|
## Why it is safe
|
|
121
122
|
|
package/docs/README.zh-CN.md
CHANGED
|
@@ -425,6 +425,19 @@ grok mcp doctor skills-doctor # ✓ server started · handshake OK · 1 tool d
|
|
|
425
425
|
|
|
426
426
|
Grok 的工具命名是 `<server>__<tool>`,所以调用 `skills_doctor__skills_doctor`;配置写入 `~/.grok/config.toml` 的 `[mcp_servers.skills-doctor]`。
|
|
427
427
|
|
|
428
|
+
### Hermes Agent(Nous Research)
|
|
429
|
+
|
|
430
|
+
Hermes 从 `~/.hermes/config.yaml` 读取 MCP server:
|
|
431
|
+
|
|
432
|
+
```yaml
|
|
433
|
+
mcp_servers:
|
|
434
|
+
skills_doctor:
|
|
435
|
+
command: "npx"
|
|
436
|
+
args: ["-y", "opencode-skills-doctor", "mcp"]
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Hermes 的工具命名是 `mcp_<server>_<tool>`,即 `mcp_skills_doctor_skills_doctor`。它的 skill 在 `~/.hermes/skills`(含导入的 `openclaw-imports/`)和项目 `.hermes/skills`,`check` 都会扫描。
|
|
440
|
+
|
|
428
441
|
## 检测规则
|
|
429
442
|
|
|
430
443
|
| 规则 | 级别 | 含义 |
|
package/docs/REFERENCE.md
CHANGED
|
@@ -10,7 +10,7 @@ Local scanner, linter, fixer, updater and **OpenCode plugin** for agent skills
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| **What it is** | Audit, fix and update the skills your coding agent loads |
|
|
12
12
|
| **Interfaces** | CLI · OpenCode plugin (1.x / 2.x) · MCP server (Claude Code, Codex, DSH, …) · Grok CLI compatible |
|
|
13
|
-
| **Skill sources** | `.opencode/skills`, `.claude/skills`, `.agents/skills`, `.grok/skills`, `.cursor/skills`, `opencode.json(c)` entries, HTTP catalogs |
|
|
13
|
+
| **Skill sources** | `.opencode/skills`, `.claude/skills`, `.agents/skills`, `.grok/skills`, `.cursor/skills`, `.hermes/skills`, `opencode.json(c)` entries, HTTP catalogs |
|
|
14
14
|
| **What it finds** | shadowed IDs, duplicates, long descriptions, oversized bodies, per-step token budget, broken file references, invalid frontmatter, empty bodies, stale skills |
|
|
15
15
|
| **What it fixes** | archives shadowed definitions (reversible), hides low-frequency skills, syncs catalogs with drift detection |
|
|
16
16
|
| **Reports** | terminal, JSON, or a self-contained HTML report (`--html [file] --open`) |
|
|
@@ -408,6 +408,19 @@ grok mcp doctor skills-doctor # ✓ server started · handshake OK · 1 tool d
|
|
|
408
408
|
|
|
409
409
|
Grok namespaces tools as `<server>__<tool>`, so call `skills_doctor__skills_doctor`. The config lands in `~/.grok/config.toml` as `[mcp_servers.skills-doctor]`.
|
|
410
410
|
|
|
411
|
+
### Hermes Agent (Nous Research)
|
|
412
|
+
|
|
413
|
+
Hermes reads MCP servers from `~/.hermes/config.yaml`:
|
|
414
|
+
|
|
415
|
+
```yaml
|
|
416
|
+
mcp_servers:
|
|
417
|
+
skills_doctor:
|
|
418
|
+
command: "npx"
|
|
419
|
+
args: ["-y", "opencode-skills-doctor", "mcp"]
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Hermes names tools `mcp_<server>_<tool>`, so the tool is `mcp_skills_doctor_skills_doctor`. Its skills live in `~/.hermes/skills` (including imported `openclaw-imports/`) and project `.hermes/skills`; `check` scans both.
|
|
423
|
+
|
|
411
424
|
## Rules
|
|
412
425
|
|
|
413
426
|
| Rule | Level | Meaning |
|
|
@@ -451,9 +464,11 @@ Grok namespaces tools as `<server>__<tool>`, so call `skills_doctor__skills_doct
|
|
|
451
464
|
6. project `.cursor/skills`
|
|
452
465
|
7. `~/.grok/skills`
|
|
453
466
|
8. project `.grok/skills`
|
|
454
|
-
9. `~/.
|
|
455
|
-
10. project `.
|
|
456
|
-
11.
|
|
467
|
+
9. `~/.hermes/skills`
|
|
468
|
+
10. project `.hermes/skills`
|
|
469
|
+
11. `~/.config/opencode/skills`
|
|
470
|
+
12. project `.opencode/skills`
|
|
471
|
+
13. the `skills` array in `opencode.json(c)` (2.x) or `skills.paths` (1.x); relative paths resolve from the working directory; supports `~/`, absolute paths and HTTP catalogs
|
|
457
472
|
|
|
458
473
|
## JSON output
|
|
459
474
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-skills-doctor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Audit, fix and update agent skills: token cost, broken references, shadowed duplicates, HTML reports, catalog sync. CLI, OpenCode plugin, MCP server; works with OpenCode, Claude Code, Codex, Grok CLI, Cursor and DeepSeek Harness.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
package/src/discover.mjs
CHANGED
|
@@ -120,9 +120,11 @@ function isUnder(parent, child) {
|
|
|
120
120
|
* 6. 项目 .cursor/skills
|
|
121
121
|
* 7. ~/.grok/skills
|
|
122
122
|
* 8. 项目 .grok/skills
|
|
123
|
-
* 9. ~/.
|
|
124
|
-
* 10. 项目 .
|
|
125
|
-
* 11. opencode
|
|
123
|
+
* 9. ~/.hermes/skills(Hermes Agent)
|
|
124
|
+
* 10. 项目 .hermes/skills
|
|
125
|
+
* 11. ~/.config/opencode/skills
|
|
126
|
+
* 12. 项目 .opencode/skills(项目根 → cwd)
|
|
127
|
+
* 13. opencode.json(c) 里的 skills 数组 / skills.paths
|
|
126
128
|
*/
|
|
127
129
|
export function discoverSources({ cwd = process.cwd(), home = os.homedir(), includeGlobal = true } = {}) {
|
|
128
130
|
const projectRoot = findProjectRoot(cwd) ?? path.resolve(cwd)
|
|
@@ -151,6 +153,9 @@ export function discoverSources({ cwd = process.cwd(), home = os.homedir(), incl
|
|
|
151
153
|
if (includeGlobal) addSource("grok-global", "global", path.join(home, ".grok", "skills"))
|
|
152
154
|
for (const dir of projectChain) addSource("grok-project", "project", path.join(dir, ".grok", "skills"))
|
|
153
155
|
|
|
156
|
+
if (includeGlobal) addSource("hermes-global", "global", path.join(home, ".hermes", "skills"))
|
|
157
|
+
for (const dir of projectChain) addSource("hermes-project", "project", path.join(dir, ".hermes", "skills"))
|
|
158
|
+
|
|
154
159
|
if (includeGlobal) addSource("opencode-global", "global", path.join(home, ".config", "opencode", "skills"))
|
|
155
160
|
for (const dir of projectChain) addSource("opencode-project", "project", path.join(dir, ".opencode", "skills"))
|
|
156
161
|
|