<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ram Chandra Samal</title>
    <description>The latest articles on DEV Community by Ram Chandra Samal (@ramcsamal).</description>
    <link>https://dev.to/ramcsamal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3950207%2F4d5e0b51-0c83-4ce0-a8fa-f5ecdb7abed0.png</url>
      <title>DEV Community: Ram Chandra Samal</title>
      <link>https://dev.to/ramcsamal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ramcsamal"/>
    <language>en</language>
    <item>
      <title>Stop pasting tokens into random websites: meet SmartDevUtils</title>
      <dc:creator>Ram Chandra Samal</dc:creator>
      <pubDate>Fri, 29 May 2026 01:07:02 +0000</pubDate>
      <link>https://dev.to/ramcsamal/stop-pasting-tokens-into-random-websites-meet-smartdevutils-3n4</link>
      <guid>https://dev.to/ramcsamal/stop-pasting-tokens-into-random-websites-meet-smartdevutils-3n4</guid>
      <description>&lt;p&gt;If you've done any of these in the last week —&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Googled &lt;em&gt;"decode jwt online"&lt;/em&gt;, clicked the first result, and pasted a real token into a textbox on a domain you'd never heard of.&lt;/li&gt;
&lt;li&gt;Opened an ad-cluttered "JSON formatter" site to clean up a 2-KB payload.&lt;/li&gt;
&lt;li&gt;Pasted a row of customer data into a "CSV to JSON" converter to massage it for a support ticket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…you already know the problem. The web is &lt;em&gt;covered&lt;/em&gt; in single-purpose developer utility sites, and most of them are some combination of slow, ad-infested, and quietly logging whatever you paste into them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://smartdevutils.com" rel="noopener noreferrer"&gt;&lt;strong&gt;SmartDevUtils&lt;/strong&gt;&lt;/a&gt; is one answer to that: a single tab that bundles the everyday developer utilities you keep googling, running entirely client-side in your browser. No backend round-trip, no accounts, no upload of your inputs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12il2769smwuq5e2oxp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12il2769smwuq5e2oxp9.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The everyday friction
&lt;/h2&gt;

&lt;p&gt;These tasks come back day after day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decode a JWT to inspect a claim&lt;/li&gt;
&lt;li&gt;Format and validate a JSON response&lt;/li&gt;
&lt;li&gt;Convert between Unix timestamps and human time&lt;/li&gt;
&lt;li&gt;Generate a UUID for a test record&lt;/li&gt;
&lt;li&gt;Hash a string for comparison&lt;/li&gt;
&lt;li&gt;URL-encode a tricky query parameter&lt;/li&gt;
&lt;li&gt;Parse the cron expression you copied out of a YAML file&lt;/li&gt;
&lt;li&gt;Diff two near-identical config blobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually each is a 5-second task. Collectively they are a real attention tax — and the "search for a tool every time" pattern means you're constantly evaluating an unfamiliar, untrusted page right when you're trying to focus on something else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the toolbox
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc4bm8m8dn8jso63803r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc4bm8m8dn8jso63803r.png" alt=" " width="799" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Roughly what you'd expect from a complete swiss-army-knife site, grouped by category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encoding &amp;amp; Crypto&lt;/strong&gt; — Base64, JWT debugger, MD5 / SHA hash, URL encode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data &amp;amp; Formats&lt;/strong&gt; — JSON format/validate, YAML ↔ JSON, CSV ↔ JSON, XML&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generators&lt;/strong&gt; — UUID / ULID, strong passwords, QR codes, Lorem Ipsum&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text &amp;amp; Code&lt;/strong&gt; — Regex tester, text diff, case converter, string inspector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web &amp;amp; Design&lt;/strong&gt; — Color converter, Markdown preview, meta-tag builder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time &amp;amp; Numbers&lt;/strong&gt; — Unix timestamp, number-base converter, cron parser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact lineup may differ on the live site, but the shape is familiar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevtjc4fqprf5nsmjiuah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevtjc4fqprf5nsmjiuah.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The interesting bit: it runs in your browser
&lt;/h2&gt;

&lt;p&gt;This is the part that matters more than the tool count.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae5zwgjhvzomzb9ze49q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae5zwgjhvzomzb9ze49q.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most "online converter" sites work like this: your input is POSTed to &lt;em&gt;their&lt;/em&gt; server, processed, logged (probably), and returned. The data flow passes through infrastructure you have zero visibility into. For a JSON formatter that's annoying. For anything containing a JWT, an API key, a secret, a customer email, or a config blob, it's a quiet but real data-exfiltration risk you absorb every single time.&lt;/p&gt;

&lt;p&gt;SmartDevUtils flips that. Everything happens in your browser's JavaScript runtime. If the implementation matches what it advertises, you should be able to open DevTools → Network, use any of the tools, and see no outgoing requests on your input. Once the page is cached, it keeps working offline.&lt;/p&gt;

&lt;p&gt;That single architectural choice has nice downstream effects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safe with secrets.&lt;/strong&gt; Decode a JWT containing a real session token without it leaving your laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast.&lt;/strong&gt; No round-trip latency. Output updates as you type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline.&lt;/strong&gt; Works on planes, behind firewalls, on locked-down corporate networks where most online tools fail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No accounts, no rate limits.&lt;/strong&gt; There's no backend to gate you on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to get it
&lt;/h2&gt;

&lt;p&gt;Beyond the web app, &lt;strong&gt;SmartDevUtils is also available as a browser extension&lt;/strong&gt;, served directly from the website itself — no app-store account, no review delay. Visit &lt;a href="https://smartdevutils.com" rel="noopener noreferrer"&gt;smartdevutils.com&lt;/a&gt;, choose &lt;em&gt;Add to browser&lt;/em&gt;, and pin the icon to your toolbar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwa7c18an7ettrfea0vb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwa7c18an7ettrfea0vb4.png" alt=" " width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next time you need to base64-decode something, hit the toolbar icon and the whole toolbox is there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this pattern matters
&lt;/h2&gt;

&lt;p&gt;There's a broader point lurking here. Single-purpose dev utility sites are a category that &lt;em&gt;defaults&lt;/em&gt; to client-side processing — every operation in that toolbox is pure transformation logic that doesn't need a server at all. The fact that so many of them still ship a backend (and the analytics/ads that come with it) is a quiet vote against the user's interest.&lt;/p&gt;

&lt;p&gt;Tools like SmartDevUtils are useful as tools. They're also useful as a reminder of what this whole category &lt;em&gt;should&lt;/em&gt; look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local computation by default&lt;/li&gt;
&lt;li&gt;No telemetry on user input&lt;/li&gt;
&lt;li&gt;Offline-capable, because every dependency is in the bundle&lt;/li&gt;
&lt;li&gt;Free, because there's almost nothing to host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build internal tooling for your team, the same posture is worth borrowing. The fastest, most trustworthy version of "small utility tool" is almost always the one with no backend at all.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; 👉 &lt;a href="https://smartdevutils.com" rel="noopener noreferrer"&gt;smartdevutils.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have a favorite browser-native dev tool you keep open in a tab? Drop it in the comments — always looking for more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>privacy</category>
      <category>devtool</category>
    </item>
    <item>
      <title>Multi-Repo Microservice Changes Are a Coordination Problem. I Solved It With AI Agent Teams.</title>
      <dc:creator>Ram Chandra Samal</dc:creator>
      <pubDate>Mon, 25 May 2026 08:12:03 +0000</pubDate>
      <link>https://dev.to/ramcsamal/multi-repo-microservice-changes-are-a-coordination-problem-i-solved-it-with-ai-agent-teams-34mf</link>
      <guid>https://dev.to/ramcsamal/multi-repo-microservice-changes-are-a-coordination-problem-i-solved-it-with-ai-agent-teams-34mf</guid>
      <description>&lt;p&gt;A walkthrough of &lt;strong&gt;RepoOrch&lt;/strong&gt; — an open-source Claude Code plugin that turns a multi-repo workspace into a deliberating team of AI specialists, with peer-to-peer messaging and a hard read-only safety model.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/architonixlabs/RepoOrch" rel="noopener noreferrer"&gt;github.com/architonixlabs/RepoOrch&lt;/a&gt; · MIT licensed · v0.3.0&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;The honest workflow for a multi-repo bug in a microservice org looks like this: open three codebases, read until your eyes blur, hope you didn't miss a contract break in the fourth.&lt;/p&gt;

&lt;p&gt;This isn't a code problem. It's a &lt;em&gt;coordination&lt;/em&gt; problem. And it's the exact shape of problem that the new &lt;strong&gt;Agent Teams&lt;/strong&gt; primitive in Claude Code is built to solve.&lt;/p&gt;

&lt;p&gt;In this post I'll walk through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why subagents (the older primitive) can't handle multi-repo change planning&lt;/li&gt;
&lt;li&gt;What Agent Teams add — specifically, the mailbox abstraction for peer-to-peer agent messaging&lt;/li&gt;
&lt;li&gt;How I built &lt;strong&gt;RepoOrch&lt;/strong&gt;, an open-source plugin that uses this pattern to turn a multi-repo workspace into a deliberating AI team&lt;/li&gt;
&lt;li&gt;The propose-only safety model and why it's enforced at the platform layer, not in prose&lt;/li&gt;
&lt;li&gt;How knowledge graphs cut per-triage token cost on large workspaces&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you've ever opened five tabs for a single microservice change and thought &lt;em&gt;"there has to be a better division of labor here,"&lt;/em&gt; this is about that.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The shape of the problem
&lt;/h2&gt;

&lt;p&gt;Imagine the workspace below — a perfectly ordinary microservice layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-project/
├── auth-service/
├── payments/
├── notifications/
├── inventory/
└── shipping/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ticket arrives in your queue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Users are getting 401 errors after the auth refactor."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The bug almost certainly lives across multiple repos. Maybe &lt;code&gt;auth-service&lt;/code&gt; changed the shape of a JWT claim, and &lt;code&gt;payments&lt;/code&gt; still expects the old shape. Maybe &lt;code&gt;notifications&lt;/code&gt; never validated the claim properly and is silently dropping events. The only honest way to know is to read each codebase, trace the contract, and hope you didn't miss something.&lt;/p&gt;

&lt;p&gt;This is a textbook agentic AI use case — except for one thing: the agents need to &lt;strong&gt;talk to each other&lt;/strong&gt;. And until recently, they couldn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why subagents can't do this
&lt;/h2&gt;

&lt;p&gt;The standard agent-orchestration pattern in Claude Code (before Agent Teams) looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;master agent
    ├─→ subagent A (auth-service expert)
    ├─→ subagent B (payments expert)
    └─→ subagent C (notifications expert)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each subagent gets a question, does some research, and reports back to the master. Subagents &lt;strong&gt;cannot talk to each other&lt;/strong&gt;. They form a tree, not a graph.&lt;/p&gt;

&lt;p&gt;That's fine for "go read this file" or "summarize the schema." It falls apart the moment two specialists need to &lt;em&gt;negotiate&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Consider what actually needs to happen for the 401 bug:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The auth specialist proposes: &lt;em&gt;"I'll change the JWT &lt;code&gt;sub&lt;/code&gt; claim from &lt;code&gt;user_id&lt;/code&gt; to &lt;code&gt;UUID&lt;/code&gt;."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The payments specialist needs to answer: &lt;em&gt;"Does my service depend on the shape of the &lt;code&gt;sub&lt;/code&gt; claim?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a subagent tree, the only path between them goes through the master. So the master has to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand the auth proposal deeply enough to translate it into a question for payments&lt;/li&gt;
&lt;li&gt;Get the payments answer&lt;/li&gt;
&lt;li&gt;Translate it back into a constraint on auth&lt;/li&gt;
&lt;li&gt;Repeat for every cross-repo edge&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This doesn't scale, and worse — it forces the master into a coordinator role it's not really equipped for. The result is plans that look complete but have stale assumptions baked in.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Agent Teams: the mailbox primitive
&lt;/h2&gt;

&lt;p&gt;Claude Code 2.1.32 introduced &lt;strong&gt;Agent Teams&lt;/strong&gt;. The key difference is one small but transformative addition: &lt;strong&gt;each teammate gets a mailbox&lt;/strong&gt;, and teammates can message each other directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;master agent
    ├─→ auth specialist  ──┐
    │                      │  direct peer messages
    ├─→ payments spec.  ──┤  (mailbox)
    │                      │
    └─→ notifications  ───┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the conversation that actually needs to happen &lt;em&gt;can&lt;/em&gt; happen:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;auth → payments:&lt;/strong&gt; "I'm proposing changing the JWT &lt;code&gt;sub&lt;/code&gt; claim from &lt;code&gt;user_id&lt;/code&gt; to &lt;code&gt;UUID&lt;/code&gt;. Does your service read &lt;code&gt;sub&lt;/code&gt; directly, and if so, how do you parse it?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;payments → auth:&lt;/strong&gt; "Yes, we read &lt;code&gt;sub&lt;/code&gt; in &lt;code&gt;auth.middleware.ts:42&lt;/code&gt; and call &lt;code&gt;parseInt()&lt;/code&gt; on it. Your change will break us unless we update to &lt;code&gt;UUID&lt;/code&gt; parsing in the same release."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That deliberation is what produces a plan you can actually trust. The master doesn't have to be smart enough to mediate the contract — the specialists are.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. How RepoOrch puts this together
&lt;/h2&gt;

&lt;p&gt;RepoOrch is a Claude Code plugin that operationalizes this pattern for the multi-repo microservice case. Setup is one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/repo-orch-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The setup runner:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Discovers every git repo under your workspace root.&lt;/li&gt;
&lt;li&gt;Indexes each repo (language, frameworks, endpoints, events, dependencies).&lt;/li&gt;
&lt;li&gt;Writes an editable context document per repo — and &lt;em&gt;pauses for your review&lt;/em&gt;. (This is the most important step. The &lt;code&gt;owns&lt;/code&gt; field in the context drives routing later.)&lt;/li&gt;
&lt;li&gt;On your confirmation, generates a specialist agent per repo and a &lt;code&gt;registry.json&lt;/code&gt; the master uses for routing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then, for any incoming ticket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/repo-orch-triage "Users are getting 401 errors after the recent auth refactor"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The master reads the registry, scores which repos are likely involved, and spawns the relevant specialists as an Agent Team. They emit VERDICTs, deliberate over cross-repo contracts via their mailboxes, and the master synthesizes a single ordered change plan with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-repo dependency ordering (which repo's change must land first)&lt;/li&gt;
&lt;li&gt;Risks called out per repo&lt;/li&gt;
&lt;li&gt;Validation hints (the tests / endpoints to exercise)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero files modified&lt;/strong&gt; — which brings us to the safety model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For incidents where the root cause isn't known, there's an adversarial variant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/repo-orch-deliberate "Payments failing intermittently — unknown root cause"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This spawns the team in a mode where specialists are biased toward challenging each other's hypotheses, not converging too fast on the first plausible cause.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Propose-only, enforced at the platform layer
&lt;/h2&gt;

&lt;p&gt;There is a recurring AI-agent failure mode where the prompt says "do not modify files" and then the agent modifies files anyway. &lt;strong&gt;Prose is not a security boundary.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RepoOrch enforces propose-only in two layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tool restriction.&lt;/strong&gt; Every specialist agent is spawned with &lt;code&gt;tools: Read, Grep, Glob, Bash&lt;/code&gt;. There are no write, edit, create, or delete tools available. This isn't a prompt instruction — it's the actual tool inventory the agent sees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PreToolUse hook.&lt;/strong&gt; A platform-level hook intercepts every Bash call and hard-blocks write-like commands: &lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;, &lt;code&gt;sed -i&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt; redirection, and others. Even a malicious or hallucinated bash invocation is rejected before it runs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;/repo-orch-triage&lt;/code&gt; and &lt;code&gt;/repo-orch-deliberate&lt;/code&gt; commands additionally spawn agents with &lt;code&gt;permissionMode: "plan"&lt;/code&gt;, so the spawning context itself is read + delegate only.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The v0.2 guarantee, written into the README: &lt;em&gt;the agents produce a plan document. The developer executes it.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. Knowledge graphs and token savings
&lt;/h2&gt;

&lt;p&gt;The naive way to run a triage is to have every specialist cold-read its repo on every ticket. That works, but it adds up. The optional &lt;code&gt;/repo-orch-graph&lt;/code&gt; command builds a Claude-native knowledge summary per repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/repo-orch-graph    →  Claude reads each repo and writes summary.json
     ↓                  (one-time cost, no API key)
/repo-orch-triage   →  master pre-loads summary.json into a ~600-token
     ↓                  GRAPH_SUMMARY
specialist          →  reads GRAPH_SUMMARY first, targeted file reads
                       only for gaps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This entire flow runs &lt;strong&gt;inside the Claude Code session&lt;/strong&gt; — no Python, no API key, no external service. If no summary exists, the plugin degrades gracefully to direct file reads.&lt;/p&gt;

&lt;p&gt;On large workspaces this is the difference between "feels expensive" and "feels free." On small workspaces it's not worth the setup; the plugin lets you skip it.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Headless mode for CI
&lt;/h2&gt;

&lt;p&gt;For teams that want triage to happen automatically when a Jira ticket or GitHub issue is filed, RepoOrch exposes a headless entry point via the Anthropic Agent SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;runTriage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.claude/plugins/repo-orchestrator/automation/repo-orch-triage_runner.mjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// In a GitHub/Jira webhook handler:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;plan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runTriage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;issue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;workspaceRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/path/to/your/workspace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;postComment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;issue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This runs in &lt;code&gt;permissionMode: "plan"&lt;/code&gt; — same read-only, propose-only constraints as the interactive flow. The output is the same change-plan document, posted as a comment on the source ticket.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd build next
&lt;/h2&gt;

&lt;p&gt;A few directions I'm exploring for v0.4 and beyond:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confidence-weighted plans.&lt;/strong&gt; The aggregate confidence formula already lives in &lt;code&gt;skills/routing/SKILL.md&lt;/code&gt; — surface it more prominently so devs can sort risks by uncertainty, not just severity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph-aware deliberation.&lt;/strong&gt; Today the mailbox is fully connected. For 10+ repo workspaces, routing the mailbox along actual service-dependency edges would cut deliberation overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An execute mode behind an explicit consent prompt.&lt;/strong&gt; Still propose-by-default, but with a guarded path to apply the plan repo-by-repo with diff approval.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add the marketplace (one time)&lt;/span&gt;
/plugin marketplace add architonixlabs/RepoOrch

&lt;span class="c"&gt;# Install the plugin&lt;/span&gt;
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;repo-orchestrator@repo-orchestrator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run &lt;code&gt;/repo-orch-setup&lt;/code&gt; in any workspace that has 2+ git repos as immediate subdirectories.&lt;/p&gt;

&lt;p&gt;Source, issues, and discussions: &lt;a href="https://github.com/architonixlabs/RepoOrch" rel="noopener noreferrer"&gt;github.com/architonixlabs/RepoOrch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If RepoOrch saves you a single hour of multi-repo triage, a GitHub star is how I know to keep building. And if you try it and it breaks — file an issue, I'll respond. v0.3 just shipped a ten-fix security hardening pass; v0.4 is being shaped by feedback like yours.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>microservices</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
