Skip to content

docs(agents): point skill authoring at agent-skills, not the synced plugin copy#2475

Closed
devantler wants to merge 1 commit into
mainfrom
claude/agents-md-synced-skill-path
Closed

docs(agents): point skill authoring at agent-skills, not the synced plugin copy#2475
devantler wants to merge 1 commit into
mainfrom
claude/agents-md-synced-skill-path

Conversation

@devantler

@devantler devantler commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

🤖 Generated by the Agentic Engineer

Why

The contract told a future agent to edit a file that silently discards its edits.
§ Agent definition locations named the Agent Improver's skill body inside
agent-plugins as a place to author changes — but that copy is pulled in from another
repository every day, so an edit there looks fine, passes review, merges, and then
quietly disappears at the next sync. No conflict, no failing check, nothing to notice.

The trap is easy to fall into because the same folder holds both kinds of file: the
agent definition next to it really is authored there. This was caught for real on an
agent-plugins PR last week and rated a major finding.

What

Points skill changes at the repository that actually owns them, leaves the agent half
alone, and states the one-line check that tells the two apart — so the next file added
to that folder gets classified rather than guessed at.

Adds a guard so the contract cannot drift back, wired into CI in a way that still runs
if a later change tries to delete the guard itself.

Fixes #2476

…lugin copy

§ Agent definition locations named
plugins/agentic-engineering/skills/agent-improvement/SKILL.md as a
version-controlled authoring surface. That file carries metadata.github-repo
provenance and is re-pulled by the daily update-agent-skills workflow, so an
edit there survives until the next sync and then silently disappears — no
conflict, no CI failure, no signal. The same plugin directory's
agents/agent-improver.agent.md carries no provenance and IS authored there, so
the rule is per-file, not per-directory.

Points skill bodies at devantler-tech/agent-skills, keeps the agents half
unchanged, and states the grep -l github-repo check so the next new file is
classified rather than guessed. Adds a guard test (4 assertions, each
individually RED-proven) wired into CI through its own paths filter, which
lists the guard and ci.yaml so deleting either still runs it.
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Readiness evidence @ 2868c47ca2

Programmatically tested. The guard has 4 assertions, each individually RED-proven
by mutating the fixed AGENTS.md and confirming that assertion — and only it — fires:

# Assertion Mutation Result
1 no concrete plugins/<p>/skills/<s>/SKILL.md named re-insert the old path FAIL ✓
2 devantler-tech/agent-skills named rewrite the slug FAIL ✓
3 agents/agent-improver.agent.md still named rename it FAIL ✓
4 metadata.github-repo check stated drop the key FAIL ✓

Unmutated: 4/4 pass. Full-tree RED/GREEN also run against the pre-fix AGENTS.md from
origin/main (FAIL) and the fixed text (OK).

Two of these assertions were vacuous when first written and were caught by the probes,
not by inspection — agent-skills was satisfied by the update-agent-skills workflow
name in the same paragraph, and a bare github-repo by neighbouring prose. Both were
tightened to the full slug and the exact metadata key.

Full contract suite: 15/15 green. Repo CI at this head: 25 success / 7 skipped / 0 failure.

Wiring verified behaviourally, not by inspection. The job's paths-filter output was
initially not declared on the changes job, which would have left
needs.changes.outputs.authoring-surface empty and the job silently never running —
a green CI that proves nothing. Declared it, then cross-checked that every filter has an
output and every output has a consumer (both clean), and confirmed the check-run actually
executed at this head rather than skipping:

Test authoring-surface provenance — success (00:21:39Z → 00:21:44Z)

Tried as a user. I used the new instruction on its own subject this run: ran
grep -l github-repo against the merged agent-plugins tip and it correctly classified
skills/agent-improvement/SKILL.md as synced (github-repo: …/agent-skills,
github-ref: refs/tags/v1.9.1) and agents/agent-improver.agent.md as authored
(no provenance). Confirmed agent-skills really does own agent-improvement/SKILL.md.
The instruction answers the question it claims to answer.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

@devantler: Reviewing the changes at 2868c47ca25b1495f1b2a04289df1487cf54f927.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@devantler, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 12 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bcce5f70-b302-426b-b941-eda004019660

📥 Commits

Reviewing files that changed from the base of the PR and between 122141e and 2868c47.

📒 Files selected for processing (3)
  • .claude/scripts/authoring-surface-provenance.test.sh
  • .github/workflows/ci.yaml
  • AGENTS.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Closing as a duplicate of #2474, which predates this by 78 minutes (23:02:48Z vs
00:21:21Z). I lost that race and did not detect it: my pre-flight claim scan covered
platform and ksail but never ran against monorepo, so an open PR in my own lane
was invisible to me.

Per the claim protocol I abandon rather than compete. I diffed the two implementations
first, and #2474 is the better one on every axis I checked — no finding to carry over:

  • It extends the existing agent-role-delivery-contract.test.sh, whose paths filter
    already lists AGENTS.md, the script, and ci.yaml. That is correct wiring with no
    workflow change at all; this PR added a new job, filter and output for the same coverage.
  • It scopes its assertions to a single bullet and says explicitly that asserting
    against the whole contract is a scope hole. I hit exactly that hole here: two of my four
    assertions were vacuous on first write — agent-skills was satisfied by the
    update-agent-skills workflow name in the same paragraph, and a bare github-repo by
    neighbouring prose.
  • It resolves provenance structurally, yq '.metadata.github-repo' at the exact YAML
    path, instead of my line grep — which is precisely what makes the two failure modes above
    unrepresentable rather than merely fixed.

Issue #2476 (filed here for the defect) stays open and is the tracking issue for #2474.

@devantler devantler closed this Jul 26, 2026
@devantler
devantler deleted the claude/agents-md-synced-skill-path branch July 26, 2026 00:26
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.

AGENTS.md names a synced plugin SKILL.md as an authoring surface, so edits there are silently reverted

1 participant