scenario-workflow-authoring — Claude Code skill for Scenario graphs
A skill that teaches your agent to build and edit Scenario workflow graphs over MCP: nodes, edges, publishing, migrations.
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a claude-codeWhat scenario-workflow-authoring does
The skill treats a Scenario workflow as one document, editor_info, holding nodes, edges and inputKeys. There are no per-node editing tools, so every change is a read, modify, write of the whole graph through workflow_create or workflow_update. Never hand-write flow: workflow_publish compiles it from editor_info and flips the status to ready.
Before writing any graph, the skill sends you to references/editor-info.md for the node type vocabulary, the edge direction rule and a minimal validated example. Templates are found with search using target="workflows", public=true and limit=3, then fetched with workflow_get — search hits are summaries, not graph documents. Create, update, publish, copy and delete sit in the tool catalog, while workflows_list, workflow_get and workflow_run are direct tools.
Watch out for workflow_create: it is two calls underneath, so a failed create may still have made a draft whose id appears in the error. Recover with workflow_update on that id, because re-creating duplicates the workflow. The other trap is wiring a batch of assets straight into a model's reference field — that is one generation over every item at once. When each item needs its own result, put the model inside a forEach.
What it helps with
- build a Scenario app from a written brief
- add a model or approval gate node to a graph
- turn a prompt chain into a published app
- migrate a pipeline built in ComfyUI or Weavy
- import an exported workflow JSON
Example prompts for the agent
- Build a Scenario workflow that turns text into an image and publish it
- Add a model node to this graph and validate it with dry_run
- Migrate this ComfyUI export into a Scenario graph
How to install scenario-workflow-authoring
1Skills CLI (Vercel)
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a claude-code2Manually: put the files in place
~/.claude/skills/scenario-workflow-authoring/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/scenario-workflow-authoring/
1Skills CLI (Vercel)
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a codex2Manually: put the files in place
.agents/skills/scenario-workflow-authoring/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a cursor2Manually: put the files in place
.cursor/skills/scenario-workflow-authoring/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install scenario-labs/skills scenario-workflow-authoring2Manually: put the files in place
.github/skills/scenario-workflow-authoring/SKILL.md1Skills CLI (Vercel)
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a gemini-cli2Platform CLI
gemini skills install https://github.com/scenario-labs/skills --path skills/scenario-workflow-authoringManually: put the files in place
.devin/skills/scenario-workflow-authoring/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about scenario-workflow-authoring
How do I install scenario-workflow-authoring in Claude?
Run npx skills add scenario-labs/skills --skill scenario-workflow-authoring -a claude-code. The skill lands in ~/.claude/skills/scenario-workflow-authoring/SKILL.md.
What does scenario-workflow-authoring do?
It guides an agent through creating and editing a Scenario workflow graph over MCP: nodes, edges, publishing, renaming, copying. Running and pricing a workflow is the separate scenario-workflows skill.
Why does my app still run the old graph after I edit it?
Because flow is only compiled on publish. Editing editor_info on a ready workflow leaves the stale flow running until you call workflow_publish again.
Source text
SKILL.md · MIT
--- name: scenario-workflow-authoring description: "Use when a task involves creating or editing a Scenario workflow graph through MCP: building an app from a brief, adding or rewiring nodes (models, prompts, approval gates, loops), authoring editor_info, publishing, unpublishing or renaming, importing an exported workflow JSON, migrating a graph built in Weavy, ComfyUI, or another node tool, copying a workflow, or turning a prompt chain into an app. Running or pricing a workflow is scenario-workflows. Keywords: node graph, editor_info, CEL." license: MIT --- # Scenario Workflow Authoring ## Overview A workflow has two representations: `editor_info` (the editable node graph: `nodes`, `edges`, `inputKeys`) and `flow` (the compiled runnable form). Authoring through MCP means writing the whole `editor_info` document: there are no per-node editing tools; every change is a read, modify, write of the full graph through `workflow_create` or `workflow_update`. Never hand-write `flow`: `workflow_publish` compiles `editor_info` into it and flips status to `ready`. Editing a ready workflow's `editor_info` leaves the stale `flow` running until you publish again. Read [references/editor-info.md](references/editor-info.md) before writing any graph: it holds the node type vocabulary, the node choice doctrine (when an `llm` node is legitimate), the edge direction rule, per-node data contracts, and a validated minimal example. Create, update, publish, copy and delete live in the tool catalog (`scenario_tools_search` plus the matching executor, see the `scenario` skill). `workflows_list`, `workflow_get` and `workflow_run` are direct tools: scope and `dry_run` go in their top-level arguments, never an executor wrapper. Running and pricing: the `scenario-workflows` skill. If a sibling skill named here is missing from your available skills, ask the user to install it (`npx skills add scenario-labs/skills --skill <name>`); unattended, proceed from tool schemas and flag the gap. ## Quick reference | Step | Call | Notes | | ----------------- | ------------------------------------ | ---------------------------------------- | | 1. Study a graph | `workflow_get` on a working workflow | Copy the shape, never ids | | 2. Model contract | `model_schema_get` | Handle names and required inputs | | 3. Author | `editor_info` + `inputs_definition` | Per the reference file | | 4. Create | `workflow_create` | Non-atomic, see below | | 5. Publish | `workflow_publish` | Compiles `flow`, needs input+output pins | | 6. Validate | `workflow_run` with `dry_run=true` | Prices and runs the real validator | `workflow_create` is two calls under the hood: a failed create may still have created a draft whose id is in the error. Recover with `workflow_update` on that id; re-creating duplicates. Seed step 1 with `workflow_get`: it returns the full graph of any workflow whose id you have, public ones included (an id or app URL the user supplies, or your own team's from `workflows_list`). To find a public template, use `search` with `target="workflows"`, `public=true`, a keyword `query`, `limit=3`, and your scope; for example, `query="image"` with raw `filter: 'status = "ready"'`. Read ids from `workflows`, then fetch the chosen graph with `workflow_get`; search hits are summaries, not graph documents. Workflow search supports keyword text and filters only, so omit image and semantic options. Use `workflows_list` for browsing your saved workflows. [scripts/fetch_workflow_examples.py](scripts/fetch_workflow_examples.py) bulk-exports trimmed featured-workflow graphs for maintainers (setup in its header). ## Worked example: a text-to-image app 1. `recommend` with `capability: "txt2img"` and the user's brief as `prompt`, following the `scenario` skill's `next_step` discipline, then `model_schema_get`: its input names become the model node's handle names, and its `required` flag marks what must be wired. Use `search` instead when the user names a model. 2. Author `editor_info`: `text1` with `data.isInput: true`, `model1` with `type: "model"`, `data.modelId` and `data.isOutput: true`, one edge from `model1`'s input to `text1`'s output (edges name the downstream node as `source`, see the reference), `inputKeys: ["text1"]`. 3. `workflow_create` with `name`, `editor_info`, and `inputs_definition` naming `text1` as a string input. The published input key is the node id, which is why run inputs have names like `text1`. 4. `workflow_publish`, then `workflow_run` with `dry_run=true` to validate and price. Fix the graph and re-publish if validation fails. ## One output per item needs a loop A multiple-asset input wired straight into a generative model's reference field is one generation conditioned on every item at once: ten product shots in come back as one image blending them, not ten edits. Field names and cardinality are per model, so read them off `model_schema_get` (`array: true` marks a list), and read the field's description as well: a few utility tools take a list and return one output per item, which needs no loop. When each item needs its own result, put the model inside a `forEach` over the list and read the outputs from the `forEachEnd` (wiring in the reference's forEach section); keep the direct wiring only when the items are meant as joint references for a single output. Inside the loop the current item feeds an array field as a one-item list. `forEach` runs one billed model job per item, but the dry run prices one iteration whatever the list length (observed: one quote for one or two items, twice that billed for two), so multiply the quote by the item count before quoting the user. ## Migrating a graph from another node tool A pipeline exported by Weavy, ComfyUI, or another node editor does not import: only Scenario's own export round-trips. It is translated node by node, then created, published, and dry-run as above. The mapping table, member resolution, and the report the user gets are in [references/foreign-graph-import.md](references/foreign-graph-import.md); read it before touching such an export, since its first rule is to reduce the file to a table locally rather than paste it into the conversation. ## Common mistakes - Writing UI palette names as node types: persisted types are the camelCase vocabulary in the reference, and every generator is `type: "model"`. - Wiring edges producer to consumer: persisted edges point the other way. - Expecting an `editor_info` update to change a live app without re-publishing. - Retrying a failed `workflow_create` with a second create instead of `workflow_update` on the id from the error. - Wiring a batch of assets into one model input and expecting one output per item: that is one generation over all of them; loop with `forEach`. - Publishing with no pins: at least one `data.isInput` node listed in `inputKeys` and one `data.isOutput` node. - Gating a text node in front of a builder or model: a branch skips only the node wired to its handle, so the consumer stays pending and the job never completes. Gate the node that does the work, or use a CEL ternary for conditional prompt text, per the reference's `ifElse` section. - Double-quoted CEL literals: they evaluate but corrupt the canvas editor, single quotes only. - Sending `workflow_id` to `workflow_copy`: get, update, publish, run and delete take `workflow_id`, but copy takes `source_workflow_id`; the copy inherits everything verbatim and needs its own publish.
© scenario-labs · MIT · scenario-labs/skills