Skip to content

feat(compile): report the Cursor rule/skill overlap, and script the tap bump - #114

Merged
singhharsh1708 merged 2 commits into
mainfrom
chore/tap-bump-script
Aug 11, 2026
Merged

feat(compile): report the Cursor rule/skill overlap, and script the tap bump#114
singhharsh1708 merged 2 commits into
mainfrom
chore/tap-bump-script

Conversation

@singhharsh1708

Copy link
Copy Markdown
Owner

Two things, both continuing the 0.22.0 thread: a confident comment nobody had tested.

Cursor rule/skill overlap

In 0.22.0 I excluded cursor from the vendor-neutral dedup with this reasoning:

"Cursor is absent because it compiles to .cursor/rules/*.mdc, a rules file rather than a skill directory — a different mechanism, not a second copy of the same one."

That was an assertion, not a finding. Verified against Cursor's own docs:

  • Cursor does read .agents/skills/.
  • The rule we emit (alwaysApply: false, description, no globs) is precisely what Cursor calls a dynamic rule — the shape its own /migrate-to-skills command converts into a skill. The documented path is replace, not add.
  • Both land in the same "Agent Decides" pool. Cursor documents no dedup between them.
  • An alwaysApply: false rule's description is presented every session, so the trigger metadata is genuinely charged twice.

So it is a second offer of the same capability. Compile now says so, with the cost measured:

ℹ cursor: each skill is offered twice — as a rule (.cursor/rules/) and as a skill
  (.agents/skills/), which Cursor also reads. Both sit in its "Agent Decides" pool
  with no documented dedup, so ~19 tok of trigger description is charged twice.
  Cursor's own /migrate-to-skills converts rules of this shape into skills — drop
  "cursor" from [project].targets if every Cursor you support is 2.4 or newer.

The rule is still emitted. Agent Skills only reached GA in Cursor 2.4; dropping it would silently cost older-Cursor users their only trigger — worse than a duplicated description. A note keeps the choice with the reader rather than making it for them on partial evidence.

scripts/bump-tap.sh

TAP_TOKEN is still unset, so the tap job skips and the formula is bumped by hand — which meant copying a sha256 between terminals seven times over recent releases. This runs the same steps the workflow does, so the digest comes from the tarball rather than a paste. Dry run by default (the tap is a separate public repo; a wrong digest breaks brew install for everyone), refuses an unpublished version, no-op when already current.

While writing it I audited every hand-bumped release — 0.17.0 through 0.22.0 all carry a sha256 matching their real tarball. Nothing shipped broken, but nothing would have caught it either.

7 new tests; suite, typecheck, site --check and bench gate green. Ships as 0.23.0.

… Cursor

TAP_TOKEN still is not set, so the homebrew job skips with a warning and the
formula gets bumped by hand once per release — which meant copying a sha256
between terminals seven times over the last few releases. scripts/bump-tap.sh
runs the same steps the workflow does, so the digest is computed from the
tarball rather than retyped.

Dry run is the default, because the tap is a separate public repo and a wrong
digest there breaks `brew install` for everyone until somebody notices. It
refuses a version that is not on npm yet (the formula would 404) and is a no-op
when the formula already points at that version.

An audit while writing it confirmed all eight hand-bumped releases (0.17.0
through 0.22.0) carry a sha256 matching their real tarball, so nothing shipped
broken — but the process had no check that would have caught it if one had.

Also softens the comment excluding cursor from VENDOR_NEUTRAL_ALIASES. It
asserted the .cursor/rules file is "not a second copy" of the .agents/skills
one; they are different mechanisms, but Cursor does read .agents/skills, so in
a repo with both it is offered the same body twice, and whether it dedupes is
unverified. That is now stated as unverified rather than settled — the same
class of confident-but-unchecked comment that hid the copilot/gemini
duplication until 0.22.0.
…ing it away

Cursor reads .agents/skills/ as well as .cursor/rules/, and the rule this
compiler emits — alwaysApply: false, a description, no globs — is exactly what
Cursor's docs call a dynamic rule: the shape its own /migrate-to-skills command
converts into a skill. Both land in Cursor's "Agent Decides" pool, and Cursor
documents no dedup between them, so a repo with both paths offers one capability
twice and pays each entry's description up front.

Compile now reports that, with the duplicated cost measured, and names the
[project].targets line that resolves it.

The rule is still emitted. Agent Skills only reached general availability in
Cursor 2.4, so dropping it would silently cost anyone on an older Cursor their
only trigger — worse than a duplicated description. Reporting keeps the choice
with the reader rather than making it for them on partial evidence.

This started as a comment in the previous release claiming the rule was "not a
second copy" of the skill. It is one, through a different mechanism — the same
class of confident, unverified comment that hid the copilot/gemini duplication
until 0.22.0. Verified against Cursor's own docs and staff posts before changing
anything.

Adds 7 tests. 0.23.0.
@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kitbash Building Building Preview Aug 11, 2026 7:08pm

@github-actions github-actions Bot added documentation Docs, spec, RFCs, README, site dependencies Dependency or action version bumps labels Aug 11, 2026
@singhharsh1708
singhharsh1708 merged commit de9d42e into main Aug 11, 2026
10 checks passed
@singhharsh1708
singhharsh1708 deleted the chore/tap-bump-script branch August 11, 2026 19:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency or action version bumps documentation Docs, spec, RFCs, README, site

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant