Stop babysitting agents. Script them.

Use Agent Relay Flows to define complex sequences of tasks instead of relying on the vibes of an agent. Predictable, auditable and dependable.

Backed by

Hustle FundActive CapitalCortical Ventures

A Flow is a script that runs your agents.

You write the steps in TypeScript: which agent does the work, what it should produce, and what to check before continuing.

When the flow runs, you've got a dependable, auditable script that babysits your agents for you.

Explore the docs
software-factory.flow.ts
export default flow<TicketInput>(
  "software-factory",
  { budget: "$8/run" },
  async (f, input) => {
    await f
      .agent("planner", { model: "claude-sonnet-5", task: ... })
      .gate((r) => r.artifacts.includes("plan/plan.md"));

    await f
      .agent("implementer", { model: "claude-opus-5", task: ... })
      .gate((r) => r.artifacts.includes("impl/branch.txt"));

    // The tests run outside the agent.
    // The agent cannot lie about the exit code.
    await f
      .run(`git checkout $(cat impl/branch.txt) && npm test`)
      .gate((out) => /failed:\s*0/.test(out));

    // Different model. Its only job is to break the PR.
    await f
      .agent("adversary", { model: "gpt-5", task: ... })
      .gate((r) => r.artifacts.includes("adversary/clean"));

    // Deterministic step, not an agent decision.
    await f.github.createPullRequest({
      repo: input.repo,
      head: `feat/${input.ticketId}`,
      base: input.baseBranch,
      bodyPath: "impl/summary.md",
    });

    f.done("success");
  },
);

Explore use cases

Software factory

Agents can ignore instructions.
Flows can’t.

  • Require files, run scripts, and check results before the next step starts.
  • Enforce requirements in code instead of relying on an agent to follow markdown instructions.
  • Save tokens by running deterministic steps directly, without asking and hoping the LLM does them.
run_01J7running
repo.push receivedevent · us-westprocessing
Input persistedcheckpoint_01
Claude Codewrote release-plan.md
Approval recordedartifact accepted
Deploy stepattempt 2 · idempotent
Output persistedbuild_418
Run completed6 transitions · 1 retry
agentmsgpendingretryfail
Scout58000
Designer51010
QA46100
Planner42200
Builder37010
Reviewer29321
Ops18400

Durable. Observable. Repeatable.

  • Persist every transition so long-running work survives restarts and deploys.
  • Retry individual steps without repeating successful work or duplicating side effects.
  • Trace every input, output, model action, artifact, and intervention in one run history.
  • Trigger workflows from schedules and events, then execute them close to your systems.

Connect the tools you already use.

Built on top of Agent Relay, so your Flows can open pull requests, send Slack messages, and update tickets in the tools your team already uses.

  • GitHub
  • Linear
  • Slack
  • Jira
  • Notion
  • Stripe
  • HubSpot
  • Intercom
  • Postgres
  • Redis
  • S3
  • Cloudflare
  • Sendgrid
  • Mailgun
  • Gmail
  • Google Calendar
  • Segment
  • PostHog

Become a design partner

We're actively looking for design partners who are tired of agents letting them down. You'll have direct access to our team and great discounts on all paid plans.

  • Walk us through a flaky workflow your humans or agents handle
  • We'll help you write your flows and deploy them
  • Review hosted, private cloud, or self-managed options
  • Leave with a clear path from discovery to production
Khaliq Gant
Khaliq GantFounder and CTO
Book Call