Skip to content

docs(skills): add Bolt install steps to the Agent Skills pages - #427

Merged
moritzhartmeier merged 2 commits into
mainfrom
docs/agent-skills-app-builders
Aug 25, 2026
Merged

docs(skills): add Bolt install steps to the Agent Skills pages#427
moritzhartmeier merged 2 commits into
mainfrom
docs/agent-skills-app-builders

Conversation

@raffaelefarinaro

Copy link
Copy Markdown
Contributor

What

Adds Bolt to the per-agent install picker on the Agent Skills pages, under a new AI app builders group.

Bolt imports Agent Skills straight from a public GitHub repo, so people building there can install the Scandit skills without a terminal — npx plugins add scandit/skills is useless to them. The steps are:

In Bolt, open the plus menu next to the prompt → Skills → Manage skills (inside a project: gear icon → Skills). Then Add skill → From GitHub, paste the repository URL (copy the block below), pick the skill under Skill folder name and click Create.

Verified by hand in the Bolt UI: pasting https://github.com/scandit/skills populates the Skill folder name dropdown and imports the selected skill.

Changes

  • SkillsCallout/agents.tsx — Bolt entry, plus three new optional fields on AgentInstall: group (optgroup in the picker), frameworks (which framework pages offer the entry) and docs (link to the platform's own instructions).
  • SkillsCallout/ManualInstall.tsx — filters entries by framework, renders optgroups when any grouped entry applies, and shows the docs link.
  • SkillsPage/index.tsx + styles.module.css — a pointer under the one-command install ("Building in an AI app builder instead? The same skills import straight from GitHub into Bolt"), and a reworded manual-install intro. Both are derived from the entries, so they stay correct as builders are added or removed.

Gated to Web: these platforms only generate web apps, so nothing changes on the iOS, Android, Flutter, React Native, Cordova, Capacitor, KMP or .NET pages.

Platforms tested and left out

  • Lovable — its GitHub import zips the whole ref and applies the 200-file / 10 MB package limit before scoping to the linked subdirectory, so scandit/skills (973 files) is rejected with "ZIP file contains too many files". The repo root URL, the documented tree/<branch>/skills/<slug> form and uploading GitHub's repo zip all fail. A hand-built zip of a single skill folder (SKILL.md at the root + references/) imports fine via the Archive tab, so the fix on our side would be publishing per-skill zips as release assets in scandit/skills — or per-skill orphan branches, if we want a paste-a-URL flow. Reported to Lovable support.
  • Replit — installs from its Discover pane, which reads from skills.sh where all 80 Scandit skills are published, but they are not surfaced there yet.

Both re-add as a single entry in AGENT_INSTALLS once they work.

Verification

yarn typecheck, yarn build and cspell all pass. Checked the built HTML: the Web page renders the new group and copy, and no other framework page is affected.

Bolt imports Agent Skills from a public GitHub repo, so the Scandit plugin
can be installed there without a terminal. Add it to the per-agent install
picker under a new 'AI app builders' group, gated to Web since these
platforms only generate web apps.

The picker entries gain an optional framework filter, an optgroup label and
a link to the platform's own instructions. Verified in the Bolt UI: the repo
URL plus the skill-folder dropdown imports a single skill.

Lovable and Replit were tested and left out for now — Lovable rejects the
repo (its GitHub import applies a 200-file limit to the whole repository
before scoping to the linked skill folder), and our skills are not
discoverable in Replit's Discover pane yet.
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-08-25 11:41 UTC

Comment thread src/components/SkillsCallout/ManualInstall.tsx
The select's value read agentKey, which is seeded from the unfiltered
AGENT_INSTALLS and never reset when the framework prop changes, so it
could name an entry agentInstallsFor() had filtered out. The panel below
already rendered from the clamped `agent`, so the two could disagree:
blank select, Claude Code's steps. Unreachable today only because
AGENT_INSTALLS[0] has no frameworks and each framework is its own page.
Reading agent.key makes the invariant hold by construction.
eugenia-scandit added a commit that referenced this pull request Aug 24, 2026
…t it

Two gaps left by the registry refactor, both the same shape as the bug it
fixed: a framework name that resolves to nothing, with no error.

1. THE REGISTRY WAS RUNTIME-ONLY. `slug: string` meant verify:frameworks
   guarded the frontmatter and the schema, but nothing guarded code. A
   component writing `frameworks: ['Web']` for `['web']` compiled fine and
   then matched no framework - exactly how `netIos` and `react` got into
   the frontmatter. `FrameworkSlug` closes that: 4 typo cases that used to
   compile are now errors, with "Did you mean" suggestions.

   The union is spelled out rather than derived. Deriving it needs `as
   const`, which turns FRAMEWORKS into 13 exact tuple members and drops
   the optional `aliases` / `unreleased` keys from the entries that omit
   them - `f.aliases` and `f.unreleased` stop typechecking. Verified: that
   route fails `tsc` in two consumers. So the union is a second copy,
   guarded the way the schema enum already is, by a new three-way check
   (union / registry / enum, every pair both directions).

2. products.json AND features.json WERE OUTSIDE THE REGISTRY. Both state
   per-framework availability keyed by DISPLAY name, so the slug enum
   cannot see them - a second vocabulary, unverified.

   It had already drifted. features.json carried `.Net iOS` and
   `.Net Android` against the registry's `.NET iOS` / `.NET Android`,
   16 keys each. Nothing matched them: FeatureList looks up
   `feature.frameworks[currentFramework]` with a display name from the
   registry, so those 32 rows were unreachable. 32 keys normalized; the
   new DATA check keeps the two files inside the vocabulary.

   The check is one-directional on purpose: a product need not support
   every framework, so a registry display missing from a data file is
   fine. Only a name the registry does not know is an error.

UNRELEASED_FRAMEWORK_SLUGS is annotated `string[]` explicitly. It is a
membership-test array queried with raw route segments; narrowing it to
FrameworkSlug makes `.includes(someString)` an error at its call site.

Both new checks verified in both directions:
- pre-fix features.json -> exit 1, naming both bad keys; post-fix exit 0
- union with `linux` renamed -> exit 1, reporting the extra and the missing
Gates green: verify:frameworks, test:frameworks (9), tsc --noEmit.

Unblocks #427, which adds `frameworks?: string[]` to AgentInstall - a
sixth copy of the vocabulary landing just as this PR removes five. It can
now import FrameworkSlug instead.

Not fixed here, needs its own change: FeatureList derives the framework
from `/sdks/([^/]+)/`, which yields `net` for /sdks/net/ios/ and matches
no entry, so the feature table is empty on both .NET frameworks
regardless of this normalization.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@moritzhartmeier
moritzhartmeier merged commit c329fe8 into main Aug 25, 2026
5 checks passed
@moritzhartmeier
moritzhartmeier deleted the docs/agent-skills-app-builders branch August 25, 2026 11:41
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.

3 participants