Skip to content

fix(skills): make argument-hint a YAML string, not a one-element list - #1

Open
thejesh23 wants to merge 1 commit into
serein431:mainfrom
thejesh23:fix/copilot-cli-1.0.65-argument-hint-string
Open

fix(skills): make argument-hint a YAML string, not a one-element list#1
thejesh23 wants to merge 1 commit into
serein431:mainfrom
thejesh23:fix/copilot-cli-1.0.65-argument-hint-string

Conversation

@thejesh23

@thejesh23 thejesh23 commented Jul 3, 2026

Copy link
Copy Markdown

Summary

All 9 SKILL.md files in plugins/donegraph/skills/ write argument-hint as a flow-sequence rather than a string:

# Before (parses as a one-element list ["..."])
argument-hint: ["<goal> [--platform codex|claude|cursor|generic]"]

# After (parses as a string "...")
argument-hint: "<goal> [--platform codex|claude|cursor|generic]"

The bug

In YAML, a bare [ opens a flow-sequence. So argument-hint: ["X"] deserialises to the list ["X"], not to the string "X". Skill loaders that expect argument-hint to be a string therefore see the wrong type and reject the skill.

GitHub Copilot CLI 1.0.65 (released 2026-06) tightened its skill loader to require argument-hint to be a string. As a result, every DoneGraph slash command silently fails to load in Copilot CLI 1.0.65+.

Verified locally:

>>> import yaml
>>> yaml.safe_load('argument-hint: ["[--no-open]"]')
{'argument-hint': ['[--no-open]']}   # list, len == 1
>>> yaml.safe_load('argument-hint: "[--no-open]"')
{'argument-hint': '[--no-open]'}     # str

The fix

Strip the outer [ and ] in all 9 files under plugins/donegraph/skills/:

  • donegraph/SKILL.md
  • donegraph-capture/SKILL.md
  • donegraph-checkpoint/SKILL.md
  • donegraph-dashboard/SKILL.md
  • donegraph-done/SKILL.md
  • donegraph-proof/SKILL.md
  • donegraph-recap/SKILL.md
  • donegraph-start/SKILL.md
  • donegraph-summary/SKILL.md

One logical change per file, one commit total.

Why this shape (string, not array)

  • VS Code Agent Skills docsargument-hint is documented as a single-line prompt hint (string), matching how it renders in the slash-command picker.
  • Copilot CLI skills tutorial (copilot-cli-for-beginners/05-skills) — shows argument-hint as a plain YAML string in every example.
  • Also latent on Claude Code — see anthropics/claude-code#22161. Claude Code today accepts either shape, but the documented contract is a string. Fixing this now removes the exposure before Claude Code tightens too.

Test plan

  • git diff main -- 'plugins/donegraph/skills/**/SKILL.md' — should show 9 files, each with a one-line change: ["..."]"...".

  • Frontmatter sanity check — every file's argument-hint deserialises to str:

    python3 -c '
    import yaml, glob, re, sys
    ok = True
    for f in sorted(glob.glob("plugins/donegraph/skills/*/SKILL.md")):
        fm = yaml.safe_load(re.match(r"^---\n(.*?)\n---", open(f).read(), re.DOTALL).group(1))
        t = type(fm["argument-hint"]).__name__
        print(f"{f}: {t}")
        if t != "str": ok = False
    sys.exit(0 if ok else 1)
    '
  • Copilot CLI 1.0.65+ — install the plugin, run copilot in a project, confirm /donegraph, /donegraph-recap, etc. all appear in the slash-command picker (before this PR, none of them load).

  • Claude Code — confirm the skills still load (Claude Code accepts both shapes today, so no regression expected).

  • Repo checks per CONTRIBUTING.md:

    • npm test — pure frontmatter change, no code paths touched; no impact expected.
    • npm run typecheck — no .ts files changed.
    • npm run build — no build inputs changed.
    • Prettier (from .github/workflows/ci.yml) — I ran npx prettier --check on both the pre-patch and post-patch trees; the same set of pre-existing warnings appear either way (2 files after this PR vs 3 before; this PR incidentally fixes one). No new warnings introduced. The CI step is guarded with || echo "Prettier not configured, skipping" and will not fail regardless.

Scope

  • Files touched: only the 9 SKILL.md files listed above.
  • Behaviour change: none, other than the skills now actually loading in Copilot CLI 1.0.65+.
  • Schema / privacy / determinism constraints from CONTRIBUTING.md: unaffected — no code-graph edges introduced, no render path touched, no snapshot fields added.

The `argument-hint:` frontmatter field in all 9 SKILL.md files was
written as `argument-hint: ["..."]`, which is YAML flow-sequence
syntax. YAML parses it as a one-element list `["..."]`, not as a
string `"..."`.

GitHub Copilot CLI 1.0.65 (released 2026-06) tightened its skill
loader to require `argument-hint` to be a string, so all 9 DoneGraph
skills silently fail to load in Copilot CLI 1.0.65+. The same shape
is also a latent bug on Claude Code, tracked at
anthropics/claude-code#22161 — Claude Code currently accepts either
shape but the docs specify string.

Fix: strip the outer `[` and `]` so each value is a plain YAML
double-quoted string.

References
----------
- GitHub Copilot CLI release notes / changelog for 1.0.65
- VS Code Agent Skills docs: `argument-hint` documented as a string
  (single-line prompt hint), not an array
- Copilot CLI skills tutorial (`copilot-cli-for-beginners/05-skills`)
  also shows `argument-hint` as a plain string
- Diagnostic reference: Egonex-AI/Understand-Anything#540 documents
  the same root cause with sources (currently open, not yet merged —
  cited as diagnostic reference only)

Verified: `yaml.safe_load` on all 9 files now returns `str` for
`argument-hint`, matching what Copilot CLI, VS Code, and Claude Code
expect.
@thejesh23

Copy link
Copy Markdown
Author

Tracking issue: #2 — captures the bug diagnosis and reproducer separately for anyone searching the repo who lands there before this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant