01 / HOW TO READ THIS PAGE
Names for humans. Type IDs for tools.
The UI shows a display name such as Run Shell Command. A .knodrflow and the MCP authoring tools use its stable type ID, shell.run. Every node exposes named input and output ports; connections are valid only when those ports are compatible.
knodr serve for a flow with triggers. Use knodr run or MCP start_run for a one-shot, sourceless flow.02 / INPUTS & TRIGGERS
Start once, or react continuously
input.manualAccepts a value from the UI, CLI, or MCP start_run call.
input.valueEmits a saved constant or a {{var.NAME}} project variable.
trigger.manualStarts a live flow when a user or CLI signal arrives.
trigger.timerStarts a run on an interval or once after a delay.
trigger.httpHosts a local webhook and emits each accepted request.
trigger.fileStarts a run when a matching file changes in a watched directory.
git.triggerReacts after commit, merge, or checkout events in a repository.
03 / AI & AGENTS
Call models or delegate a coding task
agent.cliRuns Codex, Claude, Aider, OpenCode, Gemini, or a custom agent command non-interactively.
ai.llmSends system and user prompts to OpenAI, Anthropic, or Ollama.
ai.llm.customCalls an OpenAI-compatible endpoint at a configurable base URL.
ui.automateRuns a Windows desktop automation script and returns structured observations.
04 / CODE & SYSTEM
Run commands with explicit boundaries
shell.runExecutes a local program directly and captures stdout, stderr, and exit code.
script.runRuns inline Python, Node.js, PowerShell, or Bash code.
process.startOpens a scope around a long-lived local process.
process.killCloses the paired process scope and guarantees teardown.
container.runRuns a complete flow in an ephemeral Docker or Podman container.
container.service.startOpens a scope around a service container.
container.service.stopCloses the paired container scope and guarantees teardown.
05 / FILES, NETWORK & GIT
Move data across useful boundaries
file.readReads UTF-8 text or base64-encoded binary content from disk.
file.writeOverwrites, appends, or passes incoming content through without writing.
http.requestSends an HTTP request and exposes status, body, headers, and parsed JSON.
api.queryBuilds an authenticated JSON request and extracts a field from the response.
git.opRuns local operations including status, diff, log, add, and commit.
git.remoteRuns clone, fetch, pull, push, checkout, and worktree operations.
json.textRenders JSON as text, optionally selecting a value with JSON Pointer.
06 / FLOW & CONTROL
Shape execution and compose results
control.ifRoutes one value to a true or false output.
control.gateRoutes a payload using a separate predicate input.
control.loopRepeats a bounded body a configured number of times.
delayHolds a message for a duration, then passes it on.
flow.splitScatters a JSON array into one message per element.
merge.joinJoins branches as an ordered list, a forwarder, or gathered scatter parts.
logic.coalesceSelects the first arriving non-empty value across alternative branches.
logic.assertFails the run when an expected condition is not met.
flow.runRuns another .knodrflow as a separate local Knodr process.
text.concatJoins two text values with a separator.
text.formatComposes text from dynamic wired inputs and a template.
output.previewDisplays the terminal value and makes it visible as a flow result.
07 / EXACT SCHEMAS
Discover before you author
Parameters and ports are the contract. Inspect the installed version instead of guessing, especially for dynamic nodes such as merge.join and text.format.
$ knodr list-nodes $ knodr list-nodes --output-format json
list_nodesFind type IDs
→
2get_node_schemaRead ports & parameters
→
3apply_flowAuthor atomically