<?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: Adam Drag</title>
    <description>The latest articles on DEV Community by Adam Drag (@adamdrag).</description>
    <link>https://dev.to/adamdrag</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1308855%2F2a35a756-e798-4d44-a9aa-0880410bcf4d.jpeg</url>
      <title>DEV Community: Adam Drag</title>
      <link>https://dev.to/adamdrag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adamdrag"/>
    <language>en</language>
    <item>
      <title>I let my coding agents argue on a message board for 12 days</title>
      <dc:creator>Adam Drag</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:21:01 +0000</pubDate>
      <link>https://dev.to/adamdrag/i-let-my-coding-agents-argue-on-a-message-board-for-12-days-55om</link>
      <guid>https://dev.to/adamdrag/i-let-my-coding-agents-argue-on-a-message-board-for-12-days-55om</guid>
      <description>&lt;p&gt;For about two weeks my coding agents have been talking to each other on a message board. One Staff agent plans the work and splits it into jobs, Senior agents write the code, and two researcher agents read the plans and reply. I can read every message in a dashboard. The tool is &lt;a href="https://github.com/adam-drag/triglav" rel="noopener noreferrer"&gt;Triglav&lt;/a&gt;, I built it to run Claude Code and Codex on my own machine.&lt;/p&gt;

&lt;p&gt;Part of the idea came from the reports about the OpenAI / Hugging Face incident in July, where agents coordinated on a message board nobody gave them. I wanted to try it the other way, with a board that is part of the setup and fully visible to me.&lt;/p&gt;

&lt;p&gt;After 12 days I wanted to know if the talking actually helps. So I exported the whole board and went through it with Claude.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;When a Senior is not sure about something, it posts a question with a short window, usually 3 to 5 minutes. Staff and the researchers reply with a stance: inform, support or challenge. After the window Staff records a decision. If they can't settle it, it comes to me as a blocker.&lt;/p&gt;

&lt;p&gt;From 7 to 19 October there were 1,648 messages on 76 jobs. 479 of them were replies, and 42 of the replies were challenges. 192 messages were routed to me and I made 176 decisions. There were 311 blockers, and 112 of them only said that the Staff agent was offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The good parts
&lt;/h2&gt;

&lt;p&gt;Most useful threads go the same way. Someone decides something, a researcher challenges it with a concrete reason, and the decision changes.&lt;/p&gt;

&lt;p&gt;This is one of them. The real thread was about work code, so I rebuilt it with fake names and a fake bug:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7ii4xv61u6a6pgbm9t5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7ii4xv61u6a6pgbm9t5.png" alt="A board thread where a researcher challenges the Staff decision and Staff withdraws it" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Senior found a bug that only shows up on a code path nothing calls. Staff told it to fix it, it's one line. The researcher said that fix would change how errors are shown, and the probe didn't prove that was ok. Staff checked again, found the code was deprecated, and withdrew its decision. The researcher also fixed the wording for closing the ticket, because "not reproducible" didn't match a probe row that actually failed.&lt;/p&gt;

&lt;p&gt;Another one was about Triglav itself. A review loop kept finding new issues, so Staff set a rule: if a fix causes a new finding, decline it and deliver. The researcher replied "a valid security finding caused by a fix should stop delivery and go to Staff/Client for review". Staff accepted it and changed the rule.&lt;/p&gt;

&lt;p&gt;They corrected me too. My prompt described one of my own config lists the wrong way round. Staff posted a correction before the Senior started, and I had to reply "Staff's correction is right, and my prompt was wrong."&lt;/p&gt;

&lt;p&gt;Agents also correct themselves quite often, because every decision has a message number. "I withdraw msg 873." and "My grep missed &lt;code&gt;Signed_In&lt;/code&gt;." are real messages. In one thread Staff was wrong about where some HTML is built, then posted a correction that was also wrong, and then the Senior answered with file and line numbers. Staff replied "427 is correct, and I withdraw the claim".&lt;/p&gt;

&lt;h2&gt;
  
  
  The bad parts
&lt;/h2&gt;

&lt;p&gt;One job was about a dataset feature in our Python engine that stopped working. Staff decided to add a new API to the engine so the user's code would run, and the researcher supported it. The user's code was AI generated and it was simply wrong, the engine never had that API. I closed the job. Two agents agreed and neither checked the premise.&lt;/p&gt;

&lt;p&gt;Researchers sometimes support a plan without reading the code. They do say so, for example "Checked board msg1625 only; no code, PR/diff/branch, tests or CI inspected". On the board that support looks the same as one based on the code.&lt;/p&gt;

&lt;p&gt;Staff accepts almost every challenge. Often that was the right call. In some threads the accept came about a minute after the challenge, and I can't tell if it checked anything.&lt;/p&gt;

&lt;p&gt;A lot of the board is plumbing. Progress posts, delivery reports, and the scheduler saying Staff went offline and then came back a few minutes later. My rough estimate is that only 15 to 25% of the messages are real discussion. Every question also repeats the full job context, so threads get long.&lt;/p&gt;

&lt;p&gt;I also became the hands more than I wanted. The agents run under permission rules and they don't try to get around them, so when something is blocked they ask me. I ran commands and pasted output back, and some blockers were only "please click Ready for review". One tool field only accepted "CI: success", even for jobs with no CI. One Senior refused to call it at all because the value would be false. That one is my bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review panel
&lt;/h2&gt;

&lt;p&gt;The board is not the only place where agents check each other. Before a change goes to a PR, a panel of reviewer models (Codex and Claude) reads the diff. They can only read, not edit. The Senior has to answer each finding: fix it, or mark it as debatable or invalid and give a reason.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjh22hmxvnp47f08j1zh0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjh22hmxvnp47f08j1zh0.png" alt="The Reviews page with review rounds, accepted and disputed findings" width="800" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fake data again, real page. The orange ones are disputed findings, where the Senior decided the reviewer was wrong.&lt;/p&gt;

&lt;p&gt;It misses things too. Copilot still found issues on PRs where the local panel found nothing, and one PR went through 7 Copilot rounds because each fix caused the next finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I took from it
&lt;/h2&gt;

&lt;p&gt;The board helps. The best value I saw is that a wrong decision gets caught in a place I can read, and I can go back later and see why something was decided.&lt;/p&gt;

&lt;p&gt;The main problems I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too many system messages and blockers that don't need me, mostly the "Staff is offline" ones.&lt;/li&gt;
&lt;li&gt;Some tools make agents report things that aren't true, like CI success for a job without CI.&lt;/li&gt;
&lt;li&gt;A support vote doesn't say if the agent read the code, and Staff rarely pushes back on a challenge.&lt;/li&gt;
&lt;li&gt;Agents can agree on a wrong premise if nobody checks the input itself.&lt;/li&gt;
&lt;li&gt;Many escalations are clicks and commands, not decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next I want to cut the noise, let agents say honestly when something wasn't checked, make researchers show what they based their answer on, and split simple actions from real decisions. I'll write about it again when that's done.&lt;/p&gt;

&lt;p&gt;The code is on GitHub: &lt;a href="https://github.com/adam-drag/triglav" rel="noopener noreferrer"&gt;https://github.com/adam-drag/triglav&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>claudecode</category>
      <category>codex</category>
    </item>
    <item>
      <title>Triglav: orchestrating Claude Code and Codex agents for long-running work and layered review</title>
      <dc:creator>Adam Drag</dc:creator>
      <pubDate>Sat, 17 Oct 2026 04:30:15 +0000</pubDate>
      <link>https://dev.to/adamdrag/triglav-orchestrating-claude-code-and-codex-agents-for-long-running-work-and-layered-review-4npe</link>
      <guid>https://dev.to/adamdrag/triglav-orchestrating-claude-code-and-codex-agents-for-long-running-work-and-layered-review-4npe</guid>
      <description>&lt;p&gt;AI coding agents can write code. Longer tasks still need coordination and quality control. Someone has to keep track of the objective, settle the open questions, review the changes, and check that the finished work meets the acceptance criteria.&lt;/p&gt;

&lt;p&gt;Triglav puts that workflow around Claude Code and Codex.&lt;/p&gt;

&lt;p&gt;A Staff agent plans and delegates. Seniors implement separate assignments. A shared job board lets agents ask questions, consult researchers, challenge proposals and record decisions. A local review panel checks every change before delivery. After that comes a Copilot review where it's configured, and a CI check that Staff runs itself.&lt;/p&gt;

&lt;p&gt;I'm the Client. I answer the questions the team can't settle, and I decide what ships.&lt;/p&gt;

&lt;p&gt;In its first ten days, Triglav ran 41 jobs on my own repositories and finished 34 of them. As of this week it's public.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adam-drag" rel="noopener noreferrer"&gt;
        adam-drag
      &lt;/a&gt; / &lt;a href="https://github.com/adam-drag/triglav" rel="noopener noreferrer"&gt;
        triglav
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local-first orchestrator that runs Claude Code and Codex agents like a small software consultancy. Staff plans, Seniors build, Reviewers check, Researchers advise. You decide from a dashboard. MCP server, Docker and MySQL, works from Linear, Jira or GitHub tickets.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Triglav&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-alert markdown-alert-important"&gt;
&lt;p class="markdown-alert-title"&gt;Important&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Triglav uses your own Claude Code or Codex account, so its usage counts against your plan.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It needs Claude Code and/or Codex,&lt;/strong&gt; installed and signed in on your machine. Triglav does not include a model, does not call an AI API, and does not ask for an API key. It only orchestrates work: it starts and coordinates the agent CLIs you already have, and they use the account they are signed in with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All usage goes to your own account.&lt;/strong&gt; Every agent turn, Senior, local code review, researcher run and Operator message is a request through your Claude Code or Codex login. If that login uses an API key, pay-as-you-go billing or extra usage beyond your plan, Triglav's work is billed to you on those terms. The Copilot review loop may also use your GitHub Copilot quota.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some of it starts without a click.&lt;/strong&gt; Staff wakes up on…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adam-drag/triglav" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1odgev7802on6hrj871.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1odgev7802on6hrj871.png" alt="Triglav home page: one decision waiting for the Client, two jobs, five agents online" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The screenshots in this post show a demo project, a fictional web shop. The home page, review, and Inbox screenshots come from Triglav's test stack, where the agents and the reviewer output are scripted.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The team
&lt;/h2&gt;

&lt;p&gt;Before I wrote any code, I wrote down the experience I wanted: I set the objective, a Staff engineer agent handles most of the delivery decisions, and I step in only when it's necessary. So Triglav works like a small software consultancy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Staff&lt;/strong&gt; is a long-running Claude Code or Codex session. It reads the ticket, plans the work, writes the acceptance criteria and starts the Seniors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seniors&lt;/strong&gt; are subagents of Staff. Each one takes one assignment, works in its own git worktree and opens a PR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Researchers&lt;/strong&gt; are short runs that read the job board and advise. They don't own any code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewers&lt;/strong&gt; check what a Senior hands in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Me, the Client.&lt;/strong&gt; I approve the plan, answer escalations and merge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The name comes from Triglav, a three-headed Slavic god. The three heads were the first three roles: Staff, Seniors and researchers. Reviewers came later.&lt;/p&gt;

&lt;p&gt;Every action goes through Triglav's MCP tools, so all of it is recorded, and the dashboard is a view over that record.&lt;/p&gt;

&lt;h2&gt;
  
  
  A shared job board for questions and decisions
&lt;/h2&gt;

&lt;p&gt;This is the core of Triglav.&lt;/p&gt;

&lt;p&gt;When a Senior isn't sure about something, it doesn't quietly pick an option. It opens a &lt;strong&gt;timed question&lt;/strong&gt; on the job's board. The question has to carry its own context: the job, the acceptance criteria, the work that's waiting and the options already considered. So a researcher that has never seen the job can still give a useful answer.&lt;/p&gt;

&lt;p&gt;Staff and the researchers reply with a stance, for example support or challenge, and anything other than a plain comment needs a reason. The Senior waits for the whole response window, even when Staff answers in ten seconds. If nobody replies, the window extends.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnltop5zmh5emwszx4gj.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnltop5zmh5emwszx4gj.jpg" alt="A timed question on the board: a Senior asks how to store guest orders, and a researcher and Staff reply with a stance and a reason" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this exchange, a Senior asks whether guest orders should store the email or create a hidden customer. A researcher and Staff both answer with a stance and a reason before the window closes.&lt;/p&gt;

&lt;p&gt;When the window closes, Staff records a binding decision and lists every reply it considered. A reply that came in late is kept and marked as late. If a late reply changes things, Staff has to record a new decision that supersedes the old one. It can't quietly change its mind.&lt;/p&gt;

&lt;p&gt;The board keeps the question, the arguments and the final decision with the job. I can check the reasoning later without piecing it together from separate agent conversations.&lt;/p&gt;

&lt;h2&gt;
  
  
  One job, start to finish
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Define the objective.&lt;/strong&gt; You start a job from a Linear, Jira or GitHub issue link, or from a plain prompt. A prompt job starts in a refining stage. Staff turns your sentence into a goal, a scope, non-goals and acceptance criteria, and asks its open questions, each with a recommended answer. You answer and edit until it's right. Planning starts only when &lt;strong&gt;you&lt;/strong&gt; click Approve. Staff can't approve its own proposal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Delegate and consult.&lt;/strong&gt; Staff splits the work, writes a brief for each Senior and starts them, at most 2 per job and 10 in total. Seniors hold their assignment with a lease. If one stops renewing it, Staff starts a new attempt, and the old one is fenced off. Questions go to the board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Review and fix.&lt;/strong&gt; Before delivery, every change goes through layered review (the next section).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Verify and escalate.&lt;/strong&gt; A job counts as done only when Staff has checked CI itself on the same commit the Senior reported. Anything the team can't decide comes to me as a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layered review before delivery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Layer 1: a local review panel.&lt;/strong&gt; The Senior asks for a review of its commit range. A panel of read-only reviewers reads the diff and the repository. The release default is GPT-6.1-Sol on Codex as the strong seat and Sonnet 5.5 on Claude Code as a cheap second opinion, so one model family checks the work of the other. The panel is a Client setting.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkg6vtg66iknsim386zv6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkg6vtg66iknsim386zv6.png" alt="Two local review rounds: round 1 finds a P1 bug that both reviewers reported, round 2 reviews only the fix and passes" width="638" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The server enforces the gate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;submit_review_package&lt;/code&gt; and the Copilot review request are &lt;strong&gt;refused&lt;/strong&gt; unless a finished review of exactly that commit has the verdict &lt;code&gt;ok&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;One piece of work gets at most 3 local rounds, and each later round reviews only the fix.&lt;/li&gt;
&lt;li&gt;The reviewed ranges of a job form one chain from the merge base, so no commit is skipped between two reviews.&lt;/li&gt;
&lt;li&gt;A reviewer that crashes or returns something unreadable fails the round, and a failed round never counts as a pass.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So far the panel has finished 96 rounds: 54 passed and 42 asked for changes. That shows the gate is used. It doesn't measure how accurate the reviewers are. To get a feel for that, the repo has an evaluation harness that replays the panel on Triglav's own PRs and compares the findings with Copilot's. Copilot is a benchmark there, and a match doesn't prove a finding is right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: Copilot.&lt;/strong&gt; Up to 3 Copilot review rounds per PR. Whether this layer runs is the Client's setting: &lt;em&gt;auto&lt;/em&gt; uses Copilot where the repository has it, &lt;em&gt;Copilot required&lt;/em&gt; refuses a delivery without a clean review, and &lt;em&gt;CI only&lt;/em&gt; skips it. The server can't run &lt;code&gt;gh&lt;/code&gt; itself, so it relies on the Senior's own report of each round.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 3: CI on the reported commit,&lt;/strong&gt; checked by Staff before it marks the job done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escalation to the human
&lt;/h2&gt;

&lt;p&gt;Most questions never get to me. Staff settles ordinary engineering questions itself. When it really needs me, it raises a decision with the problem, the question, its recommendation, any commands I have to run (each with a Copy button), and the researchers' advice.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14l9hbpzjyp693xf8arp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14l9hbpzjyp693xf8arp.png" alt="A client decision in the Inbox with the problem, the question, a command with a Copy button, the recommendation and the answer buttons" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If I agree, it's one click: &lt;strong&gt;Accept recommendation&lt;/strong&gt;. The count of open decisions shows in the browser tab, so I can work on something else and still see when the team is waiting for me.&lt;/p&gt;

&lt;p&gt;There's also an Operator page, a Claude Code chat for "why is this job stuck?". It can read, but it can't change anything. When it wants to act, it puts a card in the chat that waits for my Confirm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things that bit me
&lt;/h2&gt;

&lt;p&gt;Running a workflow like this for days, not minutes, brings problems a single agent session never has.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage limits and duplicate sessions.&lt;/strong&gt; A Staff hit a usage limit. When the limit reset, Claude Code continued the session by itself under a new session id. I resumed it as well, and two Staff agents were managing the same job. The runner now checks for a running copy of a conversation before it resumes one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wake-ups cost more than writing.&lt;/strong&gt; In the first six days, all agents together wrote about 3.6 million output tokens and read about 3.6 &lt;em&gt;billion&lt;/em&gt; from the prompt cache, roughly a thousand to one. Every time a waiting agent wakes up, it re-reads its whole context, and for a Staff that's often 300k to 700k tokens. So Staff now wakes only for events it needs, and it waits up to 50 minutes per call on its one-hour prompt cache. Researchers don't wait at all. They start when there's something to read, answer, and exit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context size.&lt;/strong&gt; Staff compacts its context at about 280k tokens. The Claude Code default for Opus was around 980k, so a long-running Staff never compacted and kept re-reading an ever-growing context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Permissions and limits
&lt;/h2&gt;

&lt;p&gt;Merging, deploying, force pushing and repository settings stay with the Client. The agents are told never to do them, but that's an instruction, so protect your branches on GitHub as well.&lt;/p&gt;

&lt;p&gt;The server runs in Docker and can't start processes on the host. A small host runner does that, and it never runs a command string from the server. It builds every command itself and checks every field first. Reviewers, researchers and the Operator can only read.&lt;/p&gt;

&lt;p&gt;Agents run as your OS user, so a determined agent could read &lt;code&gt;.env&lt;/code&gt;. The README says this plainly, together with the other things the security model doesn't cover.&lt;/p&gt;

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

&lt;p&gt;You need Docker, Node 24, pnpm and Claude Code or Codex. I've only run it on Linux.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/adam-drag/triglav.git
&lt;span class="nb"&gt;cd &lt;/span&gt;triglav
pnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;
node scripts/setup.ts          &lt;span class="c"&gt;# random keys + a dashboard password&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--build&lt;/span&gt;   &lt;span class="c"&gt;# server, MySQL and dashboard on :7400&lt;/span&gt;
node scripts/runner.ts         &lt;span class="c"&gt;# the host runner&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect your agents to the MCP endpoint (one &lt;code&gt;claude mcp add-json&lt;/code&gt; line, it's in the README), open &lt;code&gt;localhost:7400&lt;/code&gt;, and click &lt;strong&gt;New job&lt;/strong&gt;. Triglav uses the &lt;code&gt;claude&lt;/code&gt; and &lt;code&gt;codex&lt;/code&gt; CLIs you already have and picks up the models each one lists.&lt;/p&gt;

&lt;p&gt;Every agent turn and every review is a request on your own Claude or Codex plan, and Staff starts Seniors without asking you, so watch the Usage page on your first job. If you run Staff on Codex only, it can write in the repository and sees your &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, with Codex's automatic reviewer as the only check. Use that only on repositories you trust it with.&lt;/p&gt;

&lt;p&gt;Triglav is source-available under the Business Source License 1.1. It's free for your own work and for your company's internal work. You can't offer it, or a product or service built mainly on it, to others as a hosted service, a managed service or a redistributed product. It isn't open source, and each version moves to GPL-2.0-or-later after four years.&lt;/p&gt;

&lt;p&gt;All the numbers in this post come from me, on my own repositories. That's a lot of real use, but it's one person's use, and I'd like to know how it holds up on yours.&lt;/p&gt;




&lt;p&gt;When an AI agent hits a question it can't settle, what should it do: guess, ask another agent, or ask you?&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Update: I wrote a follow-up post.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I let Triglav's coding agents work and argue on a shared message board for 12 days. The follow-up goes deeper into what actually happened and what I learned.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://dev.to/adamdrag/i-let-my-coding-agents-argue-on-a-message-board-for-12-days-55om"&gt;I Let My Coding Agents Argue on a Message Board for 12 Days&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>claudecode</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
