Skip to content
AgentForge

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.

See the design system

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.”

Generate workflow⌘↵

AgentForge builds

trigger done

Webhook trigger

core.webhook_trigger

An unguessable URL. Posting to it starts a run.

agent done

Summarise the message

ai.llm

One model call. Output feeds the node after it.

agent running

Decide if it is urgent

ai.agent

Reads the summary, calls tools, picks a branch.

true
integrationqueued

Post to Discord

integration.discord

Your webhook, encrypted at rest.

false
logicskipped

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
An illustrated example. The node cards, categories, statuses and log lines are the product’s own components and tokens — the message is made up.

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

  1. 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.

  2. 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.

  3. 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

5

What 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

2

Where the reasoning happens.

  • LLMai.llm
  • AI Agentai.agent

Logic

10

Flow, 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

10

Shaping 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

9

The 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.