---
title: "Block reference"
description: "Every workflow block and the variable syntax that connects them."
canonical: https://ocho.bot/docs/flows/blocks-reference
last_updated: 2026-07-12
---

# Block reference

> Every workflow block and the variable syntax that connects them.

The Blocks sidebar is a single flat list — drag any block onto the canvas and click it to open its inspector. Required config fields are marked with `*` in the inspector. The blocks below are listed in palette order.

## Blocks

**Block** · **What it does**

**LLM Call**  —  Sends a prompt to an LLM and returns its response as plain text (`content`). Configure the model, max tokens, and temperature (0–1, lower = more deterministic), plus a system prompt that sets the LLM behavior and persona and a fallback user prompt used when no upstream input is wired.

**Super RAG Search**  —  Hybrid search over a single dataset; returns the matching chunks (each with a relevance score) and a count. `top_k` is configurable — valid values are 1–50 (default 10), enforced at run time.

**Document Full Text**  —  Fetches a document's full extracted text as one blob. Optional `max_chars` truncates if exceeded; outputs include a `truncated` flag.

**Dataset Documents**  —  Lists the documents in a dataset (optional state filter and limit); outputs a `documents` array and a `count`. The usual first step of a mass-document-analysis flow, wired into a Loop.

**Document Chunks**  —  Enumerates a document as an ordered list of addressable chunks in one call — drains all by default, with an optional `limit`. Each chunk carries heading, page, element type, and reading-order metadata.

**Chat Skill**  —  Invokes one of your chat skills by its Payload ID (pasted into the `skill_id` field) and returns its answer (`content`) with `sources`. The chat skill brings its own system prompt, RAG configuration, and tool set.

**Human Gate**  —  Pauses the run (status `awaiting_approval`) until someone clicks Approve in the run panel; passes its input through unchanged. Anyone who can see the run can approve — there is no Reject button.

**Response / Passthrough**  —  Passes all inputs through as outputs without transformation. It has no configuration; use it as the terminal node of a flow.

**Integration Call**  —  Calls an operation on the company's active integration for a source key you type (for example "sharepoint" or "notion"), with parameters entered as raw JSON. If no integration is connected for that source, it returns `ok: false` with reason `not_connected`.

**Scratchpad**  —  Sets run-scoped variables (operations: set, append, extend, increment, append_string) and, via the add_section operation, appends a markdown section (with an optional heading) to the run report.

**Aggregate**  —  Reduces an array (typically a loop's results) — modes are count, join, concat_text, and collect. Optional `separator` (default newline) and `field` to pluck a property from each element first.

**Loop (for each)**  —  Repeats the blocks inside it for each item of a collection (`forEach`) or a fixed count (`for`). `continueOnError` (default true) keeps going when an item fails; set it to false to stop at the first failure.

## Variable syntax

**Pattern** · **Meaning**

`{{ node_key.field }}`  —  Output of an earlier block. The key is the block's canvas key — auto-generated kebab-case from its display name (dotted sub-paths supported).

`{{ loop.currentItem }}`  —  The current item inside a loop (dotted sub-paths work, e.g. `{{ loop.currentItem.id }}`)

`{{ loop.index }}`  —  The current iteration number (from 0)

`{{ loop.items }}`  —  The whole collection, inside the loop

`{{ my_loop.results }}`  —  All iteration results, after the loop finishes. Failed iterations appear as `null` entries.

`{{ vars.NAME }}`  —  A variable set by a Scratchpad block

## Good to know

- Every functional block on the canvas also shows a red Error output handle,

but it is cosmetic today: the runner ignores which handle an edge leaves   from, and a block whose upstream block failed is skipped. A branch wired   from the Error handle never runs.

- There is no branching block (condition/router), no custom-code block, and no

generic HTTP request block — Integration Call is the only external-call   block.

- LLM Call returns plain text only; it cannot call tools or return structured

JSON.

- Note annotations sometimes appear on saved canvases, but they never execute

and there is currently no way to place a new one.

- The block catalog is fixed platform-wide — admins cannot add, remove, or

rename blocks, so the set only changes with an Ocho product release.

All docs: https://ocho.bot/docs

---

Ocho — AI knowledge orchestration · [Home](https://ocho.bot/) · [Docs](https://ocho.bot/docs) · [Blog](https://ocho.bot/blog) · [About](https://ocho.bot/about) · [Developers](https://ocho.bot/developers) · [Contact](https://ocho.bot/contact) · [llms.txt](https://ocho.bot/llms.txt)
