Agents & Pipelines — Overview
Where a Topic answers questions from documents, an Agent does things: it works on a task, calls tools, takes different paths depending on results, and goes through several steps to reach an outcome.
Three ideas, and the difference matters:
| Module | Pipeline | Agent | |
|---|---|---|---|
What it is |
One building block, for example "AI model", "read a file", "call a web service" |
A workflow: modules and the lines between them, drawn on a canvas |
A server that runs pipelines |
Where it lives |
Inside a pipeline |
Stored in this application’s database |
A container this application starts |
Analogy |
One instruction |
The program |
The machine running it |
Count |
Many per pipeline |
Many pipelines |
One Agent can run several pipelines |
You design a Pipeline in the visual editor (the Pipeline Designer), assign it to an Agent, and start the Agent. The Agent then offers the pipeline for chat, for timed runs (Scheduler) and to other programs.
1. Why not just use a Topic?
A Topic does one round trip: question → find matching document pieces → answer. That covers many real needs, and you should prefer it when it fits.
Use an Agent when the task needs more than one step, and especially when the steps are not known in advance:
| Need | Topic | Agent + Pipeline |
|---|---|---|
Answer from documents |
✅ |
possible, but more work |
Call an external web service during the answer |
via MCP only |
✅ API Call module |
Read a database, change the data, write a file |
❌ |
✅ |
Go different ways depending on a result |
❌ |
✅ Validator / Guardrails |
Repeat until a result is good enough |
❌ |
✅ Loop |
Run at fixed times with no user present |
❌ |
✅ Scheduler |
Ask a person for approval during a run |
❌ |
✅ Human Approval |
Run your own transformation code |
❌ |
✅ Python Script |
Use several knowledge bases together |
via MCP |
✅ AI Topic modules |
Rule of thumb: if you can describe the job as one question, use a Topic. If you have to describe it as a procedure, use a Pipeline.
2. Use cases
Report at fixed times. Scheduler starts the run every night → SQL Database reads yesterday’s figures → Agent writes a summary → File Write saves a Markdown report to S3.
Ticket triage. Chat Input receives a ticket → Agent sorts it, using an AI Topic module with the support knowledge base → Validator goes different ways by severity → API Call posts to the ticket system.
Document enrichment. File Read loads a document → Text Splitter cuts it into pieces → Iterator goes through the pieces one by one → Embedding turns each into a vector → KV Store Write saves them.
Guarded assistant. Chat Input → Guardrails checks the request → Agent answers with MCP tools → Guardrails checks the answer → Chat Output. Anything that fails a check goes another way.
Quality loop. Loop → Agent writes a draft → Validator checks the draft → Pass ends the loop, Fail runs another round, up to the limit.
Human approval. Agent proposes an action → Human Approval pauses and asks the user → after an approval the real step runs, after a rejection the run goes another way.
Reading chat attachments. The user attaches a PDF in the agent chat → Agent calls an Attachment Tool → the tool server turns the file into text → Agent answers from that text.
3. Architecture
The same model as for Topics: this application does not run pipelines itself. It creates and controls containers.
┌──────────────────────────────────────────────────────────────┐
│ Management application │
│ · Pipeline Designer — stores each pipeline in its database │
│ · Converts a pipeline into the form the agent server reads │
│ · Starts / stops the Agent container │
│ · Sends the assigned pipelines to the Agent │
└──────────────┬───────────────────────────────────────────────┘
│ 1. start the container
▼
┌──────────────────────────────────────────────────────────────┐
│ Agent container (cyrockai/knowledge-fabric-agent, │
│ one per Agent) │
│ · Keeps the pipelines it received, and saved values │
│ · Runs pipelines, calls models and tools │
└──────────────┬───────────────────────────────────────────────┘
│ 2. wait until it answers, then send pipelines
│ 3. chat requests from users and programs
▼
Models · MCP tool servers · Topics · web services · databases · files
What the container gets
The Agent’s settings are few. The pipelines carry almost all of the configuration. When you press Start, this application gives the container:
-
Its identity — the Agent’s id. The container uses it to check that a user was granted this Agent.
-
Secrets and keys — the key to check users' sign-in tokens, the license key, and the key for usage reports (metrics).
-
The public address, if one is set — see Public Endpoints.
-
The largest chat attachment — the setting Largest Chat Attachment (MB) on the Agent.
-
Storage:
| Storage | Docker | Kubernetes |
|---|---|---|
Pipeline store — the pipelines the Agent received |
Kept (own volume) |
Kept (own volume) |
KV store — values saved with KV Store Write |
Kept (own volume) |
Not available — see below |
Stop and Start keep both volumes. Deleting the Agent removes them.
|
On Kubernetes, KV Store Read and KV Store Write cannot be used, and neither can File Read or File Write with a folder on the server. The agent server refuses a pipeline that contains them, because the disk inside a pod is not kept. Use S3 or Azure Blob Storage for files there. |
Changes to the Agent’s own settings (port, attachment size, public address) reach the container on its next start.
What happens when you press Start
-
The container is started. The status is Starting….
-
This application waits up to 120 seconds for the Agent to answer. On Kubernetes this time also covers downloading the container image.
-
As soon as the Agent answers, every assigned pipeline is sent to it.
-
Pipelines the Agent still holds but that are no longer assigned are deleted from it. The Agent keeps every pipeline it ever received, even across restarts. Without this step a pipeline you removed or renamed while the Agent was stopped could still be run.
-
The Agent is Running.
What can go wrong:
| What you see | What it means |
|---|---|
Status Error |
The Agent did not answer within 120 seconds. No pipeline was sent. Check the Logs tab and start it again |
Status Running plus a warning naming pipelines |
The Agent is running, but refused the named pipelines. The warning says why. Fix the pipeline and push it again, or restart the Agent |
Changing a pipeline
Configuration lives in the pipeline, not in the container. A changed pipeline does not need an Agent restart. When you save a pipeline that runs on a running Agent, the designer asks Deploy Changes? — choose Push Now to send the new version at once. With Not Now, the Agent keeps the old version until its next restart.
Removing a pipeline from a running Agent (on the Agent’s Pipelines tab) also deletes it from the Agent right away. If the Agent cannot be reached at that moment, it is deleted there on the next start.
From canvas to agent — what gets deployed
The canvas is not sent as it is. It is converted first:
| On the canvas | On the Agent |
|---|---|
A module |
One module of the deployed pipeline |
A Description note |
Nothing — it is only a note for people |
A normal line between modules |
One connection |
A line into an Agent’s Tools port |
That module becomes one of the Agent’s tools |
A pipeline with an empty required field cannot be deployed. This application checks every pipeline before it reaches an Agent, and tells you which fields to fill in:
-
Assigning a pipeline to an Agent (also when creating an Agent) is refused, with the list of empty fields. The same check runs for every pipeline it calls.
-
Saving a pipeline that runs on a running Agent works, but the new version is not sent. A message names the empty fields. Fill them in and save again.
4. The module palette at a glance
29 module types, grouped by role:
| Group | Modules |
|---|---|
Input & Output |
Chat Input · Chat Output |
Models & Agents |
Agent · Embedding |
Flow Control |
Scheduler · Iterator · Loop · Validator · Guardrails |
Data Sources |
API Call · SQL Database · Data Faker · KV Store Read · KV Store Write · Structured Output |
Files |
File Read · File Write |
Utilities |
Template · Text Splitter · Text Format · Python Script · Web Search · Description |
Human Interaction |
Human Approval |
Integration |
AI Topic · MCP Tool · SSE Tool · Attachment Tool · Pipeline |
Each has its own page in the module reference.
AI models in Agent, Embedding, Structured Output, Guardrails and Validator modules can come from OLLAMA, OPEN_AI, ANTHROPIC or GEMINI. ANTHROPIC offers no embedding models.
Three port kinds
| Port | Meaning |
|---|---|
Input |
Receives the previous module’s result |
Output |
Passes a result to the next module |
Tool |
Connects into an Agent’s Tools port, so the AI model can use the module |
The Tool port is what makes this more than a flowchart: a module connected as a tool does not run in order. The AI model decides whether and when to use it, and with what input.
14 module types have a Tool port: MCP Tool, SSE Tool, Attachment Tool, API Call, AI Topic, SQL Database, Data Faker, KV Store Read, KV Store Write, File Read, File Write, Pipeline, Web Search, Python Script. Human Approval cannot be a tool: a paused run cannot hand control back to the model.
5. Two ways a module runs
Many modules can be used either way, and the difference is fundamental:
| As a step | As a tool | |
|---|---|---|
Connected to |
Input/Output ports |
An Agent’s Tools port |
Runs |
Always, in order |
Only if the model decides to use it |
Input from |
The previous module |
What the model sends |
Needs a good description |
No |
Yes — it is how the model knows when to use it |
An API Call used as a step runs in every run with its configured address. The same API Call used as a tool runs only when the model finds it useful.
|
When a module is a tool, its description is not a note — it is the instruction the model reads to decide whether to use it. A vague description means the tool is never used, or used at the wrong time. Where the description comes from depends on the module — see Integration. |
6. Requirements before you start
| Needed | Where |
|---|---|
An AI model address the Agent container can reach |
Each module with a model has its own provider, model name and address |
Docker or Kubernetes |
Same as Topics |
A port per Agent |
Set when you create the Agent. Docker uses it to make the Agent reachable on the host |
|
Admin → Roles & Permissions |
A valid license with room for the Agent and its Pipelines |
Admin → License — without a license nothing can be created or started |
|
The model settings in a pipeline are per module. They are not taken from the registered AI Servers
automatically. The designer’s Select AI Server & Model button copies the values of a registered
server into the module’s fields — the easy way to avoid typing errors. The address must work from
inside the Agent container: with Docker use |
7. Typical workflow
-
Design the pipeline — 5.3
-
Create the Agent and assign the pipeline — 5.2. Pipelines it calls through a Pipeline module are assigned with it.
-
Start the Agent — the pipelines are sent to it automatically
-
Chat with it, choosing the pipeline — 5.6
-
Improve: edit the pipeline, save, and choose Push Now to send the new version