Visual workflows on Cloudflare Workflows with Trellis
Wire typed App methods into a workflow, publish an immutable version, and run it by hand, on a schedule or on an App event such as a Git push.
Use Trellis when several App calls should form one repeatable workflow. Drag methods onto a canvas, connect their typed ports, and publish the graph before running it. On your own Oyster, runs execute on Cloudflare Workflows and call the same App methods your agents use.
You can follow each step’s state, output, duration and cost rather than guessing whether an accepted request finished.
Before you start
Section titled “Before you start”Follow Run your own Oyster to deploy Oyster with Workflows enabled and install its starter Apps:
npx oyster install-appsSign in at $OYSTER_URL/login with your owner key, then open Trellis from
Tourtois. Install and approve access to the Apps your workflow will call.
Publishing a graph does not grant those permissions.
1. Start with a template or a graph
Section titled “1. Start with a template or a graph”Open Templates for an existing shape:
- Bonsai checks runs a test command on a Change and reports its result.
- Build on merge builds, verifies and installs an accepted App revision.
- Review a result adds a human decision.
- Storyboard generates panels through Prints, with a review per beat.
- Storyboard + Save to git also saves the reviewed output in a repository.
For a graph of your own, drag an App method from the Palette onto the Canvas. Use the Inspector to set its inputs. Connect an output port to the next method’s compatible input, or supply a literal value.
Trellis validates as you edit. Resolve the reported issues until the graph is Valid. A valid graph has a usable shape; it is not proof that an external service is available or that a future call will be authorized.
2. Add decisions and bounded transforms
Section titled “2. Add decisions and bounded transforms”Use reviews, waits, conditions, repeats and maps for control flow. A review pauses that part of the run until a person approves or rejects it. An agent cannot answer its own workflow review.
A Code node runs JavaScript in a sandbox with a time limit. Use it to
transform the data wired into the node, not to bypass App permissions. Its data
capability is env.INPUT.read({}); App calls and network access are not
available inside that transform.
For shell work, call a Shed method as an App step. For Git steps, select the repository access the step actually needs. A graph’s declaration of Git access does not itself authorize a push.
3. Publish an immutable version
Section titled “3. Publish an immutable version”Choose Publish once the graph is valid. Trellis writes workflows/<id>.json
to the installation’s trellis Git repository and tags the version <id>@v<n>.
Drafts never run. A run records the exact published version it started from. Later edits create a draft rather than changing an already published version. To edit an old version, select it in the version menu and choose Restore as draft, then publish the new version when ready.
4. Choose how a run starts
Section titled “4. Choose how a run starts”Start with Run and supply the published graph’s inputs. Inspect that manual run before arming automation.
Use Triggers to configure the published version:
| Start | Use |
|---|---|
| Manual | Run the selected published version with explicit inputs. |
| Schedule | Arm a published schedule for repeated work. |
| App event | Arm an event such as a Bonsai push or merge. |
Webhook triggers are marked Webhook · unavailable and cannot be armed in Trellis.
A Git push enters through Bonsai’s App events, not by giving the workflow an unrestricted provider credential. For the repository side, see Git hosting for many AI agents.
Arming a trigger and publishing a graph are separate actions. Oyster checks the caller’s permissions again before each step; a permission that was once approved may no longer be usable.
5. Follow the run and its reviews
Section titled “5. Follow the run and its reviews”Open Runs to inspect the selected run. Check each step’s state and output, duration and cost. Image and video results have previews. A failed or refused step is not a successful result.
Answer review steps there as a person. An agent can inspect a run through
runStatus, but answerReview remains person-only. You can also cancel a run
through Trellis’s ordinary run controls.
The separate Schedules view shows this installation’s Workflow registrations and the visible Agents’ reminders and Session Loops. It does not require choosing a workflow or granting Git access. Arm a workflow’s published trigger in Triggers, not by treating that overview as a new scheduler.
Validate a workflow graph as JSON
Section titled “Validate a workflow graph as JSON”Trellis stores the fungi.workflow/v1 graph contract.
Braid owns its validation and
compilation: validate(unknown, catalog) decodes the definition and returns
typed issues, while compile produces an installation-bound, topologically
ordered plan with a SHA-256 digest or returns issues.
Use that contract when importing or generating a graph instead of writing a second JSON or DAG validator. Compilation grants no authority; the host still admits each App call. Workflows Wire supplies the shared run IDs and reply schemas, not execution or permission policy.
Agents can discover Trellis’s catalog, saveDraft, publishWorkflow,
runWorkflow and run-inspection methods through
Oyster’s MCP endpoint.
For setup and limits, see the
Trellis README.