Skip to main content

Architecture & mockups

Pulse exposes 17 of its 216 MCP tools for visual design artifacts:
  • 12 architecture-design tools (server.py:6824–7503) — structured system designs with entities, interfaces, and diagrams (Excalidraw, Mermaid, draw.io, SVG, PNG).
  • 5 screen-mockup tools (server.py:9436–9710) — HTML+Tailwind page mockups, modals, drawers, popovers, and panels.
Both artifact types attach to any pipeline entity — ideation, refinement, spec, or card — and both have a dedicated copy tool that takes a deep-copy snapshot from a spec onto a card so an implementer’s context is self-contained. Source-of-truth citations: okto-pulse-feature-inventory.md:378–410 and :429–445.

When to use which

Use architecture designs to encode runtime topology and ownership boundaries that downstream cards must respect. Use screen mockups for visual UI references the implementer renders against. They are independent — one spec can have both.

Architecture designs

Authoring loop

The architecture model is critiqued by the server before it accepts a write. Skip the validation step and you get rejected with contextual paths like entities[0].name or diagrams[0].adapter_payload.elements[2].linkedEntityId — fix the cited field and retry. The recommended loop for non-trivial payloads:
1

Fetch the schema once per session

okto_pulse_get_architecture_design_schema returns allowed enums, entity/interface contracts, Excalidraw adapter rules, bad and good examples, and a complete minimal payload.
2

Dry-run critique

okto_pulse_validate_architecture_design_payload (server.py:6933) runs the same critique the create/update path runs but persists nothing. It returns:
  • valid — whether the payload would be rejected
  • issues — blocking errors with JSON paths
  • warnings — non-blocking gaps that hurt downstream clarity
  • suggested_fixes — concrete corrections for common mistakes
  • summary — counts of entities, interfaces, diagrams, elements, links
Pass parent_type + parent_id for create-mode validation. Pass design_id (and only the fields you intend to change) for update-mode — omitted fields are merged from the existing design before critique.
3

Persist after `valid: true`

Call okto_pulse_add_architecture_design (server.py:7049) or okto_pulse_update_architecture_design (server.py:7207) with the same payload. Warnings are not blockers, but each one usually marks a detail a downstream implementer or validator would otherwise have to guess.
Specs are locked once validation passes. Attempting to add or update an architecture design on a spec whose current validation outcome == "success" returns "Spec is locked because validation passed. Move it back to draft or approved to edit architecture." Move the spec back to draft or approved first.

Tool reference

Payload anatomy

okto_pulse_add_architecture_design accepts three structured arrays.

entities — runtime boundaries

Categorical entity_type plus a concrete name. The API rejects payloads where name duplicates entity_type after normalization (e.g. name="API", entity_type="api") because ownership and task boundaries become ambiguous.

interfaces — contracts on the wire

endpoint is optional but recommended (API path, RPC method, event name, queue name). direction must be one of source_to_target, target_to_source, bidirectional, none. Interfaces do not own source/target — diagram connections do, via sourceElementId / targetElementId.

diagrams — visualization

Excalidraw is first-class. Edges link to interfaces via linkedInterfaceIds (one connector can carry several contracts). connectionType accepts only "direct" and "elbow""curved" is rejected.

Excalidraw round-trip

Authoring agents can ship a complete Excalidraw scene without touching the structured arrays first.
To export, pair okto_pulse_dump_architecture_diagram with the diagram ID — it loads the payload through its adapter and returns both the raw payload and an adapter-formatted dump string.

Screen mockups

Tool reference

entity_type is universal

All five screen-mockup tools accept entity_typespec / ideation / refinement / card (default spec). The same shape works whether you are sketching a page during ideation discovery, locking it on a spec, or attaching the final reference to an implementation card.

Authoring example

The HTML sanitizer drops <script> blocks and any on* event attribute (onclick, onload, etc.). Style classes, inline style attributes, and Tailwind utilities pass through untouched.

Annotations

Reviewers add design notes without editing the HTML. Each annotation gets a stable id and records the author_id.

Spec → card propagation

When a sprint slices a spec into implementation cards, attach the relevant architecture and mockup context to each card so the implementer’s view is self-contained. Two tools snapshot from the spec onto the card. Both tools accept multi-value IDs as a native list (["scr_a", "scr_b"]), a JSON string, or pipe-separated. Comma-only input is rejected — see okto_pulse.core.mcp.helpers.coerce_to_list_str (okto-pulse-feature-inventory.md:395).
This is the mandatory card-level attachment pattern — agents reading okto_pulse_get_task_context see the architecture and mockups inline rather than chasing pointers back to the spec.

Permissions

All architecture and mockup tools resolve through the granular permission registry (server.py:_mcp_check_architecture_permission and Permissions.SPECS_UPDATE). The actions checked per call: A blocked call returns {"error": "FORBIDDEN", "message": "...", ...} — flip the agent’s permission preset in Board → Agents → Edit. See Permissions for the preset reference.

Errors

Architecture and mockup writes return the standard MCP error envelope:
Common codes for this domain:

Next steps

MCP reference index

All 216 tools across 8 domains.

ADLC pipeline

Where architecture and mockups attach in the ideation → spec → card flow.
Last modified on May 17, 2026