Repository navigation
Publish the NodeSpace skill to a public repo, replacing npm as the distribution channel (closes #2283) - #2296
Merged
Merged
Conversation
…stribution channel (closes #2283) Adds scripts/publish-skill-repo.ts, wired into release.yml's release-published pipeline the same way the Homebrew tap sync is, to push packages/skill's current SKILL.md and references/cli.md to NodeSpaceAI/nodespace-skill as a spec-compliant skills/nodespace/ folder. The published frontmatter reuses packages/skill/src/agents.ts's shared block (adding buildSkillFrontmatter()) and stamps a `compatibility` field with the released app version, derived from the same release tag the Homebrew sync scripts take rather than packages/skill/package.json's own (already-drifted) version field. npm publishing is explicitly not set up: the desktop app has never shelled out to npx/npm for its own install path (it runs the built installer directly with bun), so nothing currently depends on @nodespaceai/skill landing on the registry. Updated packages/skill/README.md and install.ts, which still described an npx install flow that was never live. Generalizes scripts/homebrew-tap-push.ts (renamed push-to-external-repo.ts) so its clone/write/commit/push mechanics take a target repo as a parameter instead of being hardcoded to homebrew-nodespace, and reuses it for the new publish script. Co-Authored-By: Claude <noreply@anthropic.com>
7 tasks
15 of 18 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
NodeSpaceAI/nodespace-skillrepo, wired intorelease.yml'srelease: [published]pipeline the same way the Homebrew tap sync is (sync-skill-repojob, sibling ofsync-homebrew-cask).@nodespaceai/skillwill not be published to npm;NodeSpaceAI/nodespace-skillis the sole distribution channel for external harness import. The desktop app has never shelled out tonpx/npmfor its own install path (it runs the built installer directly withbun, since commit b6ec420 / Build packages/skill and invoke the installer directly via bun #2143), so npm publishing was never actually required — Publish @nodespaceai/skill to npm: distributable skill package for PTY agent marketplaces #1184 closing without the package landing on the registry never blocked anything real. Updatedpackages/skill/README.mdandinstall.ts, which still described annpxinstall flow that was never live.buildSkillFrontmatter()inagents.ts, which stamps an optionalcompatibilityfield (the Agent Skills spec's optional field, max 500 chars) with the released NodeSpace app version — used only by the new publish script, not the app's own install path.scripts/publish-skill-repo.tsrendersskills/nodespace/SKILL.md(shared frontmatter +packages/skill/SKILL.md's current body, whatever shape it currently is) andskills/nodespace/references/cli.md, copied verbatim frompackages/skill. The published file set is derived from the intersection of all four agents'shimslists inagents.ts(sharedShimPaths()), not hardcoded — so it won't silently drift if a shared file is ever added, and it keeps working unmodified if Make the graph the source of truth for the NodeSpace skill, and decide how guidance reaches external agents #1958 later changes SKILL.md to a smaller stub.scripts/homebrew-tap-push.ts→scripts/push-to-external-repo.ts:pushFilesToTaptook a hardcoded tap repo;pushFilesToRepotakes the target repo as a parameter, reused byupdate-homebrew-cask.ts,update-homebrew-formula.ts, and the new publish script.What's live right now (not just code — verified per the issue's closing criteria)
NodeSpaceAI/nodespace-skillis populated for real, not empty:README.md— explains it's a generated publish target, points back tonodespace-core.skills/nodespace/SKILL.md— pushed by actually runningscripts/publish-skill-repo.ts v0.2.2 --pushby hand (using my owngh/git credentials, not a CI secret) as the one-time manual bootstrap the issue anticipated, since exercising the release pipeline itself would mean cutting a real release. This is the same code path CI will run — it wasn't simulated.skills/nodespace/references/cli.md— pushed the same way.Verified against the actual fetched artifact (fresh
git clone, not my local build) with a validator built directly from the six-field table on https://agentskills.io/specification: 16/16 checks pass —namematches the directory,description/compatibility/nameare within their length limits, frontmatter uses only the six spec-defined fields,references/cli.mdresolves, body is under the 500-line recommendation.I also copied
skills/nodespace/into a scratch Claude Code project (.claude/skills/nodespace/, not the real~/.claude) to confirm placement matches exactly what Claude Code's own docs describe for project-level skills. I could not get a live Claude Code session to load and activate it — this sandbox has no OAuth session and a non-writable keychain (claude doctorconfirms both), so a nestedclaude -pinvocation fails to authenticate regardless of the skill itself. That's an environment limitation, not something this PR can fix; the structural verification above is the strongest available substitute. Recommend a live Claude Code (and ideally Codex) activation check on a machine with real auth before fully closing this out.Resolved: the
allowed-toolsquestion from the issueThe issue asked whether
allowed-toolsis a Claude-Code-specific extension (in which case it should be dropped from the codex/gemini/opencode frontmatter). I fetched both https://agentskills.io/specification and Claude Code's own skills docs directly:allowed-toolsis one of the spec's six universal frontmatter fields (name,description,license,compatibility,metadata,allowed-tools), marked "Experimental" (support varies by implementation) but not Claude-Code-only. Claude Code's own docs confirm the same six-field list for what claude.ai skill uploads / the Skills API /package_skill.pyaccept — anything outside those six hard-errors. So sharingallowed-toolsacross all four installer targets (as #2284 already does) is spec-compliant, not a leak of a Claude-Code-only field. No change needed there.Open / flagged for the coordinator
SKILL_REPO_TOKEN(a PAT withcontents: writeonNodeSpaceAI/nodespace-skillonly) is not yet provisioned as a repo secret onnodespace-core. Until it is,sync-skill-repowill fail loudly on the next real release andnotify-failurewill open an issue — same failure shapeHOMEBREW_TAP_TOKEN/WEBSITE_DEPLOY_TOKENhad before they were provisioned. I don't have a path to create repo secrets myself.bun run gh:statusis broken —scripts/github-client.tshardcodesowner: "malibio"/projectNumber: 5, which no longer resolves to a real project (the live board is the org-levelNodeSpaceAIproject Create design system foundation #2). I worked around it by updating Publish the NodeSpace skill so users can actually install it: public import repo + automated release #2283's board status directly via the GraphQL API rather than fixing the script in this PR (out of scope here). Flagging in case it's not already tracked.homebrew-drift-check.yml) was added for the skill repo. The issue didn't ask for one; happy to add if wanted.Test plan
bun run test:all— full suite (unit + browser + Rust) passes, no new failures.bun run quality:fix— clean.bun run scripts/publish-skill-repo.ts v0.2.2 --push— run for real againstNodeSpaceAI/nodespace-skill(bootstrap; superseded by the next real release through CI).skills/nodespace/folder in a scratch project's.claude/skills/nodespace/and confirmed correct structure/placement; live activation blocked by sandbox auth (see above).