Repository navigation
feat(skills)!: promote Agent Skills to core - #159
jeffdupont wants to merge 6 commits into
Conversation
Move all 35 Agent Skills names from @launchdarkly/ai-server/experimental to the package root, with the same spelling, and remove them from the experimental entry point (breaking under the 0.x rule). Evaluations from Code stays experimental. @launchdarkly/ai-node picks the names up through its root re-export. Regenerate the API reports, add the names to the root surface list and mark them leaving the experimental one, drop the skills rows from changelog-sections, rename the shutdown hook to 'Agent Skills', and update tests, integration fixtures, READMEs and agents docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit f7ffdf6. Configure here.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
XieX
left a comment
There was a problem hiding this comment.
Review notes below. The main one is the edge-runtime regression on index.ts.
One more that has no line to attach to: the title's scope is AIC-3655, so the squash commit puts the Jira key in the public changelog ("AIC-3655: promote Agent Skills to core"). AGENTS.md on main says a change to an experimental feature uses that feature's scope. feat(skills)!: promote Agent Skills to core would still land under Features, because this PR removes the skills rows, and would still bump the minor version.
- Match each skills name on its own declaration in the API report, so a name that only appears in another export's signature no longer counts as exported. - Check initClient's options through INIT_CLIENT_OPTIONS (typed against the options type) instead of scanning the whole report for skillStore. - Assert at compile time that @launchdarkly/ai-server/experimental no longer declares getSkill. - Say why the shutdown-hook registry stays now that Agent Skills is core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent Skills in core makes the @launchdarkly/ai-server root import node:fs, node:path, node:os and node:crypto when it loads, so an edge runtime without them fails at import. For 1.0 this is documented rather than fixed. AIC-3674 tracks restoring edge support. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
skillRefs, getSkill, getSkillResult, getSkills, allSkills, writeSkills and watchSkills now report their client.* $ld:ai:sdk:usage ID as their first statement (TESTING.md §3.27), so a call that raises still reports. The watcher's initial and repeat reconciles call writeSkillsInternal, so watchSkills reports only itself. api-surface/ai-server.txt and ai-server.experimental.txt are synced from ai-sdks-monorepo#86, which gives the seven root names their usage= fields. The usage tests derive one row per ID from those fields. New tests cover once per client, held until a client exists, a raising call, and the watcher's re-reconcile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
XieX
left a comment
There was a problem hiding this comment.
Thanks for working through these. I checked the fixes in 75548c7, e32582d and ecef311, and they hold up. The new usage reporting looks right too. Approving, with three non-blocking notes:
- The edge break isn't in the changelog. The squash commit only describes the promotion, so someone upgrading from 0.4 on Vercel Edge or Cloudflare Workers would only find out when the import fails. Could you add a line for it, e.g. through a
BEGIN_COMMIT_OVERRIDEblock in the description? - The public README names an internal ticket. The new note in the root README points readers to AIC-3674, which they can't open. A public GitHub issue would give them something to follow.
- Merge order with ai-sdks-monorepo#86. The api-surface lists match that PR's head, but it's still open. If it changes before merging, the next sync will undo these lists again, so it's worth landing it first or rechecking afterwards.

Jira: AIC-3655
What changed
@launchdarkly/ai-serverroot with the same spelling, and are removed from@launchdarkly/ai-server/experimental. This is breaking under the 0.x rule, so it bumps the minor version.@launchdarkly/ai-nodegets the names from its root through its existingexport *. Its/experimentalentry keeps working and still re-exports Evaluations from Code./experimentalentry point stays.etc/ai-server.api.md,etc/ai-server-experimental.api.md) are regenerated. The skills names are added toapi-surface/ai-server.txtas+(joining) and marked-(leaving) inapi-surface/ai-server.experimental.txt.skillsrows are removed fromchangelog-sectionsinrelease-please-config.json. AGENTS.md now saysskillsis a core scope.experimental Agent SkillstoAgent Skills. The no-store error message now points to@launchdarkly/ai-server. Core doc comments no longer call Agent Skills experimental.Agent Skillshook after loading the root and no experimental hook.getSkillis on the root and not on either/experimentalsubpath.mainreports noexperimental.*skills usage IDs, so this PR adds none. When the skills usage-reporting work (AIC-3555) lands in this SDK, it must useclient.*IDs.Migration
Change the import path from
'@launchdarkly/ai-server/experimental'to'@launchdarkly/ai-server'(or from'@launchdarkly/ai-node/experimental'to'@launchdarkly/ai-node'). Nothing else changes: names, signatures and behavior are the same.Test plan
Run in the worktree after
yarn install:yarn code:check: exit 0yarn build: exit 0yarn typecheck: exit 0yarn test: exit 0 (client: 1826 passed, 11 skipped)yarn test:integration: exit 0 (36 passed)yarn api:surface: exit 0yarn test:api-surface,yarn test:api-breaking,yarn lint:pkg: exit 0yarn workspace @launchdarkly/ai-server api:check: exit 0yarn api:check: exit 1, only becausepackages/claude-agents/etc/ai-claude-agents.api.mdis already out of date onmain(ClaudeAgentsHostOptionscame in after the report was last generated). This PR doesn't touch that package.🤖 Generated with Claude Code
Related PRs
Releases together with:
Note
Overview
Agent Skills moves from
@launchdarkly/ai-server/experimentalto the package root (and the same via@launchdarkly/ai-node). All skills APIs—stores, accessors,writeSkills/watchSkills, types—are removed from the experimental entry point; Evaluations from Code remains on/experimentalonly. This is a breaking 0.x change: imports must switch from.../experimentalto the root; names and behavior are unchanged.API Extractor reports and
api-surface/*.txtare updated accordingly;skillsis dropped from release-please Experimental changelog sections and AGENTS.md now treatsskillsas a core scope. Docs call out that loading the root now pulls in Node built-ins (node:fs,node:path, etc.) for skills, which can break non-Node edge runtimes (tracked as AIC-3674).Implementation follow-ups: shutdown hook renamed to
Agent Skills; skills helpers emitclient.*$ld:ai:sdk:usageIDs;watchSkillsuseswriteSkillsInternalso only the watcher reports usage. Tests, webpack integration fixtures, and re-export assertions are aligned with the new surface.Reviewed by Cursor Bugbot for commit ecef311. Bugbot is set up for automated code reviews on this repo. Configure here.