Runsight uses three YAML file types. This page is the exhaustive field reference for all three. For a guided walkthrough of workflow files, see YAML Schema.
The blocks dict uses a discriminated union on the type field. Each block type extends BaseBlockDef and adds its own fields. The following sections document block types with non-trivial additional fields.
Calls a child workflow as a sub-workflow (hierarchical state machine). The parent block binds values into the child’s declared interface and reads results back out after the child completes.
The parent workflow defines a workflow block that calls a child. The child declares its callable contract via the top-level interface section.
Parent workflow — calls the child and wires data in and out:
custom/workflows/research_pipeline.yaml
version: "1.0"
enabled: true
blocks:
run_analysis:
type: workflow
workflow_ref: analysis_subworkflow
inputs:
topic: shared_memory.topic
depth: shared_memory.analysis_depth
outputs:
shared_memory.summary: summary
shared_memory.citations: sources
max_depth: 5
on_error: catch
timeout_seconds: 600
workflow:
name: Research Pipeline
entry: run_analysis
transitions:
- from: run_analysis
to: null
Child workflow — declares the interface contract the parent binds to:
custom/workflows/analysis_subworkflow.yaml
version: "1.0"
enabled: true
interface:
inputs:
- name: topic
target: shared_memory.topic
type: string
required: true
description: The research topic to analyze
- name: depth
target: shared_memory.depth
type: integer
required: false
default: 3
description: How many layers deep to research
outputs:
- name: summary
source: shared_memory.final_summary
type: string
description: Completed analysis summary
- name: sources
source: shared_memory.collected_sources
type: list
description: List of cited sources
souls:
analyst:
id: analyst
role: Research Analyst
system_prompt: "Analyze the topic in shared_memory.topic."
blocks:
analyze:
type: soul
soul_ref: analyst
task: "Research the topic and write a summary."
workflow:
name: Analysis Sub-Workflow
entry: analyze
transitions:
- from: analyze
to: null
In the parent, inputs keys (topic, depth) match the child’s interface.inputs[].name values. The parent values (shared_memory.topic, shared_memory.analysis_depth) are dotted paths into the parent’s own state.
In the parent, outputs values (summary, sources) match the child’s interface.outputs[].name values. The parent keys (shared_memory.summary, shared_memory.citations) are dotted paths where results are written in the parent’s state.
Soul files live in custom/souls/ as standalone YAML files (one soul per file). The filename stem becomes the soul key. Soul files are flat — no wrapper object, just the fields directly.
Custom tool files live in custom/tools/ as standalone YAML files (one tool per file). The filename stem becomes the tool ID. Reserved builtin tool IDs (http, file_io, delegate) cannot be used.