From breeze
Create or update nodes in the functional graph (Persona > Outcome > Scenario > Step > Action) from code, documents, or Figma designs. Use when: "update functional graph", "add to graph", "capture this in the functional graph", after analyzing a Figma frame, document, or code cluster.
How this skill is triggered — by the user, by Claude, or both
Slash command
/breeze:update-functional-graphThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is project-bound — it needs a `projectUuid`. Resolve it per `CLAUDE.md` at the plugin root: a `--project <name|uuid>` flag, a bare UUID, or a natural-language project hint in the prompt → otherwise the `projectUuid` in `.breeze.json`. A per-invocation override applies to that invocation only and must NOT mutate `.breeze.json`. If no project resolves, list accessible projects via `Cal...
This skill is project-bound — it needs a projectUuid. Resolve it per CLAUDE.md at the plugin root: a --project <name|uuid> flag, a bare UUID, or a natural-language project hint in the prompt → otherwise the projectUuid in .breeze.json. A per-invocation override applies to that invocation only and must NOT mutate .breeze.json. If no project resolves, list accessible projects via Call_List_Project_ and ask the user to pick (or run /breeze:project setup). Announce the active project on the first response line: Project: <name> (<uuid>). Auth handling on Breeze MCP 401s is also covered in CLAUDE.md (point the user at /breeze:project auth).
Persona (WHO -- the actor of intent)
└─ Outcome (WHAT -- high-level business capability)
└─ Scenario (HOW -- specific user/system flow)
└─ Step (sequential stage within a scenario)
└─ Action (what user provides/decides OR system processes)
Identify functional intents from the input (Figma frame, document, code).
Get_all_personas -> get all existing personasFunctional_Graph_Search with key terms -> find nearest
outcomes/scenariosApply persona resolution in strict priority order:
Resolution rules:
Forbidden Persona names -- NEVER use:
If you find yourself writing one of these, STOP and re-resolve using the priority order above.
Outcomes represent high-level business capabilities, not technical functions or API endpoints.
Good Outcome names:
Bad Outcome names (anti-patterns):
Outcome quality checks:
A Scenario describes a specific user or system flow under an Outcome. It should be testable -- you can write acceptance criteria for it. It should have a clear start and end.
Good Scenario names:
Bad Scenario names:
For System Persona scenarios, the description MUST describe the internal processing behavior, NOT the UI that triggers it:
Steps are the sequential stages within a Scenario. They represent the major phases a user or system goes through to complete the flow.
Step rules:
scenarioId (the parent Scenario's ID)Good Step names:
Bad Step names:
Quantity guidelines:
Step data format for Call_Create_Functional_Node_:
label: "Step"
data: {
"step": "<short verb phrase>",
"scenarioId": "<parent scenario ID>"
}
How to derive Steps from different inputs:
Actions are the atomic operations or user inputs within a Step.
Action rules by persona type:
Quantity guidelines:
Action data format for Call_Create_Functional_Node_:
label: "Action"
data: {
"action": "<specific interaction or operation>",
"description": "<precision detail or null per persona rules>",
"stepId": "<parent step ID>"
}
How to derive Actions from different inputs:
Example -- full hierarchy for a dashboard filter:
Persona: Media Analyst
└─ Outcome: Manage Dashboard Configuration
└─ Scenario: Apply Filters and Date Range
└─ Step: Specify date range
├─ Action: Provide start date
│ description: null
├─ Action: Provide end date
│ description: null
└─ Step: Apply keyword filter
├─ Action: Specify search keyword
│ description: null
├─ Action: Choose title-only search scope
│ description: null
Example -- System persona with descriptions:
Persona: System
└─ Outcome: Manage Validation Process
└─ Scenario: Check share class return divergence
└─ Step: Calculate daily returns
├─ Action: Compute daily return per share class
│ description: "Return = (NAV_D1 / NAV_D0) - 1"
├─ Action: Calculate absolute divergence
│ description: "Divergence = |Return_ClassA - Return_ClassB| × 10,000 (bps)"
└─ Step: Flag significant divergences
├─ Action: Check divergence against threshold
│ description: "> 20 bps = BREACH (Red), > 10 bps = WARNING (Amber)"
Use Call_Create_Functional_Node_ in strict order:
Persona -> Outcome -> Scenario -> Step -> Action
Each call requires the parent ID from the previous level:
personaIdoutcomeIdscenarioIdstepIdWait for each create call to return the new node's id before
creating its children.
Use Call_Update_Functional_Node_ to refine existing nodes.
Refer to ../shared/functional-graph-rules.md for the
complete shared specification:
These rules are shared across all Breeze skills that create or modify functional graph nodes.
If the input only elaborates on existing functionality and introduces no new Persona, Outcome, Scenario, Step, or Action, report: "No new nodes needed."
This applies when the input:
When proposing new nodes, present them in this format for user approval:
[CREATE/REUSE] Persona: <name> (ID: <id if reusing>)
[CREATE/REUSE] Outcome: <name> (ID: <id if reusing>)
[CREATE] Scenario: <name>
Description: <brief description>
[CREATE] Step 1: <name>
Description: <what happens>
[CREATE] Action: <specific interaction>
Description: <expected behavior>
[CREATE] Action: <specific interaction>
Description: <expected behavior>
[CREATE] Step 2: <name>
Description: <what happens>
...
Always present the plan to the user for approval before calling
Call_Create_Functional_Node_.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub accionlabs/breezeai-claude-plugin --plugin breeze