Langflow
Add governed tool calling to a Langflow flow with the ArmorIQ node, no code required.
Langflow Integration
Python-only. The Langflow extension ships inside armoriq-sdk (Python). There
is no equivalent in @armoriq/sdk (TypeScript). Langflow itself is a Python
application, so this integration has no TypeScript counterpart to build.
Langflow builds agents visually, by wiring nodes on a canvas instead of writing code. The ArmorIQ Langflow extension adds a drag-in node, ArmorIQ Tool Calling Agent, that behaves like Langflow's built-in tool-calling agent, but routes every tool call the agent makes through ArmorIQ's plan, token, policy, and audit pipeline first.
Install
Available from armoriq-sdk 0.6.2+.
pip install "armoriq-sdk[langchain]"
langflow runThere is no separate Langflow package or plugin to install. Langflow
discovers the ArmorIQ node automatically through the langflow.extensions
Python entry point that armoriq-sdk registers in its packaging metadata:
installing the SDK into the same environment as Langflow is the whole setup.
You do not set LANGFLOW_COMPONENTS_PATH, and you do not copy any component
files by hand.
Find the node
Open Langflow and look in the component sidebar under the Armoriq category. The ArmorIQ Tool Calling Agent node (shield icon) is loaded the same way Langflow loads its own bundled component categories.
Configure the node
The node exposes these inputs on the canvas:
| Input | Description |
|---|---|
llm | The language model handle to drive tool selection (wire in any Langflow-compatible model component) |
system_prompt | System prompt for the agent |
armoriq_api_key | Your ArmorIQ API key (secret input) |
armoriq_user_email | The end-user email every enforcement decision is attributed to |
armoriq_mode | Session mode, defaults to "sdk" |
armoriq_env | ArmorIQ environment, defaults to "production" |
armoriq_agent_id | Optional agent identifier |
chat_history | Standard Langflow chat history input |
Wire your model and MCP-backed tools into the node like you would for Langflow's own tool-calling agent, set the ArmorIQ API key, and every tool call the agent makes is governed by policy: allowed, held for approval, or blocked.
The node is fail-closed on configuration: if armoriq_api_key isn't set, the
node raises rather than running the agent ungoverned.
Under the hood
The Langflow node is a thin wrapper. It builds a LangChain tool-calling agent
and attaches an ArmorIQLangChain callback to it internally, the exact same
integration used when you wire ArmorIQ into a hand-written LangChain agent.
That callback:
- Builds a plan from the tool calls the model chooses and mints an intent token for exactly those tools.
- Enforces the user's policy before each tool runs: allow, hold (wait for approval), or block.
See the LangChain integration for the full callback lifecycle, live enforcement events, and parameter reference. It all applies here since the Langflow node is built on the same code path.
Reference
The extension lives in the Python SDK repo
(armoriq-sdk-customer),
under armoriq_sdk/langflow/: an extension.json manifest plus the
ArmorIQToolCallingAgent component bundle. It is registered via a
[project.entry-points."langflow.extensions"] entry in the package's
pyproject.toml, not a pip install armoriq-sdk[langflow] extra.