Skip to content

fix(personal-kits): fail closed on @agentkit overlays while the shared list is unset - #128

Merged
mrgoonie merged 3 commits into
mainfrom
claude/modest-wozniak-bwp2yt
Oct 25, 2026
Merged

mrgoonie merged 3 commits into
mainfrom
claude/modest-wozniak-bwp2yt

Conversation

@mrgoonie

Copy link
Copy Markdown
Contributor

Closes #125 (option 2, the issue's recommendation). Related: #123 / #126.

Change

  • sharedSkills (apps/web/app/lib/personal-kits/kit-verify.ts): while SKILLX_SHARED_SKILL_ALIASES holds no valid identity, every @agentkit/* identity is shared. An in-place overlay is then refused with 422 overlay.shared_alias, and the detail names the missing operator step. Forks are unaffected.
  • List entries that are not identities (bare aliases like plan, none, mixed case) are dropped, so a wrong value cannot silently turn the fail-closed default off.
  • The operator hint is added only when the unset default (not an ak- prefix) refused the entry.
  • Docs: docs/personal-kits-api.md (guard semantics, which writes it runs on) and docs/deployment-guide.md (Personal kits API paragraph).

Verification

  • New assertions fail without the fix (2 failures on the old kit-verify.ts) and pass with it.
  • npx vitest run: 124 files, 2421 passed, 3 skipped.
  • pnpm typecheck: clean across all packages.
  • Isolated code-reviewer subagent: no blocking findings. Its medium and low findings (invalid list entries, deploy docs, hint for ak- skills, fork test) are addressed in this PR.

Note for #126

The deployment-guide paragraph #126 adds says that while the variable is unset a public kit "may overlay any other @agentkit/<name> skill in place". After this PR, that statement is false: such overlays are refused until the list is set. That sentence should be updated when #126 lands.


Generated by Claude Code

…d list is unset

Kit releases are named without the ak- prefix, so the prefix rule alone
protected no @agentkit kit release while SKILLX_SHARED_SKILL_ALIASES was
unset. Until that list holds at least one valid identity, every in-place
overlay of an @agentkit/* identity is now refused with 422
overlay.shared_alias, and the detail names the missing operator step.
Entries that are not identities no longer count as a configured list.
Forks are unaffected.

Closes #125

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016RCDbVS52poV8kxgnXrrBY
@mrgoonie
mrgoonie merged commit 59dec99 into main Oct 25, 2026
1 check passed
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.

Personal kits: shared-skill guard protects no @agentkit kit release while SKILLX_SHARED_SKILL_ALIASES is unset

2 participants