Skills and commands
The whole plugin on one map. Point at a skill to see what it does and the bb commands it runs.
The plugin's skills, stage by stage
1Start a site
- Gate 1: you approve plan
2Write to the space
- Gate 2: you approve sync plan
3Build the page
- Push: you approve push plan
4Change the page
- Push: you approve push plan↺ again: change it again, as often as you like
bbthe 38 commands the skills run
- bb story scaffold
- bb story fill
- bb story ops apply
- bb story materialize
- bb story validate
- bb story push
- bb story targets
- bb story slug
- bb story preflight
- bb story slots
- bb story design get
- bb story spacing plan
- bb story ops undo
- bb story serve
- bb story slot
- bb story diff
- bb story ops log
- bb story design log
- bb story pull
- a slash command loads it
- a skill loads it
- loads
- you approve
- bb commands it runs
After the page
The component stage fills the planned slots. A built component can already go to Backpack with upstream.
component/backbase:component19
Build the missing Wrap or Create components reserved by a Backbase story's slots, check them, sync approved schemas at Gate 2, replace slots through ops, measure and push one draft after approval.
upstream/backbase:upstream4
The one road to GCS, who make Backpack and Site Builder, in ef-global/backpack.
A command loads a skill, and the agent follows it. Every write waits at a gate for your yes; nothing writes to Figma or publishes.
Skills at a glance
| Skill | What it does | Use it when |
|---|---|---|
new/backbase:new | Start a new Backpack site from an empty folder and a Figma frame link. | You have a Figma frame and no project yet. |
analyze/backbase:analyze | Turn a Figma frame into a section plan for a Backpack project, reusing Site Builder bloks first, and stop at Gate 1 for the person to confirm. | You have a project and a Figma frame to build in it. |
read-figma | Read a Figma frame through the person's own Figma MCP and distil it into a validated sections.json, part by part. | A flow needs the frame's parts; analyze loads it. |
classify | Decide how to build each part of a Figma frame in a Backpack project, as reuse, compose, create, wrap, global or unsure, and write plan.json. | sections.json and the catalog are ready; analyze loads it. |
sync-space/backbase:sync | Bring a Backpack project's Storyblok space up to date with its code at Gate 2. | After Gate 1, before the first compose, or when the project's schemas change. |
compose/backbase:compose | Turn an approved Backbase plan into a draft Storyblok story, validate it, and push it with bb story push once the person approves the push plan, never published. | The plan passed Gate 1 and the space passed Gate 2: build the page. |
ops | Change a local Backbase story only through ops. | Compose, edit or refine changes a story; they load it. |
refine/backbase:refine | Audit a composed Backbase story against its Figma frame by measurement and a section-by-section visual review, then push it once. | After compose, to bring the page closer to the frame by measurement. |
edit/backbase:edit | Change a story that's already in the project's Storyblok space, section by section. | A page is in your space, and you want part of it changed. |
output | How every Backbase skill talks to the person. | Every skill that talks to you loads it: three layers, plain words, about 150 words. |
component/backbase:component | Build the missing Wrap or Create components reserved by a Backbase story's slots, check them, sync approved schemas at Gate 2, replace slots through ops, measure and push one draft after approval. | Compose or refine left slots: build the missing components. |
upstream/backbase:upstream | The one road to GCS, who make Backpack and Site Builder, in ef-global/backpack. | You built a Wrap or a Create, and Backpack should have it, or the plan has design requests for GCS. |
All skills in detail
ShowHide the cards
Each card’s bb chips are the commands the skill runs, from its SKILL.md, linked to the reference.
Generated from the plugin's SKILL.md files and commands when the site was built: 12 skills, 8 commands.
Start a site
backbase-new
/backbase:newStart a new Backpack site from an empty folder and a Figma frame link.
- Use it when
- You have a Figma frame and no project yet.
- Stops at
- Gate 1
- Reads
- The Figma frame, through your Figma connector
- Writes
- A new project from the boilerplate
.backbase/config.json.backbase/plan.json
- Loads
backbase-output,backbase-analyze- bb
backbase-analyze
/backbase:analyzeTurn a Figma frame into a section plan for a Backpack project, reusing Site Builder bloks first, and stop at Gate 1 for the person to confirm.
- Use it when
- You have a project and a Figma frame to build in it.
- Stops at
- Gate 1
- Reads
- The Figma frame, through your Figma connector
- The project's Backpack and schemas
- The space's presets, read-only
- Writes
.backbase/figma/<node-id>/sections.json.backbase/catalog.json.backbase/space-presets.json, when it reads the space.backbase/knowledge.md.backbase/plan.json
- Loads
backbase-output,backbase-read-figma,backbase-classify- bb
backbase-read-figma
loaded by analyzeRead a Figma frame through the person's own Figma MCP and distil it into a validated sections.json, part by part.
- Use it when
- A flow needs the frame's parts; analyze loads it.
- Stops at
- No gate
- Reads
- The Figma frame, through your Figma connector
- Writes
.backbase/figma/<node-id>/sections.json.backbase/figma/*/images/
- bb
backbase-classify
loaded by analyzeDecide how to build each part of a Figma frame in a Backpack project, as reuse, compose, create, wrap, global or unsure, and write plan.json.
- Use it when
- sections.json and the catalog are ready; analyze loads it.
- Stops at
- No gate
- Reads
- The frame's sections, from read-figma
.backbase/catalog.json.backbase/knowledge.md
- Writes
.backbase/plan.json
- bb
backbase-output
loaded by analyze, component, compose, edit, new, refine, sync-space, upstreamHow every Backbase skill talks to the person.
Write to the space
backbase-sync-space
/backbase:syncBring a Backpack project's Storyblok space up to date with its code at Gate 2.
- Use it when
- After Gate 1, before the first compose, or when the project's schemas change.
- Stops at
- Gate 2
- Reads
- The project's components and datasources
.backbase/plan.json.backbase/figma/<node-id>/sections.json, for the palette- Storyblok: the space's colour datasources, field plugins and Settings story
- Writes
.backbase/space-plan.json.backbase/space-sync.json- Storyblok: the components, datasources and theme you approve
- Storyblok: the Settings story's theme, as a draft, never published
- Loads
backbase-output- bb
Build the page
backbase-compose
/backbase:composeTurn an approved Backbase plan into a draft Storyblok story, validate it, and push it with bb story push once the person approves the push plan, never published.
- Use it when
- The plan passed Gate 1 and the space passed Gate 2: build the page.
- Stops at
- Push approval
- Reads
.backbase/plan.json.backbase/figma/<node-id>/sections.json.backbase/catalog.json.backbase/knowledge.md
- Writes
.backbase/catalog.json, again when it's stale.backbase/knowledge.md, again when it's stale.backbase/stories/<slug>.json- Storyblok: the images you approve, and the story as a draft
- Loads
backbase-output,backbase-ops- bb
- story scaffold
- story fill
- story ops apply
- story materialize
- story validate
- story push
- plan requests
- story targets
- story slug
- plan validate
- catalog
- story preflight
- space datasources
- doctor
- story slots
- assets plan
- figma images match
- assets upload
- story design get
- page measure
- story spacing plan
- story ops undo
- story serve
- page browser install
- page compare
- page review
backbase-ops
loaded by component, compose, edit, refineChange a local Backbase story only through ops.
- Use it when
- Compose, edit or refine changes a story; they load it.
- Stops at
- No gate
- Reads
.backbase/stories/<slug>.json.backbase/catalog.json
- Writes
.backbase/stories/<slug>.json.backbase/stories/<slug>.ops.jsonl
- bb
Change the page
backbase-refine
/backbase:refineAudit a composed Backbase story against its Figma frame by measurement and a section-by-section visual review, then push it once.
- Use it when
- After compose, to bring the page closer to the frame by measurement.
- Stops at
- Push approval
- Reads
.backbase/stories/<slug>.json.backbase/plan.json.backbase/knowledge.md- The page, rendered locally
- Writes
.backbase/catalog.json, again when it's stale.backbase/knowledge.md, again when it's stale.backbase/stories/<slug>.json.backbase/compare/<slug>/iterations/<n>/- Storyblok: the story once, as a draft
- Loads
backbase-output,backbase-ops- bb
backbase-edit
/backbase:editChange a story that's already in the project's Storyblok space, section by section.
- Use it when
- A page is in your space, and you want part of it changed.
- Stops at
- Push approval
- Reads
- Storyblok: the story as it is now
.backbase/catalog.json.backbase/knowledge.md
- Writes
.backbase/catalog.json, again when it's stale.backbase/knowledge.md, again when it's stale.backbase/stories/<slug>.json.backbase/stories/<slug>.remote.json.backbase/edits/<slug>/images.jsonand .backbase/assets.json, for a new image- Storyblok: the images you approve, then that story, as a draft
- Loads
backbase-output,backbase-ops- bb
backbase-component
/backbase:componentBuild the missing Wrap or Create components reserved by a Backbase story's slots, check them, sync approved schemas at Gate 2, replace slots through ops, measure and push one draft after approval.
- Use it when
- Compose or refine left slots: build the missing components.
- Stops at
- No gate
- Reads
- The local story and approved plan
- Installed Backpack declarations and saved Figma layers
- Writes
- Local component code and schemas
- Storyblok: approved components and one approved draft story
- Loads
backbase-ops,backbase-output- bb
backbase-upstream
/backbase:upstreamThe one road to GCS, who make Backpack and Site Builder, in ef-global/backpack.
- Use it when
- You built a Wrap or a Create, and Backpack should have it, or the plan has design requests for GCS.
- Stops at
- No gate
- Reads
- The local component in src/components/
- A fresh clone of ef-global/backpack, in a temp folder
.backbase/plan.json.backbase/requests/design-gaps.md- Open issues in ef-global/backpack, read-only
.backbase/figma/<node-id>/shots/
- Writes
.backbase/upstream/<kebab>/issue.md.backbase/upstream/<kebab>/pr.md.backbase/requests/open-issues.json.backbase/requests/<key>.issue.mdor .comment.md- GitHub: an issue in ef-global/backpack, then a draft pull request, each after your yes
- GitHub: each design request as an issue, or a comment on an open one, after your yes
- Loads
backbase-output- bb
The commands
ShowHide the table
| Command | Loads | What it does |
|---|---|---|
/backbase:analyze<figma-url>[--project <dir>][--space <space-id>] | backbase-analyze | Analyse a Figma frame and plan it as Backpack bloks, then stop at Gate 1. |
/backbase:component[<story-file>][--project <dir>] | backbase-component | Build the missing components in a story's slots, sync approved schemas at Gate 2, replace slots through ops, measure and push one draft after approval. |
/backbase:compose[--project <dir>][--slug <slug>] | backbase-compose | Turn the plan approved at Gate 1 into a draft Storyblok story, validated, then pushed by bb once you approve the push plan, never published. |
/backbase:edit[<story id or full path>]<what to change>[--project <dir>] | backbase-edit | Change a story in your Storyblok space, section by section, from what Storyblok has now. Only the sections you ask for change, and you see the diff and the push plan before it's pushed as a draft, never published. |
/backbase:new<figma-url>[folder][--space <id>] | backbase-new | Start a new site from an empty folder and a Figma frame, from bb doctor to a plan at Gate 1. |
/backbase:refine[slug][--project <dir>][--tries <n>][--budget <n>][--fit-drop <fit>][--sections <n> (deprecated)] | backbase-refine | Audit a composed story against the Figma frame by measurement, rendered locally, keep what moves each delta toward the frame, then push it once you approve the push plan. |
/backbase:sync[--project <dir>] | backbase-sync-space | Sync the project's components and datasources to its Storyblok space at Gate 2, writing only the plan the person approves. |
/backbase:upstream[<component> | requests][--project <dir>] | backbase-upstream | The one road to GCS in ef-global/backpack. Take a local Wrap or Create there as an issue, then a draft pull request in Backpack's conventions, or file the plan's design requests as issues, or as comments on open issues that have them. Each only after the person's yes. |
Where the knowledge comes from
ShowHide where it comes from
The knowledge pack, .backbase/knowledge.md, is what the agent reads to choose bloks and write design values. bb catalog --knowledge compiles it from your project as it is, not from a copy in bb. Two parts are different: the field → CSS table, and the house style.
| What | Where it comes from | Your project's? |
|---|---|---|
| Bloks: fields, option sets, allowed children, design subfields, presets | The Backpack installed in node_modules/@ef-global/backpack, at its version: its compiled .sb.cjs schemas, .presets.cjs presets and.d.ts types. Backpack 4 only. | Yes |
| The project's local Wraps and Creates | Its .sb.ts, .sb.cjs, .sb.mjs and.sb.js schemas in storyblok.config'scomponentsDirectories (src and storyblok without one), and its component-list.ts, wherever it is in the project. Its resolvers and backbase.placements.json change the allowed children. | Yes |
| Colour tokens | Backpack's .sb.datasource.cjs datasources and the project's own, in the same folders as its schemas, mapped to the frame's colour variables whensections.json is given. | Yes |
| Space presets | .backbase/space-presets.json, when the space was read. | Yes |
| Field → CSS: what each design value renders | .backbase/render-semantics.json when it's for the installed version, else the table bb ships for that version (today 4.11.0 only), else none, with a warning. | For its version, if there's a table |
| House style | Bundled in bb: mined from Backpack 4.11.0's presets, plus curated rulings. | No: the same everywhere |
The pack and the catalog record what they were compiled from. After you update Backpack or change a schema, compose, edit and refine rebuild them first with --if-stale, and tell you in one line. A stale catalog is never used: a command refuses it with catalog-stale. See When the catalog goes stale.
Custom-component flow
A component Backpack lacks gets a slot on the page, and /backbase:component builds it.
More
A Wrap gives Backpack’s existing React a local Storyblok version; a Create adds new React, almost always from Backpack’s primitives, with your yes. Both need evidence at Gate 1 of what was tried. Compose leaves a slot for each, a dashed box in dev and drafts that renders nothing in published content, and /backbase:component builds them after an approved sync. Refine skips slots, and can suggest one after two stuck rounds, with your yes. /backbase:upstream can then take one to Backpack, with a yes for its issue and another for its draft pull request.
1Plan the gap
AgentClassifyWrap or Create, with evidence
Show what was tried: catalog components, presets and why each failed. Wrap uses React Backpack already exports; Create needs new React, almost always from Backpack primitives.
YouGate 1You approve the component
Approve each Wrap and Create with its evidence and planned slot. An unanswered question stays open; the agent never assumes approval.
AgentLeave a slotCompose leaves it; refine skips it
The slot blok shows a dashed placeholder in dev and drafts and renders nothing in published production content. Refine skips slots and can suggest one after two stuck rounds, with approval. The last component stage fills it.
2Build it locally
/backbase:componentbb / checksGenerate, then mapbb component new
The generator writes the wrapper, schema, map entry, placements, resolver and design field. The agent writes the props mapping and schema content fields; a Create also gets React from Backpack primitives. Restate an approved Wrap; ask again for each Create.
bb / checksChaperoneFix until green; refresh the catalog
Fix until green. Also run tsc and the project's build or lint, then refresh bb catalog. Never baseline new violations.
- Schema name matches file and folder; adjacent wrapper exports the right name.
- Registered in the component map and placeable in a parent.
- Backpack imports; no deep imports or copied styles/source.
- No Backpack shadowing or local sb- prefix.
- Flex children have Backpack's design field and options.
- No rival UI libraries or raw interactive HTML.
YouGate 2Sync components, never --ssot
Show bb space plan --components-only once for all the new components. Sync only the components you approve with bb space sync --components-only; never --ssot and never delete components from the space.
bb / checksReplace the slotOne ops envelope, same index
Remove the slot and insert the new blok at the same index, using Figma's content. Handle images, materialize design values, then validate and stamp. Never edit the story file by hand.
bb / checksMeasureCompare the filled sections
Serve the local story, then run bb page measure and bb page compare on the filled sections. Refine within the usual limits before proposing a push.
YouPush a draftOne push plan, after your yes
Show the story push plan and wait for approval. Push once at the end as a draft; nothing publishes.
3Optional: send to Backpack
/backbase:upstreamYouApprove the issueFirst approval → file in Backpack
Only if you ask for upstream: the agent drafts the issue with evidence and a screenshot, shows it, and files it in ef-global/backpack after your yes.
YouApprove the draft PRSecond approval → push and open
Work in a fresh temporary Backpack clone, following its conventions and checks. Show the diff, then wait for a separate yes before pushing and opening a draft PR. Never merge or release. Keep the local component until Backpack releases it.
Agent makes the judgment calls. bb and Chaperone check and write. You approve at the gates.
What’s coming
Other ways to use Backbase still need diagrams:
- a new site in a new repo;
- editing an existing site and repo;
- migrating a site;
- editing only a Site Builder part of a site.