From intent to primitives
Say what you want in plain language; this table tells you which Swirls primitives build it.
Every Swirls system is a handful of primitives wired together. This page maps common intents to the primitives that express them. It works in both directions: humans use it to find the right blocks, and agents use it to turn a natural-language request into a .swirls file.
| You want | Primitives |
|---|
| A step that requires judgment, not exact rules | agent + an agent node in the workflow |
| Chat with an AI that can use our procedures | agent with workflows as tools |
| The agent answers in Slack or Linear | agent + channel + connection |
| A chat assistant on our own website | agent + web channel, see Embed agent chat |
| Give the agent your playbooks and domain knowledge | skill + agent skills: |
| Give the agent tools from a remote MCP server | mcp + agent mcp: |
| Restrict what tools the agent uses for routine work | agent profile (agents) |
| Let an agent delegate subtasks | agent team (agents) |
| You want | Primitives |
|---|
| Save what a workflow produced and reuse it | stream |
| See stream data as a spreadsheet, or add a per-row computed column | view |
| Shared files between workflows and agents | disk |
| Read or write our existing database | postgres + postgres nodes |
| Provision a relational database instead of running one ourselves | database block + a type: database node to read or write it |
| Backfill or transform data after a schema change | migration block on the managed database |
| Give an agent a workspace it can explore | disk |
| You want | Primitives |
|---|
| Call an API with a key we hold | secret + credential profile (auth block) + http node |
| Post to Slack, Linear, Discord, LinkedIn, or Microsoft without managing keys | connection + http node |
| Call a provider API operation with typed inputs and outputs | action + integration node (node types) |
| Send email from a workflow | email node (node types) |
| Scrape a web page | scrape node (node types) |
| Discover URLs from a search query | search node (node types) |
| Research the web with AI (multi-query search, URL extraction, entity discovery) | parallel node — Parallel.ai API (node types) |
| Validate inputs and outputs between steps | schema |
| You want | Primitives |
|---|
| Only finance can use the bookkeeping agent | role + policy |
| Map our org chart onto the system | role per group + policy grants |
| The execs reach everything, everyone else nothing | allow exec -> agent * in a policy |
| Our employees sign in with our own identity provider | OIDC federation + role mapping |
| Protect a public form with a password | type: basic credential profile on the form |
| Verify webhook calls with a shared secret | webhook secret: + header: (resources) |
| You want | Primitives |
|---|
| A portal over the system: chat with the agent, see the data, kick off runs | app with expose naming the agent, workflow, view, or database |
| Show a view as a page without building a frontend | app + view in its expose |
| Let the team read a managed database without the dashboard's operator tooling | app + database <name> { access read } in its expose |
"When a customer submits the contact form, summarize it with AI, post it to the sales Slack, and keep a record. Only the sales team can run the follow-up workflow manually."
Five intents, six primitives, one file you can review in a pull request.