bug: Copilot CLI reports 6 duplicate skill failures from .openclaw/skills/
## Title
bug: Copilot CLI reports 6 duplicate skill failures from .openclaw/skills/
## Body
### Problem
When ponytail is installed as a **GitHub Copilot CLI** plugin, the CLI reports 6 skill loading failures at every startup:
```
Failed to load 6 skills. Run /skills for more details
```
**Root cause:** Copilot CLI recursively discovers every `SKILL.md` file inside the installed plugin directory. It finds skills in both `skills/` and `.openclaw/skills/`, which have identical `name:` values — 6 collisions.
```
FAIL: ponytail (.openclaw/skills/ponytail collides with skills/ponytail)
FAIL: ponytail-audit (.openclaw/skills/ponytail-audit collides with skills/ponytail-audit)
FAIL: ponytail-debt (.openclaw/skills/ponytail-debt collides with skills/ponytail-debt)
FAIL: ponytail-gain (.openclaw/skills/ponytail-gain collides with skills/ponytail-gain)
FAIL: ponytail-help (.openclaw/skills/ponytail-help collides with skills/ponytail-help)
FAIL: ponytail-review (.openclaw/skills/ponytail-review collides with skills/ponytail-review)
```
The plugin correctly declares `"skills": "skills/"` in `.github/plugin/plugin.json`, but the CLI ignores that manifest and scans all directories.
### Analysis
`.openclaw/skills/` has shorter, OpenClaw-format descriptions and extra frontmatter fields (`homepage`, `license`). It is clearly intended for a different tool and should not be loaded by Copilot CLI.
The `package.json` `"files"` field does **not** include `.openclaw/`, so npm packages exclude it correctly. However, Copilot CLI installs via `copilot plugin marketplace add` + `copilot plugin install`, which clones the full repo — `.openclaw/` ends up on disk even though it is not declared as a Copilot CLI asset.
### Why this matters
Every Copilot CLI startup shows a noisy failure banner. Users who install ponytail alongside other multi-tool plugins can hit 20+ phantom failures, making it impossible to tell whether a real loading error exists.
### Proposed solutions
Any of these would fix it from the plugin side:
| # | Approach | Effort | Side-effects |
|---|---|---|---|
| 1 | **Deduplicate**: drop `.openclaw/skills/` entirely and point OpenClaw at the existing `skills/` directory. Both use SKILL.md format; differences are just description length + 2 extra frontmatter keys (`homepage`, `license`). | Low | OpenClaw gets the longer descriptions — arguably better |
| 2 | **Rename `.openclaw/skills/*/SKILL.md`** to a name OpenClaw supports but Copilot CLI does not scan (e.g. `skill.md` lowercase). | Low | Only works if OpenClaw accepts alternative filenames |
| 3 | **Exclude `.openclaw/` from the git-cloned copy** that Copilot CLI installs. Use `.gitattributes export-ignore` so `git archive` (and tools that use it) skip `.openclaw/`. | Medium | Depends on how Copilot CLI clones the repo |
Option 1 is simplest and removes the maintenance burden of keeping two directories in sync.
From the **Copilot CLI side**, the CLI should respect `.github/plugin/plugin.json` manifests and only scan declared directories. This is arguably a CLI bug, but the workaround above is fully in the plugin author's control.
### Repro
```bash
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail
copilot # → "Failed to load 6 skills"
```
### Environment
- **Copilot CLI** latest
- **ponytail** v4.8.4
- macOS (also likely affects Linux)
- `.github/plugin/plugin.json` present with `"skills": "skills/"`
0 条评论