| name | core-sdk |
| description | Kailash Core SDK — workflows, 110+ nodes, runtime, async, cycles, MCP, OpenTelemetry. Use for WorkflowBuilder + connections + runtime patterns. |
Kailash Core SDK - Foundational Skills
Comprehensive guide to Kailash Core SDK fundamentals for workflow automation and integration.
Features
The Core SDK provides the foundational building blocks for creating custom workflows with fine-grained control:
- 110+ Workflow Nodes: Pre-built nodes for AI, API, database, file operations, logic, and more
- WorkflowBuilder API: String-based workflow construction with type safety
- Dual Runtime Support: AsyncLocalRuntime (Docker/Nexus) and LocalRuntime (CLI/scripts)
- Advanced Patterns: Cyclic workflows, conditional execution, error handling
- MCP Integration: Built-in Model Context Protocol support
- Parameter Passing: Flexible data flow between nodes
- Zero Configuration: Auto-detection of runtime context
- Production Ready: Enterprise features including monitoring, validation, and debugging
Quick Start
from kailash.workflow.builder import WorkflowBuilder
from kailash.runtime.local import LocalRuntime
workflow = WorkflowBuilder()
workflow.add_node("NodeName", "id", {"param": "value"})
with LocalRuntime() as runtime:
results, run_id = runtime.execute(workflow.build())
Reference Documentation
Getting Started
Core Patterns
Advanced Topics
Runtime Diagnostics
- runtime-progress - ProgressRegistry for node progress tracking (contextvars, thread-safe callbacks, bounded deque)
- runtime-watchdog - EventLoopWatchdog for asyncio stall detection (heartbeat + thread, StallReport, task stack capture)
Recurring + Durable Execution
Key Concepts
Canonical Node Pattern (4-Parameter)
This is the single source of truth for node configuration. All other skills reference this section.
workflow.add_node(
"NodeClassName",
"unique_node_id",
{
"param1": "value",
"param2": 123
},
connections=[]
)
| Parameter | Type | Description | Example |
|---|
| Node type | str | The node class name (PascalCase) | "LLMNode", "HTTPRequest" |
| Node ID | str | Unique identifier (snake_case) | "fetch_data", "process_1" |
| Config | dict | Node-specific configuration | {"url": "..."} |
| Connections | list | Optional input connections (4-tuple) | [("src", "out", "dst", "in")] |
Connection Methods:
workflow.add_connection("read_file", "content", "transform", "input")
workflow.connect("read_file", "transform", from_output="content", to_input="input")
workflow.connect("node1", "node2", mapping={"content": "input", "meta": "metadata"})
WorkflowBuilder Pattern
- String-based node API:
workflow.add_node("NodeName", "id", {})
- Always call
.build() before execution
- Never
workflow.execute(runtime) - always runtime.execute(workflow.build())
Runtime Selection
- AsyncLocalRuntime: For Docker/Nexus (async contexts) - async-first, no threading, 10-100x faster
- LocalRuntime: For CLI/scripts (sync contexts) - synchronous execution with thread support
- get_runtime(): Auto-detection helper that selects appropriate runtime based on context
Both runtimes return identical structure: (results, run_id) tuple.
Runtime Architecture
Both LocalRuntime and AsyncLocalRuntime inherit from BaseRuntime with shared capabilities:
BaseRuntime Foundation:
- 29 configuration parameters (debug, enable_cycles, conditional_execution, connection_validation, etc.)
- Execution metadata management
- Common initialization and validation modes (strict, warn, off)
Shared Mixins:
- CycleExecutionMixin: Cyclic workflow execution with validation
- ValidationMixin: Workflow structure validation (5 methods)
- ConditionalExecutionMixin: Conditional execution and branching with SwitchNode support
AsyncLocalRuntime-Specific:
- WorkflowAnalyzer for optimal execution strategy
- Level-based parallelism for concurrent execution
- Thread pool for sync nodes without blocking
- Semaphore control to prevent resource exhaustion
Critical Rules
- ALWAYS:
runtime.execute(workflow.build())
- String-based nodes:
workflow.add_node("NodeName", "id", {})
- 4-parameter connections:
(source_id, source_param, target_id, target_param)
- Docker/Nexus: Use AsyncLocalRuntime (mandatory)
- CLI/Scripts: Use LocalRuntime
- NEVER:
workflow.execute(runtime)
- NEVER: Instance-based nodes
- NEVER: Use LocalRuntime in Docker (causes hangs)
When to Use This Skill
Use this skill when you need to:
- Create custom workflows from scratch
- Understand workflow fundamentals
- Learn node patterns and connections
- Set up runtime execution
- Handle errors in workflows
- Implement cyclic or async patterns
- Integrate with MCP
- Get started with Kailash SDK
Related Skills
Support
For complex workflows or debugging, invoke:
pattern-expert - Workflow patterns and cyclic debugging
testing-specialist - Test workflow implementations