Manual run
Edit TriggerRuns when you click Play
Product
Describe what you want to happen across your systems. Ballet builds the workflow as real code that runs the same way every time, and uses AI only where the work needs a judgment call. Your engineers can open it, check it and change it — but nothing waits on them.
Get started with some examples
Runs when you click Play
Read recent #sales messages and drop anything already handled
If → Triage questionsIf → Summarise run
Slack/slack Read Ch…
Pick the messages that are real knowledge questions worth answering
If → Research and draftIf → Summarise run
Answer each question from Brainfish knowledge and draft a Slack reply
If → Deliver drafts
brainfish docs/search
Close out a run that found nothing to answer
DM the reviewer each draft and log it for the audit trail
Slack/slack Send M…
Most of the six weeks a workflow gets quoted at is plumbing. Ballet writes it, and your engineers still get the diff.
Say what you want to happen, which systems it touches, and the rules it has to follow.
Ballet writes it as code your team can read. A model reads the ticket; plain code moves the money.
The integration is written as part of the build — your internal billing service as readily as Salesforce.
Every step runs the same way each time, and checks its own assumptions as it goes.
Choose which steps wait for a person. The gate lives in the workflow, so nothing can route around it.
Every step, how long it took, who held the gate, and the check that spotted a schema change before anyone filed a ticket about it.
Total runs
16Successful runs
10Per run
US$0.0001Build cost
US$41.29Total cost
US$41.29| Status | Run ID | Triggered by | Version | Started | Duration |
|---|---|---|---|---|---|
| Completed | 9cd57f0d-2bf9-4188-aaf1-e58637f324be | sandbox:agent:[email protected] | Sandbox | 3h ago | 5.5s |
| Completed | 80f82978-93dc-4335-b904-01b3bb35d06c | sandbox:agent:[email protected] | Sandbox | 3h ago | 6.3s |
| Completed | 591f536c-81c7-46c0-ac51-c779164f63db | resumed:agent | — | 3h ago | 2m 34s |
| Completed | f4fd2f4c-24a9-4b6e-910f-e8cde4368c71 | sandbox:agent:[email protected] | Sandbox | 3h ago | 5.7s |
| Completed | 0d86e138-0da5-4028-8c10-88e65a43bc00 | sandbox:agent:[email protected] | Sandbox | 4h ago | 29s |
| Failed | 48e2f4e8-969f-4efc-9f97-5e1ef773c803 | sandbox:agent:[email protected] | Sandbox | 4h ago | 31s |
Completed
ec56e7e3-463e-4b01-ac0e-92218782689f
Steps (5)
mint-session 1410ms
brainfish-lookup 15149ms
judge-confidence 5212ms
{
"reason": "No matching KB article or instructions
were provided for resetting the password.",
"question": "How do I reset my password?",
"confident": false
} log-escalation 3151ms
respond 3ms
Every step is real code Ballet wrote and can refactor or debug on request. That's why the hard workflows are possible: anything you can reach with an API, a database, or an MCP server, a step can do.
const DEFAULTS = { channelId: 'C09GTBBR248', lookbackHours: 24 };
const channelId = pick(input_data.channelId, DEFAULTS.channelId);
const TABLE = '46521173-4b06-4862-8d38-44f5d05fe221';
function parseMessages(blob) {
const parts = String(blob).split('=== Message from ');
for (let i = 1; i < parts.length; i++) {
const isBot = BOT_HINTS.some(h => header.indexOf(h) !== -1);
if (isBot) continue;
}
return out;
} Logs
Generate a step from a description, refactor the one you're looking at, or hand it a bug.
APIs, databases, MCP servers, off-the-shelf connectors, and the internal service with no docs.
Run one step against sample input and read its output and logs without touching the rest.
Ballet has its own data tables, so a playbook can run for days, pick up where it left off, and leave behind a record the next playbook reads.
| id | T sessionId | T question | T reason | # confidence | T citations | T status |
|---|---|---|---|---|---|---|
| test-session-escalate-1789158039441 | test-session-esc… | My invoice from L… | no_knowledge | 0 | Empty | open |
| test-session-escalate-2-178915819 | test-session-esc… | My invoice from L… | out_of_scope | 0.15 | Managing subscri… | open |
| no-session-1789159820748 | Empty | How do I reset m… | No matching KB a… | Null | Null | open |
| sess_test-1789159851801 | sess_test | How do I reset m… | No matching KB a… | Null | Null | open |
| no-session-1789160117228 | Empty | How do I reset m… | No matching KB a… | Null | Null | open |
A workflow that runs for days keeps its state in a table rather than in one process's memory.
What the escalation playbook recorded is what the weekly summary reads. No export step in between.
Every run leaves rows behind, so the history is something you can filter rather than reconstruct.
A workflow gets approved once. After that it's available in the browser and in Slack, and nobody running it needs to open the workflow.
Platform
Where a workflow gets written, reviewed, and watched once it's live.
You're hereChrome extension
A side panel next to your CRM or helpdesk. Ask for something, or type / and pick a playbook.
Chrome extension →Claude connector
Connect Ballet in Claude and ask it to run a playbook, read what happened, or build a new one.
Claude connector →Slack agent
Mention Ballet on a message, or send it a DM. The result posts back in the thread.
Slack agent →Workflows ship as code, so your engineers can review a diff when they want to and put a gate in front of the steps that warrant one. Every run is logged and replayable either way. Ballet is covered by Brainfish's SOC 2 Type II and ISO 27001 compliance.
Pick one workflow your team still does by hand. We'll build it and show you it running on your systems.