Install
openclaw skills install business-blueprint-skillUse when turning presales requirements, meeting notes, or solution materials into editable business capability blueprints, swimlane flows, and application architecture diagrams. Use when generating blueprint JSON, static HTML viewers, or exporting to SVG, draw.io, Excalidraw, or Mermaid formats. When no standard export template applies, default to free-flow output.
openclaw skills install business-blueprint-skillUse the Python scripts in this repository as the execution surface.
All generated files (blueprint JSON, viewers, exports) go into projects/workspace/ — not the repository root.
python -m business_blueprint.cli --plan projects/workspace/solution.blueprint.json --from "..."
python -m business_blueprint.cli --project projects/workspace/solution.blueprint.json
python -m business_blueprint.cli --export projects/workspace/solution.blueprint.json
Choose --industry from exactly one of: "common", "finance", "manufacturing", "retail". Select the closest match based on the user's domain and materials; do not invent other values.
| Industry | Hints content |
|---|---|
common | No hints — generic domains |
finance | Risk control, credit, compliance, customer profile, etc. |
manufacturing | Production planning, quality, warehouse, supply chain, etc. |
retail | Store operations, membership, POS, order fulfillment, etc. |
The AI agent is responsible for entity extraction. The Python tool handles JSON writing, visualization, and export.
Read the seed template at business_blueprint/templates/{industry}/seed.json and get the industryHints.checklist.
Using the user's source material AND the industry hints checklist, extract:
Write the JSON file directly to the output path. Use this schema:
{
"version": "1.0",
"meta": {
"title": "...",
"industry": "retail",
"revisionId": "rev-YYYYMMDD-NN",
"parentRevisionId": null,
"lastModifiedAt": "ISO8601",
"lastModifiedBy": "ai"
},
"context": {
"goals": [],
"scope": [],
"assumptions": [],
"constraints": [],
"sourceRefs": [{"type": "inline-text", "excerpt": "..."}],
"clarifyRequests": [],
"clarifications": []
},
"library": {
"capabilities": [
{"id": "cap-xxx", "name": "...", "level": 1, "description": "...", "ownerActorIds": [], "supportingSystemIds": []}
],
"actors": [
{"id": "actor-xxx", "name": "..."}
],
"flowSteps": [
{"id": "flow-xxx", "name": "...", "actorId": "actor-xxx", "capabilityIds": ["cap-xxx"], "systemIds": [], "stepType": "task", "inputRefs": [], "outputRefs": []}
],
"systems": [
{"id": "sys-xxx", "kind": "system", "name": "...", "aliases": [], "description": "...", "resolution": {"status": "canonical", "canonicalName": "..."}, "capabilityIds": ["cap-xxx"]}
]
},
"relations": [
{"id": "rel-xxx", "type": "supports", "from": "sys-xxx", "to": "cap-xxx", "label": "支撑"}
],
"views": [],
"editor": {"fieldLocks": {}, "theme": "enterprise-default"},
"artifacts": {}
}
python -m business_blueprint.cli --export <blueprint.json>
This generates SVG + HTML viewer by default. Use --format drawio|excalidraw|mermaid for other formats.
Treat export view choice as a routing decision, not a styling preference.
freeflow.swimlane, matrix, product tree, or other generic views just because they are available.freeflow is the safe default unless the user explicitly asks for a supported standard template.python -m business_blueprint.cli --project <blueprint.json>
This generates solution.projection.json, the canonical machine projection consumed by downstream report/slide workflows.
User provides raw requirements / meeting notes?
→ AI agent reads hints, extracts entities, writes blueprint JSON
→ Optionally run --project for downstream machine handoff
→ Then run --export for visualization
User needs diagram files (SVG, draw.io, etc.)?
→ --export (default: SVG + HTML viewer)
User unsure about blueprint quality?
→ --validate
User wants downstream report / slide generation?
→ --project
| Command | Description |
|---|---|
--plan <path> --from <text> | Generate empty blueprint JSON from source text (AI should prefer writing JSON directly) |
--project <path> | Generate canonical projection JSON for downstream skills |
--export <path> | Export SVG + HTML viewer (default), or use --format for other formats |
--validate <path> | Validate a blueprint and print JSON results |
| Format | File | Use Case |
|---|---|---|
svg (default) | solution.exports/solution.svg + HTML viewer | Quick preview, embedding |
drawio | solution.exports/solution.drawio | Editable diagrams |
excalidraw | solution.exports/solution.excalidraw | Whiteboard-style diagrams |
mermaid | solution.exports/solution.mermaid.md | GitHub-native rendering |
This skill produces semantic intermediate artifacts. Downstream skills consume them:
report-creator consumes solution.projection.json → assembles reportsslide-creator consumes solution.projection.json → assembles presentationsrelations → generate PlantUML or other diagram syntaxsolution.blueprint.jsonsolution.handoff.json is viewer-only metadata, not a downstream narrative inputWhen running in an isolated Python sandbox (Jupyter, notebook, cloud REPL) that auto-installs dependencies:
The sandbox auto-installs kai-business-blueprint from PyPI. Do NOT try to pip install -e or use sys.path hacks with __file__ — __file__ is undefined in Jupyter.
For --export (after blueprint JSON exists):
from pathlib import Path
from business_blueprint.model import load_json
from business_blueprint.export_svg import export_svg_auto
from business_blueprint.export_html import export_html_viewer
blueprint_path = Path("solution.blueprint.json")
blueprint = load_json(blueprint_path)
export_dir = blueprint_path.with_name("solution.exports")
export_dir.mkdir(parents=True, exist_ok=True)
# Default fallback is freeflow unless a standard export template applies.
export_svg_auto(blueprint, export_dir / "solution.svg")
export_html_viewer(blueprint, blueprint_path.with_name("solution.blueprint.html"))
Prohibited patterns in sandbox:
__file__ — undefined in Jupytersys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) — will raise NameErrorsubprocess.run(["business-blueprint", ...]) — sandbox runs Python cells, not shellos.system() — same reasonWhen user requests an architecture diagram (keywords: "架构图", "architecture diagram", "--export", "diagram"):
references/architecture-design-system.md for the complete design system.references/architecture-templates/ based on the user's domain:
serverless.mdmicroservices.mdserverless.md as a structural referenceIf the request does not match one of the supported standard templates above, stay on the default freeflow export path. Do not switch to another generic view type as a fallback.
If a standard template would create a squeezed, clipped, or overcrowded diagram, stop using the fixed template geometry and fall back to freeflow or a wrapped multi-row layout.
Use an explicit route contract before rendering:
| Route | Structural prerequisites | First fallback | Terminal behavior |
|---|---|---|---|
freeflow | Any valid blueprint with at least one renderable node or relation | None | If integrity still fails, export exits non-zero with a structural diagnostics payload |
architecture-template | Recognizable L→R architecture shape, categorized systems, limited per-layer density, and no route-breaking overflow risk | freeflow | Same as above |
poster | Clear layer/group structure with bounded peer density per row or wrapped-row support | wrapped poster or freeflow | Same as above |
swimlane | Actor-owned flow steps with meaningful lane grouping | freeflow | Same as above |
hierarchy | Stable tree/group relationship with low ambiguity in parent-child grouping | freeflow | Same as above |
evolution | Ordered chronological or staged progression data | freeflow | Same as above |
Do not invent route heuristics ad hoc inside a renderer. Route eligibility must stay explicit and reviewable.
#020617 bg + 40px grid). Only use light mode when the user explicitly asks for it.systems[].category to semantic colors from the design systemsystems[].properties.type == "aws" → AWS Region boundary boxsystems[].properties.type == "k8s" → Kubernetes Cluster boundary boxflowSteps[].seqIndex for L→R orderingoverflow: hidden that can clip the last row.rx="8", stroke-width="2"rx="16", stroke-dasharray="8,4", opacity="0.4"evals/export-integrity-thresholds.json, not prose heuristics.{blueprint_stem}.html alongside the blueprint JSON--validate returns errors: fix structural issues before proceeding to --export.--validate returns only warnings: proceed but note the warnings in any handoff.python3 -m business_blueprint.cli with system Python as fallback.freeflow also fails integrity: export exits non-zero with a structural diagnostics payload instead of emitting a silently broken artifact.Phase 2 does not attempt full Windows terminal parity.
Known deferred cases:
Accepted workaround for encoding-sensitive runs:
python -m business_blueprint.cliPYTHONIOENCODING=utf-8 where needed