<?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>ClerkTree Journal</title>
  <link>https://clerktree.com/blog</link>
  <description>Field notes from ClerkTree on industrial AI, predictive maintenance and agents for machine operations.</description>
  <language>en</language>
  <atom:link href="https://clerktree.com/feed.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>Shipping agents to the shop floor: what DevOps looks like for agentic AI</title>
    <link>https://clerktree.com/blog/devops-for-agents-on-the-shop-floor</link>
    <guid isPermaLink="true">https://clerktree.com/blog/devops-for-agents-on-the-shop-floor</guid>
    <pubDate>Mon, 09 Nov 2026 08:00:00 GMT</pubDate>
    <dc:creator>Aryaman Srivastava</dc:creator>
    <description>Agents fail differently from services: the failures look like answers. How we version reasoning, gate releases on evaluations, use shadow mode as staging, and keep tool access narrow inside industrial plants.</description>
    <content:encoded><![CDATA[<p>The first agent bug that really scared me did not throw an error. Nothing crashed, every unit test passed, and the deploy went green. A small prompt change had made our manual agent slightly more willing to accept &quot;close enough&quot; matches, and in staging it started citing the maintenance manual for the right machine family but the wrong variant. The torque value it quoted was real. It just belonged to a different spindle.</p>
<p>If a human had acted on that, they would have trusted it, because it came with a citation. That is the uncomfortable part of putting agents into factories: the failure modes look like answers.</p>
<p>I work on the platform side at ClerkTree, which mostly means I spend my time on the question of how we change these systems safely. This post is a walk through what DevOps looks like when the thing you ship is an agent system instead of a web service, and why a plant floor makes every one of those decisions sharper. It is fairly technical in places. I have tried to keep it concrete.</p>
<h2>What we actually ship</h2>
<p>When people hear &quot;AI agent&quot; they often imagine one big model with a long prompt. What runs in a plant is closer to a small distributed system:</p>
<ul>
<li><strong>Connectors</strong> that read from the plant&#x27;s systems: the historian or OPC UA server for signals, the CMMS (often SAP PM) for work orders, the ERP for parts and stock, and the document store for manuals and drawings. These are read-only by default.</li>
<li><strong>An evidence layer</strong> that turns raw data into things an agent can cite: a vibration trend with its baseline, a manual passage with its revision and machine variant, a past work order with its outcome.</li>
<li><strong>A set of narrow agents.</strong> One reads signals, one searches manuals, one looks through maintenance history, one checks parts. A planner combines their findings into a recommendation and a draft work order.</li>
<li><strong>A tool gateway</strong> that every agent call goes through, which decides what each agent is allowed to touch.</li>
<li><strong>A human approval step</strong> before anything is written back to the plant&#x27;s systems.</li>
</ul>
<p><img src="https://clerktree.com/journal/devops-agents/architecture.svg" alt="ClerkTree runtime: read-only connectors feed an evidence layer; narrow agents call tools through a gateway; drafts go to a human for approval before anything reaches the CMMS."/></p>
<p><em>Figure 1. The runtime inside a plant. Arrows into the runtime are reads; the only write path goes through a person.</em></p>
<p>Every box in that picture can change independently. The model can be upgraded, a prompt can be edited, a tool schema can gain a field, the manual index can be rebuilt because a new revision arrived, a connector can be patched because the historian vendor changed an endpoint. Any of those can change an answer. So the first rule we adopted was simple to say and annoying to implement: <strong>everything that can change an answer is a versioned artifact.</strong></p>
<h2>The agent bundle</h2>
<p>We package a deployable agent system as a bundle. A bundle is a manifest that pins every input to the reasoning, not just the code:</p>
<pre><code class="language-yaml">bundle: maintenance-rca
version: 2026.11.2
model:
  planner: provider/model@2026-10-14      # pinned, never &quot;latest&quot;
  extractor: local/small-instruct@q4-v3
prompts:
  manual_agent: prompts/manual_agent.md#a41c9e
  planner: prompts/planner.md#77f02d
tools:
  query_historian: schemas/query_historian.json#v5
  search_manuals: schemas/search_manuals.json#v7
  draft_work_order: schemas/draft_work_order.json#v3   # write tool, approval required
retrieval:
  manuals_index: snapshots/manuals/2026-11-01T02:00Z
  chunking: by-section, keep-revision-header
policy: policies/plant-default.rego#v12
eval_gate: evals/maintenance-rca/golden-v9
</code></pre>
<p>Two things fall out of this. First, any answer the system has ever given can be replayed: given the bundle version and the input snapshot, we can reproduce the reasoning, which is the first thing you want when a technician says &quot;why did it say that?&quot;. Second, a change to a prompt is now a change to a file with a hash, which means it goes through the same review and release path as code. That alone removed a whole category of &quot;someone tweaked the prompt in production&quot; surprises.</p>
<h2>Evaluations are the test suite</h2>
<p>Unit tests still matter. Schemas, parsers, connectors and the tool gateway are ordinary software and get ordinary tests. But unit tests cannot tell you whether the system still finds the right root cause. For that we keep a golden set of historical incidents, each one rebuilt with the signals, documents and history that were available at the time, and the outcome that the maintenance team later confirmed.</p>
<p>Every candidate bundle runs against the full set before it can go anywhere near a plant. We do not look at one score. We look at a handful of measures, and each one has a gate:</p>
<table><thead><tr><th>Measure</th><th>What it checks</th><th>Gate</th></tr></thead><tbody><tr><td>Root cause correct</td><td>Named cause matches the confirmed cause</td><td>No drop vs. current release</td></tr><tr><td>Citation validity</td><td>Every number and claim traces to a real source span</td><td>100%, no exceptions</td></tr><tr><td>Variant match</td><td>Cited documents apply to this exact machine and revision</td><td>100%</td></tr><tr><td>Abstention</td><td>Says &quot;not enough evidence&quot; on incidents built to be ambiguous</td><td>Within 2 points of baseline</td></tr><tr><td>Tool-call validity</td><td>Calls match schemas and policy</td><td>100%</td></tr><tr><td>Latency p95</td><td>Time to a full recommendation</td><td>Under the agreed budget</td></tr></tbody></table>
<p>The citation and variant gates are binary on purpose. A model that is 2% better at root causes but occasionally quotes the wrong variant is not an upgrade, it is a liability. The bug from the start of this post would have been caught by the variant check, which is exactly why that check exists now.</p>
<p>One thing I would tell anyone building evals for industrial agents: put the hard, boring cases in. Work orders that just say &quot;fixed&quot;. Sensors that were mounted loose for a year. Two machines with almost identical names. The model rarely fails on the clean textbook failure. It fails where the plant is messy, and every plant is messy somewhere.</p>
<h2>The release path</h2>
<p><img src="https://clerktree.com/journal/devops-agents/release-pipeline.svg" alt="Release path: commit, static checks, offline evaluation on the golden set, shadow mode on live data, canary on one line with approvals, then rollout. Each stage has a gate and a rollback."/></p>
<p><em>Figure 2. How a bundle reaches a plant. Nothing skips shadow mode.</em></p>
<p>Static checks and the offline eval run on every change. If a bundle passes, it moves to shadow mode, and this is the stage I think matters most.</p>
<h3>Shadow mode is our staging environment</h3>
<p>You cannot build a realistic staging copy of a factory. The data is too specific, the edge cases too local, and half of the context lives in the heads of people on the night shift. So instead of a fake plant, we use the real one, read-only.</p>
<p>In shadow mode the new bundle runs alongside the current one, on live data, and produces findings that nobody acts on. We compare its output against two things: the current release, and what the maintenance team actually did. When the new version disagrees with the team, that is not automatically a failure. Sometimes the team was right and we learn something; sometimes the agent spotted something earlier. Either way the disagreement is reviewed by a person before the bundle moves on.</p>
<p>There is a detail here that is specific to German plants and that I did not appreciate until we worked with them: anything that compares what an agent recommended with what a technician did can look like performance monitoring of individuals. We record shadow comparisons per asset and per incident, not per person, and that is agreed with the works council up front. It is a design constraint, not a footnote.</p>
<h3>Canary, then rollout</h3>
<p>After shadow mode, a bundle goes live on one line or one group of assets, with approvals required for every draft it produces. We watch override rates (how often a planner rejects or edits a draft), abstention rates, and latency. If any of those move outside their bands, the rollback is a single version pin, and because bundles are immutable, rolling back really does restore the previous behaviour, including the retrieval snapshot it was evaluated against.</p>
<h2>Tool access is the blast radius</h2>
<p>In a normal service, the blast radius of a bad release is usually bad responses. With agents, it is whatever the agent is allowed to do. So the tool gateway is the part of the system I am most conservative about.</p>
<p>The default for a plant is read-only. Write tools exist, but they produce drafts, not actions, and they are gated by policy:</p>
<pre><code class="language-rego"># policies/plant-default.rego (excerpt)
allow {
  input.tool.access == &quot;read&quot;
  input.site in data.sites[input.agent.site_scope]
}

allow {
  input.tool.name == &quot;draft_work_order&quot;
  input.agent.role == &quot;planner&quot;
  input.request.requires_approval == true      # always a draft first
  input.request.idempotency_key != &quot;&quot;         # retries never duplicate
}

deny[msg] {
  input.tool.name == &quot;write_setpoint&quot;          # never, in any plant
  msg := &quot;control-system writes are not available to agents&quot;
}
</code></pre>
<p>A few rules we hold firmly. Agents never write to control systems. Every write carries an idempotency key, because agents retry and a duplicated work order is a real cost. Every call, allowed or denied, is logged with the bundle version that made it. And the scope is per site: an agent deployed for one plant cannot read another plant&#x27;s historian even if the credentials would technically allow it.</p>
<h2>Observability for reasoning</h2>
<p>Logs and CPU graphs tell you whether the system is up. They do not tell you whether it is thinking well. For that, every recommendation is a trace: a tree of spans, one per agent step and tool call, with the retrieval hits, the evidence each step produced, token counts and timings.</p>
<p><img src="https://clerktree.com/journal/devops-agents/trace.svg" alt="A trace for one question, &quot;Why did CNC-07 alarm at 06:12?&quot;: signal, manual, history and parts agents run in parallel, then the planner drafts a work order. Each span lists its sources."/></p>
<p><em>Figure 3. One question as a trace. The parallel spans are where most of the latency budget goes.</em></p>
<p>Traces are what make the &quot;why did it say that?&quot; question answerable in minutes instead of days. They are also where we found most of our performance wins. In the trace above, the history agent was the slowest step for a long time, not because of the model, but because free-text work orders were being re-embedded on every query. Caching that by work-order revision cut the p95 noticeably and did not change a single answer, which the eval set confirmed.</p>
<p>On top of traces we track a small set of signals over time, per site:</p>
<ul>
<li><strong>Citation coverage</strong>: share of claims in final answers that carry a source. Should be flat at 100%.</li>
<li><strong>Abstention rate</strong>: how often the system says it does not have enough evidence. A sudden drop is suspicious, not good news.</li>
<li><strong>Override rate</strong>: how often planners edit or reject drafts, broken down by asset class.</li>
<li><strong>Drift</strong>: when a retrofit, a new sensor or a firmware update changes what normal looks like, findings for that asset get flagged for review instead of trusted silently.</li>
</ul>
<h2>Running where the data lives</h2>
<p>Most of the plants we talk to will not send machine data to a public cloud, and some cannot have outbound internet at all on the production network. So &quot;deploy&quot; can mean very different things: a private cloud tenant, a server in the plant&#x27;s own data centre, or a small machine next to the line.</p>
<p>That changes the DevOps story in practical ways. Bundles are signed and can be moved as a single file, so an air-gapped site can update from a verified artifact without pulling anything. We keep a mirror of the model registry for sites that run models locally. Smaller models handle extraction and classification on CPU; larger reasoning runs where a GPU is available or in the customer&#x27;s private cloud. And update windows follow the plant, not us: we schedule releases around planned maintenance shutdowns, because a factory&#x27;s calendar is not going to rearrange itself for our sprint.</p>
<h2>Where ClerkTree and industrial teams meet</h2>
<p>Everything above exists to serve a fairly specific set of problems. When we work with industrial companies, these are the areas where agents earn their place, and each one puts slightly different demands on the platform:</p>
<table><thead><tr><th>Area</th><th>What the agents do</th><th>Systems involved</th><th>What the platform must guarantee</th></tr></thead><tbody><tr><td>Fault diagnosis and root cause</td><td>Turn alarms into cited explanations</td><td>Historian, OPC UA, manuals, CMMS</td><td>Variant-correct citations, abstention on thin evidence</td></tr><tr><td>Maintenance planning</td><td>Draft work orders with parts, people and timing</td><td>CMMS, ERP stock, shift plans</td><td>Draft-only writes, idempotency, approval trail</td></tr><tr><td>Spare parts and suppliers</td><td>Compare stock, alternates and quotes</td><td>ERP, supplier portals, quality records</td><td>Read scopes per supplier, no auto-ordering</td></tr><tr><td>Production performance</td><td>Explain OEE drops across shifts and lines</td><td>MES, quality systems, shift logs</td><td>Aggregation by line, not by person</td></tr><tr><td>Knowledge capture</td><td>Keep manuals, revisions and fixes findable</td><td>Document stores, past work orders</td><td>Fresh retrieval snapshots, revision awareness</td></tr><tr><td>Sovereign deployment</td><td>Run all of the above inside the plant&#x27;s boundary</td><td>On-prem, private cloud, edge</td><td>Signed bundles, offline updates, fast rollback</td></tr></tbody></table>
<p>The pattern across all of them is the same. The model is the least plant-specific part. What makes a deployment work is how carefully the data is tied to the exact asset, how narrowly each agent is allowed to act, and how quickly we can prove what happened when someone asks.</p>
<h2>What I would tell my earlier self</h2>
<ul>
<li><strong>Version the reasoning, not just the code.</strong> Prompts, tool schemas and retrieval snapshots change answers. Pin them.</li>
<li><strong>Make the important gates binary.</strong> Accuracy can trade off. Citation validity and variant matching cannot.</li>
<li><strong>Use the real plant for staging, read-only.</strong> Shadow mode found more problems than any synthetic test we wrote.</li>
<li><strong>Treat tool permissions as the blast radius.</strong> Read-only by default, drafts instead of actions, never touch control systems.</li>
<li><strong>Trace every answer.</strong> The first time a technician asks &quot;why?&quot;, you want the answer in minutes.</li>
<li><strong>Respect the plant&#x27;s calendar.</strong> Releases fit around shutdowns, not the other way round.</li>
</ul>
<p>None of this is glamorous. Most of it is the same discipline good platform teams already apply to services, adjusted for systems that reason and for environments where a wrong answer has a physical cost. If you run a maintenance or operations team and want to see how this looks on your own assets, or if you are an engineer who finds this kind of problem interesting, we would be glad to talk.</p>]]></content:encoded>
  </item>
  <item>
    <title>The hard part isn't the AI: Animesh and Katharina in conversation</title>
    <link>https://clerktree.com/blog/the-hard-part-isnt-the-ai</link>
    <guid isPermaLink="true">https://clerktree.com/blog/the-hard-part-isnt-the-ai</guid>
    <pubDate>Mon, 09 Nov 2026 08:00:00 GMT</pubDate>
    <dc:creator>Animesh Mishra, Katharina Krüger</dc:creator>
    <description>Why factories, why every answer shows its sources, what the works council taught us, and what we got wrong. An honest conversation about building AI for maintenance teams.</description>
    <content:encoded><![CDATA[<p><em>This is an edited conversation between Katharina Krüger and Animesh Mishra. Katharina joined ClerkTree from a strategy background, and she asked the questions she kept hearing from operations leaders in her first months. We trimmed it for length and kept the parts where we disagreed.</em></p>
<h2>How this started</h2>
<p><strong>Katharina:</strong> Let&#x27;s start with the question everyone asks me at dinner. Why factories? You could build AI for almost anything right now. Why pick an industry where the customer&#x27;s computer is sometimes older than the person running it?</p>
<p><strong>Animesh:</strong> Because that is exactly where the gap is. Most software that gets called AI today is built for people who already live in software: marketers, analysts, developers. A maintenance technician spends most of the day with a machine, not a screen. The information they need exists, but it is scattered across a manual, a maintenance system, a parts list and the head of the colleague who has been on the line for twenty years.</p>
<p><strong>Katharina:</strong> So the pitch is &quot;we put it all in one place&quot;? People have been promising that for decades.</p>
<p><strong>Animesh:</strong> They have, and that&#x27;s the part that usually fails. Putting things in one place is a data warehouse project. Nobody on the shop floor asked for a data warehouse. What they want is an answer to a specific question at the moment it matters: the spindle on CNC-07 is vibrating, what is it, how bad is it, and what do I do. If we can answer that well, the &quot;one place&quot; happens as a side effect.</p>
<p><strong>Katharina:</strong> That sounds tidy. Was it that tidy at the start?</p>
<p><strong>Animesh:</strong> Not at all. Early on we built far too much dashboard. Charts, trends, colour-coded health scores. It looked impressive in a demo and nobody opened it twice. The lesson was that a screen full of information is not the same as an answer.</p>
<h2>What a maintenance team actually wants</h2>
<p><strong>Katharina:</strong> When I talk to plant managers, they usually describe the problem in money: downtime, overtime, emergency parts. When I talk to technicians, they describe it completely differently. Which one do you build for?</p>
<p><strong>Animesh:</strong> Both, but you design for the technician. If the technician doesn&#x27;t trust it, the plant manager never sees the savings, because nothing changes on the floor.</p>
<p><strong>Katharina:</strong> What does a technician want, in your experience?</p>
<p><strong>Animesh:</strong> Less searching. The thing we hear most often is some version of &quot;I know how to fix it, I just spend half my time finding out what it is and whether we have the part.&quot; Finding the right page in a 400-page manual. Digging through old work orders to see if this happened before. Calling the stores to check if the bearing is actually on the shelf or only in the system.</p>
<p><strong>Katharina:</strong> And they don&#x27;t want to be told how to do their job.</p>
<p><strong>Animesh:</strong> No, and they&#x27;re right. They know the machines better than any model does. So the product has to behave like a very fast colleague who did the reading, not like a supervisor. &quot;Here is what the vibration shows, here is the page in the manual that matches it, here&#x27;s what was done last time, here&#x27;s the part and where it is.&quot; Then the technician decides.</p>
<p><strong>Katharina:</strong> I&#x27;ll be honest, when I joined I thought that framing was mostly marketing.</p>
<p><strong>Animesh:</strong> What changed your mind?</p>
<p><strong>Katharina:</strong> Watching how people react to it. When a recommendation shows its sources, people argue with the sources, not with us. &quot;That manual revision is out of date&quot; is a useful sentence. &quot;The AI is wrong&quot; is not.</p>
<h2>Why every answer shows its sources</h2>
<p><strong>Katharina:</strong> That brings me to the thing engineers ask me about most. Why do you insist that every claim is cited? Isn&#x27;t that slower?</p>
<p><strong>Animesh:</strong> It&#x27;s slower to build and faster to use. A language model on its own will happily write a fluent explanation of a bearing failure with a torque value that sounds right and isn&#x27;t from your machine. In a factory, a confident wrong number is worse than no answer, because someone might act on it.</p>
<p><strong>Katharina:</strong> So the citation is a safety feature, not a nice-to-have.</p>
<p><strong>Animesh:</strong> It&#x27;s the core of the product. We built the system so that every number in an answer has to come from a source: a sensor reading, a manual passage, a work order, a stock record. If it can&#x27;t point to one, it doesn&#x27;t say it. And if the evidence is thin, the right answer is &quot;not enough to say yet, please take one more measurement here&quot;.</p>
<p><strong>Katharina:</strong> I remember the first time I saw it refuse to answer. My instinct was that it looked broken.</p>
<p><strong>Animesh:</strong> Everyone&#x27;s instinct is that. Then you talk to a reliability engineer, and they tell you that &quot;I don&#x27;t know yet&quot; is the most trustworthy thing a junior colleague can say. The tools that never say it are the ones people stop believing.</p>
<p><strong>Katharina:</strong> Is there a version of this where you trust the model enough to drop the citations?</p>
<p><strong>Animesh:</strong> I don&#x27;t think so, and I don&#x27;t think customers want that. Even when the model is right, the technician needs to see why to feel comfortable acting on it. And when it&#x27;s wrong, the citation is how you find out fast.</p>
<h2>Building trust is slower than building software</h2>
<p><strong>Katharina:</strong> Here&#x27;s where I see the biggest gap between what technology people expect and what actually happens. You can build a working system in weeks. Getting a team to use it takes months. Why?</p>
<p><strong>Animesh:</strong> Because trust is built one finding at a time. A technician with fifteen years on a line won&#x27;t act on a recommendation from software they&#x27;ve never seen be right. They might act on one they&#x27;ve watched be right ten times.</p>
<p><strong>Katharina:</strong> Which is why the rollouts start with the system just watching.</p>
<p><strong>Animesh:</strong> Exactly. For the first weeks it runs alongside the team without changing anything. Every finding gets a quick rating: useful, not useful, already knew. Those ratings are the most valuable data we collect, more valuable than the sensor data in some ways, because they tell us what this specific team considers worth their time.</p>
<p><strong>Katharina:</strong> What do the &quot;not useful&quot; ratings usually say?</p>
<p><strong>Animesh:</strong> Things no manual will tell you. &quot;That machine always runs hot for an hour after a weekend restart.&quot; &quot;That sensor has been mounted loose for years.&quot; &quot;We already planned that repair.&quot; Every one of those makes the next finding better.</p>
<p><strong>Katharina:</strong> From the business side, the hard part is that this phase doesn&#x27;t produce a headline number. Nobody&#x27;s downtime goes down in week three.</p>
<p><strong>Animesh:</strong> No. And that&#x27;s where a lot of projects die. Someone wants a result before the team trusts the tool, so the tool gets pushed into decisions too early, makes a visible mistake, and that&#x27;s the end of it.</p>
<p><strong>Katharina:</strong> So the advice to a plant manager is…</p>
<p><strong>Animesh:</strong> Measure before you start, protect the shadow phase, and judge it at the end on evidence. Not in week three, and not on impressions.</p>
<h2>Germany, data and the works council</h2>
<p><strong>Katharina:</strong> Let&#x27;s talk about the part that surprised you most when we started working with German plants.</p>
<p><strong>Animesh:</strong> The works council. Coming from a pure engineering background, I hadn&#x27;t thought about it at all.</p>
<p><strong>Katharina:</strong> Most founders haven&#x27;t. In Germany, if a system is capable of monitoring how employees work, the works council has a say in how it&#x27;s introduced and used. A maintenance tool that logs who did which repair, how long it took and whether they followed a recommendation can fall into that category, even if nobody intends to use it that way.</p>
<p><strong>Animesh:</strong> And my first reaction, honestly, was that this would slow everything down.</p>
<p><strong>Katharina:</strong> And now?</p>
<p><strong>Animesh:</strong> Now I think it&#x27;s one of the best things that can happen early in a project. When the works council is in the room at the start, you have to say clearly what is recorded and what it may be used for. That clarity helps everyone, including the technicians who are wondering whether this thing is secretly a performance tracker.</p>
<p><strong>Katharina:</strong> It isn&#x27;t, and saying so in writing is much more convincing than saying so in a demo.</p>
<p><strong>Animesh:</strong> The same goes for data. A lot of plants can&#x27;t send machine data outside their network at all. So the system has to be able to run where the data lives: in a private cloud, on premises, or on hardware next to the machines. Being flexible there isn&#x27;t a feature, it&#x27;s the entry ticket.</p>
<h2>What &quot;agents&quot; means on a shop floor</h2>
<p><strong>Katharina:</strong> &quot;Agents&quot; is probably the most overused word in our industry this year. What do you actually mean by it?</p>
<p><strong>Animesh:</strong> Something quite boring, which I think is a good sign. An agent is a piece of software with one job and access to one kind of information. One reads the sensor data and turns it into evidence. One searches the manuals. One looks through past work orders. One checks parts and stock. Then a planner puts their findings together into a recommendation and a draft work order.</p>
<p><strong>Katharina:</strong> Why split it up? Why not one big model that does everything?</p>
<p><strong>Animesh:</strong> Because each job needs different checks. The sensor agent has to care about units and operating conditions. The manual agent has to care about which revision of the document applies to this machine. If you give all of that to one model, you lose the ability to test each part properly, and you lose the ability to show the technician where each piece came from.</p>
<p><strong>Katharina:</strong> And none of them act on their own.</p>
<p><strong>Animesh:</strong> Not in the sense of changing anything in the plant. They prepare. A person approves. A draft work order still goes to a planner who can accept, edit or reject it. Maybe that changes over time for low-risk tasks, but it should be the team&#x27;s decision when, not ours.</p>
<h2>What we got wrong</h2>
<p><strong>Katharina:</strong> You promised we&#x27;d keep the parts where we disagreed. So: what did we get wrong?</p>
<p><strong>Animesh:</strong> The dashboards, which I mentioned. We also underestimated how messy maintenance records are. Work orders that just say &quot;fixed&quot; or a three-word mix of German and English. We assumed we&#x27;d be able to learn a lot from history automatically, and in practice the first weeks are often spent sitting with the team and agreeing what their abbreviations mean.</p>
<p><strong>Katharina:</strong> I&#x27;d add one from my side. Early on we talked too much about the technology and not enough about the workflow. Customers didn&#x27;t need to hear about retrieval or model choices. They needed to hear who approves a work order, how it reaches their maintenance system, and what happens when the recommendation is wrong.</p>
<p><strong>Animesh:</strong> That&#x27;s fair. I still think the technology matters.</p>
<p><strong>Katharina:</strong> It does. It just isn&#x27;t the first thing anyone buys.</p>
<p><strong>Animesh:</strong> Agreed. People buy the outcome and stay for the details.</p>
<p><strong>Katharina:</strong> And what are you still unsure about?</p>
<p><strong>Animesh:</strong> How far to automate. There&#x27;s real pressure in the industry to let agents do more on their own, and some of it makes sense for simple, reversible tasks. But in a plant, a wrong action can stop a line or hurt someone. I&#x27;d rather we be the company that&#x27;s a bit too careful than the one that has to explain an incident.</p>
<h2>What comes next</h2>
<p><strong>Katharina:</strong> Last question. If a plant manager reads this and wants to try it, what should they do first?</p>
<p><strong>Animesh:</strong> Pick a small number of machines that matter, ideally ones the team already complains about. Make sure there&#x27;s some data and some history. Write down what success would look like before starting. And make sure one person from maintenance owns it, not someone from IT and not us.</p>
<p><strong>Katharina:</strong> And if they&#x27;re not ready?</p>
<p><strong>Animesh:</strong> Then start by getting the basics in order: readable signals, a maintenance system people actually use, manuals that are findable. None of that is wasted, with or without us.</p>
<p><strong>Katharina:</strong> That&#x27;s a very un-salesy answer.</p>
<p><strong>Animesh:</strong> It&#x27;s the honest one. The plants that get the most from this are the ones that were already taking their maintenance data seriously. We just make that data answer questions faster.</p>
<p><em>If you run a maintenance or operations team and want to continue this conversation with us, we&#x27;d be glad to talk.</em></p>]]></content:encoded>
  </item>
  <item>
    <title>Rolling out AI with a maintenance team: a 90-day playbook</title>
    <link>https://clerktree.com/blog/rolling-out-ai-with-a-maintenance-team</link>
    <guid isPermaLink="true">https://clerktree.com/blog/rolling-out-ai-with-a-maintenance-team</guid>
    <pubDate>Thu, 05 Nov 2026 08:00:00 GMT</pubDate>
    <dc:creator>Shobhit Mishra, Kenshin Kiriyama, Katharina Krüger</dc:creator>
    <description>Most industrial AI pilots stall because the rollout ignores how maintenance actually works. This is the sequence we follow, from picking the first assets to deciding whether to scale.</description>
    <content:encoded><![CDATA[<p>Most industrial AI pilots do not fail because the model is weak. They fail in week six, in a meeting where the maintenance lead says the alerts are noisy, nobody has looked at the dashboard since the kickoff, and the plant manager asks what the project has actually changed. By then the budget is spent and the technicians have quietly decided the tool is for management, not for them.</p>
<p>We have seen this pattern often enough that we now run every rollout with the same 90-day structure. It is not complicated. It is mostly about doing things in the right order: choosing the right first machines, measuring before changing anything, earning the technicians&#x27; trust before asking them to act on a recommendation, and deciding at the end on evidence rather than enthusiasm.</p>
<p>This is that playbook. It is written for maintenance leads, plant managers and operations directors who are considering AI for maintenance, and it applies whether you work with us or not.</p>
<h2>Before day one: choose the first assets carefully</h2>
<p>The single biggest decision in a rollout is which machines go first. Teams tend to pick either the whole plant, which is too much to learn from, or the newest, best-instrumented line, which rarely has the problems that justify the project.</p>
<p>We score candidate assets on three things.</p>
<table><thead><tr><th>Factor</th><th>Question to ask</th><th>What good looks like</th></tr></thead><tbody><tr><td>Criticality</td><td>What does an hour of unplanned downtime cost here?</td><td>A bottleneck or a machine with no redundancy</td></tr><tr><td>Data readiness</td><td>Are there signals, a manual and a work order history?</td><td>Sensors or a PLC with readable tags, at least a year of CMMS records</td></tr><tr><td>Pain</td><td>Does the team already complain about this asset?</td><td>Repeat failures, long diagnosis times, frequent emergency parts orders</td></tr></tbody></table>
<p>A machine that scores high on all three is the right place to start. One that is critical but has no data needs instrumentation first, which is a separate project. One with perfect data but no pain will produce a pilot nobody cares about.</p>
<p>Keep the first scope small: typically three to eight assets on one line or in one area, looked after by the same team. That is enough to see patterns and small enough that every finding gets discussed.</p>
<p>Write down the questions you want answered at day 90 before you start. For example: does the system flag developing faults early enough to plan the repair? Does it shorten diagnosis? Do technicians use it without being reminded? Questions written later tend to be the ones the results happen to answer.</p>
<h2>Days 1–15: baseline and access</h2>
<h3>Measure where you are</h3>
<p>You cannot show improvement against a number you never recorded. Before anything changes, pull a baseline from the CMMS for the chosen assets, ideally over the last 12 months so seasonal effects show up:</p>
<ul>
<li><strong>Mean time between failures (MTBF)</strong>: operating time divided by the number of failures.</li>
<li><strong>Mean time to repair (MTTR)</strong>: total repair time divided by the number of repairs, ideally split into diagnosis, waiting for parts, and the repair itself.</li>
<li><strong>Planned versus unplanned work</strong>: the share of maintenance hours that were scheduled in advance. Mature teams aim for most work to be planned; many plants are well below that.</li>
<li><strong>Preventive maintenance compliance</strong>: the share of scheduled PM tasks completed on time.</li>
<li><strong>Emergency parts orders</strong>: how often a repair waited for a part that was not in stock.</li>
</ul>
<p>The data will be imperfect. Failure codes will be missing, repair times will be rounded, and some work will never have been logged. That is fine. Note the gaps, agree on how to count, and use the same method at day 90. A consistent imperfect baseline is far more useful than a perfect one that never gets finished.</p>
<p>Talk to the people as well as the database. Ask the two or three most experienced technicians which failures they dread, how they diagnose them today, and where they lose time. Their answers will shape what the system needs to show them, and they are usually right about where the problems are.</p>
<h3>Get data access right the first time</h3>
<p>Access is where weeks disappear. Three groups need to agree, and it is faster to bring them together in one meeting than to collect approvals one by one.</p>
<ul>
<li><strong>OT / automation</strong> owns the machines and the network they sit on. The standard approach is read-only access to an existing historian or an OPC UA server, so nothing writes to a controller. Many plants organise their networks into zones and conduits along the lines of IEC 62443; the connection should fit that structure rather than punch a hole through it.</li>
<li><strong>IT and security</strong> will ask where data goes, who can see it, and how it is encrypted. Have answers ready for deployment options: cloud, private cloud, or on-premises for plants that cannot send data out at all.</li>
<li><strong>Data protection</strong> comes in as soon as work orders contain names, which they almost always do. In the EU that means a data processing agreement and clarity about what personal data is processed and why.</li>
</ul>
<h3>Involve the works council early</h3>
<p>In Germany, and in similar forms elsewhere in Europe, systems that are capable of monitoring employee behaviour or performance are subject to co-determination by the works council (Betriebsrat), under section 87(1) no. 6 of the Works Constitution Act. A maintenance system that logs who did which repair, how long it took, and whether a recommendation was followed can fall into that category even if nobody intends to use it that way.</p>
<p>Bring the works council in at the start, explain what is and is not recorded, and agree in writing how the data may be used. It is far better than having the project paused at day 40. In our experience works councils are not opposed to tools that make technicians&#x27; work easier; they are opposed to surprises.</p>
<h2>Days 16–45: shadow mode</h2>
<p>For the first month of operation the system runs alongside the team without changing how work is done. It watches the signals, reads the history and produces findings, but nobody is asked to act on them.</p>
<p>This stage exists for one reason: trust. A technician who has spent fifteen years listening to a spindle will not act on a recommendation from software he has never seen be right. They might act on one they have watched be right ten times.</p>
<h3>Review every finding</h3>
<p>Every finding the system raises gets a quick rating from the technician who knows the asset: useful, not useful, or already known, with a sentence on why. This takes seconds per finding and produces the most valuable data in the whole project.</p>
<ul>
<li>&quot;Not useful, the vibration rises every time we run program 14&quot; tells you the system needs to learn that operating state.</li>
<li>&quot;Already known, we planned that bearing change last week&quot; tells you the system needs to read the planned work orders.</li>
<li>&quot;Useful, we would have missed that&quot; is the sentence you are looking for.</li>
</ul>
<h3>Hold a short weekly review</h3>
<p>Thirty minutes, same time every week, with the maintenance lead, one or two technicians, and whoever is configuring the system. Look at the findings from the week, the ratings, and anything that was missed. Adjust thresholds and operating states. Fix the data problems that the reviews uncover; there will be several.</p>
<h3>Make every finding explain itself</h3>
<p>A finding that says &quot;anomaly detected, score 0.87&quot; is ignored by week two. A finding that says &quot;vibration at 147 Hz on the drive-end bearing, three times the normal level for this speed, matching the outer race frequency of the installed 6205-2RS; the same bearing was replaced here 14 months ago&quot; gets read, because a technician can check every part of it. Insist on findings that show their evidence and their sources. It is the difference between a tool the team argues with and one they argue for.</p>
<p>Shadow mode is also where tribal knowledge gets captured. When a technician explains why a finding is wrong, write it down and feed it back. Over a month the system learns things that are written in no manual, such as which machine always runs hot after a weekend restart, or which sensor has been mounted loose since 2021.</p>
<h2>Days 46–75: assisted work</h2>
<p>Once findings are consistently rated useful, the system starts contributing to real work, with a person approving every step.</p>
<h3>From finding to draft work order</h3>
<p>A useful finding becomes a draft work order in the CMMS: asset, suspected cause, recommended action, the procedure reference, the required parts and a suggested time window, with the evidence attached. A planner or the maintenance lead reviews it and approves, edits or rejects it. Nothing is scheduled automatically.</p>
<p>Define the approval rules explicitly. Who can approve what? Is there a threshold, such as cost, downtime or safety relevance, above which a second person signs off? What happens to drafts nobody looks at for three days? Writing these rules down early avoids both bottlenecks and accidental automation.</p>
<h3>Connect parts and planning</h3>
<p>Much of the real value appears here, not in the diagnosis. A finding that arrives two weeks before failure is only useful if the part is in stock and the repair fits a planned stop. Check stock and lead time as part of the draft. If the part is not in stock, the draft should say so and suggest ordering it, because &quot;we knew, but the part took nine days&quot; is still unplanned downtime.</p>
<p>Align with production planning. A repair window that suits maintenance but stops the bottleneck during a rush order will be refused. Proposing windows inside existing planned stops, shift changes or low-load periods makes approval much easier.</p>
<h3>Keep the feedback loop running</h3>
<p>Every completed work order closes the loop. Was the predicted cause what the technician found? Was the part right? How long did the repair actually take? These answers improve the next finding, and they become the evidence for the day-90 decision.</p>
<h2>Days 76–90: measure and decide</h2>
<h3>Compare against the baseline, carefully</h3>
<p>Recompute the baseline metrics for the same assets using the same method. Then be honest about what else changed. Production volume, product mix, staffing and season all move maintenance numbers. Ninety days is short; one avoided failure on a bottleneck can dominate the result, in either direction.</p>
<p>The quantitative picture usually includes:</p>
<ul>
<li>Failures that were flagged early and repaired in a planned window, with an estimate of the downtime that would otherwise have occurred.</li>
<li>Changes in diagnosis time for incidents the system was involved in.</li>
<li>Changes in emergency parts orders.</li>
<li>The share of findings rated useful in the final weeks compared with the first.</li>
</ul>
<p>The qualitative picture matters as much. Are technicians opening the system without being asked? Do they cite it in shift handovers? Did the weekly review become shorter because fewer findings needed discussion? These are the signals that a tool will survive after the project team moves on.</p>
<h3>Decide on evidence</h3>
<p>At day 90 there are three honest outcomes:</p>
<ol>
<li><strong>Scale.</strong> The findings are trusted, the workflow is in place, and the numbers point the right way. Extend to the next line, using the same scoring to choose assets.</li>
<li><strong>Adjust.</strong> Parts of it work. Perhaps diagnosis is useful but the early warnings are too noisy, or the data on one machine is too poor. Fix those specific issues and run another 45 days.</li>
<li><strong>Stop.</strong> The data is not good enough, or the problems were not the kind the system addresses. Stopping is a valid result and much cheaper at day 90 than at day 400.</li>
</ol>
<p>Agree on these criteria at the start, ideally in the same document as the day-90 questions. It prevents the decision from becoming a negotiation.</p>
<h2>The people part</h2>
<p>Every successful rollout we have seen had one maintenance lead who owned it. Not an IT project manager and not a vendor, but the person whose team does the work. They set the tone in the weekly review, defend the time for ratings, and decide when the system has earned the next step.</p>
<p>Treat technicians as the experts they are. The system&#x27;s job is to do the tedious part of the investigation: pulling the history, finding the manual page, checking stock. Their job is judgement. When a tool is framed that way, adoption follows. When it is framed as something that checks their work, it does not, and no model accuracy will fix that.</p>
<p>Training is short when the tool explains itself. A one-hour session at the start of shadow mode, and fifteen minutes at the start of assisted work, is usually enough. What helps more is a named person to ask when something looks wrong, and a visible record that their feedback changed something.</p>
<h2>Common pitfalls</h2>
<ul>
<li><strong>Starting plant-wide.</strong> Too many assets, too many people, no time to discuss any single finding properly.</li>
<li><strong>Skipping the baseline.</strong> Without it, day 90 becomes a debate about impressions.</li>
<li><strong>Black-box alerts.</strong> Scores without evidence are ignored within weeks.</li>
<li><strong>Automating before trust.</strong> Creating work orders automatically in month one teaches the team to reject them.</li>
<li><strong>Forgetting parts and planning.</strong> An early warning without a part in stock or a repair window is just an early worry.</li>
<li><strong>Leaving the works council for later.</strong> A paused project costs more than an early meeting.</li>
<li><strong>No owner on the maintenance side.</strong> Projects owned by IT or by a vendor end when the project plan ends.</li>
</ul>
<h2>A one-page checklist</h2>
<table><thead><tr><th>Phase</th><th>Done when</th></tr></thead><tbody><tr><td>Before day 1</td><td>3–8 assets scored and chosen, day-90 questions and decision criteria written down</td></tr><tr><td>Days 1–15</td><td>Baseline metrics recorded, read-only data access live, data protection and works council agreements in place</td></tr><tr><td>Days 16–45</td><td>Every finding rated, weekly review running, false-positive causes fixed</td></tr><tr><td>Days 46–75</td><td>Draft work orders flowing into the CMMS with approval rules, parts and windows checked</td></tr><tr><td>Days 76–90</td><td>Metrics recomputed with the same method, qualitative feedback collected, decision taken</td></tr></tbody></table>
<h2>Closing</h2>
<p>None of this is specific to one vendor or one model. It is what we have learned about introducing any decision-support tool into a team that already knows its machines well. The technology has to earn its place on the shop floor, finding by finding, and the rollout should be designed to let it do that.</p>
<p>If you are planning a first rollout and want a second opinion on asset selection, baseline metrics or data access, we are happy to talk it through, whether or not you end up working with us.</p>]]></content:encoded>
  </item>
  <item>
    <title>From vibration alarm to root cause: grounding maintenance agents in your plant's own documents</title>
    <link>https://clerktree.com/blog/from-vibration-alarm-to-root-cause</link>
    <guid isPermaLink="true">https://clerktree.com/blog/from-vibration-alarm-to-root-cause</guid>
    <pubDate>Wed, 28 Oct 2026 08:00:00 GMT</pubDate>
    <dc:creator>Krishang Sharma</dc:creator>
    <description>An alarm tells you something changed. The reason sits in manuals, work order history and parts records. How we turn signals into evidence, make manuals retrievable and make agents cite every claim.</description>
    <content:encoded><![CDATA[<p>A vibration alarm is the least useful thing a maintenance team receives all week. Not because it is wrong, but because it answers the easy question. Something changed on CNC-07. Fine. The questions that cost money come right after: what is actually failing, how long do we have, has this happened before, which part do we need, and who should do the work.</p>
<p>The answers to those questions already exist inside most plants. They are spread across a 400-page machine manual, a CMMS full of free-text work orders, a parts catalogue, a historian with years of sensor data, and the memory of the two technicians who have been on that line the longest. What is missing is the work of connecting them, quickly, every time.</p>
<p>This post is about how we build the agents that do that connecting. It is not a model announcement. Almost everything that makes the difference sits in the plumbing around the model: how a signal becomes evidence, how a manual becomes searchable, how work-order history becomes memory, and how an answer is forced to show where every claim came from. We will walk through each part with the same example: a spindle bearing on a machining centre.</p>
<h2>The four facts behind every root cause</h2>
<p>When an experienced reliability engineer explains a failure, the explanation almost always contains four things:</p>
<ol>
<li><strong>Signal evidence.</strong> What was measured, how far it moved from normal, and in which pattern.</li>
<li><strong>A mechanism.</strong> Which physical failure produces that pattern, and why the alternatives fit worse.</li>
<li><strong>History.</strong> Whether this asset, or one like it, has failed this way before, and what fixed it.</li>
<li><strong>An action.</strong> The part, the procedure, the people and the time window to fix it.</li>
</ol>
<p>A general-purpose language model can write all four in fluent prose without having any of them. That is the core problem. The model has read about bearings, but it has not read your manual, your work orders or your sensor data. So the design goal is simple to state: every one of the four facts must come from a source inside the plant, and the answer must say which source.</p>
<p>We split the work across small agents, each responsible for one kind of evidence, and a planner that assembles the answer only from what they return.</p>
<table><thead><tr><th>Agent</th><th>Reads</th><th>Returns</th></tr></thead><tbody><tr><td>Signal agent</td><td>Historian, live OPC UA tags</td><td>Features, deviations, matched fault frequencies</td></tr><tr><td>Manual agent</td><td>Manuals, drawings, service bulletins</td><td>Passages with section, page and revision</td></tr><tr><td>History agent</td><td>CMMS work orders, failure codes</td><td>Similar past incidents and their fixes</td></tr><tr><td>Parts agent</td><td>ERP stock, bill of materials</td><td>Part numbers, stock, lead time</td></tr><tr><td>Planner</td><td>Only the outputs above</td><td>Root cause, confidence, draft work order</td></tr></tbody></table>
<p>The planner never sees the raw world. It sees typed evidence objects, each with an id it must cite. That one constraint removes most hallucinated detail before it starts.</p>
<h2>Step 1: Turning a signal into evidence</h2>
<p>Raw vibration is not evidence. A single RMS value of 7.8 mm/s means nothing until you know the machine, the speed, the load and what normal looks like for that combination.</p>
<h3>Baselines per operating state</h3>
<p>The most common source of false alarms is comparing a reading against one global threshold. A spindle running at 6,000 rpm under heavy cut vibrates differently from the same spindle idling. So the signal agent learns a baseline per operating state, keyed on the variables that change vibration legitimately: speed band, load band and, where available, the tool or program running.</p>
<p>A deviation is then reported relative to the matching baseline, not to a fixed limit. &quot;7.8 mm/s, 3.7 times the baseline for this speed and load band, rising over six hours&quot; is evidence. &quot;7.8 mm/s, above 7.1&quot; is just a number.</p>
<h3>Features that point to mechanisms</h3>
<p>Overall RMS tells you that energy increased. It does not tell you where it came from. For rotating equipment we compute a small set of features that separate failure modes:</p>
<ul>
<li><strong>RMS velocity</strong> for overall severity, comparable with ISO 10816 / ISO 20816 zones.</li>
<li><strong>Crest factor and kurtosis</strong> of acceleration, which rise early with impacting faults such as bearing defects, often before RMS moves.</li>
<li><strong>Envelope spectrum</strong>, which demodulates the high-frequency ringing caused by a defect striking a rolling element and exposes the repetition rate of the impacts.</li>
<li><strong>Orders of running speed</strong> (1×, 2×, harmonics), which separate imbalance and misalignment from bearing faults.</li>
</ul>
<h3>Matching bearing defect frequencies</h3>
<p>The envelope spectrum is where the mechanism starts to show. Each bearing defect produces impacts at a predictable rate that depends only on geometry and shaft speed. For a bearing with <code>n</code> rolling elements, ball diameter <code>d</code>, pitch diameter <code>D</code>, contact angle <code>φ</code> and shaft frequency <code>fr</code>:</p>
<ul>
<li>Outer race (BPFO) = (n / 2) × fr × (1 − (d / D) × cos φ)</li>
<li>Inner race (BPFI) = (n / 2) × fr × (1 + (d / D) × cos φ)</li>
<li>Ball spin (BSF) = (D / 2d) × fr × (1 − ((d / D) × cos φ)²)</li>
<li>Cage (FTF) = (fr / 2) × (1 − (d / D) × cos φ)</li>
</ul>
<p>Take a 6205-2RS deep groove ball bearing: 9 balls, ball diameter about 7.94 mm, pitch diameter about 39.0 mm, contact angle close to zero. With the spindle at 2,460 rpm, the shaft frequency is 41 Hz and the geometry ratio d / D is about 0.203:</p>
<ul>
<li>BPFO ≈ 4.5 × 41 × 0.797 ≈ <strong>147 Hz</strong></li>
<li>BPFI ≈ 4.5 × 41 × 1.203 ≈ 222 Hz</li>
</ul>
<p>If the envelope spectrum shows a clear peak at 147 Hz with harmonics at 294 and 441 Hz, and kurtosis has been climbing for days, that is a strong, specific pattern: an outer race defect. If the peak instead sits at 222 Hz with sidebands spaced at 41 Hz, the inner race is the better fit, because an inner race defect rotates with the shaft and is modulated by it.</p>
<p>None of this is new. Vibration analysts have done it by hand for decades. The point is to do it automatically, for every alarm, with the bearing geometry pulled from the plant&#x27;s own bill of materials rather than assumed.</p>
<h3>What the signal agent returns</h3>
<p>The output is a structured object, not prose. The planner can cite it, and a technician can check it.</p>
<pre><code class="language-json">{
  &quot;id&quot;: &quot;sig-cnc07-0412&quot;,
  &quot;asset&quot;: &quot;CNC-07 / spindle / drive end&quot;,
  &quot;state&quot;: { &quot;speed_rpm&quot;: 2460, &quot;load_band&quot;: &quot;medium&quot; },
  &quot;rms_velocity_mm_s&quot;: { &quot;value&quot;: 7.8, &quot;baseline&quot;: 2.1, &quot;ratio&quot;: 3.7, &quot;trend&quot;: &quot;rising_6h&quot; },
  &quot;kurtosis&quot;: { &quot;value&quot;: 6.4, &quot;baseline&quot;: 3.1 },
  &quot;envelope_peaks_hz&quot;: [147.2, 294.1, 441.0],
  &quot;matched_frequencies&quot;: [
    { &quot;name&quot;: &quot;BPFO&quot;, &quot;expected_hz&quot;: 147.0, &quot;bearing&quot;: &quot;6205-2RS&quot;, &quot;match&quot;: 0.98 }
  ],
  &quot;data_quality&quot;: { &quot;gaps&quot;: false, &quot;sensor&quot;: &quot;accelerometer, drive end, 2 kHz&quot; }
}
</code></pre>
<p>Two fields matter more than they look. <code>data_quality</code> lets the planner lower its confidence when the sensor dropped out or was mounted in a poor location. And <code>matched_frequencies</code> carries the bearing designation, which becomes the key that the manual, history and parts agents all search on.</p>
<h2>Step 2: Making manuals retrievable</h2>
<p>Machine manuals are not essays. They are hierarchies of sections, tables of tolerances, exploded drawings with item numbers, part lists, warnings and revision notes. Most of the value sits in tables and short numbered steps. Treating a manual as a long string and cutting it into fixed 500-token chunks destroys exactly that structure.</p>
<h3>Chunk by structure, not by length</h3>
<p>We parse manuals into their own hierarchy first: chapter, section, subsection, procedure step, table. A chunk is a meaningful unit, such as one procedure, one table or one subsection, and it carries its full path as context. A step that says &quot;tighten to 45 Nm&quot; is useless on its own. Stored as &quot;Section 4.3 Spindle bearing replacement › Step 7 › Tighten clamping nut to 45 Nm&quot;, it can be found and cited.</p>
<p>Tables stay whole. A tolerance table split across two chunks produces answers that pair the right parameter with the wrong value. If a table is too large, we split it by rows and repeat the header in every piece.</p>
<p>Every chunk keeps its metadata: machine model, manual title, <strong>revision</strong>, section number and page. Revision matters more than people expect. Plants often hold three versions of the same manual, and the older one may specify a different bearing or torque. The retrieval layer prefers the revision that matches the installed machine, and the answer states which revision it used.</p>
<h3>Part numbers break pure vector search</h3>
<p>Embedding-based search is good at meaning. Ask about &quot;bearing noise at high speed&quot; and it will find passages about &quot;running noise in the spindle bearings&quot; even with no shared words. It is bad at identifiers. To an embedding model, &quot;6205-2RS&quot;, &quot;6205-2RSH&quot; and &quot;6206-2RS&quot; look almost identical, yet they are different parts.</p>
<p>So retrieval is hybrid:</p>
<ul>
<li><strong>Keyword search (BM25)</strong> over normalised identifiers: part numbers, error codes, drawing item numbers, section numbers.</li>
<li><strong>Vector search</strong> over the text for symptoms, procedures and explanations.</li>
<li><strong>A reranker</strong> that scores the merged candidates against the full question and the evidence object, not just the query text.</li>
</ul>
<p>Normalisation does a lot of quiet work. &quot;6205 2RS&quot;, &quot;6205-2RS1&quot;, &quot;6205-2RSH/C3&quot; and a manufacturer&#x27;s internal code may all refer to the same or interchangeable bearings. We maintain a mapping from the plant&#x27;s bill of materials so that the manual agent searches every alias, and so the parts agent can tell the difference between &quot;same part&quot; and &quot;compatible part&quot;.</p>
<h3>Scanned PDFs and drawings</h3>
<p>A surprising share of manuals are scanned. OCR gets most body text right and gets tables and small print wrong. We run layout-aware OCR, keep page images alongside the extracted text, and flag low-confidence regions. When the manual agent cites a low-confidence passage, the answer links to the page image so a technician can read the original instead of trusting the extraction.</p>
<h2>Step 3: Work order history as memory</h2>
<p>The CMMS is the plant&#x27;s memory, and it is messy. A typical closed work order reads something like &quot;spdl laut, Lager getauscht, i.O.&quot; Short, mixed German and English, abbreviations that only make sense to the team that wrote them. Yet that line says the spindle was loud, the bearing was replaced, and the result was fine. That is exactly the precedent a new incident needs.</p>
<h3>Normalising free text</h3>
<p>We extract a small, consistent structure from each work order: asset, component, failure mode, cause where stated, action taken and outcome. The taxonomy follows the spirit of ISO 14224, which defines equipment hierarchies and failure modes for maintenance data, simplified to what a given plant actually records. Abbreviations and local terms are mapped once with the maintenance team, and the mapping is reused.</p>
<p>The extraction is not perfect, so every normalised field keeps a pointer to the original text. When the history agent cites &quot;bearing replaced on CNC-07 in March, no repeat for 14 months&quot;, the technician can open the original work order and see the words the colleague actually wrote.</p>
<h3>Finding similar incidents</h3>
<p>Similarity is not only text similarity. Two incidents are similar when they share asset class, component and failure mode, and when their signal signatures look alike. The history agent searches on all of these:</p>
<ul>
<li>Same asset first, then same model, then same component type across the plant.</li>
<li>Same failure mode or symptom.</li>
<li>Signal signatures with matched fault frequencies, where historical data exists.</li>
<li>Recency, with older incidents weighted down but not ignored.</li>
</ul>
<p>The output is a short list of precedents with what was done and what happened next. A precedent where the bearing was replaced and the vibration returned within a month is as important as one where the fix held. It suggests the cause was upstream, such as misalignment or lubrication, and that replacing the bearing alone will not be enough.</p>
<h2>Step 4: Reasoning with citations, and knowing when to stop</h2>
<p>With evidence in hand, the planner writes the answer. Three rules govern it.</p>
<h3>Every claim cites a source</h3>
<p>The planner may only state facts that appear in an evidence object, and it must cite the object&#x27;s id. A post-check verifies this mechanically: every number in the answer, whether a frequency, a torque, a part number or a date, must appear in a cited source. If it does not, the sentence is removed or the answer is regenerated. This is crude and it works. Most hallucinated detail in technical answers takes the form of plausible numbers, and plausible numbers are easy to check.</p>
<h3>Alternatives are named and ruled out</h3>
<p>A useful root cause explains why the other candidates fit worse. If the evidence shows a BPFO match with no significant 1× component, the answer says that imbalance is unlikely because there is no peak at running speed. Engineers trust answers that show their elimination, because that is how they reason themselves.</p>
<h3>Abstaining is a feature</h3>
<p>When the evidence is thin or contradictory, the right answer is &quot;not enough evidence yet&quot;, together with the one measurement that would settle it. If the vibration pattern fits both an outer race defect and looseness, and there is no temperature data, the planner asks for a temperature reading or a second vibration measurement on the non-drive end, instead of guessing.</p>
<p>A finished answer for our example reads like this:</p>
<blockquote>
<p><strong>Likely cause:</strong> outer race wear on bearing 6205-2RS, spindle drive end (confidence: high).</p>
<p><strong>Evidence:</strong> envelope peak at 147 Hz with harmonics, matching BPFO for this bearing at 2,460 rpm [sig-cnc07-0412]. Kurtosis doubled over six hours [sig-cnc07-0412]. Manual §4.3 (rev. C) lists outer race wear as the cause of this pattern with rising temperature [man-4.3-c].</p>
<p><strong>History:</strong> same bearing replaced on this spindle 14 months ago, rated for 12 months under this duty cycle [wo-1874].</p>
<p><strong>Ruled out:</strong> imbalance (no significant 1× component), misalignment (no 2× peak or axial increase) [sig-cnc07-0412].</p>
<p><strong>Action:</strong> replace bearing 6205-2RS following §4.3 steps 1–12, clamping nut at 45 Nm [man-4.3-c]. Four in stock in bay B-12 [erp-stock]. Suggested window: Tuesday 06:00 shift, about 1.5 hours.</p>
</blockquote>
<p>Everything in that answer can be clicked and checked. That is the bar.</p>
<h2>Step 5: Evaluating it honestly</h2>
<p>It is easy to build a demo that looks right on three hand-picked incidents. It is harder to know how a system performs on the incidents a plant actually has. We evaluate against history.</p>
<h3>Build the test set from closed work orders</h3>
<p>The best test cases are past incidents where the root cause was confirmed: the part was replaced, the failure was inspected, and the work order says what was found. We replay the data that was available before the fix, sensor history, the manual revision in use and work orders up to that date, and ask the system for a root cause. No information from after the event is allowed in, which is the most common way such evaluations accidentally cheat.</p>
<h3>Measure more than accuracy</h3>
<ul>
<li><strong>Root-cause accuracy</strong>, top-1 and top-3, against the confirmed cause.</li>
<li><strong>Citation precision</strong>: the share of claims that are actually supported by the passage they cite. We sample and check these by hand, because a judge model will happily approve a fluent but unsupported sentence.</li>
<li><strong>Abstention quality</strong>: when the system says &quot;not enough evidence&quot;, was it right to? An abstention on a case a technician solved from the same data counts against it.</li>
<li><strong>Time to answer</strong>, because an answer that arrives after the technician has already opened the machine is worth less.</li>
</ul>
<p>We report results per asset class rather than one average. A system can be excellent on spindle bearings and weak on hydraulic presses, and a single number hides that.</p>
<h2>What still goes wrong</h2>
<p>Some failure modes are worth naming because every team building this will meet them.</p>
<ul>
<li><strong>Unit and scale mismatches.</strong> Velocity in mm/s versus in/s, acceleration in g versus m/s², peak versus RMS. One wrong conversion produces a confident, wrong severity. Units are validated at ingestion, not at answer time.</li>
<li><strong>Stale bills of materials.</strong> If the BOM still lists the bearing that was swapped for a different model two years ago, the defect frequencies are computed for the wrong geometry. We flag frequency matches that rely on BOM entries older than the last related work order.</li>
<li><strong>One snapshot is not a trend.</strong> A single high reading after a tool change or a crash is not a bearing fault. The signal agent requires persistence across operating states before it calls a degradation.</li>
<li><strong>Language.</strong> Manuals in English, work orders in German, technicians speaking both. Retrieval and extraction run in both languages, and the answer is written in the language of the person asking.</li>
<li><strong>Over-trusting the history.</strong> &quot;We always replace the bearing&quot; can encode a habit, not a cause. Precedents where the same fix was repeated several times are surfaced as a warning, not as reassurance.</li>
</ul>
<h2>Closing</h2>
<p>The model matters less than people think, and the evidence pipeline matters more. A plant that already has a historian, a CMMS and its manuals has most of what it needs to get specific, checkable answers to &quot;what is failing and what do we do&quot;. The work is in making those sources speak to each other, and in refusing to let the answer say anything they do not support.</p>
<p>If you run a maintenance team and want to see this on your own machines and documents, we would be glad to walk through it with your data.</p>]]></content:encoded>
  </item>
  <item>
    <title>Juris: Case Study Analysis</title>
    <link>https://clerktree.com/blog/juris-comprehensive-case-study</link>
    <guid isPermaLink="true">https://clerktree.com/blog/juris-comprehensive-case-study</guid>
    <pubDate>Sun, 15 Jun 2025 08:00:00 GMT</pubDate>
    <dc:creator>Animesh Mishra</dc:creator>
    <description>An analysis of Juris, production-ready, multi-modal legal AI system achieving 92% precision@5 — outperforming state-of-the-art systems by 12-33%.</description>
    <content:encoded><![CDATA[<p>Juris represents a <strong>significant advancement</strong> in legal case retrieval systems, achieving <strong>92% precision@5</strong> — outperforming state-of-the-art systems by <strong>12-33%</strong>. This case study examines how Juris compares to existing approaches, making it the <strong>first production-ready, multi-modal legal AI system</strong> with comprehensive entity modeling including judges and courts.</p>
<hr/>
<h2>1. Juris vs. State-of-the-Art Systems</h2>
<h3>1.1 Structure</h3>
<p>This analysis examines five seminal systems representing the evolution of legal case retrieval from 2021-2024, using the framework established by Feng et al. (2024) in their survey of legal case retrieval state-of-the-art.</p>
<hr/>
<h3>1.2 Dhani et al. (2021) - Knowledge Graphs + GNN</h3>
<p><strong>Citation</strong>: Dhani, J.S., Bhatt, R., Ganesan, B., Sirohi, P., &amp; Bhatnagar, V. (2021). &quot;Similar Cases Recommendation using Legal Knowledge Graphs&quot;</p>
<p><strong>Approach</strong>: The system constructed a legal knowledge graph from Indian court judgments using Graph Neural Networks (GNN) with RGCN architecture. The research focused specifically on IPR (Intellectual Property Rights) cases, employing topic modeling with Latent Dirichlet Allocation (LDA) and training on citation prediction and case similarity tasks.</p>
<p><strong>Technical Limitations</strong>: The system lacked vector embeddings, relying solely on graph structure and handcrafted features. It had limited entity types, modeling only cases and laws without judge or court modeling. The approach used older embedding models, specifically LegalBERT from 2020, without modern LLM capabilities. Additionally, the system was demo-only with no production deployment for practitioners.</p>
<p><strong>Performance</strong>: Citation link prediction was not quantified with standard IR metrics, and case similarity was evaluated qualitatively through GNN explainability. The system did not report Precision@k, Recall@k, or NDCG metrics, making quantitative comparison difficult.</p>
<p><strong>Juris Advantages</strong>: Juris employs 768-dimensional Gemini embeddings compared to handcrafted features, providing modern vector representations. It combines multi-modal search (vector + graph) versus the graph-only approach. Juris demonstrates entity richness by modeling judges, courts, and statutes versus the limited cases/laws only approach. The system is production-ready with a deployed Streamlit interface compared to demo-only implementations. Most importantly, Juris provides quantified performance metrics with 92% Precision@5 versus unreported metrics from prior systems.</p>
<hr/>
<h3>1.3 Hier-SPCNet (Bhattacharya et al., 2022) - Heterogeneous Networks</h3>
<p><strong>Citation</strong>: Bhattacharya, P., Ghosh, K., Pal, A., &amp; Ghosh, S. (2022). &quot;Legal Case Document Similarity: You Need Both Network and Text&quot;</p>
<p><strong>Approach</strong>: The system augmented the Precedent Citation Network (PCNet) with statutes, creating a hierarchical statute structure called Hier-SPCNet. It used metapath2vec for network embeddings and combined this with Doc2Vec for text representations, applying ICF (Inverse Citation Frequency) weighting to enhance relevance.</p>
<p><strong>Technical Details</strong>: The architecture employed a heterogeneous graph combining statutes and precedents. Metapaths were designed with domain-specific paths in collaboration with legal experts. The hybrid model used a weighted combination of network (70%) and text (30%) features, trained on Indian Supreme Court cases.</p>
<p><strong>Performance</strong>: The system achieved approximately 0.78 accuracy from the network-text combination, outperforming bibliographic coupling, co-citation, and dispersion methods. The network and text hybrid approach proved superior to either modality alone, demonstrating the value of combining multiple signals.</p>
<p><strong>Key Innovation</strong>: This was the first system to systematically combine network and text signals for legal similarity, establishing a foundation for hybrid approaches in legal AI.</p>
<p><strong>Juris Advantages</strong>: Juris employs a modern architecture using Gemini LLM and embeddings compared to the older Doc2Vec approach. It introduces novel judge and court entity modeling, which was absent in Hier-SPCNet. Juris provides an interactive production interface versus research prototypes. The system achieves 18% higher accuracy with 0.92 precision compared to 0.78, and offers real-time LLM analysis with contextual explanations rather than simple similarity scores.</p>
<hr/>
<h3>1.4 Kalamkar et al. (2022) - Rhetorical Roles + Knowledge Graphs</h3>
<p><strong>Citation</strong>: Kalamkar, P. et al. (2022). &quot;Semantic Segmentation of Legal Documents via Rhetorical Roles&quot;</p>
<p><strong>Approach</strong>: The system identified 13 rhetorical roles including Facts, Arguments, Precedents, Reasoning, and others. It used transformer-based models for rhetorical role (RR) prediction and constructed knowledge graphs based on rhetorical similarity. The approach applied TF-IDF similarity weighted by rhetorical role importance, with expert-defined weights for different rhetorical roles.</p>
<p><strong>Technical Framework</strong>: The corpus consisted of 265 Indian legal texts with 26,304 annotated sentences. The model used a transformer-based baseline for RR classification. The knowledge graph structure had cases as nodes with edges representing weighted RR similarity. Weights were assigned by legal experts, with RATIO weighted at 2 and FACTS at 1, reflecting the relative importance of different rhetorical elements.</p>
<p><strong>Performance</strong>: The system achieved 0.71 accuracy for case similarity and improved legal summarization using RR segmentation. RR classification achieved F1-scores ranging from 0.65 to 0.75 across different roles, demonstrating reasonable performance in role identification.</p>
<p><strong>Novel Contribution</strong>: This was the first system to systematically use rhetorical roles for similarity assessment, introducing a document structure-aware approach to legal case comparison.</p>
<p><strong>Juris Advantages</strong>: Juris achieves 29.6% higher accuracy with 0.92 precision compared to 0.71. It provides entity-level modeling of judges and courts versus document-level rhetorical role analysis only. The system uses modern vector embeddings for semantic similarity compared to TF-IDF. Juris integrates LLM for contextual analysis versus statistical weighting approaches. Most significantly, Juris employs multi-modal retrieval combining vector, graph, and keyword search versus rhetorical role similarity only.</p>
<hr/>
<h3>1.5 CaseGNN (Tang et al., 2023) - Graph Neural Networks</h3>
<p><strong>Citation</strong>: Tang, Y., Qiu, R., Liu, Y., Li, X., &amp; Huang, Z. (2023). &quot;CaseGNN: Graph Neural Networks for Legal Case Retrieval with Text-Attributed Graphs&quot;</p>
<p><strong>Approach</strong>: The system converted cases to Text-Attributed Case Graphs (TACG) and designed an Edge Graph Attention Layer (EdgeGAT) for processing. It extracted entities including parties, crimes, evidence, and charges. The training used contrastive loss with hard negative sampling and avoided BERT length limitations through sentence-level processing.</p>
<p><strong>Technical Architecture</strong>: TACG construction involved Named Entity Recognition (NER) and Relation Extraction to build the graph structure. The EdgeGAT component introduced a novel attention mechanism for both edges and nodes. Training employed contrastive learning with easy and hard negatives, evaluated on COLIEE 2022 and COLIEE 2023 datasets.</p>
<p><strong>Performance</strong>: The system achieved approximately 0.82 accuracy on COLIEE benchmarks, with NDCG@5 scores ranging from 0.78 to 0.82 depending on the dataset. It outperformed BM25, BERT, SAILER, and PromptCase baselines, demonstrating that one-stage retrieval could be competitive with two-stage pipelines.</p>
<p><strong>Key Innovation</strong>: This was the first system to use text-attributed graphs combined with Graph Neural Networks for legal retrieval, introducing a structured approach to case representation.</p>
<p><strong>Juris Advantages</strong>: Juris achieves 12.2% higher accuracy with 0.92 precision compared to 0.82. It employs modern LLM embeddings using Gemini versus BERT-based approaches. Juris includes judge and court modeling, which was absent in CaseGNN. The system provides multi-modal search combining vector, graph, and keyword approaches versus graph-only methods. Juris offers production deployment with an interactive UI compared to research implementations, and provides real-time LLM-powered explanations versus simple similarity scores.</p>
<hr/>
<h3>1.6 Chen et al. (2024) - Knowledge Graph + LLM</h3>
<p><strong>Citation</strong>: Chen, Y. et al. (2024). &quot;Leverage Knowledge Graph and Large Language Model for Law Article Recommendation&quot;</p>
<p><strong>Approach</strong>: The system developed a Case-Enhanced Law Article Knowledge Graph (CLAKG) with automated knowledge graph construction using LLM. It employed RGCN (Relational Graph Convolutional Network) for graph embeddings and used LLM for matching key information and generating recommendations, implementing a closed-loop human-machine collaboration approach.</p>
<p><strong>Technical Framework</strong>: The CLAKG integrates law articles with historical cases. Automated construction uses LLM to extract entities and relationships. The retrieval algorithm combines graph embeddings with LLM semantic matching, trained on the China Judgments Online dataset containing criminal law cases.</p>
<p><strong>Performance</strong>: The system achieved 0.694 accuracy for law article recommendation, representing a 26.4% improvement from the 0.549 baseline. It outperformed BERT, GRU, DPCNN, TFIDF-RAG, and Graph-RAG approaches, demonstrating the effectiveness of combining knowledge graphs with modern LLMs.</p>
<p><strong>Key Innovation</strong>: This was the first system to combine automated knowledge graph construction with LLM for legal recommendation, establishing a new paradigm for legal AI systems.</p>
<p><strong>Juris Advantages</strong>: Juris achieves 32.6% higher accuracy with 0.92 precision compared to 0.694, despite addressing the more complex task of case similarity versus article recommendation. Juris introduces novel judge and court entity modeling not present in prior systems. The system employs multi-modal search with three modalities (vector, graph, keyword) versus graph and LLM only. Juris uses a modern Gemini architecture with unified embedding and generation versus separate BERT and LLM components. The system provides a production interface as a deployed system versus experimental frameworks, and offers a richer entity model with 5 entity types (cases, judges, courts, statutes, sections) versus 2 (cases, articles).</p>
<hr/>
<h2>2. Novelty Assessment Framework</h2>
<h3>2.1 Technical Novelty Matrix</h3>
<table><thead><tr><th>Dimension</th><th>Juris</th><th>Prior Systems</th><th>Novelty Score</th></tr></thead><tbody><tr><td><strong>Entity Modeling</strong></td><td>5 types (Cases, Judges, Courts, Statutes, Sections)</td><td>1-3 types (Cases, Laws, Statutes)</td><td><strong>High</strong></td></tr><tr><td><strong>Embedding Architecture</strong></td><td>Gemini 768-dim (2024)</td><td>Doc2Vec, BERT (2020-2023)</td><td><strong>High</strong></td></tr><tr><td><strong>Search Modalities</strong></td><td>3 (Vector + Graph + Keyword)</td><td>1-2 (Graph or Graph+Text)</td><td><strong>High</strong></td></tr><tr><td><strong>LLM Integration</strong></td><td>Gemini 2.5 Flash (unified)</td><td>None or separate BERT</td><td><strong>Medium-High</strong></td></tr><tr><td><strong>Production Deployment</strong></td><td>Yes (Streamlit)</td><td>No (research only)</td><td><strong>High</strong></td></tr><tr><td><strong>Real-Time Analysis</strong></td><td>Yes (LLM-powered)</td><td>No (offline similarity)</td><td><strong>High</strong></td></tr></tbody></table>
<hr/>
<h3>2.2 Scientific Contribution Assessment</h3>
<p>Following the framework of Bhattacharya et al.&#x27;s state-of-the-art analysis, we assess Juris&#x27;s contributions:</p>
<p><strong>Novel Scientific Contributions</strong>: Juris represents the first system to explicitly model judges and courts as retrievable entities, addressing a significant gap in prior legal AI research. The system achieves the highest reported accuracy with 92% Precision@5, exceeding all published systems where the previous best was 82%. Juris introduces a true multi-modal architecture, being the first to integrate vector, graph, and keyword search in a unified framework. It represents the first production system using the Gemini 2.5 ecosystem for legal retrieval, bridging the research-practice gap identified by multiple surveys. The comprehensive feature set includes 12 out of 12 features compared to 1-4 out of 12 in competitors, representing 3-12x completeness in functionality.</p>
<hr/>
<h3>2.3 Practical Innovation Assessment</h3>
<p><strong>Addressing Unmet Needs in Legal AI</strong>: Juris addresses critical unmet needs in the legal AI landscape through multiple dimensions. The interactive UI makes advanced retrieval accessible to non-technical users, democratizing access to sophisticated legal research tools. The system achieves 11.4 seconds average response time, enabling real-time legal research workflows. Juris demonstrates sub-linear scaling that efficiently handles 5000+ cases, addressing scalability concerns. The LLM-powered analysis provides contextual explanations, enhancing explainability compared to black-box systems. Most importantly, the multi-modal search approach reduces false negatives that are common in single-modality systems, providing more comprehensive and reliable results.</p>
<hr/>
<h2>3. Competitive Positioning Analysis</h2>
<h3>3.1 Market Gap Analysis</h3>
<p><strong>Current Legal AI Landscape</strong>: The current legal AI landscape reveals significant gaps between research and practice. Approximately 95% of published systems remain in the research phase, never reaching practitioners. Commercial tools such as LexisNexis and Westlaw continue to rely on traditional keyword search rather than modern semantic approaches. Most production systems use basic NLP techniques rather than modern LLMs, creating an opportunity for advanced systems like Juris to bridge this technological gap.</p>
<p><strong>Juris Position</strong>: <strong>First production-ready system with modern LLM + KG architecture</strong></p>
<hr/>
<h3>3.2 Competitive Advantages</h3>
<p><strong>vs. Research Systems</strong> (Dhani, Hier-SPCNet, CaseGNN, etc.): Juris distinguishes itself from research systems through production deployment, providing an interactive interface that makes the technology accessible. The system achieves higher accuracy with 12-33% improvement over prior research systems and employs a modern LLM architecture that represents the current state-of-the-art.</p>
<p><strong>vs. Commercial Systems</strong> (LexisNexis, Westlaw): Compared to commercial systems, Juris offers semantic search capabilities versus keyword-only approaches, enabling more intuitive and effective querying. The system incorporates knowledge graph reasoning and multi-modal retrieval, providing real-time LLM analysis. However, Juris currently operates with a limited dataset of 50 cases compared to millions in commercial databases, representing a key growth area for future development.</p>
<p><strong>vs. Recent Legal AI Tools</strong> (Harvey, Everlaw): Juris provides an open architecture compared to proprietary systems, offering greater transparency and customization potential. The system includes knowledge graph integration, judge and court entity modeling, and multi-modal search capabilities. Similar to commercial systems, the scale of training data represents an area for future expansion.</p>
<hr/>
<h3>3.3 Unique Value Proposition</h3>
<p><strong>Juris is the only system that combines</strong> modern LLM embeddings using Gemini, a rich knowledge graph built on Neo4j with 5 entity types, multi-modal search integrating vector, graph, and keyword approaches, a production-ready interface built with Streamlit, judge and court entity modeling, and real-time contextual analysis. This comprehensive combination is unprecedented in published literature, representing a significant advancement in legal AI capabilities.</p>
<hr/>
<h2>4. Limitations and Future Directions</h2>
<h3>4.1 Current Limitations</h3>
<p><strong>Dataset Scale</strong>: The current system operates with 50 cases as a validation dataset, with a target of 10,000+ cases for production scale. This limited coverage impacts comparison with commercial databases that contain millions of cases, representing a key area for future expansion.</p>
<p><strong>Single Jurisdiction</strong>: Juris currently focuses on the Indian legal system, which provides depth in a specific jurisdiction but limits global applicability. Expansion to multi-jurisdiction support would enable broader adoption and more comprehensive legal research capabilities across different legal frameworks.</p>
<p><strong>Evaluation Metrics</strong>: The system reports standard information retrieval metrics including Precision, Recall, F1, MAP, and NDCG. However, user satisfaction studies, A/B testing, and longitudinal analysis are currently missing, representing opportunities for more comprehensive evaluation of real-world impact and user experience.</p>
<hr/>
<h3>4.2 Identified Research Gaps</h3>
<p>Based on Feng et al.&#x27;s survey and recent workshops, key gaps addressed by Juris:</p>
<p><strong>Gap #1: Production Deployment</strong>: A critical problem in legal AI research is that 95% of published systems never reach practitioners, remaining confined to academic settings. Juris addresses this gap through a deployed Streamlit interface that makes the technology accessible to legal professionals in real-world scenarios.</p>
<p><strong>Gap #2: Entity-Rich Modeling</strong>: Prior systems have consistently ignored judges and courts as entities, focusing only on cases, statutes, and precedents. Juris represents the first system to model judges and courts explicitly, enabling queries that legal practitioners frequently need, such as finding cases by specific judges or jurisdictions.</p>
<p><strong>Gap #3: Modern LLM Integration</strong>: Most existing systems use outdated embeddings such as Doc2Vec and basic BERT, missing the benefits of modern language models. Juris addresses this gap by employing the Gemini ecosystem for both embeddings and generation, providing state-of-the-art semantic understanding and contextual analysis.</p>
<p><strong>Gap #4: Multi-Modal Retrieval</strong>: Single-modality systems often miss complex queries that require multiple types of information retrieval. Juris solves this problem through a unified architecture that combines vector search, graph traversal, and keyword matching, ensuring comprehensive coverage of different query types and reducing false negatives.</p>
<hr/>
<h3>4.3 Future Enhancement Roadmap</h3>
<p><strong>Phase 1: Dataset Expansion</strong> (Months 1-6): The first phase focuses on scaling the dataset to 10,000 cases, expanding beyond the current validation set. This phase will also add multi-jurisdiction support to enable global applicability and incorporate statutory databases to enhance the knowledge graph with comprehensive legal frameworks.</p>
<p><strong>Phase 2: Advanced Features</strong> (Months 6-12): The second phase introduces advanced features including temporal reasoning for case timeline analysis, citation network analysis to understand case relationships and precedents, and outcome prediction capabilities to assist legal practitioners in understanding potential case outcomes.</p>
<p><strong>Phase 3: Enterprise Integration</strong> (Months 12-18): The third phase focuses on enterprise integration, providing APIs for third-party integration, enabling custom knowledge graph import for organizations with proprietary legal data, and implementing multi-tenancy support for scalable deployment across different organizations and use cases.</p>
<hr/>
<h2>5. Conclusions</h2>
<h3>5.1 Novelty Assessment Summary</h3>
<p><strong>Juris demonstrates high novelty across six dimensions</strong>: The system is the first to model judges and courts as entities, introducing a hybrid multi-modal architectural approach that combines multiple retrieval methods. It employs modern Gemini LLM ecosystem technology, providing a production-ready deployment that bridges the research-practice gap. Juris achieves 12-33% accuracy improvement over state-of-the-art systems and demonstrates 3-12x more feature completeness than competitors. The overall novelty rating stands at 8.5/10, representing high innovation in the legal AI domain.</p>
<hr/>
<h3>5.2 Competitive Positioning</h3>
<p><strong>Juris occupies a unique position</strong> in the legal AI landscape. Compared to research systems, Juris is more complete, actually deployed, and achieves higher accuracy. When compared to commercial systems, Juris offers more advanced AI capabilities with better semantic understanding. Relative to recent AI tools, Juris provides a more comprehensive architecture with integrated knowledge graph capabilities. The market position establishes Juris as the first-mover in production-ready, multi-modal legal AI with entity-rich knowledge graphs.</p>
<hr/>
<h3>5.3 Key Differentiators</h3>
<p><strong>What makes Juris fundamentally different</strong>: Juris stands apart through judge and court modeling capabilities that no competitor offers, enabling queries that legal practitioners frequently need. The system is the only one providing multi-modal search combining vector, graph, and keyword approaches. Juris represents the only research system with a public production deployment interface, making advanced legal AI accessible to practitioners. The modern LLM stack uses Gemini 2.5 Flash for both embedding and generation, providing unified capabilities. Feature completeness reaches 12 out of 12 features compared to 1-4 out of 12 in competitors, and the system achieves the highest reported accuracy with 92% Precision@5.</p>
<hr/>
<h2>6. References</h2>
<p>This comprehensive case study analysis draws upon extensive research in legal AI and information retrieval systems. Key references include product documentation for Juris, legal case retrieval surveys by Feng et al. (2024), state-of-the-art system implementations including Dhani et al. (2021), Hier-SPCNet (Bhattacharya et al., 2022), Kalamkar et al. (2022), CaseGNN (Tang et al., 2023), and Chen et al. (2024). Additional references cover Gemini embeddings performance benchmarks, production system gap analyses, and comprehensive surveys of the legal AI landscape. Detailed comparison data files, feature matrices, and performance improvement metrics support the findings presented throughout this analysis.</p>]]></content:encoded>
  </item>
</channel>
</rss>
