<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>OnRails blog</title>
    <link>https://onrails.run/blog/</link>
    <atom:link href="https://onrails.run/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Latest thoughts from the team.</description>
    <language>en-us</language>
    <lastBuildDate>Thu, 08 Oct 2026 15:00:00 GMT</lastBuildDate>
    <item>
      <title>What are we working toward?</title>
      <link>https://onrails.run/blog/what-we-are-working-toward/</link>
      <guid isPermaLink="true">https://onrails.run/blog/what-we-are-working-toward/</guid>
      <pubDate>Thu, 08 Oct 2026 15:00:00 GMT</pubDate>
      <dc:creator>Swapnil Gandhi</dc:creator>
      <category>Manifesto</category>
      <description>We believe an agent is only as dependable as the system it runs in. We are working toward a loop that finds the actions an agent can’t undo and proposes their checks, for your team to approve.</description>
      <content:encoded><![CDATA[<div class="tldr"><span class="tldr-k">TL;DR</span><p>We believe an agent is only as dependable as the system it runs in. We are working toward a loop that finds the actions an agent can’t undo and proposes their checks, for your team to approve.</p></div>
<p><a href="https://onrails.run/manifesto/">Previously in this series</a>, we saw that putting AI agents into production takes both predictability and flexibility. Predictability comes from checks that can’t be skipped, at the points of no return, or PNRs: actions that can’t easily be undone. An agent can reach a PNR by many paths, but every one of them passes through the operating system. That is where OnRails holds the agent.</p>
<p>Today your team finds its PNRs and writes their checks, mostly by hand. That works for one workflow. But as models improve, agents will take on more of a company’s work, and the business rules will have to keep up with them.</p>
<p>We believe an agent is only as dependable as the system it runs in. So we are building a system that does this work with your team. It finds the PNRs in what your agents do, proposes a check for each and holds the agents there. Every run then feeds the next round, which closes the loop. And the loop compounds: each round starts from the PNRs and checks your team approved in the last. Once it runs, your team says what must hold and approves what the system proposes, instead of writing every check by hand.</p>
<h2 id="how-would-the-loop-work">How would the loop work?</h2>
<figure class="fig wide">
<p class="fig-eyebrow">Figure 1 · The loop</p>
<p class="fig-title">Every run feeds the next round, and your team approves what OnRails proposes.</p>
<img src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%2020%20768%20252%22%3E%0A%3Cpath%20d%3D%22M190%2080%20L540%2080%20A65.0%2065.0%200%200%201%20540%20210%20L190%20210%20A65.0%2065.0%200%200%201%20190%2080%20Z%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%225%22%2F%3E%0A%3Cpath%20d%3D%22M359.0%2084.8%20L365.0%2080.0%20L359.0%2075.2%22%20fill%3D%22none%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M371.0%20205.2%20L365.0%20210.0%20L371.0%20214.8%22%20fill%3D%22none%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%22250.0%22%20cy%3D%2280.0%22%20r%3D%227.5%22%20fill%3D%22%2300955a%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20cx%3D%22470.0%22%20cy%3D%2280.0%22%20r%3D%227.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20cx%3D%22605.0%22%20cy%3D%22145.0%22%20r%3D%227.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20cx%3D%22470.0%22%20cy%3D%22210.0%22%20r%3D%227.5%22%20fill%3D%22%2300955a%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20cx%3D%22250.0%22%20cy%3D%22210.0%22%20r%3D%227.5%22%20fill%3D%22%2300955a%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%223%22%2F%3E%0A%3Ctext%20x%3D%22365.0%22%20y%3D%22149.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%236b7179%22%3Eevery%20run%20feeds%20the%20next%20round%3C%2Ftext%3E%0A%3Ctext%20x%3D%22250.0%22%20y%3D%2246.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3ERecord%20the%20run%3C%2Ftext%3E%0A%3Ctext%20x%3D%22250.0%22%20y%3D%2262.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Eprograms%2C%20writes%2C%20connections%3C%2Ftext%3E%0A%3Ctext%20x%3D%22470.0%22%20y%3D%2246.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EFind%20the%20PNRs%3C%2Ftext%3E%0A%3Ctext%20x%3D%22470.0%22%20y%3D%2262.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Eactions%20that%20can%E2%80%99t%20be%20undone%3C%2Ftext%3E%0A%3Ctext%20x%3D%22623.0%22%20y%3D%22142.0%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EPropose%20the%20checks%3C%2Ftext%3E%0A%3Ctext%20x%3D%22623.0%22%20y%3D%22158.0%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Efrom%20your%20own%20checks%3C%2Ftext%3E%0A%3Ctext%20x%3D%22470.0%22%20y%3D%22240.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EYour%20team%20approves%3C%2Ftext%3E%0A%3Ctext%20x%3D%22470.0%22%20y%3D%22256.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Eeach%20PNR%20and%20its%20check%3C%2Ftext%3E%0A%3Ctext%20x%3D%22250.0%22%20y%3D%22240.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EHold%20the%20agents%3C%2Ftext%3E%0A%3Ctext%20x%3D%22250.0%22%20y%3D%22256.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Euntil%20the%20checks%20pass%3C%2Ftext%3E%0A%3Crect%20x%3D%2277.0%22%20y%3D%22132.0%22%20width%3D%2296%22%20height%3D%2226%22%20rx%3D%2213%22%20fill%3D%22%23111418%22%2F%3E%0A%3Ctext%20x%3D%22125.0%22%20y%3D%22149.5%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2012px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23ffffff%22%3EYour%20agents%3C%2Ftext%3E%0A%3Ccircle%20cx%3D%22590.0%22%20cy%3D%22258.0%22%20r%3D%225.5%22%20fill%3D%22%2300955a%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%223%22%2F%3E%0A%3Ctext%20x%3D%22602.0%22%20y%3D%22262.0%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%233b4047%22%3Eruns%20today%3C%2Ftext%3E%0A%3Ccircle%20cx%3D%22694.0%22%20cy%3D%22258.0%22%20r%3D%225.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%223%22%2F%3E%0A%3Ctext%20x%3D%22706.0%22%20y%3D%22262.0%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%233b4047%22%3Enext%3C%2Ftext%3E%0A%3C%2Fsvg%3E" alt="The loop. Your agents run, and OnRails records each run. From the record it finds the points of no return and proposes a check for each. Your team approves each one, and OnRails holds the agents until the checks pass. Then the next round begins. Recording the run, the team’s approval and the hold run today. Finding the points of no return and proposing their checks are what we are building next." width="768" height="252" />
<figcaption>The filled stops run today: OnRails records each run, a person approves the rules a skill drafts from AGENTS.md, and OnRails holds the agents at the system calls. The hollow stops are what we are building next: finding the points of no return in each run, and proposing their checks.</figcaption>
</figure>
<ol>
<li><strong>Your agents run, and OnRails records each run.</strong> Every program an agent starts, every file it writes and every connection it opens goes into the run’s record.</li>
<li><strong>OnRails finds the points of no return.</strong> From the record, and from the instructions your team already writes, such as AGENTS.md, it proposes the actions that can’t easily be undone. A payment applied, an email sent and a balance written off are such actions.</li>
<li><strong>OnRails proposes a check for each.</strong> It starts from the checks your team already runs, such as a script that verifies the invoice matches.</li>
<li><strong>Your team approves.</strong> A person reviews each PNR and its check before it holds, so the business rules stay your team’s.</li>
<li><strong>OnRails holds the agents, and the next round begins.</strong> Every refusal goes into the record with its reason. From there, OnRails proposes sharper checks, and new PNRs as better models take on new work.</li>
</ol>
<p><strong>Agents bring the intelligence. OnRails brings the guarantees.</strong></p>
<p>If you’re still making your agents follow a workflow, we’d love to work with you. Email us at <a href="mailto:hello@onrails.run">hello@onrails.run</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How do you make a check hold on every path an agent takes?</title>
      <link>https://onrails.run/blog/why-the-operating-system/</link>
      <guid isPermaLink="true">https://onrails.run/blog/why-the-operating-system/</guid>
      <pubDate>Thu, 08 Oct 2026 14:00:00 GMT</pubDate>
      <dc:creator>Swapnil Gandhi</dc:creator>
      <category>Manifesto</category>
      <description>An agent can reach a PNR by many paths, but every one of them passes through the operating system. That is where OnRails holds the agent, so no path goes around the PNR.</description>
      <content:encoded><![CDATA[<div class="tldr"><span class="tldr-k">TL;DR</span><p>An agent can reach a PNR by many paths, but every one of them passes through the operating system. That is where OnRails holds the agent, so no path goes around the PNR.</p></div>
<p><a href="https://onrails.run/manifesto/">Previously in this series</a>, we saw that putting AI agents into production takes both predictability and flexibility. Predictability never needed a predefined path, only checks that can’t be skipped. Those checks sit at the points of no return, or PNRs: actions that can’t easily be undone, such as applying a payment in the ERP. OnRails holds the agent at each PNR until its checks pass.</p>
<p>That left the harder part. An agent that plans its own steps can reach one PNR by many paths. It might use a tool it was given, a script it wrote, or a call straight to the ERP. A hold that sees only some of those paths leaves the PNR open. So where should the hold live?</p>
<p>To answer that, we first need to know what those paths have in common. Each of them comes down to programs running on a machine. And no program can read a file, start another program or open a connection on its own. It has to ask the operating system’s kernel, through a system call.</p>
<p>An agent can use any number of tools and write any number of scripts, but an operating system has only so many system calls. Every path the agent takes passes through them. Engineers call a layer like this a “narrow waist.”</p>
<h2 id="what-is-a-narrow-waist">What is a narrow waist?</h2>
<p>The term comes from networking. The internet carries every kind of application over every kind of network, and all of them meet at one protocol in between, IP. Drawn as layers, that design looks like an hourglass, with IP at its narrow waist.</p>
<p>An agent’s machine has a narrow waist too. Above it sit the tools, scripts and harnesses the agent might use, and below it the files, programs and connections they reach. The system calls sit in between, and that’s where OnRails holds the agent. A rule enforced there applies alike to everything above it, since the kernel sees processes, not tools or frameworks.</p>
<h2 id="is-seeing-every-path-enough">Is seeing every path enough?</h2>
<p>A sandbox, such as a container, already works at the narrow waist, and it sees every path. But it decides each action on its own: whether the agent may read this file or reach that host. A PNR, though, depends on what happened before the action, such as whether the check passed on the latest invoice matches. The kernel shows each action as it happens, and keeps no record of what came before.</p>
<p>OnRails keeps that context itself, through information-flow control. Data carries a taint from its source, and the taint follows the data as it moves. A program that reads a file takes on the file’s taint, and a file it writes takes on the program’s. OnRails also keeps track of which program ran and which files changed after each check. So if a script the agent wrote changes the invoice matches after the check passed, OnRails knows the pass no longer counts. It holds the agent at the PNR until the check passes again.</p>
<h2 id="why-not-the-prompt-a-tool-hook-or-a-proxy">Why not the prompt, a tool hook or a proxy?</h2>
<p>Those are where teams put business rules today, and they are a good start. But each one misses something. The model weighs a prompt against everything else it reads, and even a strong one is sometimes confidently wrong. A tool hook sees the command that runs a script, not what the script goes on to do. A proxy on the network sees each request leave, not which program sent it or what that program read first. A hold at the narrow waist sees every path, and OnRails remembers what happened on each one.</p>
<p>That puts the business rules in the system around the agent, not in the model. Holding the agent at its PNRs is only the start of what that system can do.</p>
<p><em>So what are we working toward? That’s where <a href="https://onrails.run/blog/what-we-are-working-toward/">the last part of this series</a> picks up.</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>How do you make business rules hold firm when an agent plans its own steps?</title>
      <link>https://onrails.run/blog/trusting-agents/</link>
      <guid isPermaLink="true">https://onrails.run/blog/trusting-agents/</guid>
      <pubDate>Thu, 08 Oct 2026 13:00:00 GMT</pubDate>
      <dc:creator>Swapnil Gandhi</dc:creator>
      <category>Manifesto</category>
      <description>Predictability never needed a predefined path, only checks that can’t be skipped.</description>
      <content:encoded><![CDATA[<div class="tldr"><span class="tldr-k">TL;DR</span><p>Predictability never needed a predefined path, only checks that can’t be skipped.</p></div>
<p><a href="https://onrails.run/blog/manifesto/">The first part of this series</a> weighed two ways to run AI agents. Predefined workflows are predictable, at the cost of design effort up front and brittleness when inputs vary. Agents that plan their own steps are flexible, at the cost of predictability. We argued that putting agents into production takes both.</p>
<p>To keep that predictability while letting an agent plan, we first need to know what makes a predefined workflow predictable. The answer lies in how it’s built. The team that owns the workflow writes its steps in advance, and every run takes them in the same order. It matches each payment to its invoices, runs the team’s check on those matches, and only then applies the payment. So the check can’t be skipped.</p>
<p>However, an agent that plans its own steps has no such predefined order. It might skip the team’s check, or run it and then change which invoices a payment is matched to. Only its own word says the payment it applied was checked.</p>
<p>The order itself was never the business rule, though. The business rule is that no payment is applied until the team’s check passes on the latest invoice matches. The order was only a way to enforce it. What if we could confirm the rule held, and let the agent plan everything else?</p>
<p>Confirming every step would bring back the predefined workflow, one check at a time. Most of an agent’s work doesn’t need it: an invoice match can be revised, a draft rewritten. The confirmation is needed only where an action can’t easily be undone, or would be costly to get wrong. Applying a payment, sending a customer an email and writing off a balance are such actions. We call them “points of no return.”</p>
<h2 id="what-is-a-pnr">What is a PNR?</h2>
<p>The term comes from aviation. A flight’s point of no return, or PNR, is the place or moment after which it no longer has the fuel to turn back. A workflow’s PNR isn’t a place or a moment, though. It is an action whose effect can’t easily be undone, wherever it falls in the agent’s plan.</p>
<p>Your team decides which actions are PNRs. A good test is whether getting one wrong would harm customers or the company’s reputation in a way that can’t simply be reversed. And the answer often depends on the workflow: dropping a database table in one, sending out an email in another.</p>
<p>We think making business rules hold firm starts at these actions. Your team gives each PNR one or more checks that must hold before the agent can take the action. A check can be anything: a script that exits with status 0, an LLM judge’s approval, a person’s sign-off.</p>
<h2 id="an-agent-at-work-held-at-its-points-of-no-return">An agent at work, held at its points of no return</h2>
<p>The agent applying customer payments meets three PNRs, each with a different kind of check. Applying a payment in the ERP is the first, and its check is a script that verifies which invoices the agent matched each payment to. Emailing a customer about a short payment is the second, checked by an LLM judge that compares the email with the remittance. Writing off a balance is the third, and it waits for a person’s sign-off.</p>
<figure class="fig wide" data-play="9000">
<p class="fig-eyebrow">Figure 1 · The pattern</p>
<p class="fig-title">The agent plans its own path. At each point of no return, OnRails holds it until the checks pass.</p>
<img src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%2048%20768%20210%22%3E%0A%3Cpath%20data-track%20d%3D%22M88.0%20126.0L90.1%20124.6L92.2%20123.2L94.2%20121.7L96.1%20120.0L97.9%20118.2L99.5%20116.1L101.0%20113.6L102.5%20110.7L104.2%20107.5L106.9%20104.7L110.7%20103.4L115.8%20104.3L119.5%20107.9L120.6%20112.2L120.1%20116.3L119.5%20119.8L119.5%20122.8L120.5%20125.1L122.4%20126.9L124.7%20128.5L127.0%20130.0L129.3%20131.6L131.6%20133.0L133.9%20134.3L136.2%20135.3L138.7%20135.9L141.2%20136.0L143.6%20135.5L146.1%20134.8L148.6%20134.3L151.4%20134.2L154.5%20134.5L157.6%20134.7L160.3%20134.2L162.3%20132.4L163.5%20129.6L164.3%20126.1L165.2%20122.8L166.4%20119.9L168.0%20117.4L169.8%20115.3L171.8%20113.4L174.0%20111.7L176.5%20110.4L179.4%20109.8L182.5%20110.1L185.7%20111.3L188.8%20113.2L191.3%20115.3L193.5%20116.8L195.5%20117.4L198.0%20117.2L201.0%20116.7L204.1%20116.3L207.1%20116.5L209.5%20117.4L211.5%20119.1L213.0%20121.3L214.4%20123.7L215.9%20126.0L217.5%20128.3L219.3%20130.5L221.2%20132.6L223.5%20134.2L226.0%20135.2L228.8%20135.3L231.6%20134.8L234.4%20134.2L237.0%20133.9L239.5%20134.0L242.1%20134.1L244.6%20134.0L247.1%20133.5L249.6%20133.0L252.1%20132.7L254.6%20132.7L257.1%20132.9L259.7%20133.2L262.2%20133.4L264.7%20133.6L267.2%20133.9L269.8%20134.2L272.3%20134.1L274.8%20133.4L277.2%20131.8L279.5%20129.6L281.9%20127.2L284.2%20125.1L286.6%20124.1L289.2%20124.4L291.8%20125.9L294.5%20128.2L297.3%20130.7L300.0%20132.8L302.7%20134.2L305.3%20135.0L307.9%20135.4L310.5%20135.5L313.0%20135.5L315.5%20135.1L317.9%20134.2L320.3%20132.7L322.6%20130.7L324.9%20128.5L327.3%20126.8L329.7%20126.1L332.3%20126.5L335.0%20127.4L337.6%20128.2L340.1%20128.3L342.6%20127.8L345.0%20127.0L347.5%20126.3L350.0%20126.0%20M350.0%20126.0L352.0%20127.5L354.0%20129.0L356.2%20130.2L358.6%20131.3L360.8%20132.4L362.6%20134.3L363.6%20137.1L364.2%20140.6L364.9%20144.0L366.3%20146.4L368.4%20147.8L370.9%20148.7L373.5%20149.3L376.3%20149.9L379.1%20150.2L382.2%20150.0L385.6%20149.4L389.0%20148.5L392.1%20148.1L394.5%20148.6L396.2%20150.4L397.5%20153.2L398.7%20156.4L400.2%20159.2L402.1%20160.9L404.6%20161.6L407.3%20161.7L410.0%20161.6L412.7%20161.5L415.4%20161.6L418.0%20161.5L420.7%20161.1L423.2%20160.6L425.6%20160.6L427.8%20161.6L429.6%20163.9L431.4%20167.3L433.4%20171.0L435.8%20173.9L438.5%20175.5L441.2%20175.6L443.9%20174.7L446.5%20173.3L449.0%20172.1L451.4%20170.9L453.8%20169.8L456.1%20168.4L458.3%20166.9L460.5%20165.7L463.0%20165.2L465.8%20165.7L469.0%20167.0L472.4%20168.4L475.5%20169.0L478.1%20168.3L480.0%20166.2L481.3%20163.0L482.5%20159.7L483.7%20156.5L485.0%20153.9L486.4%20151.6L487.8%20149.3L489.1%20147.1L490.6%20145.1L492.5%20143.7L495.1%20143.1L498.3%20143.0L501.7%20143.1L504.7%20142.7L506.8%20141.2L507.9%20138.7L508.7%20136.0L509.9%20133.6L511.6%20131.7L513.7%20130.3L515.9%20129.0L518.0%20127.6L520.0%20126.0%20M520.0%20126.0L522.0%20124.5L524.0%20122.9L525.8%20121.2L527.2%20118.9L528.0%20116.0L528.5%20112.7L529.3%20109.8L530.8%20107.6L533.0%20106.2L535.6%20105.4L538.4%20104.7L541.0%20103.9L543.9%20103.4L547.0%20103.3L550.3%20103.5L553.6%20103.8L556.4%20103.5L558.5%20102.3L559.9%20100.1L560.9%2097.2L562.1%2094.2L563.7%2091.9L565.8%2090.4L568.3%2089.7L570.9%2089.3L573.4%2089.0L575.9%2088.5L578.5%2088.3L581.2%2088.7L584.0%2089.7L586.8%2091.0L589.5%2092.1L591.8%2092.1L594.0%2090.8L596.0%2088.3L598.0%2085.4L600.2%2082.6L602.6%2080.5L605.1%2079.2L607.7%2078.4L610.3%2077.7L612.9%2077.0L615.6%2076.6L618.2%2076.9L620.8%2078.3L623.1%2080.5L625.3%2083.0L627.6%2085.0L629.9%2085.9L632.5%2085.6L635.3%2084.6L638.2%2083.4L641.1%2082.7L643.8%2082.6L646.4%2083.0L649.0%2083.5L651.6%2084.0L654.2%2084.6L656.5%2085.8L658.5%2088.0L659.9%2091.2L660.9%2095.0L661.9%2098.7L663.0%20101.6L664.5%20103.4L666.5%20104.4L669.0%20104.9L671.6%20105.5L674.0%20106.3L676.2%20107.4L678.6%20108.5L681.2%20109.3L683.9%20110.0L686.4%20111.1L688.3%20112.8L689.6%20115.1L690.6%20117.6L691.9%20119.8L693.7%20121.6L695.9%20123.0L698.0%20124.4L700.0%20126.0%20M700.0%20126.0L702.4%20125.2L704.8%20124.5L707.3%20123.9L709.8%20123.3L712.3%20122.8L714.8%20122.3L717.2%20121.6L719.5%20120.6L721.6%20119.1L723.7%20117.3L725.9%20115.5L728.4%20114.4L731.0%20114.2L733.8%20115.2L736.2%20117.3L738.1%20120.0L739.7%20122.6L741.3%20124.5L743.4%20125.3L746.0%20125.1L748.8%20124.5L751.8%20124.1L754.6%20124.2L757.1%20124.8L759.5%20125.7L761.7%20126.9L764.0%20128.0%22%20fill%3D%22none%22%20stroke%3D%22none%22%2F%3E%0A%3Cpath%20d%3D%22M88.0%20126.0L89.7%20124.2L91.5%20122.4L93.7%20121.0L96.4%20120.0L99.4%20119.3L102.1%20118.4L104.0%20116.8L105.0%20114.3L105.2%20111.2L105.3%20107.9L105.7%20104.8L106.4%20102.0L107.5%2099.4L108.6%2096.9L109.9%2094.6L111.7%2092.7L114.0%2091.4L117.0%2090.8L120.3%2090.9L123.5%2091.0L126.3%2090.6L128.3%2089.2L129.7%2086.8L130.9%2083.8L132.0%2080.7L133.5%2078.1L135.5%2076.3L137.9%2075.4L140.6%2075.0L143.3%2074.8L146.1%2074.7L149.0%2074.9L152.0%2075.6L155.2%2076.6L158.4%2077.9L161.4%2078.9L164.0%2079.0L166.1%2077.8L167.8%2075.4L169.3%2072.2L170.8%2069.0L172.7%2066.6L174.9%2065.2L177.4%2064.8L180.1%2064.9L182.7%2065.1L185.3%2065.3L187.8%2065.3L190.3%2065.3L192.8%2065.6L195.3%2065.8L197.8%2065.8L200.1%2064.9L202.5%2063.0L204.8%2060.1L207.2%2057.0L209.7%2054.3L212.3%2052.7L214.9%2052.7L217.5%2054.0L220.0%2056.0L222.5%2058.1L225.0%2059.9L227.4%2061.3L229.9%2062.5L232.3%2063.6L234.7%2064.7L237.1%2065.5L239.6%2065.7L242.1%2065.0L244.8%2063.7L247.6%2062.3L250.3%2061.4L252.8%2061.6L255.1%2063.3L257.1%2066.0L259.0%2069.1L260.9%2071.9L262.9%2073.9L265.1%2074.9L267.5%2075.3L270.0%2075.3L272.5%2075.2L275.1%2075.0L277.9%2074.4L280.9%2073.3L284.2%2072.0L287.5%2070.8L290.7%2070.4L293.3%2071.2L295.1%2073.2L296.4%2076.2L297.5%2079.5L298.6%2082.3L300.2%2084.3L302.4%2085.5L305.1%2086.1L307.8%2086.6L310.5%2087.3L313.1%2088.2L315.5%2089.2L318.0%2090.2L320.5%2091.2L322.8%2092.4L324.6%2094.3L325.6%2096.9L325.9%20100.4L325.6%20104.5L325.2%20108.5L325.5%20111.9L326.6%20114.3L328.8%20115.6L331.8%20116.1L334.9%20116.4L337.7%20117.1L340.2%20118.2L342.3%20119.6L344.3%20121.1L346.2%20122.7L348.1%20124.4L350.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M88.0%20126.0L89.8%20127.7L91.4%20129.8L92.8%20132.0L94.1%20134.2L95.5%20136.4L97.0%20138.5L98.7%20140.4L100.7%20141.9L103.3%20142.8L106.4%20143.2L109.5%20143.5L112.2%20144.2L114.3%20145.5L115.8%20147.7L116.7%20150.5L117.5%20153.4L118.5%20156.2L120.1%20158.4L122.2%20159.9L124.6%20160.8L127.3%20161.5L129.9%20162.3L132.4%20163.0L135.0%20163.5L137.8%20163.8L140.7%20163.5L143.7%20162.8L146.6%20162.2L149.0%20162.0L151.2%20162.9L152.9%20164.9L154.4%20167.7L155.9%20170.9L157.6%20173.9L159.6%20176.3L161.8%20178.0L164.1%20179.2L166.6%20180.1L169.0%20181.0L171.5%20181.9L174.0%20182.3L176.6%20182.2L179.3%20181.4L182.0%20180.0L184.7%20178.6L187.3%20177.7L189.8%20177.7L192.2%20178.8L194.7%20180.7L197.1%20182.7L199.6%20184.4L202.2%20185.5L204.8%20185.8L207.3%20185.6L209.9%20185.3L212.4%20184.8L215.0%20184.3L217.5%20183.3L219.9%20181.7L222.3%20179.3L224.6%20176.4L226.8%20173.5L229.0%20171.3L231.3%20170.2L233.8%20170.3L236.4%20171.3L239.1%20172.6L241.8%20173.8L244.4%20174.6L247.0%20175.0L249.6%20175.1L252.2%20175.3L254.8%20175.6L257.5%20175.8L260.0%20175.5L262.4%20174.5L264.5%20172.7L266.5%20170.4L268.5%20168.1L270.5%20166.4L272.9%20165.7L275.6%20165.9L278.5%20166.9L281.6%20168.1L284.6%20169.0L287.4%20169.4L290.2%20169.4L292.9%20169.1L295.6%20168.7L298.4%20168.2L301.0%20167.5L303.3%20166.1L305.1%20163.8L306.3%20160.7L307.1%20157.0L307.9%20153.3L308.8%20150.1L310.3%20147.8L312.3%20146.3L314.7%20145.5L317.2%20144.9L319.8%20144.1L322.1%20143.2L324.4%20142.1L326.7%20141.0L329.2%20140.1L331.7%20139.4L334.1%20138.4L336.2%20137.0L337.9%20135.0L339.4%20132.8L341.1%20130.9L343.1%20129.4L345.4%20128.3L347.8%20127.2L350.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M350.0%20126.0L352.4%20125.2L354.6%20123.9L356.6%20122.2L358.6%20120.4L360.7%20119.1L363.2%20118.4L365.9%20118.3L368.6%20118.3L371.1%20117.9L373.5%20117.1L375.8%20116.2L378.2%20115.4L380.6%20114.7L383.0%20114.0L385.4%20113.0L387.6%20111.3L389.8%20109.1L392.3%20106.9L395.1%20105.3L398.1%20105.0L401.2%20106.2L403.9%20108.8L405.9%20111.9L407.2%20115.0L408.3%20117.7L409.4%20120.0L410.4%20122.4L411.4%20124.9L412.2%20127.5L413.4%20130.1L415.1%20132.1L417.7%20133.4L421.1%20133.7L424.8%20133.4L428.3%20132.7L431.3%20132.3L433.8%20132.5L436.0%20133.3L438.2%20134.4L440.6%20135.2L443.0%20135.7L445.5%20135.9L448.0%20136.1L450.5%20136.8L453.1%20137.7L455.7%20138.7L458.3%20139.0L460.8%20138.3L463.1%20136.5L465.4%20133.9L467.5%20131.1L469.7%20128.7L472.0%20127.2L474.4%20126.5L476.9%20126.3L479.4%20126.3L481.9%20126.2L484.4%20126.2L487.0%20126.7L489.7%20127.9L492.6%20129.8L495.6%20132.1L498.5%20133.9L501.1%20134.5L503.5%20133.6L505.8%20131.9L508.0%20130.0L510.3%20128.6L512.6%20127.6L515.1%20126.9L517.5%20126.4L520.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M350.0%20126.0L351.8%20124.3L353.5%20122.3L354.9%20120.1L356.1%20117.7L357.1%20115.1L358.4%20112.7L360.1%20110.9L362.7%20109.9L365.8%20109.6L369.0%20109.4L371.7%20108.6L373.6%20107.0L375.0%20104.7L376.2%20102.2L377.6%2099.9L379.3%2097.9L381.2%2096.1L383.1%2094.4L384.9%2092.4L386.6%2090.2L388.6%2088.2L390.9%2086.9L393.8%2086.6L397.1%2087.5L400.4%2089.1L403.6%2090.7L406.5%2091.7L409.1%2091.9L411.5%2091.4L413.8%2090.7L416.1%2090.1L418.4%2089.5L420.7%2088.7L422.9%2087.4L425.0%2085.2L427.0%2082.4L429.2%2079.6L431.5%2077.4L434.1%2076.4L436.7%2076.5L439.3%2077.3L441.9%2078.3L444.5%2079.1L447.0%2079.5L449.5%2079.8L452.0%2080.4L454.4%2081.4L456.6%2082.7L458.9%2083.7L461.3%2084.1L464.2%2083.6L467.4%2082.5L470.8%2081.3L474.1%2080.7L476.9%2081.1L479.3%2082.4L481.3%2084.3L483.2%2086.3L485.0%2088.3L486.8%2090.2L488.4%2092.4L489.6%2095.2L490.4%2098.5L490.9%20102.1L491.4%20105.4L492.4%20107.9L494.1%20109.6L496.5%20110.5L499.3%20111.2L502.0%20111.9L504.5%20112.9L506.7%20114.3L508.8%20115.7L510.9%20117.2L513.0%20118.7L514.9%20120.4L516.5%20122.3L518.2%20124.2L520.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M520.0%20126.0L522.4%20125.4L524.9%20124.9L527.5%20124.5L530.0%20124.0L532.3%20123.0L534.2%20121.0L535.9%20118.1L537.4%20114.8L539.1%20111.7L541.2%20109.8L543.8%20108.9L546.6%20108.9L549.5%20109.3L552.4%20110.0L555.2%20110.6L558.0%20111.3L560.8%20112.1L563.4%20113.4L565.8%20115.0L567.8%20116.8L569.6%20118.5L571.3%20119.7L573.4%20120.4L576.0%20120.7L579.0%20120.7L582.0%20120.9L584.8%20121.6L586.9%20122.9L588.5%20124.8L589.8%20127.3L591.0%20130.0L592.4%20132.7L594.1%20135.0L596.2%20137.0L598.7%20138.6L601.2%20140.0L603.9%20141.2L606.7%20142.0L609.6%20142.4L612.4%20142.0L615.1%20140.7L617.7%20138.5L620.2%20135.7L622.6%20132.8L624.9%20130.3L627.3%20128.8L629.6%20128.2L632.2%20128.6L634.7%20129.5L637.3%20130.6L639.9%20131.5L642.5%20132.1L645.1%20132.5L647.6%20132.8L650.2%20133.2L652.8%20133.6L655.4%20134.0L657.9%20133.9L660.4%20133.2L662.7%20131.8L665.0%20129.9L667.2%20127.9L669.5%20126.3L671.9%20125.5L674.5%20125.7L677.2%20126.9L680.0%20128.6L682.8%20129.9L685.4%20130.5L687.9%20130.3L690.4%20129.5L692.7%20128.4L695.1%20127.4L697.5%20126.5L700.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M520.0%20126.0L522.2%20127.2L524.6%20128.2L526.9%20129.3L528.9%20130.9L530.4%20133.0L531.7%20135.4L533.1%20137.7L534.7%20139.8L536.3%20141.7L538.1%20143.6L540.0%20145.2L542.3%20146.4L545.0%20146.9L548.1%20146.9L551.1%20146.9L553.7%20147.5L555.6%20149.2L556.7%20152.1L557.5%20155.5L558.3%20159.0L559.7%20161.8L561.7%20163.7L564.1%20164.9L566.8%20165.6L569.5%20166.1L572.1%20166.4L575.0%20166.2L578.1%20165.3L581.4%20163.8L584.6%20162.2L587.5%20161.2L590.1%20161.4L592.1%20163.0L593.9%20165.5L595.6%20168.2L597.6%20170.3L599.9%20171.6L602.4%20171.9L605.0%20171.9L607.5%20171.8L610.1%20171.6L612.6%20171.2L615.2%20170.3L617.7%20168.8L620.2%20167.2L622.5%20166.1L624.7%20166.2L627.0%20167.7L629.5%20170.3L632.3%20173.1L635.2%20175.4L638.1%20176.5L640.8%20176.5L643.4%20175.8L645.9%20174.9L648.3%20173.9L650.7%20172.6L652.8%20170.9L654.5%20168.5L656.1%20165.8L657.7%20163.5L659.7%20162.0L662.3%20161.6L665.5%20162.2L669.0%20163.0L672.2%20163.4L675.1%20162.6L677.3%20160.8L678.8%20158.3L680.0%20155.6L681.0%20152.9L681.9%20150.1L682.4%20147.2L682.6%20143.9L682.5%20140.6L682.9%20137.8L684.4%20135.9L687.0%20134.8L690.0%20134.0L692.8%20133.1L695.1%20131.7L696.8%20129.9L698.4%20127.9L700.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%23c4c7cc%22%20stroke-width%3D%221.6%22%20stroke-dasharray%3D%226%205%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M88.0%20126.0L90.1%20124.6L92.2%20123.2L94.2%20121.7L96.1%20120.0L97.9%20118.2L99.5%20116.1L101.0%20113.6L102.5%20110.7L104.2%20107.5L106.9%20104.7L110.7%20103.4L115.8%20104.3L119.5%20107.9L120.6%20112.2L120.1%20116.3L119.5%20119.8L119.5%20122.8L120.5%20125.1L122.4%20126.9L124.7%20128.5L127.0%20130.0L129.3%20131.6L131.6%20133.0L133.9%20134.3L136.2%20135.3L138.7%20135.9L141.2%20136.0L143.6%20135.5L146.1%20134.8L148.6%20134.3L151.4%20134.2L154.5%20134.5L157.6%20134.7L160.3%20134.2L162.3%20132.4L163.5%20129.6L164.3%20126.1L165.2%20122.8L166.4%20119.9L168.0%20117.4L169.8%20115.3L171.8%20113.4L174.0%20111.7L176.5%20110.4L179.4%20109.8L182.5%20110.1L185.7%20111.3L188.8%20113.2L191.3%20115.3L193.5%20116.8L195.5%20117.4L198.0%20117.2L201.0%20116.7L204.1%20116.3L207.1%20116.5L209.5%20117.4L211.5%20119.1L213.0%20121.3L214.4%20123.7L215.9%20126.0L217.5%20128.3L219.3%20130.5L221.2%20132.6L223.5%20134.2L226.0%20135.2L228.8%20135.3L231.6%20134.8L234.4%20134.2L237.0%20133.9L239.5%20134.0L242.1%20134.1L244.6%20134.0L247.1%20133.5L249.6%20133.0L252.1%20132.7L254.6%20132.7L257.1%20132.9L259.7%20133.2L262.2%20133.4L264.7%20133.6L267.2%20133.9L269.8%20134.2L272.3%20134.1L274.8%20133.4L277.2%20131.8L279.5%20129.6L281.9%20127.2L284.2%20125.1L286.6%20124.1L289.2%20124.4L291.8%20125.9L294.5%20128.2L297.3%20130.7L300.0%20132.8L302.7%20134.2L305.3%20135.0L307.9%20135.4L310.5%20135.5L313.0%20135.5L315.5%20135.1L317.9%20134.2L320.3%20132.7L322.6%20130.7L324.9%20128.5L327.3%20126.8L329.7%20126.1L332.3%20126.5L335.0%20127.4L337.6%20128.2L340.1%20128.3L342.6%20127.8L345.0%20127.0L347.5%20126.3L350.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%236b7179%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M350.0%20126.0L352.0%20127.5L354.0%20129.0L356.2%20130.2L358.6%20131.3L360.8%20132.4L362.6%20134.3L363.6%20137.1L364.2%20140.6L364.9%20144.0L366.3%20146.4L368.4%20147.8L370.9%20148.7L373.5%20149.3L376.3%20149.9L379.1%20150.2L382.2%20150.0L385.6%20149.4L389.0%20148.5L392.1%20148.1L394.5%20148.6L396.2%20150.4L397.5%20153.2L398.7%20156.4L400.2%20159.2L402.1%20160.9L404.6%20161.6L407.3%20161.7L410.0%20161.6L412.7%20161.5L415.4%20161.6L418.0%20161.5L420.7%20161.1L423.2%20160.6L425.6%20160.6L427.8%20161.6L429.6%20163.9L431.4%20167.3L433.4%20171.0L435.8%20173.9L438.5%20175.5L441.2%20175.6L443.9%20174.7L446.5%20173.3L449.0%20172.1L451.4%20170.9L453.8%20169.8L456.1%20168.4L458.3%20166.9L460.5%20165.7L463.0%20165.2L465.8%20165.7L469.0%20167.0L472.4%20168.4L475.5%20169.0L478.1%20168.3L480.0%20166.2L481.3%20163.0L482.5%20159.7L483.7%20156.5L485.0%20153.9L486.4%20151.6L487.8%20149.3L489.1%20147.1L490.6%20145.1L492.5%20143.7L495.1%20143.1L498.3%20143.0L501.7%20143.1L504.7%20142.7L506.8%20141.2L507.9%20138.7L508.7%20136.0L509.9%20133.6L511.6%20131.7L513.7%20130.3L515.9%20129.0L518.0%20127.6L520.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%236b7179%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M520.0%20126.0L522.0%20124.5L524.0%20122.9L525.8%20121.2L527.2%20118.9L528.0%20116.0L528.5%20112.7L529.3%20109.8L530.8%20107.6L533.0%20106.2L535.6%20105.4L538.4%20104.7L541.0%20103.9L543.9%20103.4L547.0%20103.3L550.3%20103.5L553.6%20103.8L556.4%20103.5L558.5%20102.3L559.9%20100.1L560.9%2097.2L562.1%2094.2L563.7%2091.9L565.8%2090.4L568.3%2089.7L570.9%2089.3L573.4%2089.0L575.9%2088.5L578.5%2088.3L581.2%2088.7L584.0%2089.7L586.8%2091.0L589.5%2092.1L591.8%2092.1L594.0%2090.8L596.0%2088.3L598.0%2085.4L600.2%2082.6L602.6%2080.5L605.1%2079.2L607.7%2078.4L610.3%2077.7L612.9%2077.0L615.6%2076.6L618.2%2076.9L620.8%2078.3L623.1%2080.5L625.3%2083.0L627.6%2085.0L629.9%2085.9L632.5%2085.6L635.3%2084.6L638.2%2083.4L641.1%2082.7L643.8%2082.6L646.4%2083.0L649.0%2083.5L651.6%2084.0L654.2%2084.6L656.5%2085.8L658.5%2088.0L659.9%2091.2L660.9%2095.0L661.9%2098.7L663.0%20101.6L664.5%20103.4L666.5%20104.4L669.0%20104.9L671.6%20105.5L674.0%20106.3L676.2%20107.4L678.6%20108.5L681.2%20109.3L683.9%20110.0L686.4%20111.1L688.3%20112.8L689.6%20115.1L690.6%20117.6L691.9%20119.8L693.7%20121.6L695.9%20123.0L698.0%20124.4L700.0%20126.0%22%20fill%3D%22none%22%20stroke%3D%22%236b7179%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M700.0%20126.0L702.4%20125.2L704.8%20124.5L707.3%20123.9L709.8%20123.3L712.3%20122.8L714.8%20122.3L717.2%20121.6L719.5%20120.6L721.6%20119.1L723.7%20117.3L725.9%20115.5L728.4%20114.4L731.0%20114.2L733.8%20115.2L736.2%20117.3L738.1%20120.0L739.7%20122.6L741.3%20124.5L743.4%20125.3L746.0%20125.1L748.8%20124.5L751.8%20124.1L754.6%20124.2L757.1%20124.8L759.5%20125.7L761.7%20126.9L764.0%20128.0%22%20fill%3D%22none%22%20stroke%3D%22%236b7179%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%22115.27502860119796%22%20cy%3D%22104.14924807456345%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22140.0%22%20cy%3D%22136.0%22%20r%3D%226%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%233b4047%22%20stroke-width%3D%222.5%22%2F%3E%0A%3Ccircle%20cx%3D%22190.00725153007946%22%20cy%3D%22114.17575234678064%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22240.0%22%20cy%3D%22134.0%22%20r%3D%226.5%22%20fill%3D%22%2300955a%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22396.98597246873334%22%20cy%3D%22151.9973355579914%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22439.95750840964155%22%20cy%3D%22175.7651906516372%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22484.45075421762186%22%20cy%3D%22154.99564719246573%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22564.5894041032637%22%20cy%3D%2291.13470602938179%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22615.1937973951416%22%20cy%3D%2276.61232774054514%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22662.585555685664%22%20cy%3D%22100.70597385434904%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%22734.9990849368611%22%20cy%3D%22116.05345027747327%22%20r%3D%224.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%222%22%2F%3E%0A%3Cg%20data-from%3D%220.25%22%3E%3Cpath%20d%3D%22M346.0%20113.0%20Q293.0%2083.0%20240.0%20125.0%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%221.8%22%2F%3E%3Cpath%20d%3D%22M242.7%20118.6%20L240.0%20125.0%20L246.9%20123.8%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fg%3E%0A%3Cg%20data-from%3D%220.25%22%3E%3Cpath%20d%3D%22M346.0%20113.0%20Q243.0%2057.0%20140.0%20127.0%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%221.8%22%2F%3E%3Cpath%20d%3D%22M143.2%20120.8%20L140.0%20127.0%20L147.0%20126.3%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fg%3E%0A%3Ctext%20x%3D%22140.0%22%20y%3D%22154.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%233b4047%22%3Ematches%20written%3C%2Ftext%3E%0A%3Ctext%20x%3D%22240.0%22%20y%3D%22154.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Echeck%20passed%3C%2Ftext%3E%0A%3Ctext%20x%3D%22530.0%22%20y%3D%2264.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%236b7179%22%3Emore%20than%20one%20path%2C%20through%20every%20point%20of%20no%20return%3C%2Ftext%3E%0A%3Crect%20x%3D%220%22%20y%3D%22113%22%20width%3D%2280%22%20height%3D%2226%22%20rx%3D%2213%22%20fill%3D%22%23111418%22%2F%3E%0A%3Ctext%20x%3D%2240.0%22%20y%3D%22130.5%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2012px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23ffffff%22%3EThe%20agent%3C%2Ftext%3E%0A%3Ccircle%20data-until%3D%220.4%22%20opacity%3D%220%22%20cx%3D%22350%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20data-load%3D%220.25%2C0.4%22%20data-from%3D%220.25%22%20data-until%3D%220.4%22%20opacity%3D%220%22%20cx%3D%22350%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22none%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%225%22%20stroke-linecap%3D%22round%22%20transform%3D%22rotate(-90%20350%20126)%22%2F%3E%0A%3Cg%20data-from%3D%220.4%22%3E%3Ccircle%20cx%3D%22350%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23e9f2ec%22%20stroke%3D%22%2300955a%22%20stroke-width%3D%225%22%2F%3E%3Cpath%20d%3D%22M345.5%20126.3%20l3.2%203.2%20l6%20-6.4%22%20fill%3D%22none%22%20stroke%3D%22%23007a4a%22%20stroke-width%3D%222.2%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fg%3E%0A%3Ccircle%20data-until%3D%220.68%22%20opacity%3D%220%22%20cx%3D%22520%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20data-load%3D%220.58%2C0.68%22%20data-from%3D%220.58%22%20data-until%3D%220.68%22%20opacity%3D%220%22%20cx%3D%22520%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22none%22%20stroke%3D%22%237b3fa0%22%20stroke-width%3D%225%22%20stroke-linecap%3D%22round%22%20transform%3D%22rotate(-90%20520%20126)%22%2F%3E%0A%3Cg%20data-from%3D%220.68%22%3E%3Ccircle%20cx%3D%22520%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23f4edf8%22%20stroke%3D%22%237b3fa0%22%20stroke-width%3D%225%22%2F%3E%3Cpath%20d%3D%22M515.5%20126.3%20l3.2%203.2%20l6%20-6.4%22%20fill%3D%22none%22%20stroke%3D%22%237b3fa0%22%20stroke-width%3D%222.2%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fg%3E%0A%3Ccircle%20data-until%3D%220.93%22%20opacity%3D%220%22%20cx%3D%22700%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23b9bcc2%22%20stroke-width%3D%223%22%2F%3E%0A%3Ccircle%20data-load%3D%220.83%2C0.93%22%20data-from%3D%220.83%22%20data-until%3D%220.93%22%20opacity%3D%220%22%20cx%3D%22700%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22none%22%20stroke%3D%22%231f57d6%22%20stroke-width%3D%225%22%20stroke-linecap%3D%22round%22%20transform%3D%22rotate(-90%20700%20126)%22%2F%3E%0A%3Cg%20data-from%3D%220.93%22%3E%3Ccircle%20cx%3D%22700%22%20cy%3D%22126%22%20r%3D%2212%22%20fill%3D%22%23eef2fb%22%20stroke%3D%22%231f57d6%22%20stroke-width%3D%225%22%2F%3E%3Cpath%20d%3D%22M695.5%20126.3%20l3.2%203.2%20l6%20-6.4%22%20fill%3D%22none%22%20stroke%3D%22%231f57d6%22%20stroke-width%3D%222.2%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fg%3E%0A%3Ctext%20x%3D%22350.0%22%20y%3D%22202.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2010.5px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Epoint%20of%20no%20return%3C%2Ftext%3E%0A%3Ctext%20x%3D%22350.0%22%20y%3D%22219.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EApply%20payments%3C%2Ftext%3E%0A%3Ctext%20x%3D%22350.0%22%20y%3D%22236.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Ethe%20latest%20invoice%20matches%3C%2Ftext%3E%0A%3Ctext%20x%3D%22350.0%22%20y%3D%22250.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%23007a4a%22%3Epassed%20the%20check%3C%2Ftext%3E%0A%3Ctext%20x%3D%22520.0%22%20y%3D%22202.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2010.5px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%237b3fa0%22%3Epoint%20of%20no%20return%3C%2Ftext%3E%0A%3Ctext%20x%3D%22520.0%22%20y%3D%22219.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EShort-pay%20email%3C%2Ftext%3E%0A%3Ctext%20x%3D%22520.0%22%20y%3D%22236.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%237b3fa0%22%3Ean%20LLM%20judge%3C%2Ftext%3E%0A%3Ctext%20x%3D%22520.0%22%20y%3D%22250.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%237b3fa0%22%3Eapproved%20the%20email%3C%2Ftext%3E%0A%3Ctext%20x%3D%22700.0%22%20y%3D%22202.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2010.5px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%231f57d6%22%3Epoint%20of%20no%20return%3C%2Ftext%3E%0A%3Ctext%20x%3D%22700.0%22%20y%3D%22219.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20600%2013px%20system-ui%2C%20-apple-system%2C%20Helvetica%2C%20Arial%2C%20sans-serif%22%20fill%3D%22%23111418%22%3EWrite-off%3C%2Ftext%3E%0A%3Ctext%20x%3D%22700.0%22%20y%3D%22236.0%22%20text-anchor%3D%22middle%22%20style%3D%22font%3A%20400%2011px%20ui-monospace%2C%20Menlo%2C%20Consolas%2C%20monospace%22%20fill%3D%22%231f57d6%22%3Ea%20person%20signed%20off%3C%2Ftext%3E%0A%3Cg%20data-agent%20data-gates%3D%22350%2C126%7C520%2C126%7C700%2C126%22%20data-keys%3D%220%3Astart%7C0.25%3Ag1%7C0.4%3Ag1%7C0.58%3Ag2%7C0.68%3Ag2%7C0.83%3Ag3%7C0.93%3Ag3%7C1%3Aend%22%20transform%3D%22translate(764%20128)%22%3E%3Ccircle%20r%3D%227%22%20fill%3D%22%23111418%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%222.5%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E" alt="The pattern. An agent matching customer payments to invoices takes a different path on different runs. The solid line is this run, and the dashed lines are paths it took on other runs. Every path goes through the three points of no return the team has marked: apply payments, a short-pay email and a write-off. Applying payments waits for the team’s check to pass on the latest invoice matches, after they were last written. The email waits for an LLM judge’s approval, and a write-off for a person’s sign-off." width="768" height="210" />
<figcaption>The solid line is the agent’s path on this run, and the dashed lines are paths it took on other runs. Every path meets the three points of no return, where OnRails holds the agent until the checks pass. Applying payments needs the script to pass on the latest invoice matches, in green. The email needs an LLM judge’s approval, in purple, and a write-off a person’s sign-off, in blue.</figcaption>
</figure>
<p>OnRails holds the agent at each PNR until its checks pass. It refuses the action and tells the agent why, so the agent can fix its work and try again. An agent that goes to apply a payment too early reads:</p>
<pre><code>[OnRails] Operation blocked by rule `apply-after-check`.
- Target operation: run /opt/ar/bin/erp-post
- Reason: Apply payments only if the latest invoice matches passed the team’s check.</code></pre>
<h2 id="why-not-just-scope-the-agents-permissions">Why not just scope the agent’s permissions?</h2>
<p>Scoped tokens are a good start, and teams should keep them. A token can let the agent apply payments in the ERP and nothing else. But it says who may act, not whether this action should happen now. The agent holds the same token whether its invoice matches passed the team’s check or not.</p>
<p>A team could build the check into the path, with a service that holds the ERP token and applies payments only after the check passes. But that is a predefined workflow again, with its design effort up front and its brittleness when inputs vary. With points of no return, each new business rule is one more check, and OnRails enforces it on whichever path the agent takes.</p>
<p>“Whichever path” is the hard part. An agent that plans its own steps can reach one PNR by many paths. It might use a tool it was given, a script it wrote, or a call straight to the ERP. A hold that sees only some of those paths leaves the PNR open.</p>
<p><em>So how do you make a check hold on every path an agent takes? That’s where <a href="https://onrails.run/blog/why-the-operating-system/">the next part of this series</a> picks up.</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Predefined workflows or agents that plan?</title>
      <link>https://onrails.run/blog/manifesto/</link>
      <guid isPermaLink="true">https://onrails.run/blog/manifesto/</guid>
      <pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
      <dc:creator>Swapnil Gandhi</dc:creator>
      <category>Manifesto</category>
      <description>Intelligence is no longer scarce, but guarantees are. Workflows keep the guarantees, agents bring the intelligence, and teams shouldn’t have to choose.</description>
      <content:encoded><![CDATA[<div class="tldr"><span class="tldr-k">TL;DR</span><p>Intelligence is no longer scarce, but guarantees are. Teams still choose between the flexibility of agents that plan and the predictability of predefined workflows, yet we think putting agents into production takes both.</p></div>
<p>Frontier models are making breakthroughs in science and mathematics, and intelligence has never been more abundant. Yet teams still argue over how much freedom to give their AI agents. One side writes every step in advance, as a predefined workflow. The other lets the agent plan its own steps. Both sides get something right.</p>
<h2 id="predefined-workflows-are-predictable">Predefined workflows are predictable</h2>
<p>A predefined workflow runs like an assembly line. Engineers lay out the steps in advance, and the model carries out each one as written. Every run takes the same path, so every output can be checked, and that is where the guarantees come from.</p>
<p>An accounts-receivable workflow matches each day’s customer payments to the invoices they settle, then applies them in the accounting system. Every run matches before it applies, so no payment is applied unmatched. And no step sends customers’ bank details anywhere but the accounting system.</p>
<p>The cost, of course, is the design effort up front, and brittleness when inputs vary in ways you didn’t anticipate. A customer pays three invoices with one wire, short by a disputed fee, and sends the remittance as a PDF no step expects. The payment drops into an exceptions queue for someone to work by hand.</p>
<h2 id="agents-adapt-at-the-cost-of-predictability">Agents adapt, at the cost of predictability</h2>
<p>An agent that plans its own steps takes cases like that in stride. Given the same wire, it reads the remittance, matches the invoices and logs the disputed fee, without anyone writing a step first. Each new model handles more of these cases.</p>
<p>But when the agent plans its own steps, the guarantees don’t come along. What the workflow enforced often becomes one more instruction in the agent’s AGENTS.md, weighed against everything else it reads. And the agent can be confidently wrong. It might decide a payment is close enough and skip the matching check. A script it wrote might upload a remittance, with the customer’s bank details, to an online PDF reader.</p>
<h2 id="both-sides-get-something-right">Both sides get something right</h2>
<p>It can seem that teams have to pick one: the flexibility of an agent that plans, or the predictability of a predefined workflow. But it’s when their powers are combined that we get to build something outstanding. We think each side is right about a different thing. The workflow is right that the business rules must hold on every run. The agent is right that the steps don’t need to be written in advance.</p>
<p><em>So how do you make business rules hold firm when an agent plans its own steps? That’s where <a href="https://onrails.run/blog/trusting-agents/">the next part of this series</a> picks up.</em></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
