Peco - in-app AI agent + workflow builder

Chat to one confirmed action.
Or build the whole workflow.

Peco pairs an in-app assistant with a visual workflow builder over one action model. The assistant turns a plain-English request into a single confirmed action; the builder wires those same actions into workflows. Nothing fires until you approve it.

PECO / assistant

raise a PO for 10 laptops from Globex

peco

Matched procurement / create_purchase_order. Confirm the details and I will register it.

create_purchase_orderawaiting confirm
vendor
Globex
quantity
10
amount
$8,000.00
nothing fires until you approve
A dark field of connected nodes and light-traced links
A connected network of nodes. Photo is illustrative, not a screenshot of the product.

What Peco does

Two surfaces, one action model.

PECO, the in-app assistant, and peco-flow, the visual builder, both act through the same catalog of real app actions. One short line each, no jargon.

Assistant

Confirm-first actions

Nothing fires until you approve. PECO drafts the action and waits - your approval is what turns it into a real, logged action.

Assistant

Real app actions

It calls a named action from your app's own catalog - not a screen, not a webhook - with a typed input schema the model must fill.

Builder

Visual builder

peco-flow is a canvas over the same actions. Drag nodes, wire typed ports, and the run walks the graph as a DAG.

Builder

AI workflow planner

Describe a workflow in plain words and get a runnable graph - built only from node types that really exist.

Governance

On-the-record activity

Every confirmed action registers a write-once Event: REGISTERED, then COMPLETED or FAILED. Proof, not a promise.

Builder

Projects

Every workflow you draw is saved to one project store, with a run log of the steps that fired and how long each took.

The confirm-first flow

A sentence becomes one confirmed action.

PECO turns a plain-English request into a single action through six ordered steps. The middle step is the point: nothing fires until you approve the drafted action.

01

Chat

Ask in plain words

02

Match

One real app action

03

Fill

Typed input schema

04

Confirm

Nothing fires until you approve

05

Fire

The action is invoked

06

Event

Write-once record

Governed and on the record

A proposal is never mistaken for a receipt.

Every confirmed action registers a write-once Event: REGISTERED first, then COMPLETED or FAILED, and only the holder of a one-time result token can post the outcome. The status is the truth of what happened - not what the model hoped would happen. Apps are gated too: a new app stays inert until an admin approves it.
  • Nothing fires until you approve the drafted action
  • A write-once Event records REGISTERED, then COMPLETED or FAILED
  • The catalog PECO can act through is always one an admin allowed
A human hand and a robotic hand reaching toward one anotherConfirm
A human and a machine, hand to hand. Illustrative photo.

The visual builder

Build the whole workflow, visually.

peco-flow is a React Flow canvas over the same action model. Drag nodes, wire typed output ports to typed inputs, and the run walks the graph as a topological DAG - with conditional branching for the paths that fork. The same actions the assistant confirms, laid out as a graph you can run and re-run. The node palette and planner are further down, under the hood.
  • Drag nodes and wire typed ports on a live canvas
  • The run walks the graph as a DAG, with conditional branches
  • Every workflow is saved to one project store, with a run log
Hands working at a laptop showing an app interfaceBuilder
Working in an app on a laptop. Illustrative photo.

Watch

Peco, end to end.

A short walkthrough of the assistant matching a request, the Confirm card, and the same actions wired into a workflow on the peco-flow canvas.

A walkthrough of Peco.

How it compares

Where Peco sits, honestly.

Peco is not a Zapier replacement or an RPA tool - it is a confirm-first agent over your app's own actions, with a matching visual builder. Each of these neighbours keeps a real strength; here is the honest split.

PecoZapier / n8nRPA (UiPath)Generic AI agent
What it callsNamed app actions from a live catalogSaaS webhooks + a huge connector libraryUI clicks on the screen; works with legacy appsFree-form tools it picks at runtime
ConfirmationConfirm-first: nothing fires until you approveRuns on trigger; no per-run approvalRuns the script; attended mode optionalOften autonomous; approval is optional
Audit trailWrite-once Event per action, token-gatedTask history and run logsRun logs and screen recordingsDepends on the framework
Runs whereIn your app + a native host runtimeVendor cloud (n8n self-hostable)Desktop or VM agentsWherever it is hosted
LLMLocal Ollama, OpenAI, or GeminiAI steps as add-onsAI activities as add-onsIts own model

Peco is v0.1.0 and invite-only. Zapier and n8n keep an enormous connector library and mature triggers; RPA reaches legacy apps with no API at all; generic agents run more autonomously. Peco trades that reach for a confirm-first gate, a typed action catalog, and a write-once record - and it is early, which we say plainly.

Under the hood

How it actually holds together.

The story above is the plain version. For engineers, here is the machinery - a React + React Flow frontend over a shared node model, the Rust peco-workflow crate, and a confirm-first agent that registers a write-once Event for every action.

The confirm-first pipeline

A sentence becomes an action in six ordered steps. The middle step is the point: a proposal is drafted for you to approve, and only your approval turns it into a real, logged action - the one green dot below.

  1. 01Chat

    You ask in plain language, inside the app you already use. No trigger to configure, no connector to pick.

  2. 02Match

    PECO picks exactly one action from the catalog your apps registered. It cannot invent a capability - a hallucinated action is rejected.

  3. 03Fill

    It slot-fills the action's input schema, asking for anything missing. Numbers it cannot infer stay blank, never guessed.

  4. 04Confirm

    It restates the whole request in one line and waits. Correct a value and the draft updates. Nothing runs until you approve.

  5. 05Fire

    On approval it invokes the action and, when the job lives in another app, launches it by deep link (peco://event?id=...).

  6. 06Event

    A write-once Event is registered - REGISTERED then COMPLETED or FAILED, gated by a one-time result token. Proof, not a promise.

The Action node calls your app

Every action Peco runs is a real capability your app registered - a RegisteredApp with its Actions and their input schemas. App and action are select fields backed by the live catalog; the model must fill the typed schema correctly. Not a screen, not a webhook.

Action nodefrom live catalog
Appregistered_apps
procurement
Actionregistered_actions
create_purchase_order
input schema
  • vendorstringrequired
  • itemstringrequired
  • quantitynumberrequired
  • amountnumberoptional

A write-once Event, token-gated

Every confirmed action registers a write-once Event: REGISTERED first, then COMPLETED or FAILED, and only the holder of a one-time result token can post the outcome. Apps are gated too - a new RegisteredApp starts PENDING and stays inert until an admin approves it.

PECO / activitywrite-once events
  • create_purchase_order

    procurement - event 9f3c1a

    COMPLETED
  • submit_for_approval

    procurement - event b21e70

    COMPLETED
  • send_invoice

    billing - event 4d80c9

    FAILED
  • notify_approver

    billing - event 77af12

    REGISTERED
registered appsprocurementAPPROVEDbillingAPPROVEDanalyticsPENDING

Type a sentence, get a runnable graph

Describe a workflow in plain words and the planner (workflowPlannerAi.ts) emits strict workflow JSON - only the node types, ports, and config fields that exist - which peco-flow renders as a graph you can run or edit. Hallucinated nodes cannot survive; the planner is constrained to the real palette.

describe it

Fetch our vendor list, keep only the active vendors, and POST them to the ops webhook.

workflow.jsonstrict shape
{
  "name": "Active vendor sync",
  "description": "Fetch vendors, keep active, POST to the ops webhook.",
  "nodes": [
    { "id": 1, "node_type": "http_request",
      "config": { "url": "https://api/vendors", "method": "GET" } },
    { "id": 2, "node_type": "json_transform",
      "config": { "expression": "data.vendors" } },
    { "id": 3, "node_type": "http_request",
      "config": { "url": "https://ops/hook", "method": "POST" } }
  ],
  "edges": [
    { "from_node": 1, "from_port": "response", "to_node": 2, "to_port": "input" },
    { "from_node": 2, "from_port": "output", "to_node": 3, "to_port": "body" }
  ],
  "rationale": "Executable HTTP + JSON nodes; no files, shell, or LLM needed."
}
rendered graph
node 1

http_request

GET

node 2

json_transform

filter

node 3

http_request

POST

Ten nodes across seven categories

Nine core nodes mirror the Rust peco-workflow crate; the tenth is the Action bridge. Every node has typed ports - wire an output to an input and the run carries the value across. Shown in neutral tone on purpose: the editor color-codes categories, this page does not.

I/O

file_read

pathcontent, size
I/O

file_write

path, contentbytes_written
Network

http_request

url, bodyresponse, status, headers
Transform

json_transform

inputoutput
Model

llm_invoke

inputoutput
System

shell_command

stdinstdout, stderr, exit_code
Transform

text_transform

inputoutput
Logic

aggregate

item_1, ..., item_4output
Logic

conditional

inputtrue_branch, false_branch
Bridgesimulated in editor

action

Point it at a registered app action. On the canvas the outcome is simulated so both success and failure branches are testable; run it for real and PECO invokes the action and returns its token-gated result.

inputresult, status

Private - early access

Your words, one confirm away from done.

Peco is auth-gated and invite-only - apps need approval and there is no public install. Tell us the actions your app already exposes and we will help you put a confirm-first assistant, and a workflow canvas, in front of them.