Your coding agent can build it. Swirls makes it hold up in production.

Here is one system end to end: a support desk that triages inbound tickets and holds big refunds for finance approval. You will see the same readable .swirls project at every step — drafted with an agent, checked before release, running live, and open to inspect.

Define

Describe the process. The agent writes the project.

Add the Swirls skill to the coding agent you already use, then explain the process the way you would explain it to a new hire. The agent drafts one readable project — the data, the workflow, the permissions, and the app your team works in — and you correct it as it goes.

Works with

  • Claude
  • Codex
  • Cursor
agent-ide
ChatSourceOutput
Support system
Route inbound support tickets through triage. Finance must approve refunds over $500 before anything lands in the inbox.
Starting with tickets data and a triage_ticket workflow. Where should the team work the queue?
Build a Support Desk app with an open tickets table. Add a concierge agent that can kick off triage.
Updated support-system.swirls with the desk app, concierge agent, webhook trigger, support role, and a finance review gate on route.
Refine the support desk…
support-system.swirls
database tickets {
  schema: @prisma {
    model Ticket {
      id      Int    @id @default(autoincrement())
      summary String
      amount  Float
    }
  }
}

workflow triage_ticket {
  root {
    type: code
    label: "Normalize"
  }

  node classify {
    type: ai
    label: "Classify"
  }

  node route {
    type: code
    label: "Route"
    review: true
  }
}

agent concierge {
  label: "Concierge"
  tools: [triage_ticket]
}

webhook inbound_support {
  label: "Inbound support"
}

trigger on_ticket {
  webhook:inbound_support -> triage_ticket
}

role support {
  match { department: "support" }
}

app support_desk {
  page queue {
    render: @openui {
      root = ViewTable("open_tickets", "Open tickets")
    }
  }
}

Check and release

Catch the mistakes before your team does.

The language checks itself. A workflow pointing at an agent that does not exist is flagged in the editor while the coding agent is still typing, and swirls doctor re-checks the whole project before deploy. Agents move fast; this is what keeps fast from turning into broken.

acme/support
support-system.swirls
1 issue
workflow triage_ticket {
  node classify {
    type: ai
    label: "Classify"
  }

  node handoff {
    type: agent
    agent: concierge_agent
  }
}

agent concierge {
  label: "Concierge"
  tools: [triage_ticket]
}
terminal
acme/support $swirls doctor
Checking merged workspace…
✓ app support_desk · 1 page
✓ agent concierge · 1 tool
✓ database tickets · prisma schema
✓ webhook inbound_support · trigger on_ticket
✓ policies · support role enforced
✗ workflow triage_ticket · node handoff
swirls/unknown-reference: Agent 'concierge_agent' is not declared in this project.
1 issue found. Fix before deploy.

Connect

Pull in the outside tools without burying secrets in code.

Real support processes touch Slack, Linear, and the rest of your stack. Browse typed actions in the provider catalog, install them with swirls add, declare the connection in source, and bind credentials at runtime — every handoff stays visible in the project and in the run record.

643Providers
20,200Typed actions
acme/support
support-system.swirls
connection slack_ops {
  label: "Support Slack"
  provider: slack
}

connection linear_ops {
  label: "Escalations"
  provider: linear
}

node notify_finance {
  type: integration
  connection: slack_ops
  action: slack_post_message
}

node open_escalation {
  type: integration
  connection: linear_ops
  action: linear_create_issue
}
Connections
  • Support Slack

    slack_ops

    Acme Support workspace

    Connected

  • Escalations

    linear_ops

    Sign in once to authorize issue creation

terminal
acme/support $swirls add slack chat_postMessage
✓ Registry action written to the project
 
acme/support $swirls add linear create_issue
✓ Registry action written to the project

Run

Work keeps moving, even when a person needs to decide.

A ticket arrives and the workflow runs, checkpointing every step so a retry or a restart picks up where it left off. When a refund crosses the approval line, the run pauses and the right person gets the decision with the context attached. Approve it and the work continues from exactly where it stopped.

support.example.com
Run graph · exec_7FJ9a

Inspect and improve

When someone asks what happened, you have the answer.

Every run stays tied to the release and the source that produced it, so you can see which step ran, how long it took, and where the work is waiting. Change the source, ship again, and the next run tells you whether it worked.

acme/support

Run exec_7FJ9a

Refund triage paused at finance review

Release
deploy_7f2a
Source
support-system.swirls
Outcome
Waiting for authorized review
Trace waterfall
  • webhook.inbound_support12ms
  • workflow.triage_ticket4.2s
  • node.normalize18ms
  • node.classify1.1s
  • review.financewaiting

You own

The process, the business rules, and every decision about what the system should do.

Swirls runs

Validation, hosting, durable execution, stored state, credentials, access rules, and the record of every run.

Bring one real process. Ship one system.

Pick the process that keeps costing your team time. Describe it once in a Swirls project, and let Swirls carry the production work around it.