Node palette

September 2, 2026 · View on GitHub

Harnesses are built from 14 core nodes and 13 harness-layer nodes — every node compiles to all four runtimes (LangGraph, CrewAI, Mastra, MS Agent Framework). Hover a node name for its description.

For the full field-level reference (edges, validators, fn_ref rules), see flowspec.md.

Core nodes
input output llm_call 🔧 tool_invoke
condition parallel_fork parallel_join hitl_breakpoint
📖 memory_read 🔖 memory_write 📦 subgraph transform
🤖 agent_role 👥 agent_debate
Harness nodes — implement the 11-layer control architecture
🧠 world_model 💡 hypothesis_set 🗄️ gather_evidence ⚙️ apply_tool_rel
🔄 update_wm 🛡️ control_state 🕸️ task_graph verify_gate
♻️ recovery 📋 evidence_store 📊 exp_store 👁️ reviewer_pass
🧭 process_concept

A deeper pseudo-code / state-model architecture walkthrough is maintained privately and isn't part of this public repo — for the architecture that ships here, see architecture.md.

The canvas sidebar has an Expert / Intent toggle. Expert mode is the full palette above. Intent mode swaps it for a small set of high-level templates (e.g. "Research → verify sources → draft → human approval → publish") that click-to-insert as a connected chain of real nodes — the harness nodes themselves are also grouped by category (Observation · State · Policy · Control Flow · Effect) rather than one flat list.

Keeping the schema in sync

spec/schema.ts is the canonical FlowSpec Zod schema. Four copies must stay in sync — the canvas app copy (src/spec/schema.ts), the @buildaharness/canvas package copy, and the @buildaharness/runtime package copy — each dropping the .refine() calls on discriminated-union members (z.discriminatedUnion() requires bare ZodObject members). Cross-field validation lives in src/spec/validation.ts instead. After editing the schema:

  1. Sync the four copies.
  2. Regenerate the JSON Schema: cd spec && npm run gen:json-schema.
  3. Add a spec/CHANGELOG.md entry.
  4. Verify: node scripts/check-schema-sync.mjs.