Skip to content

Fix npx skills add compatibility with a one-character, zero-content-loss fix (#50) - #58

Merged
codeswithroh merged 1 commit into
mainfrom
fix/npx-skills-add-compat
Jul 25, 2026
Merged

Fix npx skills add compatibility with a one-character, zero-content-loss fix (#50)#58
codeswithroh merged 1 commit into
mainfrom
fix/npx-skills-add-compat

Conversation

@codeswithroh

Copy link
Copy Markdown
Owner

Closes #50.

The bug

`npx skills add` was silently discovering the wrong skill entirely — it found our vendored `ideagram/` sub-skill and installed that instead of tastemaker, no error. A user following the documented install command today would get the wrong thing.

Root cause, found empirically not guessed

Chased this through several rounds of isolated scratch-repo testing:

  1. First hypothesis: an undocumented length limit (spec allows 1024 chars, ours was 866). A binary search against truncated real text found a boundary around 720-740 chars, which looked like a length cap.
  2. That didn't hold: a 684-char rewrite still failed, while the original text truncated to the same 684 chars worked. Length wasn't the actual variable — it was coincidental, because the truncation point happened to land before the real culprit.
  3. Isolated it by testing sentence fragments independently, then recombining: the sentence "Also triggers on two verbs: ..." broke discovery specifically because of the colon after "verbs". Confirmed by taking the full, unmodified, byte-for-byte original description and changing only that one colon to a comma — fixed it outright.

Most likely explanation: a colon-space sequence inside an unquoted YAML plain-scalar frontmatter value reads as an attempted nested mapping to whatever parser this CLI uses internally, even though it's valid in this position per the YAML spec.

The fix

One word: `"two verbs:"` → `"two verbs,"`. Everything else in the description — the full trigger-phrase list, both verb examples, all the specific wording — is byte-for-byte identical. No rewrite, no shortening, no content loss.

Also checked `plugin.json`/`marketplace.json` (from #49) — those carry descriptions as proper double-quoted JSON strings, which have no equivalent ambiguity. Confirmed unaffected.

Test plan

  • Real end-to-end `npx skills add .` against this actual repo, post-fix: `Found 1 skill / Skill: tastemaker`, discovered at the standard location (no `skillPath` override needed)
  • Confirmed exactly one other colon exists in the description (the required `description:` YAML key separator) — nothing else needed the same fix
  • All local test artifacts (`.agents/`, `.claude/`, `skills-lock.json`, `skills/ideagram`) generated during investigation cleaned up, none committed

🤖 Generated with Claude Code

…oss fix (#50)

The Vercel Agent Skills CLI (npx skills add) was silently failing to
discover tastemaker at all - it scanned the repo, found only the
vendored ideagram/ sub-skill, and installed that instead. A user
running the documented install command today would get the wrong
skill with no error.

Root-caused properly rather than guessed, through direct empirical
testing (isolated scratch repros, not assumptions):

- The official Agent Skills spec allows descriptions up to 1024
  characters. Ours was 866 - spec-compliant.
- An initial binary search against real (truncated) description text
  found a "failure" boundary around 720-740 characters, which looked
  like an undocumented length limit in the CLI.
- That theory didn't hold up: a freshly-rewritten 684-character
  description still failed, while the *original* text truncated to
  the exact same 684 characters worked. Length wasn't the variable.
- Isolated the actual cause by testing fragments independently, then
  recombined: the sentence "Also triggers on two verbs: "study"/..."
  broke discovery specifically because of the colon after "verbs".
  Reproduced by taking the full, unmodified, byte-for-byte original
  description and changing only that one colon to a comma - fixed
  it outright, confirmed with a real end-to-end install against this
  actual repo (`Found 1 skill / Skill: tastemaker`, correctly, with
  no skillPath override needed - it's found at the standard location).

Most likely explanation: a colon followed by a space inside an
unquoted YAML plain-scalar frontmatter value can read as an attempt
to open a nested mapping to a less strict/spec-compliant YAML parser,
even though it's syntactically valid per the YAML spec in this
position. Whatever the CLI's exact parser does internally, the fix
required is the same either way.

This is a one-word change: "two verbs:" -> "two verbs,". Every other
character of the description - the full trigger phrase list, both
verb examples, the AI slop / AI app language - is byte-for-byte
identical to before. No content lost, no rewrite, no shortening.
Checked for other colons in the description first (found exactly two:
the required YAML key separator itself, and this one) so nothing else
needed the same fix.

Verified: `plugin.json` and `marketplace.json` (from #49) carry their
descriptions as proper double-quoted JSON strings, which have no
equivalent ambiguity - confirmed unaffected, no changes needed there.

All test artifacts (.agents/, .claude/, skills-lock.json, skills/ideagram)
generated by repeated local npx skills add runs during investigation
were cleaned up before this commit; none are part of the change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@codeswithroh
codeswithroh merged commit dcf8466 into main Jul 25, 2026
@codeswithroh
codeswithroh deleted the fix/npx-skills-add-compat branch July 25, 2026 13:35
codeswithroh added a commit that referenced this pull request Jul 26, 2026
…elog current (#71)

Resolves #53. Added version: 1.0.0 to SKILL.md's frontmatter — a real, considered call: the generative core (palette gen, structure/diversification, gates, verbs) has been exercised across many real builds, not just written and left untested, which is past a 0.x designation honestly.

The site changelog (site/changelog.html) was 12 merged PRs behind (#47, #48, #57, #58, #59, #64-67, #69-70 were missing) — backfilled those before generating the root file from it, so the two don't start out already drifted. CHANGELOG.md is a condensed summary pointing to the site as the canonical, PR-linked detailed record, per the issue's second option.

Also fixes a real, already-merged bug: the marketing site's actual live domain is tastemaker-ai-skill.netlify.app, not tastemaker-skill.online — the wrong domain had been used in #70's sponsor-pitch.md draft; corrected here before it's used for real outreach.
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.

Day 2 — Investigate and implement npx skills add (Agent Skills CLI) compatibility

1 participant