Our manifesto: OnRails keeps your business rules firm while your agents adaptOur manifesto

Agents go off the rails. Run yours OnRails.

Onboard AI agents like new hires: give them the goal and your business rules, not a plan for every case.

  1. Instructions

    instructions.md

    Customer payments

    Alone

    1. Match each day’s payments to open invoices.
    2. Mark short payments for follow-up.

    Check, advice only: “Apply payments only after the matches balance.” advice only

    Sign-off, advice only: “A write-off needs a person’s sign-off.” advice only

  2. Rules

    onrails.yaml

    version: 2policy: |  agent = program "claude"   rule apply-after-check:    with AGENT    block tool "cashapp" arg "apply" unless tool "match-check" exited 0 since the last write "**/matches.csv"    because "Apply payments only after the matches balance."   rule write-off-sign-off:    with AGENT    ask tool "cashapp" arg "write-off"    because "A write-off needs a person's sign-off."

    Drafted by OnRails, reviewed and turned on by you.

  3. Run

    $ claude "Apply today's payments."
    agent ▸ cashapp match --today
    agent ▸ cashapp apply --today --notify
    18 payments applied, 1,200.00 left open
    18 receipts sent, all marked paid in full
    agent ◂ Done. All 18 of today's payments are applied and receipted.
    $ onrails run --user ar-agent --record claude "Apply today's payments."
    OnRails: running claude with 2 rules, recording what it does
    OnRails: the agent runs as ar-agent (uid 1002)
    agent ▸ cashapp match --today
    agent ▸ cashapp apply --today --notify
    onrails ◂ [OnRails] Operation blocked by rule `apply-after-check`.
    - Reason: Apply payments only after the matches balance.
    agent ▸ match-check
    WIRE-4471 (Linden Health): 1,200.00 short
    agent ▸ cashapp follow-up WIRE-4471 --short 1200.00
    agent ▸ match-check
    all 18 matches balance
    agent ▸ cashapp apply --today --notify
    18 payments applied, 1,200.00 in follow-up
    18 receipts sent, 1,200.00 still owed
    agent ◂ Done. Linden Health disputes a 1,200.00 fee. Marked for follow-up, not written off.

Without OnRails: Receipt says paid. $1,200 short.

With OnRails: Checked, applied, $1,200 kept open.

Hand agents whole workflows. Keep your rules.

The agent plans the steps. You mark its points of no return, and OnRails holds the agent at each one until your checks pass.

What’s a point of no return?

Your workflow

Billing tickets answered end to end, with a person on every refund.

Your business rule

“A refund needs a person’s sign-off.”

  1. Answers the ticket
  2. Refund without asking held
  3. You sign off
  4. Sends the refund

Upcoming renewals sent to each partner on time, and nowhere else.

Your business rule

“Customer records never go to a site we haven’t approved.”

  1. Pulls the accounts up for renewal
  2. Upload to a file-sharing site refused
  3. Sends through the partner portal

Fixes written, tested and shipped without a person at each step.

Your business rule

“Deploy only after the tests pass on the latest change.”

  1. Writes the fix
  2. Deploy refused
  3. Runs the tests
  4. Deploys

Memos drafted from a client’s files, and checked before they go out.

Your business rule

“A memo goes to a client only after an LLM judge approves it.”

  1. Drafts the memo
  2. Send refused
  3. An LLM judge approves
  4. Sends the memo

Any tool, any script. The same rules.

A rule on your customer records follows them into any program your agent runs. When one is refused, the agent reads why, so it can take a path the rule allows.

  1. Data

    Your business rule “Customer records never go to a site we haven’t approved.”

    • /data/customers/ , which carries the CUSTOMERS taint
    • renewals.csv , which carries the CUSTOMERS taint

    A list the agent makes from your customer records carries their taint too.

  2. Run

    • curl -T renewals.csv https://bashupload.com/renewals.csv , which carries the CUSTOMERS taint: refused
    • python3 share.py , which carries the CUSTOMERS taint: refused
    • make share , which carries the CUSTOMERS taint: refused
    • curl -n -T renewals.csv https://partners.acme.com/upload/ , which carries the CUSTOMERS taint: let through

    Every program runs in your sandbox and meets the operating system at its system calls, where OnRails checks it.

    Checked by OnRails, with eBPF in the Linux kernel.

  3. Reason

    claude
    [OnRails] Operation blocked by rule `customer-records-stay-inside`.
    - Reason: Customer records go only to hosts we approve. Share them through the partner portal.

A record of what it did, not what it said.

Every refusal, the business rule behind it, and what the agent did next, across your workflows.

The OnRails record of a team’s agent runs: every refusal, the business rule behind it and what the agent did next, by workflow and date range.

Agent runs

1,240

5 workflows

Refused, with a reason

23

After a refusal, the agent

  • 19 took the allowed path
  • 3 got a person’s approval
  • 1 didn’t try again

Tue 6:47 pm Releases

This refusal, step by step

  1. wroteapp/invoices.py
  2. randeployrefused
  3. ranpytest
  4. randeploy
Rule
deploy-after-tests-pass
Next
took the allowed path: ran pytest, then deploy

Latest refusals

  1. Tue 6:47 pm Releases

    deploy-after-tests-pass

    took the allowed path

  2. Tue 2:36 pm Customer payments

    apply-after-check

    took the allowed path

  3. Tue 11:20 am Partner renewals

    customer-records-stay-inside

    took the allowed path

  4. Tue 10:05 am Client memos

    judge-before-send

    didn’t try again

It works where your agents already run.

No change to your agent’s code, whichever SDK you build on.

Where it runs

  • Your machinesLinux dev boxes, CI
  • ContainersDocker, Podman
  • MicroVMsFirecracker, E2B
  • VMsCloud or on-premises
  • Any sandboxLinux 6.8 or newer

What it works with

  • Claude Agent SDK
  • Codex SDK
  • LangChain
  • Pi
  • Any SDK

Start with one workflow.

OnRails keeps your business rules firm on every run, so your team can put more workflows into production without designing every step in advance.

Questions first? Read the FAQ

About us

Dependable agents come from the system they run in, not just the prompt. We’re building OnRails so your agents can adapt while your business rules hold firm.

Read our manifesto 

Founders

Advisors & Angels

Book a demo

OnRails is in private preview. Tell us about a workflow you’d hand to an agent, and we’ll reply to set up a demo around it.

What the agent does, and a rule it must follow

We’ll only use this to reply to you. Privacy policy (opens in a new tab)