Skip to content

fix(skill-trigger): example eval + copilot-sdk skill discovery + output-based detection#884

Merged
christso merged 7 commits intomainfrom
fix/881-skill-trigger-example
Mar 31, 2026
Merged

fix(skill-trigger): example eval + copilot-sdk skill discovery + output-based detection#884
christso merged 7 commits intomainfrom
fix/881-skill-trigger-example

Conversation

@christso
Copy link
Copy Markdown
Collaborator

@christso christso commented Mar 31, 2026

Summary

  • Replace csv-analyzer skill (built-in LLM capability) with acme-deploy -- a skill containing proprietary Acme Corp deployment procedures (internal trident CLI, service registry, JIRA approval rules)
  • Agents cannot answer deployment questions without reading the skill file, ensuring consistent trigger behavior across all providers
  • Bump @anthropic-ai/claude-agent-sdk from ^0.2.49 to ^0.2.88 -- the old version bundled Claude Code 2.1.49 which didn't load workspace skills
  • copilot-sdk: auto-discover workspace skills via skillDirectories per copilot-sdk docs
  • skill-trigger evaluator: fallback output-based detection for providers that discover skills via search tools (grep/glob)
  • Change copilot provider to copilot-cli for explicitness; add pi-cli, copilot-sdk, claude-sdk targets
  • Add agent provider eval concurrency limit (max 3) to AGENTS.md

Closes #881

Test plan

Red (before): csv-analyzer skill + old SDK

Provider Positive Negative Score
claude 0/2 FAIL 2/2 PASS 0.500
claude-sdk 0/2 FAIL 2/2 PASS 0.500
codex 2/2 PASS 2/2 PASS 1.000
copilot 2/2 PASS 2/2 PASS 1.000
pi 1/1 PASS n/a 1.000

Green (after): acme-deploy skill + updated SDK + all 7 providers

Provider Positive Negative Score
claude 2/2 PASS 2/2 PASS 1.000
claude-sdk 2/2 PASS 2/2 PASS 1.000
codex 2/2 PASS 2/2 PASS 1.000
copilot (copilot-cli) 2/2 PASS 2/2 PASS 1.000
copilot-sdk 2/2 PASS (2/3 runs) 2/2 PASS 0.750-1.000
pi 2/2 PASS 2/2 PASS 1.000
pi-cli 2/2 PASS 2/2 PASS 1.000

Note: copilot-sdk is nondeterministic on should-trigger-direct-request (2/3 runs pass). The agent sometimes answers from general knowledge without using tools. All other providers are consistent. Zero false positives across all providers and all runs.

  • 6/7 providers pass 4/4 consistently (1.000)
  • copilot-sdk passes 4/4 in 2/3 runs
  • Zero false positives -- all negative cases pass in every run
  • All example YAML files validate (52/52)
  • All unit tests pass
  • Build, typecheck, lint pass

🤖 Generated with Claude Code

…e-deploy skill

The csv-analyzer skill tested a capability all LLMs have built-in, so Claude
Code solved tasks directly without invoking the Skill tool. Replace with
acme-deploy — a skill containing proprietary deployment procedures (internal
CLI, service registry, approval rules) that agents cannot answer without
reading the skill file.

Also adds claude-sdk target to the shared targets.yaml.

Verified 4/4 PASS on: claude, codex, copilot, pi
(claude-sdk 3/4 — known issue: SDK spawns older Claude Code that doesn't
load workspace skills from .claude/skills/)

Closes #881

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages bot commented Mar 31, 2026

Deploying agentv with  Cloudflare Pages  Cloudflare Pages

Latest commit: bf4f9fd
Status: ✅  Deploy successful!
Preview URL: https://e3c4a3d2.agentv.pages.dev
Branch Preview URL: https://fix-881-skill-trigger-exampl.agentv.pages.dev

View logs

christso and others added 6 commits March 31, 2026 11:34
The SDK bundles its own Claude Code binary. v0.2.49 bundled Claude Code
2.1.49 which didn't load workspace skills from .claude/skills/. v0.2.88
bundles Claude Code 2.1.88 which does.

This fixes claude-sdk provider failing skill-trigger evals because the
bundled Claude Code couldn't discover workspace skills.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… prompt

- Change copilot provider from `copilot` to `copilot-cli` for explicitness
- Add `pi-cli` target (subprocess-based Pi agent)
- Replace deployment-related near-miss prompt with unrelated coding task
  to avoid false positives from agents reading the deploy skill

Verified 4/4 PASS on all 6 providers: claude, claude-sdk, codex, copilot,
pi, pi-cli

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Change copilot provider from `copilot` to `copilot-cli` for explicitness
- Add `copilot-sdk` target with note about skill discovery limitations
  (uses grep to find skill content, evaluator can't detect this pattern)
- Add `pi-cli` target (subprocess-based Pi agent)
- Replace deployment-themed near-miss with unrelated coding task to avoid
  false positives

Verified 4/4 PASS: claude, claude-sdk, codex, copilot, pi, pi-cli
Known: copilot-sdk 3/4 — discovers skills via grep not Skill/Read tool

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…irectories

Pass skillDirectories to createSession so the SDK loads SKILL.md files
from .claude/skills/, .agents/skills/, and .codex/skills/ into the
session context. This matches the copilot-sdk docs/features/skills.md
spec for skill discovery.

Note: copilot-sdk still uses grep/glob to access skill content rather
than Skill/Read tool calls, so the skill-trigger evaluator can't always
detect skill usage from tool call inputs alone.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Some providers (e.g., copilot-sdk) discover skill content via search
tools (grep/glob) whose inputs don't reference the skill name. Add a
fallback that checks tool call outputs for skill file paths like
"skills/<name>/SKILL.md".

All 7 providers now pass 4/4: claude, claude-sdk, codex, copilot,
copilot-sdk, pi, pi-cli

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Agent provider targets spawn heavyweight subprocesses. Limit to 3
concurrent targets to avoid exhausting system resources.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@christso christso changed the title fix(skill-trigger example): replace csv-analyzer with proprietary acme-deploy skill fix(skill-trigger): example eval + copilot-sdk skill discovery + output-based detection Mar 31, 2026
@christso christso merged commit 01e26eb into main Mar 31, 2026
4 checks passed
@christso christso deleted the fix/881-skill-trigger-example branch March 31, 2026 13:00
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.

fix(skill-trigger): example eval fails on Claude providers + copilot-sdk skill discovery

1 participant