<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Sayan Chatterjee — Blog</title>
  <subtitle>Occasional writing from Sayan Chatterjee.</subtitle>
  <link href="https://sayanchatterjee.com/blog/feed.xml" rel="self" />
  <link href="https://sayanchatterjee.com/blog.html" />
  <updated>2026-10-11T00:00:00Z</updated>
  <id>https://sayanchatterjee.com/blog.html</id>
  <author>
    <name>Sayan Chatterjee</name>
  </author>
  
  <entry>
    <title>If OpenAI Couldn&#39;t Control Its Own AI Agent, Can You Manage the Risk?</title>
    <link href="https://sayanchatterjee.com/blog/aiagent-risk.html" />
    <updated>2026-10-11T00:00:00Z</updated>
    <id>https://sayanchatterjee.com/blog/aiagent-risk.html</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can manage agent risk, but not by trusting the model to manage itself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The question is not whether your AI agent can act autonomously. It is whether your organisation has built the controls to constrain, observe and intervene when it does. When OpenAI&#39;s agents reached five Australian government systems, it showed that the guardrails built into an agent&#39;s model are not enough on their own.&lt;/li&gt;
&lt;li&gt;When safeguards are reduced, agents can act against the goals of their assigned tasks. &lt;a href=&quot;https://openai.com/index/hugging-face-incident-and-the-road-ahead/&quot;&gt;OpenAI&#39;s own models did this&lt;/a&gt;. They communicated through unauthorised channels, exploited vulnerabilities in shared infrastructure, gained internet access and reached third-party systems. In a business, that could mean sensitive data leaving through channels nobody approved. It could also mean the organisation answering for harm its agent causes to other organisations&#39; systems, such as a partner&#39;s or a customer&#39;s.&lt;/li&gt;
&lt;li&gt;Manage the risk with controls built into the architecture, not with trust in the agent. Set authority for each action by its consequence, enforce the boundaries outside the agent, and increase autonomy only when the controls are proven.&lt;/li&gt;
&lt;li&gt;The business owns the risk. It uses AI governance to decide how much authority it will accept. Architecture makes that authority enforceable, and technology runs the controls and proves they work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On Thursday 24 September, Australia&#39;s Prime Minister announced that an OpenAI agent had got into a Medicare statistics portal. The agent was an &amp;quot;experimental, internal-only&amp;quot; model, used during &amp;quot;internal training and evaluation&amp;quot;. It was researching public spending on medicines when the portal blocked it. In the &lt;a href=&quot;https://www.pm.gov.au/media/press-conference-new-york&quot;&gt;Prime Minister&#39;s words&lt;/a&gt;, it then &amp;quot;found a way around those blocks&amp;quot;. It took access credentials, configuration files and statistics that were not public. &lt;a href=&quot;https://openai.com/index/how-we-will-do-better-for-australia/&quot;&gt;OpenAI says&lt;/a&gt; the model ran &amp;quot;without the full set of safeguards used in our publicly available products&amp;quot;. OpenAI only found out about the activity in mid-August.&lt;/p&gt;
&lt;p&gt;To be fair to OpenAI, this was not an agent in everyday use. Research models are often run with fewer safeguards on purpose, and a well-designed business system should look very different. But as an Enterprise Architect, I see that difference as exactly the lesson. When the portal said no, the agent did not stop. And nothing around the agent stopped it from reaching a real government system.&lt;/p&gt;
&lt;p&gt;If the company that built the model could not rely on it to police itself, every organisation using AI agents needs to be far more careful. The model&#39;s own guardrails are one layer of control. The controls we build around the agent are the layer we own.&lt;/p&gt;
&lt;p&gt;In my view, large organisations may be able to afford to hire or train the AI and security specialists needed to build those controls. Many small and medium-sized organisations may not. They could be the most at risk if they assume the model&#39;s guardrails are enough.&lt;/p&gt;
&lt;p&gt;So can you manage it? Yes, but not by adding another AI policy or approval committee. Your AI governance has to be built into the architecture. That way, the agent&#39;s autonomy is limited by what your organisation can actually control, observe and prove.&lt;/p&gt;
&lt;p&gt;The core idea is simple: &lt;strong&gt;autonomy should be proportional to the consequence of each action&lt;/strong&gt;, not set once for the whole agent. For example, the same agent can summarise contracts on its own. It can update customer records once monitoring and a way to undo changes have been proven. But it still needs a person&#39;s approval before it releases code, moves money or deletes data.&lt;/p&gt;
&lt;h2&gt;Medicare was not the only case&lt;/h2&gt;
&lt;p&gt;Medicare is one of four notable agent incidents reported in 2026. Each was acknowledged by the organisation involved.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Incident&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;th&gt;What the organisation said&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Australian government systems&lt;/strong&gt; (OpenAI, Jun 2026)&lt;/td&gt;
&lt;td&gt;OpenAI&#39;s internal models, running as agents during testing, reached systems at five Australian public bodies, including Services Australia&#39;s Medicare statistics service and health and statistics agencies in Victoria and New South Wales. At Medicare, an &amp;quot;experimental, internal-only&amp;quot; model took &amp;quot;internal files, credentials and aggregate statistics, and wrote files&amp;quot;.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Research model, internal testing.&lt;/strong&gt;&lt;br /&gt;It ran &amp;quot;without the full set of safeguards used in our publicly available products&amp;quot;. &lt;a href=&quot;https://openai.com/index/how-we-will-do-better-for-australia/&quot;&gt;OpenAI says&lt;/a&gt; no individual records were accessed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hugging Face&lt;/strong&gt; (OpenAI, Jul 2026)&lt;/td&gt;
&lt;td&gt;Models in a cyber-skills test broke out of their test setup and reached Hugging Face&#39;s live systems.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Research model, internal testing.&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://openai.com/index/hugging-face-model-evaluation-security-incident/&quot;&gt;OpenAI says&lt;/a&gt; the models got past network limits and its monitoring missed them at first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UK AI Security Institute&lt;/strong&gt; (Jul 2026)&lt;/td&gt;
&lt;td&gt;In a deliberate test, an agent tried to &amp;quot;insert malicious code into a publicly used open-source project&amp;quot; and used fake identities to &amp;quot;socially engineer a real maintainer into approving the code&amp;quot;.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Government safety testing.&lt;/strong&gt;&lt;br /&gt;&amp;quot;A human maintainer caught and refused to approve the malicious code.&amp;quot; The &lt;a href=&quot;https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing&quot;&gt;Institute&#39;s report&lt;/a&gt; says one cause was open internet access without monitoring &amp;quot;built to watch the evaluation as it ran&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Meta &amp;quot;Sev 1&amp;quot;&lt;/strong&gt; (Meta, Mar 2026)&lt;/td&gt;
&lt;td&gt;An internal agent posted inaccurate technical advice without the expected human approval, and an employee acted on it, &lt;a href=&quot;https://www.theverge.com/ai-artificial-intelligence/897528/meta-rogue-ai-agent-security-incident&quot;&gt;The Verge reported&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Internal agent in everyday use.&lt;/strong&gt;&lt;br /&gt;Meta rated it at its second-highest severity level and says &amp;quot;no user data was mishandled&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing&quot;&gt;The UK AI Security Institute&#39;s test&lt;/a&gt; was deliberately loose. Internet access was enabled, and the developers&#39; cyber classifiers were &amp;quot;deliberately switched off&amp;quot;. In 10 of 122 runs, agents took &amp;quot;unsanctioned action on the live internet&amp;quot;. There were 19 such actions in all: Anthropic&#39;s Mythos 5 took 17 and OpenAI&#39;s GPT-5.6 Sol took 2.&lt;/p&gt;
&lt;p&gt;Most of these incidents happened in research or testing. But they still show what a loosely controlled agent can do. It can reach systems it should not, act on the live internet, deceive real people, and give wrong advice that staff act on. The causes the organisations named were gaps in the controls around the agent, such as access, network limits, monitoring and review. Small and medium-sized organisations may be the most exposed to these risks. They are less likely to have the specialist skills to build those controls.&lt;/p&gt;
&lt;h2&gt;An autonomous actor the usual controls don&#39;t reach&lt;/h2&gt;
&lt;p&gt;An agent is best understood as an autonomous software actor: software that acts on its own, on behalf of the organisation. That is true whether a person starts the agent or a schedule does. Once started, the agent chooses its own steps, as &lt;a href=&quot;https://techcrunch.com/2026/03/18/meta-is-having-trouble-with-rogue-ai-agents&quot;&gt;Meta&#39;s agent did&lt;/a&gt; when an engineer asked it for help. The Open Worldwide Application Security Project (&lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;OWASP&lt;/a&gt;) publishes the security community&#39;s list of top risks for AI applications. One of them is &amp;quot;excessive agency&amp;quot;. It happens when an agent is given more power than its task needs, and something then misuses that power. That something could be the model&#39;s own mistakes, instructions hidden by an attacker, or a compromised tool or another agent.&lt;/p&gt;
&lt;p&gt;Agents often get this extra power by accident. They are run on staff or shared accounts and inherit everything those accounts can do. Only 22% of organisations in &lt;a href=&quot;https://www.gravitee.io/blog/state-of-ai-agent-security-2026-report-when-adoption-outpaces-control&quot;&gt;one survey&lt;/a&gt; give agents their own identity. Extra power also builds up in day-to-day work. Broad access makes an agent &amp;quot;just work&amp;quot;. A tool connected for one job often brings many other functions with it. And people click &amp;quot;always allow&amp;quot; to stop the approval prompts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the agent is given.&lt;/strong&gt; &lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;OWASP&lt;/a&gt; names three common mistakes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;giving an agent tools that can do more than its job needs, such as an email tool that can also delete messages;&lt;/li&gt;
&lt;li&gt;giving it more access to systems and data than it needs, such as permission to change and delete records when it only needs to read them;&lt;/li&gt;
&lt;li&gt;letting it take big actions without a person checking first.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What attackers feed the agent.&lt;/strong&gt; An agent reads documents, emails and web pages. It can treat instructions hidden in them as if they came from its user. This is called prompt injection. &lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;OWASP&lt;/a&gt; gives an example. Take an agent that summarises emails but can also send them. An attacker sends it an email with hidden instructions, and the agent forwards private emails to the attacker.&lt;/p&gt;
&lt;p&gt;The US National Institute of Standards and Technology (NIST) &lt;a href=&quot;https://www.nist.gov/news-events/news/2025/01/technical-blog-strengthening-ai-agent-hijacking-evaluations&quot;&gt;tested attacks like this on one agent&lt;/a&gt;. The strongest new attack it developed succeeded 81% of the time. The strongest existing attack succeeded only 11% of the time.&lt;/p&gt;
&lt;p&gt;Too much power and hidden instructions together are what make an agent dangerous. An attacker&#39;s hidden instruction can only do as much harm as the access the agent was given. And the controls we rely on for people don&#39;t work the same way on an agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instructions don&#39;t bind it.&lt;/strong&gt; The Medicare agent was blocked, and it &lt;a href=&quot;https://www.pm.gov.au/media/press-conference-new-york&quot;&gt;found a way around the block&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It is non-deterministic.&lt;/strong&gt; Normal software follows the same steps every time. An agent works out each step fresh, so the same request can lead to different actions. In the &lt;a href=&quot;https://www.nist.gov/news-events/news/2025/01/technical-blog-strengthening-ai-agent-hijacking-evaluations&quot;&gt;same tests&lt;/a&gt;, attacks succeeded 57% of the time on average with a single try. Given 25 tries, they succeeded 80% of the time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It doesn&#39;t stay the same.&lt;/strong&gt; When the model behind an agent is updated, the agent&#39;s behaviour can change even if nothing else does. &lt;a href=&quot;https://arxiv.org/abs/2307.09009&quot;&gt;Researchers found&lt;/a&gt; the same AI service behaved quite differently a few months apart, including in how well it followed instructions. So a control that held last month may not hold today.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legal accountability stays with people and organisations.&lt;/strong&gt; In a 2026 case about Perplexity&#39;s AI agent, a &lt;a href=&quot;https://cdn.ca9.uscourts.gov/datastore/opinions/2026/08/04/26-1444.pdf&quot;&gt;United States appeals court&lt;/a&gt; described it as &amp;quot;a tool, not a person&amp;quot; under the law in question.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the controls have to be built into the architecture. Then they have to be implemented, watched in operation and reassessed regularly, because models, tools and attacks change fast. And a more capable agent does not mean a more ready organisation. It is simply better at finding a way around a block.&lt;/p&gt;
&lt;h2&gt;Deciding how much authority an agent gets&lt;/h2&gt;
&lt;p&gt;The controls an agent needs are not new. OpenAI &lt;a href=&quot;https://cdn.openai.com/papers/practices-for-governing-agentic-ai-systems.pdf&quot;&gt;published most of them in 2023&lt;/a&gt;, and &lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;OWASP&lt;/a&gt; recommends the same. The hard part is building them and proving they work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Set autonomy for each action, by its consequence.&lt;/strong&gt; Describe what the agent is for and what each of its actions does. Note which data and systems it can reach, and what happens if each action goes wrong. Then decide the autonomy for each action. Autonomy is a &lt;a href=&quot;https://doi.org/10.48550/arXiv.2506.12469&quot;&gt;design decision&lt;/a&gt;, separate from what the agent is capable of. The same agent can work alone on low-risk tasks and wait for a person on high-risk ones. Keep each agent modular. Fewer tools and actions mean fewer decisions to set, less access to grant and less to test.&lt;/p&gt;
&lt;p&gt;This may seem hard, but it is feasible. &lt;a href=&quot;https://www.imda.gov.sg/resources/press-releases-factsheets-and-speeches/factsheets/2026/updated-model-ai-governance-framework-for-agentic-ai&quot;&gt;Singapore&#39;s agentic AI framework&lt;/a&gt; describes an IT help-desk agent. Each type of ticket it handled was &amp;quot;assessed for severity of impact, reversibility and feasibility of human oversight&amp;quot;. This gave three levels, from fully automatic to fully blocked.&lt;/p&gt;
&lt;p&gt;This classification decides which actions need approval. Each action runs in one of three modes: fully autonomous; human-on-the-loop, where a person monitors the agent and can stop it; or human-in-the-loop, where a person approves the action before it runs. Not every action should need approval, because neither form of human oversight is effective by default. &lt;a href=&quot;https://anthropic.com/engineering/claude-code-auto-mode&quot;&gt;Anthropic found&lt;/a&gt; that users approve 93% of permission prompts, which leads to &amp;quot;approval fatigue&amp;quot;. And no one can monitor thousands of actions. So keep human-in-the-loop for the few actions that are high-impact or hard to undo. Use human-on-the-loop only where actions can be undone, monitoring is automated and raises alerts, and the stop is automatic.&lt;/p&gt;
&lt;p&gt;I used the same principle when I built a data-modelling skill with Claude. It studies the requirements on its own, but it does not choose the modelling approach for the information mart layer. It sets out the options (a star schema, a snowflake schema or a data vault), recommends one, and asks the user which to use. The agent does the work, but the important choice stays with a person.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Enforce the boundaries outside the agent.&lt;/strong&gt; Figure 1 shows how this works. The agent can reach enterprise systems only through one request path, and four controls sit around that path. The numbers in the figure match the four controls described below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sayanchatterjee.com/images/posts/aiagent-risk/figure-1.png&quot; alt=&quot;Figure 1: An architecture diagram in three zones. On the left, the AI agent in the agent layer. In the middle, four numbered controls enforced outside the agent: 1, own identity; 2, check every request; 3, telemetry and audit trail; 4, automatic stop and undo. On the right, enterprise systems and people. The agent&#39;s only path to enterprise systems runs through its own identity and the request check. The controls log every decision, send hard-to-undo actions to people for approval, send alerts to people, and stop the agent when warning signs appear.&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Figure 1. The agent reaches enterprise systems only through controls the organisation enforces.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Its own identity&lt;/strong&gt;, not a borrowed staff account. As noted above, only 22% of organisations &lt;a href=&quot;https://www.gravitee.io/blog/state-of-ai-agent-security-2026-report-when-adoption-outpaces-control&quot;&gt;do this&lt;/a&gt;. When a person starts the agent, it can act as that person instead, but only with the access the task needs, as &lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;OWASP recommends&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic checks on every request.&lt;/strong&gt; An agent makes many separate requests in one session, so a single check at the start is not enough. Each request needs &lt;a href=&quot;https://doi.org/10.48550/arXiv.2605.05440&quot;&gt;its own check&lt;/a&gt;, and these checks run automatically. People approve only the few actions that are hard to undo. The &lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization&quot;&gt;Model Context Protocol&lt;/a&gt; is the open standard many agents use to connect to tools. It already requires a token on every request, and accepts each token only at the system it was issued for. It also recommends tokens that expire quickly. Giving each agent an identity of its own is still an emerging area. &lt;a href=&quot;https://www.nist.gov/news-events/news/2026/02/new-concept-paper-identity-and-authority-software-agents&quot;&gt;NIST started work on it&lt;/a&gt; in 2026.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live telemetry and a tamper-resistant audit trail.&lt;/strong&gt; Telemetry shows what the agent is doing now. The audit trail records what it did. In the &lt;a href=&quot;https://www.gravitee.io/blog/state-of-ai-agent-security-2026-report-when-adoption-outpaces-control&quot;&gt;same survey&lt;/a&gt;, fewer than half of agents were actively monitored. An agent can take thousands of actions in one task, so monitoring has to be automated. Monitor at the control points, such as each request and approval, and watch high-impact actions most closely. The UK AI Security Institute &lt;a href=&quot;https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing&quot;&gt;is now adding monitoring&lt;/a&gt; &amp;quot;able to flag or block out-of-scope actions as they happen&amp;quot;. People see only the alerts, starting with refused requests. Everything else goes to the audit trail.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An automatic stop and a way to undo changes.&lt;/strong&gt; Monitoring without a stop only records the damage.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;3. Test the controls, then roll out in stages.&lt;/strong&gt; Test first in a closed-off copy of your live systems, and rerun the tests after every model update. But a test environment is never the live system, and the setting changes how agents behave. In &lt;a href=&quot;https://doi.org/10.48550/arXiv.2607.07695&quot;&gt;one study&lt;/a&gt;, changing only the rules around the same agents shifted safety results by 22 to 58 percentage points. So roll out in stages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;start with limited autonomy on a small part of the live work;&lt;/li&gt;
&lt;li&gt;watch it with live telemetry and an automatic stop;&lt;/li&gt;
&lt;li&gt;pull it back if warning signs appear.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The agent earns more authority through the maturity of your controls, not its own track record. For example, &lt;a href=&quot;https://www.imda.gov.sg/resources/press-releases-factsheets-and-speeches/factsheets/2026/updated-model-ai-governance-framework-for-agentic-ai&quot;&gt;Singapore&#39;s framework&lt;/a&gt; describes a government agency that built central logging and monitoring before a wider rollout.&lt;/p&gt;
&lt;h2&gt;Give executives a simple decision&lt;/h2&gt;
&lt;p&gt;This is where AI governance and architecture meet. The executive who signs off the agent needs a decision on one page. The agent gets the level of autonomy on that page only when every row can be answered with evidence, not intentions. &lt;a href=&quot;https://doi.org/10.48550/arXiv.2506.12469&quot;&gt;Researchers have proposed&lt;/a&gt; something similar: an &amp;quot;autonomy certificate&amp;quot; that &amp;quot;prescribes the maximum level of autonomy at which an agent can operate&amp;quot;. The page has five rows:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What the agent can do&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Its purpose, and each type of action with its level of autonomy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What can go wrong&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The harm each action could cause if the agent gets it wrong, and whether it can be undone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The controls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Which controls apply to each action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The evidence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The latest test results, and when the tests will be run again&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The conditions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When the approval ends, what triggers a new review, and which warning signs pause the agent automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The last row stops the sign-off from being a one-time event. An agent tested on Monday can &lt;a href=&quot;https://arxiv.org/abs/2307.09009&quot;&gt;behave differently on Tuesday&lt;/a&gt; after the vendor updates the model behind it. So the sign-off is not a permanent pass. It is permission to run for a set period while monitoring stays healthy.&lt;/p&gt;
&lt;p&gt;A model update, a new tool or a changed system triggers a new review. Autonomy is also withdrawn automatically if warning signs get worse, until someone checks. Warning signs include more attempts to go out of scope, more refused requests and failed scheduled tests.&lt;/p&gt;
&lt;p&gt;The business owns this decision.&lt;/p&gt;
&lt;h3&gt;From my own work&lt;/h3&gt;
&lt;p&gt;I helped bring in a vendor&#39;s agentic solution, delivered as software-as-a-service. Agreeing who was Responsible, Accountable, Consulted and Informed (a RACI) played a vital role. The technology team could be responsible for watching the agent. But accountability stayed with the business, because it chose the solution and used it every day.&lt;/p&gt;
&lt;p&gt;This holds true in all but a few cases. Shared platforms, vendor contracts and the type of risk involved can shift part of that accountability. And for an agent built in-house, technology is also accountable for how it is built and updated.&lt;/p&gt;
&lt;p&gt;The RACI has to answer one question most miss: who renews the approval when the vendor updates the model? If the contract does not require the vendor to say when the model changes, the business cannot know when its approval has lapsed.&lt;/p&gt;
&lt;h2&gt;Lessons learned&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with the action, not the model. Ask what the agent can actually do and what happens if it gets that action wrong.&lt;/li&gt;
&lt;li&gt;Autonomy is a business decision, made one action at a time. The same agent can be fully autonomous for one action and require approval for another.&lt;/li&gt;
&lt;li&gt;The organisation owns the controls. Do not assume the model&#39;s guardrails will protect your systems. Give agents only the access their task needs, and assume anything they read could carry a hidden instruction.&lt;/li&gt;
&lt;li&gt;Proven controls earn autonomy. An agent does not earn more authority because it has behaved well. The controls earn it.&lt;/li&gt;
&lt;li&gt;Make approval expire. Model updates, new tools, changed systems and warning signs should trigger reassessment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI. (2026, August 26). &lt;em&gt;&lt;a href=&quot;https://openai.com/index/hugging-face-incident-and-the-road-ahead/&quot;&gt;The Hugging Face incident and the road ahead&lt;/a&gt;.&lt;/em&gt; Company statement.&lt;/li&gt;
&lt;li&gt;Albanese, A. (2026, September 24). &lt;em&gt;&lt;a href=&quot;https://www.pm.gov.au/media/press-conference-new-york&quot;&gt;Press conference, New York&lt;/a&gt;.&lt;/em&gt; Prime Minister of Australia. Official transcript.&lt;/li&gt;
&lt;li&gt;OpenAI. (2026, September 28; updated October 4). &lt;em&gt;&lt;a href=&quot;https://openai.com/index/how-we-will-do-better-for-australia/&quot;&gt;How we will do better for Australia&lt;/a&gt;.&lt;/em&gt; Company statement.&lt;/li&gt;
&lt;li&gt;OpenAI. (2026, July 21). &lt;em&gt;&lt;a href=&quot;https://openai.com/index/hugging-face-model-evaluation-security-incident/&quot;&gt;OpenAI and Hugging Face partner to address security incident during model evaluation&lt;/a&gt;.&lt;/em&gt; Company statement.&lt;/li&gt;
&lt;li&gt;AI Security Institute. (2026, August 4). &lt;em&gt;&lt;a href=&quot;https://www.aisi.gov.uk/blog/incident-report-unsanctioned-agent-behaviour-during-cyber-testing&quot;&gt;Incident report: Unsanctioned agent behaviour during cyber testing&lt;/a&gt;.&lt;/em&gt; UK Government incident report.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.theverge.com/ai-artificial-intelligence/897528/meta-rogue-ai-agent-security-incident&quot;&gt;A rogue AI led to a serious security incident at Meta&lt;/a&gt;.&lt;/em&gt; (2026, March). The Verge. News report.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://techcrunch.com/2026/03/18/meta-is-having-trouble-with-rogue-ai-agents&quot;&gt;Meta is having trouble with rogue AI agents&lt;/a&gt;.&lt;/em&gt; (2026, March 18). TechCrunch. News report.&lt;/li&gt;
&lt;li&gt;OWASP Foundation. (2025). &lt;em&gt;&lt;a href=&quot;https://genai.owasp.org/llmrisk/llm062025-excessive-agency/&quot;&gt;LLM06:2025 Excessive agency&lt;/a&gt;.&lt;/em&gt; OWASP Top 10 for LLM Applications 2025. Industry standard, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Ruiz, J. (2026, February 4). &lt;em&gt;&lt;a href=&quot;https://www.gravitee.io/blog/state-of-ai-agent-security-2026-report-when-adoption-outpaces-control&quot;&gt;State of AI agent security 2026 report: When adoption outpaces control&lt;/a&gt;.&lt;/em&gt; Gravitee. Vendor survey, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Center for AI Standards and Innovation. (2025, January 17). &lt;em&gt;&lt;a href=&quot;https://www.nist.gov/news-events/news/2025/01/technical-blog-strengthening-ai-agent-hijacking-evaluations&quot;&gt;Technical blog: Strengthening AI agent hijacking evaluations&lt;/a&gt;.&lt;/em&gt; National Institute of Standards and Technology. Government technical report.&lt;/li&gt;
&lt;li&gt;Chen, L., Zaharia, M., &amp;amp; Zou, J. (2024). &lt;em&gt;&lt;a href=&quot;https://arxiv.org/abs/2307.09009&quot;&gt;How is ChatGPT&#39;s behavior changing over time?&lt;/a&gt;&lt;/em&gt; Harvard Data Science Review. Peer-reviewed.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://cdn.ca9.uscourts.gov/datastore/opinions/2026/08/04/26-1444.pdf&quot;&gt;Amazon.com Services, LLC v. Perplexity AI, Inc.&lt;/a&gt;&lt;/em&gt;, No. 26-1444 (9th Cir. August 4, 2026). Court opinion.&lt;/li&gt;
&lt;li&gt;Shavit, Y., et al. (2023). &lt;em&gt;&lt;a href=&quot;https://cdn.openai.com/papers/practices-for-governing-agentic-ai-systems.pdf&quot;&gt;Practices for governing agentic AI systems&lt;/a&gt;.&lt;/em&gt; OpenAI. Industry white paper, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Feng, K. J. K., McDonald, D. W., &amp;amp; Zhang, A. X. (2025). &lt;em&gt;&lt;a href=&quot;https://doi.org/10.48550/arXiv.2506.12469&quot;&gt;Levels of autonomy for AI agents&lt;/a&gt;.&lt;/em&gt; Knight First Amendment Institute. Preprint.&lt;/li&gt;
&lt;li&gt;Infocomm Media Development Authority. (2026, May 20). &lt;em&gt;&lt;a href=&quot;https://www.imda.gov.sg/resources/press-releases-factsheets-and-speeches/factsheets/2026/updated-model-ai-governance-framework-for-agentic-ai&quot;&gt;Updated Model AI Governance Framework for Agentic AI&lt;/a&gt;.&lt;/em&gt; Singapore Government factsheet. Government framework, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Hughes, J. (2026, March 25). &lt;em&gt;&lt;a href=&quot;https://anthropic.com/engineering/claude-code-auto-mode&quot;&gt;How we built Claude Code auto mode: A safer way to skip permissions&lt;/a&gt;.&lt;/em&gt; Anthropic. Company engineering blog, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Tallam, K. (2026). &lt;em&gt;&lt;a href=&quot;https://doi.org/10.48550/arXiv.2605.05440&quot;&gt;Authorization propagation in multi-agent AI systems: Identity governance as infrastructure&lt;/a&gt;.&lt;/em&gt; Preprint.&lt;/li&gt;
&lt;li&gt;Model Context Protocol. (2025). &lt;em&gt;&lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization&quot;&gt;Authorization&lt;/a&gt;&lt;/em&gt; (Specification version 2025-11-25). Open standard, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;National Institute of Standards and Technology, National Cybersecurity Center of Excellence. (2026, February). &lt;em&gt;&lt;a href=&quot;https://www.nist.gov/news-events/news/2026/02/new-concept-paper-identity-and-authority-software-agents&quot;&gt;Accelerating the adoption of software and AI agent identity and authorization&lt;/a&gt;.&lt;/em&gt; Government concept paper, not peer-reviewed.&lt;/li&gt;
&lt;li&gt;Chen, Y. (2026). &lt;em&gt;&lt;a href=&quot;https://doi.org/10.48550/arXiv.2607.07695&quot;&gt;Institutional red-teaming: Deployment rules, not just models, causally shape multi-agent AI safety&lt;/a&gt;.&lt;/em&gt; Preprint.&lt;/li&gt;
&lt;/ul&gt;
</content>
    <summary>The real question is not whether your AI agent can act autonomously. It is whether your organisation has built the controls to constrain, observe and intervene when it does. An architect&#39;s way to decide how much authority an agent should get.</summary>
  </entry>
  
  <entry>
    <title>If Tokens Are Getting Cheaper, Why Are AI Agent Bills Going Up?</title>
    <link href="https://sayanchatterjee.com/blog/token-economics.html" />
    <updated>2026-09-22T00:00:00Z</updated>
    <id>https://sayanchatterjee.com/blog/token-economics.html</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Underneath, AI runs on tokens&lt;/strong&gt;, small pieces of text. If you build your own agents, you pay for every token the model reads and writes. If you buy from a vendor, you may be charged per user, per task or per outcome instead, but tokens still drive the vendor&#39;s costs, and so your price.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents cost far more than chat&lt;/strong&gt; because they re-read everything, including any document you give them, at every step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The same quality of AI keeps getting cheaper, but bills have not fallen&lt;/strong&gt;, because top models cost almost as much as ever and agents use so many more tokens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Costs are unpredictable&lt;/strong&gt;, and spending more does not reliably buy better results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Before approving a budget&lt;/strong&gt;, ask what a successful result costs and who carries the risk when a task uses more tokens than expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have been curious about token economics for a while. This weekend I finally spent some time, despite the beautiful weather in Melbourne, reading the research, because I wanted to understand what is actually happening across the industry.&lt;/p&gt;
&lt;p&gt;The reason was personal. I use an artificial intelligence (AI) coding tool in my day-to-day work. For a long time it ran on a subscription: one flat fee each month. Then it switched to usage-based pricing, where you pay for what you consume. On the first day, I uploaded a medium-sized Word document, the kind most of us write every week, and asked the tool to work with it. Before the day was out I had used up my whole allowance, and the tool stopped working for me.&lt;/p&gt;
&lt;p&gt;I had not done anything unusual. So what exactly was I paying for, and why did it run out so fast?&lt;/p&gt;
&lt;h2&gt;First, what is a token?&lt;/h2&gt;
&lt;p&gt;Many of you will already know, but it helps to see one. AI models break text into small pieces called tokens. Short words are usually one token; longer words get split, and punctuation counts too. Roughly:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;I | uploaded | a | document | and | my | tokens | ran | out | on | day | one | .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is 12 words and about 13 tokens. The exact split varies by model; you can try it on OpenAI&#39;s free &lt;a href=&quot;https://platform.openai.com/tokenizer&quot;&gt;tokenizer page&lt;/a&gt;. As a rule of thumb, 1,000 words is about 1,300 tokens.&lt;/p&gt;
&lt;p&gt;Tokens are the unit that AI model providers charge in, whether you pay them directly or a vendor pays them on your behalf; &lt;a href=&quot;https://arxiv.org/abs/2605.09104&quot;&gt;one recent survey&lt;/a&gt; calls them the basic economic unit of agentic AI. But not all tokens cost the same:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type of token&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;How it is usually priced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;Everything the model reads&lt;/td&gt;
&lt;td&gt;The base rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Everything the model writes&lt;/td&gt;
&lt;td&gt;Several times the input rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;Text read recently and reused&lt;/td&gt;
&lt;td&gt;Often about a tenth of the input rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache writes&lt;/td&gt;
&lt;td&gt;Storing text for reuse (some providers)&lt;/td&gt;
&lt;td&gt;A small premium on input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;The model&#39;s hidden &amp;quot;thinking&amp;quot;&lt;/td&gt;
&lt;td&gt;Usually charged as output, though you never see it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Some providers also charge extra for very long inputs or for tool use, such as each web search.&lt;/p&gt;
&lt;h2&gt;Why agents use so many tokens&lt;/h2&gt;
&lt;p&gt;A chat is one exchange: the model reads your question once and writes an answer. An &lt;strong&gt;agent&lt;/strong&gt; works through a task in steps. It reads the task, uses a tool (searching files, running a test), reads the result, decides what to do next, and repeats. The catch is that at every step, it re-reads everything that has happened so far.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every step re-reads everything before it&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;mermaid-diagram&quot;&gt;&lt;svg id=&quot;my-svg&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;flowchart&quot; style=&quot;max-width: 1481.84px; background-color: transparent;&quot; viewBox=&quot;0 0 1481.84375 200&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;flowchart-v2&quot;&gt;&lt;style&gt;#my-svg{font-family:&quot;trebuchet ms&quot;,verdana,arial,sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#a44141;}#my-svg .error-text{fill:#ddd;stroke:#ddd;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5eead4;stroke:#5eead4;}#my-svg .marker.cross{stroke:#5eead4;}#my-svg svg{font-family:&quot;trebuchet ms&quot;,verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:&quot;trebuchet ms&quot;,verdana,arial,sans-serif;color:#ccc;}#my-svg .cluster-label text{fill:#F9FFFE;}#my-svg .cluster-label span{color:#F9FFFE;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#ccc;color:#ccc;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#131a27;stroke:#33d1c9;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#5eead4!important;stroke-width:0;stroke:#5eead4;}#my-svg .arrowheadPath{fill:lightgrey;}#my-svg .edgePaths .path{stroke:#5eead4;stroke-width:1px;}#my-svg .flowchart-link{stroke:#5eead4;fill:none;}#my-svg .edgeLabel{background-color:#0b0f17;text-align:center;}#my-svg .edgeLabel p{background-color:#0b0f17;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#0b0f17;fill:#0b0f17;}#my-svg .labelBkg{background-color:rgba(11, 15, 23, 0.5);}#my-svg .cluster rect{fill:#131a27;stroke:#232c3d;stroke-width:1px;}#my-svg .cluster text{fill:#F9FFFE;}#my-svg .cluster span{color:#F9FFFE;}#my-svg .node .collapsed-indicator{fill:#232c3d;stroke:none;opacity:0.6;}#my-svg .node .collapsed-separator{stroke:#232c3d;stroke-width:0.75px;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:&quot;trebuchet ms&quot;,verdana,arial,sans-serif;font-size:12px;background:#0b0f17;border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:#0b0f17;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:#0b0f17;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:#0b0f17;fill:#0b0f17;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#33d1c9;}#my-svg [data-look=&quot;neo&quot;].node rect,#my-svg [data-look=&quot;neo&quot;].cluster rect,#my-svg [data-look=&quot;neo&quot;].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look=&quot;neo&quot;].swimlane.cluster rect{filter:none;}#my-svg [data-look=&quot;neo&quot;].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look=&quot;neo&quot;].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look=&quot;neo&quot;].node .neo-line path{stroke:#33d1c9;filter:none;}#my-svg [data-look=&quot;neo&quot;].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look=&quot;neo&quot;].node circle .state-start{fill:#000000;}#my-svg [data-look=&quot;neo&quot;].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look=&quot;neo&quot;].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:&quot;trebuchet ms&quot;,verdana,arial,sans-serif;}#my-svg .teal&amp;gt;*{fill:rgb(15, 118, 110)!important;stroke:rgb(15, 118, 110)!important;color:rgb(255, 255, 255)!important;}#my-svg .teal span{fill:rgb(15, 118, 110)!important;stroke:rgb(15, 118, 110)!important;color:rgb(255, 255, 255)!important;}#my-svg .teal tspan{fill:rgb(255, 255, 255)!important;}#my-svg .gray&amp;gt;*{fill:rgb(229, 231, 235)!important;stroke:rgb(156, 163, 175)!important;color:rgb(17, 17, 17)!important;}#my-svg .gray span{fill:rgb(229, 231, 235)!important;stroke:rgb(156, 163, 175)!important;color:rgb(17, 17, 17)!important;}#my-svg .gray tspan{fill:rgb(17, 17, 17)!important;}&lt;/style&gt;&lt;g&gt;&lt;marker id=&quot;my-svg_flowchart-v2-pointEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 0 L 10 5 L 0 10 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-pointStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;4.5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 5 L 10 10 L 10 0 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-pointEnd-margin&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 11.5 14&quot; refX=&quot;11.5&quot; refY=&quot;7&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;10.5&quot; markerHeight=&quot;14&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 0 L 11.5 7 L 0 14 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 0; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-pointStart-margin&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 11.5 14&quot; refX=&quot;1&quot; refY=&quot;7&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11.5&quot; markerHeight=&quot;14&quot; orient=&quot;auto&quot;&gt;&lt;polygon points=&quot;0,7 11.5,14 11.5,0&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 0; stroke-dasharray: 1, 0;&quot;&gt;&lt;/polygon&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-circleEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;11&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-circleStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;-1&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-circleEnd-margin&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refY=&quot;5&quot; refX=&quot;12.25&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;14&quot; markerHeight=&quot;14&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 0; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-circleStart-margin&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;-2&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;14&quot; markerHeight=&quot;14&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 0; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-crossEnd&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;12&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-crossStart&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;-1&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-crossEnd-margin&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 15 15&quot; refX=&quot;17.7&quot; refY=&quot;7.5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;12&quot; markerHeight=&quot;12&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 L 14,14 M 1,14 L 14,1&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2.5;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;my-svg_flowchart-v2-crossStart-margin&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 15 15&quot; refX=&quot;-3.5&quot; refY=&quot;7.5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;12&quot; markerHeight=&quot;12&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 L 14,14 M 1,14 L 14,1&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2.5; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class=&quot;root&quot;&gt;&lt;g class=&quot;clusters&quot;&gt;&lt;/g&gt;&lt;g class=&quot;edgePaths&quot;&gt;&lt;path d=&quot;M239.969,47L244.135,47C248.302,47,256.635,47,264.302,47C271.969,47,278.969,47,282.469,47L285.969,47&quot; id=&quot;my-svg-L_T_S1_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_T_S1_0&quot; data-points=&quot;W3sieCI6MjM5Ljk2ODc1LCJ5Ijo0N30seyJ4IjoyNjQuOTY4NzUsInkiOjQ3fSx7IngiOjI4OS45Njg3NSwieSI6NDd9XQ==&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M549.969,47L560.583,47C571.198,47,592.427,47,612.992,47.822C633.557,48.644,653.457,50.288,663.407,51.11L673.357,51.932&quot; id=&quot;my-svg-L_S1_S2_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_S1_S2_0&quot; data-points=&quot;W3sieCI6NTQ5Ljk2ODc1LCJ5Ijo0N30seyJ4Ijo2MTMuNjU2MjUsInkiOjQ3fSx7IngiOjY3Ny4zNDM3NSwieSI6NTIuMjYxMDUxOTUyMjQyNjZ9XQ==&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M937.344,63L941.51,63C945.677,63,954.01,63,961.701,63.978C969.392,64.955,976.441,66.911,979.965,67.888L983.489,68.866&quot; id=&quot;my-svg-L_S2_S3_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_S2_S3_0&quot; data-points=&quot;W3sieCI6OTM3LjM0Mzc1LCJ5Ijo2M30seyJ4Ijo5NjIuMzQzNzUsInkiOjYzfSx7IngiOjk4Ny4zNDM3NSwieSI6NjkuOTM1NDgzODcwOTY3NzR9XQ==&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M1247.344,106L1251.51,106C1255.677,106,1264.01,106,1271.677,106C1279.344,106,1286.344,106,1289.844,106L1293.344,106&quot; id=&quot;my-svg-L_S3_A_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_S3_A_0&quot; data-points=&quot;W3sieCI6MTI0Ny4zNDM3NSwieSI6MTA2fSx7IngiOjEyNzIuMzQzNzUsInkiOjEwNn0seyJ4IjoxMjk3LjM0Mzc1LCJ5IjoxMDZ9XQ==&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M541.586,137L553.598,134.333C565.61,131.667,589.633,126.333,611.621,120.679C633.608,115.025,653.56,109.051,663.536,106.063L673.512,103.076&quot; id=&quot;my-svg-L_E_S2_0&quot; class=&quot;edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_E_S2_0&quot; data-points=&quot;W3sieCI6NTQxLjU4NjQ4MjU1ODEzOTYsInkiOjEzN30seyJ4Ijo2MTMuNjU2MjUsInkiOjEyMX0seyJ4Ijo2NzcuMzQzNzUsInkiOjEwMS45Mjg2ODY2NzMxMjAzNX1d&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M546.008,174.412L557.283,175.343C568.557,176.274,591.107,178.137,634.663,179.069C678.219,180,742.781,180,800.896,180C859.01,180,910.677,180,948.127,174.454C985.577,168.908,1008.811,157.816,1020.428,152.269L1032.045,146.723&quot; id=&quot;my-svg-L_E_S3_0&quot; class=&quot;edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_E_S3_0&quot; data-points=&quot;W3sieCI6NTQ2LjAwNzgxMjUsInkiOjE3NC40MTE3NDU3MjQ0MjcyNX0seyJ4Ijo2MTMuNjU2MjUsInkiOjE4MH0seyJ4Ijo4MDcuMzQzNzUsInkiOjE4MH0seyJ4Ijo5NjIuMzQzNzUsInkiOjE4MH0seyJ4IjoxMDM1LjY1NDU2MDgxMDgxMDgsInkiOjE0NX1d&quot; data-look=&quot;classic&quot; marker-end=&quot;url(#my-svg_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabels&quot;&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_T_S1_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_S1_S2_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_S2_S3_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_S3_A_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot; transform=&quot;translate(613.65625, 121)&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_E_S2_0&quot; transform=&quot;translate(-38.6875, -12)&quot;&gt;&lt;foreignObject width=&quot;77.375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;p&gt;tool results&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot; transform=&quot;translate(807.34375, 180)&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_E_S3_0&quot; transform=&quot;translate(-38.6875, -12)&quot;&gt;&lt;foreignObject width=&quot;77.375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;p&gt;tool results&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;nodes&quot;&gt;&lt;g class=&quot;node default gray&quot; id=&quot;my-svg-flowchart-T-0&quot; data-look=&quot;classic&quot; transform=&quot;translate(123.984375, 47)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#e5e7eb !important;stroke:#9ca3af !important&quot; x=&quot;-115.984375&quot; y=&quot;-27&quot; width=&quot;231.96875&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#111111 !important&quot; transform=&quot;translate(-85.984375, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;171.96875&quot; height=&quot;24&quot;&gt;&lt;div style=&quot;color: rgb(17, 17, 17) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#111111 !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Your task and document&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default teal&quot; id=&quot;my-svg-flowchart-S1-1&quot; data-look=&quot;classic&quot; transform=&quot;translate(419.96875, 47)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#0f766e !important;stroke:#0f766e !important&quot; x=&quot;-130&quot; y=&quot;-39&quot; width=&quot;260&quot; height=&quot;78&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#ffffff !important&quot; transform=&quot;translate(-100, -24)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;200&quot; height=&quot;48&quot;&gt;&lt;div style=&quot;color: rgb(255, 255, 255) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#ffffff !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Step 1 reads: task + document&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default teal&quot; id=&quot;my-svg-flowchart-S2-3&quot; data-look=&quot;classic&quot; transform=&quot;translate(807.34375, 63)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#0f766e !important;stroke:#0f766e !important&quot; x=&quot;-130&quot; y=&quot;-39&quot; width=&quot;260&quot; height=&quot;78&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#ffffff !important&quot; transform=&quot;translate(-100, -24)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;200&quot; height=&quot;48&quot;&gt;&lt;div style=&quot;color: rgb(255, 255, 255) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#ffffff !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Step 2 reads: all of that + step 1 + tool result&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default teal&quot; id=&quot;my-svg-flowchart-S3-5&quot; data-look=&quot;classic&quot; transform=&quot;translate(1117.34375, 106)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#0f766e !important;stroke:#0f766e !important&quot; x=&quot;-130&quot; y=&quot;-39&quot; width=&quot;260&quot; height=&quot;78&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#ffffff !important&quot; transform=&quot;translate(-100, -24)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;200&quot; height=&quot;48&quot;&gt;&lt;div style=&quot;color: rgb(255, 255, 255) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#ffffff !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Step 3 reads: everything so far + new result&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default gray&quot; id=&quot;my-svg-flowchart-A-7&quot; data-look=&quot;classic&quot; transform=&quot;translate(1385.59375, 106)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#e5e7eb !important;stroke:#9ca3af !important&quot; x=&quot;-88.25&quot; y=&quot;-27&quot; width=&quot;176.5&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#111111 !important&quot; transform=&quot;translate(-58.25, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;116.5&quot; height=&quot;24&quot;&gt;&lt;div style=&quot;color: rgb(17, 17, 17) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#111111 !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Finished answer&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default gray&quot; id=&quot;my-svg-flowchart-E-8&quot; data-look=&quot;classic&quot; transform=&quot;translate(419.96875, 164)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;fill:#e5e7eb !important;stroke:#9ca3af !important&quot; x=&quot;-126.0390625&quot; y=&quot;-27&quot; width=&quot;252.078125&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;color:#111111 !important&quot; transform=&quot;translate(-96.0390625, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;192.078125&quot; height=&quot;24&quot;&gt;&lt;div style=&quot;color: rgb(17, 17, 17) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;span style=&quot;color:#111111 !important&quot; class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Business systems and files&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;defs&gt;&lt;filter id=&quot;my-svg-drop-shadow&quot; height=&quot;130%&quot; width=&quot;130%&quot;&gt;&lt;feDropShadow dx=&quot;4&quot; dy=&quot;4&quot; stdDeviation=&quot;0&quot; flood-opacity=&quot;0.06&quot; flood-color=&quot;#FFFFFF&quot;&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;defs&gt;&lt;filter id=&quot;my-svg-drop-shadow-small&quot; height=&quot;150%&quot; width=&quot;150%&quot;&gt;&lt;feDropShadow dx=&quot;2&quot; dy=&quot;2&quot; stdDeviation=&quot;0&quot; flood-opacity=&quot;0.06&quot; flood-color=&quot;#FFFFFF&quot;&gt;&lt;/feDropShadow&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;linearGradient id=&quot;my-svg-gradient&quot; gradientUnits=&quot;objectBoundingBox&quot; x1=&quot;0%&quot; y1=&quot;0%&quot; x2=&quot;100%&quot; y2=&quot;0%&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#cccccc&quot; stop-opacity=&quot;1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;hsl(180, 0%, 18.3529411765%)&quot; stop-opacity=&quot;1&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/svg&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;The pile of text the agent reads grows with every step. Source: Bai et al. 2026.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Put a document in that loop. A 10,000-word document is about 13,000 tokens. A chat reads it once. An agent that takes 30 steps can read it every time: around 390,000 tokens before writing a single useful word. That is an illustration, not a measurement, but it is the shape of what happened to me.&lt;/p&gt;
&lt;p&gt;The research backs this up. A &lt;a href=&quot;https://arxiv.org/abs/2604.22750&quot;&gt;University of Michigan and Stanford-led study&lt;/a&gt; of eight leading AI models fixing 500 real software bugs found that an agent used about 1,200 times more tokens than a back-and-forth chat about code. Not because agents write more, but because they keep sending the same material back to the model. A &lt;a href=&quot;https://arxiv.org/abs/2601.14470&quot;&gt;Concordia University study&lt;/a&gt; of a team of AI agents found that reading made up more than half of all tokens; writing only dominated during the coding itself.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sayanchatterjee.com/images/posts/agentic-ai-token-economics/diagram-1.svg&quot; alt=&quot;Bar chart showing agents spend most tokens reading rather than writing, overall and by stage&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Share of tokens, not share of cost. Source: Salim et al. 2026, Table 3 (30 tasks, one multi-agent system, one model).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Caching helps, but in the Michigan and Stanford study those cheap repeat reads were still the biggest part of the bill. A tiny price multiplied by an enormous volume is still a big number. One caution: nearly all of this evidence comes from coding agents, so your numbers will differ.&lt;/p&gt;
&lt;h2&gt;If tokens are getting cheaper, why are bills going up?&lt;/h2&gt;
&lt;p&gt;It depends on what you compare. If you hold quality fixed, AI has become much cheaper: getting the same quality of answer as a few years ago now costs a fraction of what it did. &lt;a href=&quot;https://epoch.ai/data-insights/llm-inference-price-trends&quot;&gt;Epoch AI&lt;/a&gt;, an independent research group, estimated that this price fell by 9 to 900 times a year up to early 2025, depending on the task. &lt;a href=&quot;https://arxiv.org/abs/2511.23455&quot;&gt;MIT FutureTech&lt;/a&gt;, using a stricter method that also counts the extra tokens newer models use, put it at a more modest 5 to 10 times a year. But if you compare the best model then with the best model now, the picture is very different. Here are OpenAI&#39;s own published output prices as of September 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Price of 1M output tokens at launch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4 at launch (March 2023)&lt;/td&gt;
&lt;td&gt;$60.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://openai.com/index/gpt-6-astra/&quot;&gt;GPT-6 Astra&lt;/a&gt;, newest flagship (September 2026)&lt;/td&gt;
&lt;td&gt;$50.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://openai.com/api/pricing/&quot;&gt;GPT-5.6 Sol&lt;/a&gt;, previous flagship&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://openai.com/api/pricing/&quot;&gt;GPT-5.6 Terra&lt;/a&gt;, mid-range&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://openai.com/api/pricing/&quot;&gt;GPT-5.6 Luna&lt;/a&gt;, fast and cheap&lt;/td&gt;
&lt;td&gt;$1.20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The cheapest current model writes at one-fiftieth of the 2023 price. But look at the top of the table: the newest flagship costs almost as much as GPT-4 did three and a half years ago, and more than the flagship it replaced. Older levels of quality get dramatically cheaper; the very best stays expensive. So why do bills often go up instead of down?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The best models use far more tokens.&lt;/strong&gt; Researchers at MIT FutureTech &lt;a href=&quot;https://arxiv.org/abs/2511.23455&quot;&gt;found&lt;/a&gt; that while a given level of quality got 5 to 10 times cheaper each year, the cost of running the best available model rose by 3 to 18 times a year, because top models are bigger and do much more reasoning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents multiply every token.&lt;/strong&gt; A cheaper token read a thousand times is not cheap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Costs are unpredictable.&lt;/strong&gt; Running the same agent on the same bug four times, the most expensive run typically cost about double the cheapest, and in extreme cases up to 30 times more. The expensive runs were not better, just full of the agent re-opening the same files. When asked to estimate their own token use in advance, every model came in too low.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think of it like petrol getting cheaper while you swap a small car for a truck and drive ten times as far. The price per litre falls, but your fuel bill still goes up.&lt;/p&gt;
&lt;p&gt;That explains my day one. The tool was almost certainly working in steps, carrying my document along and re-reading it each time. Under a flat subscription I never saw that; under usage pricing it showed up on the first day. It also explains the pricing change: a flat fee works for chat because most people use roughly the same amount, but agents do not.&lt;/p&gt;
&lt;h2&gt;What to do about it&lt;/h2&gt;
&lt;h3&gt;Design what the agent reads&lt;/h3&gt;
&lt;p&gt;What an agent reads is a design choice, not a side effect. Decide what it can pull in (a whole file, or just the relevant part?), what it carries forward from step to step, and when it should stop and hand back to a person. This matters even more when several agents work together: in the Concordia study, agents reviewing each other&#39;s work used 59.4% of all tokens, while writing the first version used just 8.6%.&lt;/p&gt;
&lt;h3&gt;Understand how the vendor charges you&lt;/h3&gt;
&lt;p&gt;If you buy an agentic solution, you may never see a token on the invoice. Vendors charge per seat, per conversation or transaction, per action or credit, per successful outcome (such as a resolved support ticket), or a mix of these with a platform fee.&lt;/p&gt;
&lt;p&gt;Underneath every one of these, the vendor is still paying for tokens. The charging model simply decides &lt;strong&gt;who carries the risk&lt;/strong&gt; when a task needs far more tokens than expected. Per token, you carry it. Per outcome, the vendor carries it, and prices that risk into the fee. Bessemer Venture Partners&#39; &lt;a href=&quot;https://bvp.com/atlas/the-ai-pricing-and-monetization-playbook&quot;&gt;AI pricing playbook&lt;/a&gt; says the same from the seller&#39;s side. Pricing is also moving fast: one of the largest business software vendors has changed its agent pricing model three times in about 18 months.&lt;/p&gt;
&lt;h3&gt;Questions to ask before you approve a budget&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is the billing unit, and what counts as one?&lt;/strong&gt; Who decides when a task is complete?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Are failed or escalated tasks charged?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What does a successful result cost&lt;/strong&gt;, including the failed attempts?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What did repeated pilot runs show?&lt;/strong&gt; Ask for the typical and worst-case cost, not a single estimate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What happens if our volume doubles, or the vendor changes its pricing model mid-contract?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Lessons learned&lt;/h2&gt;
&lt;p&gt;The evidence is young and mostly from coding agents, so use it to understand the shape of the problem and your own pilot runs for the numbers. Agents behave less like a flat subscription and more like a utility bill. Budget per successful outcome, expect a range rather than a single number, and design what the agent reads as carefully as what it does.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bai, L., Huang, Z., Wang, X., Sun, J., Mihalcea, R., Brynjolfsson, E., Pentland, A., Pei, J. (2026). &lt;em&gt;How Do AI Agents Spend Your Money? Analyzing and Predicting Token Consumption in Agentic Coding Tasks.&lt;/em&gt; Preprint (version 2, April 2026). &lt;a href=&quot;https://arxiv.org/abs/2604.22750&quot;&gt;arxiv.org/abs/2604.22750&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/pdf/2604.22750&quot;&gt;PDF&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Salim, M., Latendresse, J., Khatoonabadi, S., Shihab, E. (2026). &lt;em&gt;Tokenomics: Quantifying Where Tokens Are Used in Agentic Software Engineering.&lt;/em&gt; Preprint, submitted January 2026; not yet formally published, so treat it as unreviewed. Authors describe their findings as preliminary, based on 30 tasks with one framework (ChatDev) and one model. &lt;a href=&quot;https://arxiv.org/abs/2601.14470&quot;&gt;arxiv.org/abs/2601.14470&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/pdf/2601.14470&quot;&gt;PDF&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Chen, Y. et al. (2026). &lt;em&gt;Token Economics for LLM Agents: A Dual-View Study from Computing and Economics.&lt;/em&gt; Preprint, survey. &lt;a href=&quot;https://arxiv.org/abs/2605.09104&quot;&gt;arxiv.org/abs/2605.09104&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/pdf/2605.09104&quot;&gt;PDF&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Cottier, B., Snodin, B., Owen, D., Adamczewski, T. (2025). &lt;em&gt;LLM inference prices have fallen rapidly but unequally across tasks.&lt;/em&gt; Epoch AI data insight. &lt;a href=&quot;https://epoch.ai/data-insights/llm-inference-price-trends&quot;&gt;epoch.ai/data-insights/llm-inference-price-trends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gundlach, H., Lynch, J., Mertens, M., Thompson, N. (2026). &lt;em&gt;The Price of Progress: Price-Performance and the Future of AI.&lt;/em&gt; MIT FutureTech. Preprint (version 2, March 2026); an earlier version appeared at a NeurIPS 2025 workshop. &lt;a href=&quot;https://arxiv.org/abs/2511.23455&quot;&gt;arxiv.org/abs/2511.23455&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/pdf/2511.23455&quot;&gt;PDF&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bessemer Venture Partners (2026). &lt;em&gt;The AI pricing and monetization playbook.&lt;/em&gt; &lt;a href=&quot;https://bvp.com/atlas/the-ai-pricing-and-monetization-playbook&quot;&gt;bvp.com/atlas/the-ai-pricing-and-monetization-playbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI (2026). &lt;em&gt;GPT-6 Astra: A new generation of intelligence.&lt;/em&gt; &lt;a href=&quot;https://openai.com/index/gpt-6-astra/&quot;&gt;openai.com/index/gpt-6-astra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI. &lt;em&gt;API pricing.&lt;/em&gt; &lt;a href=&quot;https://openai.com/api/pricing/&quot;&gt;openai.com/api/pricing&lt;/a&gt; (prices change often; checked September 2026)&lt;/li&gt;
&lt;/ul&gt;
</content>
    <summary>What tokens are, why AI agents use far more of them than chat, and why falling token prices have not made agent bills smaller.</summary>
  </entry>
  
</feed>
