Open source · agentic workflow automation
Describe the automation. Get a workflow that runs.
AgentForge turns a sentence into a real, executable, visually editable workflow — and its agent nodes reason and decide at runtime instead of following a fixed script.
Sign-in asks for your identity only. Access to Sheets or Gmail is a separate request you make later, from Settings.
- 36 nodes in the registry
- 19 of them callable by an agent
- Live per-node streaming
- Free to run
The whole product, in one picture
From one sentence to a running workflow
Nothing here is a preview surface. The workflow is saved to your account the moment it is built, opens on the canvas, and runs on the same engine as everything else.
You type
“When a support message arrives, summarise it, decide whether it is urgent, and post the urgent ones to Discord.”
AgentForge builds
Webhook trigger
core.webhook_trigger
An unguessable URL. Posting to it starts a run.
Summarise the message
ai.llm
One model call. Output feeds the node after it.
Decide if it is urgent
ai.agent
Reads the summary, calls tools, picks a branch.
Post to Discord
integration.discord
Your webhook, encrypted at rest.
Log and stop
core.log
Nothing urgent. The run ends here.
Then it runs, and you watch
live- 09:41:02core.webhook_triggerstarted · payload accepted
- 09:41:02ai.llmdone · 1.2 s · summary produced
- 09:41:03ai.agenttool call → core.log
- 09:41:04ai.agentchose branch true · “billing outage, customer blocked”
- 09:41:04integration.discordqueued
What you actually get
A workflow, not a suggestion
Built, then validated, then saved
Every generated graph is checked node by node and edge by edge against the registry before it is stored. A workflow that could not run is reported as problems you can see, not saved as a hopeful draft.
Agents decide at runtime
The agent node calls tools and picks its branch from what it reads. Its tool set is derived from the registry — 19 nodes, and nothing else. There is no shell node, no filesystem node, and no arbitrary code execution anywhere in the product.
You watch it run
Per-node status and logs stream to the canvas as the run happens, including the agent's tool calls and the branch it took. Reload mid-run and the page reattaches to the same stream.
It starts without you
A manual run, an unguessable webhook URL, or a cron schedule in UTC. Triggers are ordinary nodes, so a workflow can carry more than one.
How it works
Three steps, and you can stop after any of them
Describe it
Plain language, in the box at the top of your workflow list. The model answers with a graph; the server checks that graph against the registry before anything is saved.
Edit anything
It is a real canvas. Move nodes, rewire edges, change any node's configuration, add a trigger, delete the half you did not want.
Run it and watch
Statuses and logs arrive as they happen. When it is right, give it a webhook or a schedule and leave it alone.
The node catalogue
36 nodes, read from the registry as this page rendered
One table in the codebase feeds three things: the engine's dispatch, the canvas palette, and the agent's tool set. This list is that table, so it cannot advertise a node the product does not have.
Triggers
5What starts a run.
- Manual triggercore.manual_trigger
- Webhook triggercore.webhook_trigger
- Schedule triggercore.schedule_trigger
- Error triggercore.error_trigger
- Form triggercore.form_trigger
Models and agents
2Where the reasoning happens.
- LLMai.llm
- AI Agentai.agent
Logic
10Flow, and control of it.
- Log messagecore.log
- Branchcore.branch
- Switchcore.switch
- Loopcore.loop
- Delaycore.delay
- Approvalcore.approval
- Call workflowcore.call_workflow
- Mergecore.merge
- Respondcore.respond
- Assertcore.assert
Data
10Shaping what moves between nodes.
- Set datacore.set
- Filter listtransform.filter
- Reshape listtransform.map
- Sort listtransform.sort
- Remove duplicatestransform.unique
- Summarise listtransform.aggregate
- JSONtransform.json
- Edit texttransform.text
- Do mathstransform.number
- Date and timetransform.date
Integrations
9The outside world.
- HTTP requestintegration.http
- Post to Discordintegration.discord
- Post to Slackintegration.slack
- Append to Google Sheetintegration.sheets
- Send emailintegration.gmail
- Write to Notionintegration.notion
- GitHub issueintegration.github
- Airtable recordintegration.airtable
- Postgres queryintegration.postgres
Built to be read
The repository is part of the product
Free to operate
Cloud Run's always-free tier, Neon's free Postgres, and your own Gemini key. There is no paid infrastructure anywhere in it, and that is a rule rather than a coincidence.
Checked on every push
Lint, typecheck, the test suite and a production build all run in CI before anything lands. A red pipeline stops the work.
A design system you can look at
Every token, primitive and motion state lives on one page, with its contrast ratio computed rather than claimed — /design.
Describe the first one.
Sign in with Google, type a sentence, and you will be looking at a workflow you can run in about five seconds.