Repository navigation
fix(cli): check skill freshness at the install destination - #7120
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
There was a problem hiding this comment.
Verdict: APPROVE · 0 blocker · 0 important · 1 nit · head 0f1fb05
The new suite fails 4/7 against base source and passes at head; focused skills tests 135/135 locally; all Actions runs for this head are green.
Scope
Audited: skills.ts (updateSkills / verifyInstalled / offline path), skillsManifest.ts (globalInstallRoot, checkSkills foreign rule, foreignSkillNames), the new test, docs. globalInstallRoot resolves CLAUDE_CONFIG_DIR the same way as skillsMirror.resolveBases and the upstream claude-code dir that --global --agent claude-code writes to, and hardcodes global scope, so the lock read stays correct when run from $HOME. Treating lock-foreign names as foreign even when absent from the store is right: the installer also writes ~/.agents/skills and the shared global lock, so installing would overwrite the other publisher's copy. Convergence with skills check / the nudge (still locateInstall): after one update, the Claude store holds the core and wins discovery, so both read the same root.
… update Single commit of #7094 on top of main (no merge commits through the signed GraphQL path). Includes: 2h update/skills check interval and stale-cache recheck; `_meta.checkedAt`, `_meta.skillsOutdated`, `_meta.skillsMissing`; `_meta.updateNotice`, one sentence for the agent to relay to the person, at most once a day per project (brew/npx-aware command, omitted under CI, the update-check opt-out and agent plugins); `hyperframes update [--check] [--yes] [--json]` (CLI then skills at the installed CLI's tag; brew version read back); doctor names the running binary and its channel; the hyperframes-cli skill gets one line to pass the notice on, naming no command. Keeps main's install-target skills check (#7120) in updateSkills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… update --check (heygen-com#7094) * feat(cli): surface outdated CLI and skills to agents; add hyperframes update Single commit of heygen-com#7094 on top of main (no merge commits through the signed GraphQL path). Includes: 2h update/skills check interval and stale-cache recheck; `_meta.checkedAt`, `_meta.skillsOutdated`, `_meta.skillsMissing`; `_meta.updateNotice`, one sentence for the agent to relay to the person, at most once a day per project (brew/npx-aware command, omitted under CI, the update-check opt-out and agent plugins); `hyperframes update [--check] [--yes] [--json]` (CLI then skills at the installed CLI's tag; brew version read back); doctor names the running binary and its channel; the hyperframes-cli skill gets one line to pass the notice on, naming no command. Keeps main's install-target skills check (heygen-com#7120) in updateSkills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(cli): update notice names a command that moves this install - `_meta.updateNotice` (and `update --check`'s skills command) now name a command that moves the running install: a global npm/pnpm/bun/brew CLI runs its own `hyperframes update` (or just its manager's command when only the CLI is behind), since `npx hyperframes` would run a project's copy or a fresh npx one; a project-local CLI moves with its project's manager by lockfile (`npm install`/`pnpm add`/`bun add`/`yarn add hyperframes@<v>`), which `update --yes` now names too instead of `npx hyperframes@latest`. - `update`'s confirmation hint states a fact and names no step for the agent: "Updating is the person's call; `update --check` only reports." - `upgrade --json`, `upgrade --project --json` and every `skills` JSON output leave out `_meta.updateNotice` (NO_UPDATE_NOTICE), like `update`. - dailyNotice: a null/non-object file reads as empty and is repaired; a future timestamp is stale; writes go through a 0600 tmp file + rename; withMeta never throws from the notice. - Docs: --json without --yes exits 2; plugin `update` exits 1 (plugin_managed); full `_meta` sample; per-install notice commands. `update --check` says "npm registry not reached" instead of "latest". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
What
Make
skills updatepopulate the complete core set in one run when HyperFrames skills already exist only in another agent's directory.Why
With three current core skills and a stale
reverse-any-videounder~/.cursor/skills, freshness discovery selects Cursor's store, but the installer writes to Claude and the universal store. The first update consequently installs onlymedia-useand the optional workflow; a second update is needed for the other three core skills. A fully populated Cursor store can also make an update incorrectly do nothing while the managed store is absent.Related work
skills checkand explicitly selects the write destination for updates.How
CLAUDE_CONFIG_DIRis honored). Verify all promised targets after installation, including during offline fallback.Test plan
Fails without the fix:
packages/cli/src/commands/skills.installTarget.test.ts—installs the core in one run with only Cursor skills present, then becomes a no-op. On the base source, the first run selects onlymedia-useandreverse-any-video, so the assertion requiring all four core skills fails. The incomplete-install and offline destination regressions also fail on the base source.0f1fb0510before the review fix.skills@1.5.13, and current core copies seeded fromv0.9.9. First run installed all four core skills, the second run installed nothing, and the stale Cursor-only optional skill remained untouched.