blueprint-builder
Creates JSON templates for Sorcha workflows, defining participants, actions, and routes.
Install
mkdir -p .claude/skills/blueprint-builder && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18779" && unzip -o skill.zip -d .claude/skills/blueprint-builder && rm skill.zipInstalls to .claude/skills/blueprint-builder
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Creates and maintains Sorcha blueprint JSON templates and workflow definitions. Use when: Building new blueprints, creating template JSON files, defining participants/actions/routes/schemas, configuring cycle detection, or troubleshooting blueprint publishing.Key capabilities
- →Create new blueprint JSON templates
- →Define participants for multi-participant workflows
- →Specify actions with data schemas
- →Configure routes for action flow
- →Troubleshoot blueprint publishing issues
- →Define cyclic workflows with cycle detection
How it works
The skill structures multi-participant workflows as JSON documents, defining participants, actions with data schemas, and routes for action flow, including support for cyclic workflows.
Inputs & outputs
When to use blueprint-builder
- →Create new workflow blueprint
- →Define action schema
- →Configure workflow routes
- →Troubleshoot blueprint JSON
About this skill
Blueprint Builder Skill
Sorcha blueprints define multi-participant workflows as JSON documents. Each blueprint has participants, actions (with data schemas), and routes that determine the action flow. Templates wrap blueprints with parameterization for reuse.
Quick Start
Minimal Blueprint (Two-Party, No Cycles)
{
"id": "my-blueprint",
"title": "My Workflow",
"description": "A simple two-participant workflow (min 5 chars)",
"version": 1,
"metadata": { "category": "demo" },
"participants": [
{ "id": "sender", "name": "Sender", "description": "Initiates the workflow" },
{ "id": "receiver", "name": "Receiver", "description": "Receives and completes" }
],
"actions": [
{
"id": 0,
"title": "Submit",
"sender": "sender",
"isStartingAction": true,
"dataSchemas": [
{
"type": "object",
"properties": {
"message": { "type": "string", "minLength": 1 }
},
"required": ["message"]
}
],
"routes": [
{ "id": "to-receiver", "nextActionIds": [1], "isDefault": true }
]
},
{
"id": 1,
"title": "Complete",
"sender": "receiver",
"dataSchemas": [
{
"type": "object",
"properties": {
"status": { "type": "string", "enum": ["accepted", "rejected"] }
},
"required": ["status"]
}
],
"routes": []
}
]
}
Cyclic Blueprint (Looping Workflow)
{
"metadata": { "hasCycles": "true" },
"actions": [
{
"id": 0, "title": "Ping", "sender": "ping", "isStartingAction": true,
"routes": [{ "id": "ping-to-pong", "nextActionIds": [1], "isDefault": true }]
},
{
"id": 1, "title": "Pong", "sender": "pong",
"routes": [{ "id": "pong-to-ping", "nextActionIds": [0], "isDefault": true }]
}
]
}
Cycle detection produces warnings (not errors). Cyclic blueprints publish with metadata["hasCycles"] = "true".
Key Concepts
| Concept | Details |
|---|---|
| Participants | Min 2 required. Each has id, name. id is referenced by action.sender. Leave walletAddress null for citizen-facing or credential-bootstrapped roles — see Open Participants below. |
| Actions | Sequential IDs starting at 0. One must have isStartingAction: true. Starting actions are open by design — anyone may submit; the first sender is bound to the participant for the rest of the instance. |
| Routes | Define flow between actions. nextActionIds: [] = workflow completion |
| DataSchemas | JSON Schema for action payload. IEnumerable<JsonDocument> in C# |
| Conditions | JSON Logic expressions for conditional routing |
| Calculations | JSON Logic for computed values (e.g., requiresApproval) |
| Cycles | Allowed with warning. Set metadata.hasCycles = "true" |
| InstanceReference | Optional human-readable instance id (e.g. CP-RIV-14-A7K3) generated from the starting action's payload. See below. |
Instance Reference
Define instanceReference to give each workflow instance a human-readable id instead of a bare GUID:
"instanceReference": {
"prefix": "CP",
"components": [
{ "field": "/projectName", "transform": "FirstWord", "chars": 3 },
{ "field": "/siteAddress", "transform": "FirstWord", "chars": 3 }
]
}
prefix— 1–5 uppercase alpha chars identifying the workflow type.components— 1–5 field extractions from the starting action's schema.transform—FirstWord(split on space, take first) orTruncate(first N chars). Output is uppercased.- A 4-char uniqueness hash is appended automatically.
⚠ The reference is public metadata. Any field value you reference here is visible in plaintext on the instance, outside the encrypted disclosure groups. Never build one from a name, date of birth, or any other identifying value — pick a project/site/case field.
Open Participants & Late Binding
isStartingAction: true already encodes "open" semantics end-to-end. There is no separate openSubmission flag and no bindingPolicy block — IsStartingAction is the open flag, and credentialRequirements is the gate. Use these correctly and the runtime does the rest.
What the runtime already does for starting actions
| Stage | Behaviour | Source |
|---|---|---|
| Validator (chain) | Starting actions accept any wallet — strict participant check is skipped | ValidationEngine.cs:~1352 (IsStartingAction branch) |
| Submission gate | Starting actions are exempt from the "must be a current action" check | ActionExecutionService.cs:~209 |
| Chain anchor | A starting action with no prior tx auto-chains from the blueprint publish tx (each instance forks the blueprint) | ActionExecutionService.cs:~375 |
| Late binding | First sender's wallet is bound to the participant role on the Instance and persisted; immutable thereafter (re-bind throws) | ActionExecutionService.cs:~419-452 |
| Credential gate | If credentialRequirements are present, they are enforced before binding (HAIP external presentation or internal Sorcha verifier) | ActionExecutionService.cs:~253-269 |
Line numbers are indicative (verified 2026-06); they drift — grep the method bodies if a citation misses.
Author rules
- Participants targeted by a starting action MUST have
walletAddressnull in the published blueprint. Do not pre-fill the wallet at publish time. The strict-equality check (ActionExecutionService.cs:~236-248) only fires whenwalletAddressis set, so a baked-in wallet defeats late binding and rejects every real submitter. - All other participants (case officers, assessors, internal roles) should have a known
walletAddressat publish time — they are not open. - Credential-bootstrapped flows (e.g. "Driving Licence" requires a
AssuredIdentityCredentialto start) belong on the starting action'scredentialRequirements, not on a new flag. The runtime gates the open submission on credential possession before binding the participant. - Once bound, the binding is canonical for that instance. Subsequent actions resolve disclosures, recipients, and credential issuance targets via
instance.ParticipantWallets[participantId], not via the blueprint's null wallet.
Open citizen application (Assured Identity Phase 1 pattern)
{
"participants": [
{ "id": "citizen", "name": "Citizen", "organisation": "Public" } // walletAddress OMITTED
{ "id": "analyst", "name": "Verification Analyst", "walletAddress": "ws1..." }
],
"actions": [
{
"id": 1,
"isStartingAction": true, // open — anyone with a wallet can submit
"sender": "citizen", // participant resolved by late binding
"dataSchemas": [ /* personal details */ ],
"routes": [{ "id": "to-review", "nextActionIds": [2], "isDefault": true }]
},
{
"id": 2,
"sender": "assessor", // pre-bound
"requiredPriorActions": [1],
"credentialIssuanceConfig": { "recipientParticipantId": "citizen", ... }
}
]
}
Credential-bootstrapped application (Driving Licence pattern — Assured Identity Phase 2)
{
"participants": [
{ "id": "applicant", "name": "Applicant", "organisation": "Public" } // walletAddress OMITTED
{ "id": "council", "name": "Council Officer", "walletAddress": "ws1..." }
],
"actions": [
{
"id": 1,
"isStartingAction": true,
"sender": "applicant",
"credentialRequirements": [
{
"type": "https://sorcha.dev/vc/assured-identity/v1",
"presentationSource": "HaipExternalWallet",
"requiredClaims": [ { "claimName": "givenName" }, { "claimName": "dateOfBirth" } ]
}
],
"dataSchemas": [ /* licence-specific fields only — identity comes from the credential */ ]
}
]
}
The applicant doesn't authenticate as a pre-existing identity; they prove they hold an AssuredIdentityCredential and that fact binds them as the applicant. The HAIP presentation pipeline runs before the late-bind block.
Common foot-guns
- Don't pre-bind the citizen wallet in walkthroughs. A
walletMap[citizen] = someWalletat publish time will lock the participant to that single wallet and reject every real public submitter with"Wallet X is not authorized to execute action 1. This action requires participant 'citizen' with wallet 'Y'."Strip the open participants out of your wallet map. - Don't rely on starting-action open semantics for sensitive roles. If the starting participant should be restricted, either set their
walletAddress(closed) or attachcredentialRequirements(gated). Open + no requirements = anyone with a JWT can become that participant. - Re-binding is immutable. Once
instance.ParticipantWallets[citizen]is set, attempting to submit again from a different wallet throws. If a workflow needs an applicant to "swap identity", that is a new instance.
Reusable Schema Components (Sorcha core library)
Status: Shipped (Feature 103). The resolver (
SchemaRefResolver.cs, prefixhttps://schemas.sorcha.dev/core/, child-wins layout override) and the startup seeder (CoreSchemaSeedService.cs) are live; the five catalog primitives exist on disk underblueprints/schemas/sorcha-core/*.json; andPublishService.PublishAsyncflattens$refs (FlattenActionSchemas) before validation, surfacingSchemaRefResolutionExceptionas a publish error. Blueprints SHOULD prefer$refto a core component over inlining identity primitives. Design spec:docs/superpowers/specs/2026-04-13-verified-citizen-v2-design.md.
Why
Identity primitives (a person's name, date of birth, email, postal address) appear in every citizen-facing blueprint. Inlining the JSON Schema for them in each blueprint duplicates validation, layout, persona bindings, and address-lookup
Content truncated.
When not to use it
- →When a blueprint requires an `openSubmission` flag
- →When a blueprint requires a `bindingPolicy` block
- →When pre-filling `walletAddress` for participants targeted by a starting action
Limitations
- →Participants targeted by a starting action must have `walletAddress` null in the published blueprint
- →Strict-equality check only fires when `walletAddress` is set
- →Cycle detection produces warnings, not errors
How it compares
This skill provides a structured JSON format for defining complex multi-participant workflows with explicit action flows and data schemas, differing from ad-hoc workflow definitions.
Compared to similar skills
blueprint-builder side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| blueprint-builder (this skill) | 0 | 14d | No flags | Advanced |
| project-planner | 32 | 9mo | Review | Intermediate |
| spec-kit-workflow | 11 | 7mo | No flags | Intermediate |
| specification-architect | 13 | 8mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
project-planner
adrianpuiu
Comprehensive project planning and documentation generator for software projects. Creates structured requirements documents, system design documents, and task breakdown plans with implementation tracking. Use when starting a new project, defining specifications, creating technical designs, or breaking down complex systems into implementable tasks. Supports user story format, acceptance criteria, component design, API specifications, and hierarchical task decomposition with requirement traceability.
spec-kit-workflow
jmanhype
Guides specification-driven development workflow. Automatically invoked when discussing new features, specifications, technical planning, or implementation tasks. Ensures proper workflow phases (specify → clarify → plan → checklist → tasks → analyze → implement).
specification-architect
adrianpuiu
A rigorous, traceability-first system that generates five interconnected architectural documents (blueprint.md, requirements.md, design.md, tasks.md, and validation.md) with complete requirements-to-implementation traceability. Use this skill when users need to architect systems, create technical specifications, or develop structured project documentation with guaranteed traceability.
architecture
davila7
Architectural decision-making framework. Requirements analysis, trade-off evaluation, ADR documentation. Use when making architecture decisions or analyzing system design.
context-driven-development
wshobson
Use this skill when working with Conductor's context-driven development methodology, managing project context artifacts, or understanding the relationship between product.md, tech-stack.md, and workflow.md files.
planning-agent
parcadei
Planning agent that creates implementation plans and handoffs from conversation context