<?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: Butterneck</title>
    <description>The latest articles on DEV Community by Butterneck (@butterneck).</description>
    <link>https://dev.to/butterneck</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%2F4210715%2F02e74805-34c4-429e-821c-063d68ab1d3f.png</url>
      <title>DEV Community: Butterneck</title>
      <link>https://dev.to/butterneck</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/butterneck"/>
    <language>en</language>
    <item>
      <title>AI pull requests need an owner: what LinearB's 2026 data says about the AI code review bottleneck</title>
      <dc:creator>Butterneck</dc:creator>
      <pubDate>Tue, 27 Oct 2026 18:38:41 +0000</pubDate>
      <link>https://dev.to/butterneck/ai-pull-requests-need-an-owner-what-linearbs-2026-data-says-about-the-ai-code-review-bottleneck-1eb0</link>
      <guid>https://dev.to/butterneck/ai-pull-requests-need-an-owner-what-linearbs-2026-data-says-about-the-ai-code-review-bottleneck-1eb0</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.butterneck.com/blog/ai-prs-need-an-owner" rel="noopener noreferrer"&gt;butterneck.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI coding agents can now open pull requests faster than teams can review them. Plenty of engineering leads have said this for a while. LinearB's 2026 Software Engineering Benchmarks Report now puts numbers on it, and the report's own explanation is not "the code is bad". It is that nobody owns the PR.&lt;/p&gt;

&lt;p&gt;This post goes through what the report found, what it does and doesn't show, and one practical response: make sure every AI-written change has a human owner before it reaches review. We build Butterneck, so we say how it fits near the end. The idea applies whatever tools you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update, 28 October 2026:&lt;/strong&gt; On 26 October, Entire, the company led by former GitHub CEO Thomas Dohmke, &lt;a href="https://entire.com/news/entire-launches-an-independent-git-forge-for-agent-human-collaboration" rel="noopener noreferrer"&gt;launched Trails&lt;/a&gt;, a replacement for the pull request built around the same review bottleneck. Its answer runs the other way from ours: agents generate evals on every push, so line-by-line human review becomes optional, while repositories can still require human approvals and other checks through &lt;a href="https://docs.entire.com/guides/trails/gates" rel="noopener noreferrer"&gt;Gates&lt;/a&gt;. Butterneck moves the human decision earlier instead: the person who asked sees the change on a live preview, and a developer decides before any PR exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What LinearB measured
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://linearb.io/library/engineering-benchmarks-and-research" rel="noopener noreferrer"&gt;2026 Software Engineering Benchmarks Report&lt;/a&gt; covers 8,109,244 pull requests from 4,813 teams and 163,820 active contributors. Most of its benchmarks are aggregated at the 75th percentile (P75). This year it splits PRs into three types: Agentic AI PRs, AI-Assisted PRs, and Unassisted PRs.&lt;/p&gt;

&lt;p&gt;Two findings stand out for anyone thinking about the AI code review bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI PRs merge far less often.&lt;/strong&gt; The report's new Acceptance Rate benchmark is the share of PRs merged within 30 days of being created (or moved out of draft). Manual PRs merged at &lt;strong&gt;84.4%&lt;/strong&gt;. AI PRs merged at &lt;strong&gt;32.7%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic AI PRs wait much longer to be picked up.&lt;/strong&gt; At P75, Agentic AI PRs sat for 1,055 minutes (about &lt;strong&gt;17.6 hours&lt;/strong&gt;) before a reviewer opened them. For Unassisted PRs it was 201 minutes (about &lt;strong&gt;3.4 hours&lt;/strong&gt;). The report calls that a pickup time "5.3x longer". Once review starts, the gap mostly closes. The report says the review itself is "only somewhat slower".&lt;/p&gt;

&lt;p&gt;So the problem isn't mainly that reviews of AI code drag on. It's that AI PRs sit unopened, and most of them never merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  "A natural human owner"
&lt;/h2&gt;

&lt;p&gt;LinearB gives several reasons for the gap. AI PRs tend to be larger. Agentic flows are often pointed at low-priority backlog work. Reviewers are more hesitant. The reason that interested us most is ownership:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Some of this gap likely stems from unclear ownership: the AI PRs don't typically have a natural human owner whose goal is to get them approved and merged. Without this push, they tend to get ignored and left to rot."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On pickup time, the report also says "there is often no clear owner for the PR who will push to finalize the review and get the PR accepted."&lt;/p&gt;

&lt;p&gt;That matches how review works in practice. A PR from a teammate comes with a person who answers questions, nudges the reviewer, fixes the nit and gets it over the line. A PR opened by a bot comes with nobody. Reviewers can tell, and it goes to the bottom of the pile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Correlation, not causation
&lt;/h2&gt;

&lt;p&gt;LinearB is careful here, and so should we be. The report says plainly that correlation does not indicate causation, and its benchmarks page asks anyone citing the data to "Frame every AI finding as correlation rather than causation."&lt;/p&gt;

&lt;p&gt;So the data does not prove that missing ownership causes low merge rates. Size, task priority and reviewer trust all play a part, and the report names each one. What the data does show is a large, consistent gap between AI and manual PRs, and LinearB's own reading that unclear ownership is likely part of it.&lt;/p&gt;

&lt;p&gt;That's enough to act on, as long as nobody promises a number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other data on the AI PR review bottleneck
&lt;/h2&gt;

&lt;p&gt;LinearB isn't the only source pointing at review and merge rather than writing. Two independent data sets, measured in different ways, show a similar shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CircleCI: more work on branches, less reaching main.&lt;/strong&gt; CircleCI's &lt;a href="https://circleci.com/blog/five-takeaways-2026-software-delivery-report/" rel="noopener noreferrer"&gt;2026 State of Software Delivery report&lt;/a&gt; analysed more than 28 million CI/CD workflows. For the median team, feature-branch throughput rose 15% year over year, while throughput on the main branch fell 7%. CircleCI's reading: "Writing code is no longer the constraint. Review, validation, integration, recovery." This is pipeline data, not PR authorship, so it doesn't separate AI-written changes from human ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MSR 2026 study: AI-only review merges less often.&lt;/strong&gt; &lt;a href="https://arxiv.org/html/2604.03196" rel="noopener noreferrer"&gt;A study presented at MSR 2026&lt;/a&gt; (Chowdhury, Banik, Ferdous and Shamim) looked at 3,109 pull requests from the AIDev dataset of agent-authored PRs on GitHub. Among PRs whose reviews only left comments, without an approval or a change request, those reviewed only by code review agents merged &lt;strong&gt;45.20%&lt;/strong&gt; of the time (127 of 281). Those reviewed only by humans merged &lt;strong&gt;68.37%&lt;/strong&gt; (804 of 1,176). The agent-only group was also closed unmerged more often: 34.88% against 21.60%.&lt;/p&gt;

&lt;p&gt;Both come with the same caveat as LinearB. The study's authors note that correlation does not imply causation, and their data comes from open-source repositories. CircleCI's numbers describe pipelines, not who wrote the code. Read together, they point the same way: the slow part is getting a change reviewed, trusted and merged, not writing it. None of them measured Butterneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "giving AI PRs an owner" can look like
&lt;/h2&gt;

&lt;p&gt;You don't need a new tool to start. Some options teams use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assign a human at creation.&lt;/strong&gt; Every agent-opened PR gets a named owner who is expected to drive it to merge or close it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep AI changes small.&lt;/strong&gt; The report links AI PRs to larger diffs. Small, scoped requests are easier to own and easier to review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close what nobody wants.&lt;/strong&gt; An AI PR with no one pushing for it is a signal. Close it rather than let it rot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agree on what AI should be asked for.&lt;/strong&gt; We wrote a &lt;a href="https://www.butterneck.com/blog/ai-change-request-policy-template" rel="noopener noreferrer"&gt;policy template for AI change requests&lt;/a&gt; that says who can ask, for what, and who decides what ships.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Butterneck handles ownership
&lt;/h2&gt;

&lt;p&gt;Butterneck takes a different route: there is no bot PR to own.&lt;/p&gt;

&lt;p&gt;A PM, designer or support lead asks for a change on a live preview of the app, or labels a Jira ticket &lt;code&gt;butterneck&lt;/code&gt; and assigns it to a developer whose computer has the project. A coding agent the developer already uses (Cursor, Claude Code or Antigravity) runs on that developer's computer and edits the connected folder. A preview link comes back on the ticket, and the requester can keep refining the change in plain words. See &lt;a href="https://www.butterneck.com/integrations/jira" rel="noopener noreferrer"&gt;the Jira integration&lt;/a&gt; for the full flow.&lt;/p&gt;

&lt;p&gt;Butterneck never opens a pull request, never merges and never deploys. The developer who checked the preview commits the change as their own work and ships it through the team's normal process. So the change has an owner from the start: a named developer who has already looked at it.&lt;/p&gt;

&lt;p&gt;To be clear about what we are and aren't claiming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have no data showing that Butterneck changes merge rates or pickup times, and we're not claiming it does.&lt;/li&gt;
&lt;li&gt;The code is still AI-written. The developer still has to review it properly. Ownership doesn't replace review.&lt;/li&gt;
&lt;li&gt;What changes is who is on the hook. It's a person on your team, not a bot account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reasoning behind keeping a human at the end is in &lt;a href="https://www.butterneck.com/blog/human-in-the-loop-ai-coding" rel="noopener noreferrer"&gt;why Butterneck never merges&lt;/a&gt;. If PMs are the ones asking, &lt;a href="https://www.butterneck.com/blog/should-product-managers-ship-code" rel="noopener noreferrer"&gt;should product managers ship code?&lt;/a&gt; covers the review-load side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a connected computer instead of a cloud sandbox
&lt;/h2&gt;

&lt;p&gt;Many AI coding tools run each task in a cloud sandbox. Butterneck runs the agent on a developer's computer that is connected to your workspace. Both are reasonable choices. Here's the trade-off as we see it.&lt;/p&gt;

&lt;p&gt;What you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No environment setup per ticket.&lt;/strong&gt; There's no base image, service list or secrets store to configure for each task. The project already runs on that computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The real dev setup.&lt;/strong&gt; The agent works with the same dependencies, local data and dev server the developer uses every day, and the preview is that running app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The coding agent that's already signed in.&lt;/strong&gt; Butterneck doesn't ship its own model. It uses the Cursor, Claude Code or Antigravity CLI your team already pays for (team or API plans recommended), under that tool's own provider terms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The computer has to be on.&lt;/strong&gt; If the connected computer is off or asleep, requests wait and the preview link doesn't load. A cloud sandbox doesn't have that problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.env handling is a guardrail, not a hard block.&lt;/strong&gt; &lt;code&gt;.env&lt;/code&gt; files and any paths you add are on an ignore list the agent is told to stay out of. That's an instruction to the agent, not an operating-system lock, so keep production secrets off that computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code still goes to your AI provider.&lt;/strong&gt; The coding CLI sends code context to its provider, the same as when the developer uses it directly. Chat messages and preview traffic go through Butterneck's server so the share link works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More detail in &lt;a href="https://www.butterneck.com/blog/run-ai-coding-agent-sandbox-on-your-machine" rel="noopener noreferrer"&gt;how Butterneck runs an AI coding agent in a sandbox on your machine&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why do AI pull requests take longer to review?
&lt;/h3&gt;

&lt;p&gt;In LinearB's 2026 data, most of the delay is before review starts. At P75, Agentic AI PRs waited about 17.6 hours to be picked up against about 3.4 hours for Unassisted PRs, while the review itself was only somewhat slower. The report links this to larger diffs, reviewer hesitation and unclear ownership, and it frames these findings as correlation, not causation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the AI PR merge rate in LinearB's benchmarks?
&lt;/h3&gt;

&lt;p&gt;LinearB measures Acceptance Rate as the share of PRs merged within 30 days. In the 2026 report, manual PRs merged at 84.4% and AI PRs at 32.7%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Butterneck improve merge rates or pickup time?
&lt;/h3&gt;

&lt;p&gt;We don't have data on that and don't claim it. What Butterneck changes is ownership. It never opens a PR. The developer who checked the preview commits the change as their own work, so the change has a human owner from the start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Butterneck open pull requests?
&lt;/h3&gt;

&lt;p&gt;No. Butterneck never opens pull requests, never merges and never deploys. The AI edits files in the connected folder. The developer decides whether to commit, open a PR, or throw the change away.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does Butterneck use a connected computer instead of a cloud sandbox?
&lt;/h3&gt;

&lt;p&gt;So there's no environment to set up per ticket, and the agent uses the developer's real dev setup and already-signed-in coding CLI. The trade-off is that the computer has to be on, and &lt;code&gt;.env&lt;/code&gt; handling is a guardrail, not a hard block.&lt;/p&gt;

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

&lt;p&gt;Starter is free for one developer and one requester. Pro is $19 per person per month. See &lt;a href="https://www.butterneck.com/#pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;, or &lt;a href="https://calendar.app.google/p2McAaz4ZwXBiG5m9" rel="noopener noreferrer"&gt;book a 30-minute demo&lt;/a&gt; and bring a small change that has been waiting on review.&lt;/p&gt;

&lt;p&gt;Source: LinearB, &lt;a href="https://assets.linearb.io/image/upload/v1777392920/resources/LinearB_2026_Software_Engineering_Benchmarks_Report.pdf" rel="noopener noreferrer"&gt;2026 Software Engineering Benchmarks Report&lt;/a&gt; (PDF) and &lt;a href="https://linearb.io/library/engineering-benchmarks-and-research" rel="noopener noreferrer"&gt;benchmarks page&lt;/a&gt;, read on 27 Oct 2026. Figures are as published by LinearB. CircleCI, &lt;a href="https://circleci.com/blog/five-takeaways-2026-software-delivery-report/" rel="noopener noreferrer"&gt;5 key takeaways from the 2026 State of Software Delivery&lt;/a&gt;, and Chowdhury et al., &lt;a href="https://arxiv.org/html/2604.03196" rel="noopener noreferrer"&gt;From Industry Claims to Empirical Reality: An Empirical Study of Code Review Agents in Pull Requests&lt;/a&gt; (MSR 2026), both read on 28 Oct 2026.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codereview</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Should product managers ship code? A better middle ground</title>
      <dc:creator>Butterneck</dc:creator>
      <pubDate>Tue, 27 Oct 2026 15:40:22 +0000</pubDate>
      <link>https://dev.to/butterneck/should-product-managers-ship-code-a-better-middle-ground-5a4b</link>
      <guid>https://dev.to/butterneck/should-product-managers-ship-code-a-better-middle-ground-5a4b</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.butterneck.com/blog/should-product-managers-ship-code" rel="noopener noreferrer"&gt;butterneck.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI coding tools have made a new question very real: should product managers ship code? Some teams are already trying it. Others are watching nervously. And engineers are asking who will review all of it.&lt;/p&gt;

&lt;p&gt;This post looks at what the current debate is actually about, what recent data says about the review side, and a middle ground that gets PMs their small changes without handing them commit access.&lt;/p&gt;

&lt;h2&gt;
  
  
  The debate, in plain terms
&lt;/h2&gt;

&lt;p&gt;Guy Mor at H&amp;amp;B &lt;a href="https://www.linkedin.com/posts/guy-mor-lin_were-starting-to-let-product-managers-ship-activity-7516032300925575169-vtdV" rel="noopener noreferrer"&gt;described on LinkedIn&lt;/a&gt; how his team is starting to let PMs use tools like Codex to make small changes to production systems. Their flow is careful: the PM identifies a simple change, uses AI to create a technical plan, an engineer reviews the plan, the PM uses AI to implement it, an engineer reviews the merge request, and then it goes to production.&lt;/p&gt;

&lt;p&gt;He is honest that it is not simple. Two questions stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exactly is a "simple change"? A PM may see a small UI tweak. An engineer may know it touches three other things.&lt;/li&gt;
&lt;li&gt;Are engineers being freed up, or turned into "people who review an endless stream of AI-generated merge requests"?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jeff Gothelf comes at it from the other side in &lt;a href="https://jeffgothelf.com/blog/how-to-manage-the-inevitable-mess-of-running-a-company-where-everyone-is-a-builder/" rel="noopener noreferrer"&gt;How to manage the inevitable mess of running a company where everyone is a builder&lt;/a&gt;. His first suggestion: "Keep the right to build separate from the right to ship." Anyone can build and show a prototype. Getting it in front of customers follows a path with evidence at each step.&lt;/p&gt;

&lt;p&gt;Both pieces land in a similar place. Building is getting cheap. Deciding what ships is still the hard, valuable part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data says about review
&lt;/h2&gt;

&lt;p&gt;The engineers' worry has numbers behind it now. A &lt;a href="https://fion.ac/jellyfish.pdf" rel="noopener noreferrer"&gt;Harvard study by Fiona Chen and James Stratton&lt;/a&gt; ("Artificial Intelligence in the Firm: Bottlenecks in Software Production", version of 4 Aug 2026) looked at 718 firms using data from the Jellyfish platform; &lt;a href="https://www.infoq.com/news/2026/10/jellyfish-ai-productivity/" rel="noopener noreferrer"&gt;InfoQ covered it&lt;/a&gt; on 22 Oct. According to the paper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents increased lines of code by 30%, commits by 20% and pull requests by 23%.&lt;/li&gt;
&lt;li&gt;Jira issues resolved per worker showed no statistically significant change with agents; the paper's estimates rule out an increase larger than 12%.&lt;/li&gt;
&lt;li&gt;Average PR time to review went up 49%, review comments per PR rose 35%, and the share of PRs with changes requested nearly doubled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The authors' explanation is that writing code is only part of the job. Engineers spend 30â€“40% of their time writing code; the rest is planning, review, testing and deployment. Speed up the writing and the other steps become the bottleneck.&lt;/p&gt;

&lt;p&gt;So if PMs start producing merge requests on top of what AI agents already produce, the review queue is where it will hurt. That is the AI code review bottleneck in one sentence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "PMs opening PRs" is the wrong unit
&lt;/h2&gt;

&lt;p&gt;When a PM asks for a small product change, they rarely care about the code. They care that the button says the right thing, the empty state is useful, or the form stops asking for a field nobody needs.&lt;/p&gt;

&lt;p&gt;Turning that into a PM-authored pull request adds work in the wrong places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The PM needs a dev setup, git, and enough context to not break things they cannot see.&lt;/li&gt;
&lt;li&gt;The engineer still has to review the code, and now also has to check whether it matches what the PM meant.&lt;/li&gt;
&lt;li&gt;The "is this what you meant?" loop happens inside code review, which is the slowest and most expensive place for it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gergely Orosz makes a related point in &lt;a href="https://newsletter.pragmaticengineer.com/p/what-is-happening-with-code-reviews" rel="noopener noreferrer"&gt;What is happening with code reviews?&lt;/a&gt;: automated tests are great at verifying business logic, but "they don't do a good job at verifying whether a UI looks and feels good." The small changes PMs ask for are mostly in that look-and-feel category. The best person to check them is the person who asked, looking at the running app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The middle ground: ask on a live preview, ship through engineering
&lt;/h2&gt;

&lt;p&gt;Here is the split we think works for small, visible changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The PM asks, in plain words, on a live copy of the app.&lt;/strong&gt; Not a mockup. The real app, running from the real code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A coding agent makes the edit.&lt;/strong&gt; The PM sees the result on the same screen and keeps going ("a bit shorter", "the other button") until it is right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An engineer decides what ships.&lt;/strong&gt; They read the conversation, check the diff in their own tools, and publish it the usual way. Or they discard it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This separates asking from shipping, which is Gothelf's build-versus-ship idea applied to everyday product tweaks. The PM never needs commit access, an IDE, or a merge request. Engineering keeps every release decision.&lt;/p&gt;

&lt;p&gt;It also changes what lands on the engineer's desk. Instead of a ticket plus three screenshots, or a PM's pull request of unknown intent, they get a change the requester has already seen working, with the full conversation attached. We cannot promise that makes review faster, and we have no data on it. But the intent question has been answered before the review starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to draw the line
&lt;/h2&gt;

&lt;p&gt;The H&amp;amp;B question, "where do you draw the line?", deserves a direct answer. A reasonable starting line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good for PM requests:&lt;/strong&gt; copy, labels, layout, spacing, empty states, small UI fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Needs an engineer from the start:&lt;/strong&gt; pricing logic, permissions, data models, anything touching auth or payments. A preview can look right and still be wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a chat request at all:&lt;/strong&gt; big features. Those need design and scoping first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agree the list with your engineering lead before anyone starts. It is much easier than arguing about each request later.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Butterneck does this
&lt;/h2&gt;

&lt;p&gt;Butterneck is one way to set up the middle ground. A developer connects a project folder on their own computer. The app gets a share link to a private live copy. A PM or other stakeholder opens the link and types the change in a chat beside the app. Or they label a Jira ticket &lt;code&gt;butterneck&lt;/code&gt; and assign it, and a preview link is posted back on the ticket.&lt;/p&gt;

&lt;p&gt;The developer's own coding agent (Cursor, Claude Code or Antigravity) edits the project locally on their machine. The developer reviews and publishes the usual way. Butterneck never merges, never opens a pull request and never deploys.&lt;/p&gt;

&lt;p&gt;A few honest details. &lt;code&gt;.env&lt;/code&gt; files are on an ignore list the agent is told to stay out of. That is a guardrail, an instruction to the agent, not a hard block, so keep production secrets off that computer. Chat messages and preview traffic go through Butterneck's server, and the coding CLI sends code context to its provider as it does in normal use. More in &lt;a href="https://www.butterneck.com/blog/run-ai-coding-agent-sandbox-on-your-machine" rel="noopener noreferrer"&gt;how Butterneck runs an AI coding agent in a sandbox on your machine&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  When it is not a fit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want AI to open pull requests or merge on its own. Butterneck deliberately does neither.&lt;/li&gt;
&lt;li&gt;There is no developer with a local project folder to connect.&lt;/li&gt;
&lt;li&gt;You are looking for a cloud IDE or a replacement for engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Should product managers write code?
&lt;/h3&gt;

&lt;p&gt;Some technical PMs do, and it can work. But most PMs do not need to write code to get small changes made. What they need is to describe the change where they see it, see the result on the real app, and hand it to an engineer who decides whether it ships.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it safe to let PMs ship code to production?
&lt;/h3&gt;

&lt;p&gt;Teams trying it, like H&amp;amp;B, keep engineers reviewing both the plan and the merge request. If you want PMs involved without that overhead, let them ask on a live preview and keep the release with engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does AI make code review the bottleneck?
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://fion.ac/jellyfish.pdf" rel="noopener noreferrer"&gt;Harvard study&lt;/a&gt; suggests it can: pull requests went up 23% with AI agents, while average PR time to review rose 49%. Adding PM-authored PRs to that queue makes it bigger.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Butterneck open pull requests for PMs?
&lt;/h3&gt;

&lt;p&gt;No. Butterneck never opens a pull request, never merges and never deploys. The developer reviews the change and publishes it the usual way.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://calendar.app.google/p2McAaz4ZwXBiG5m9" rel="noopener noreferrer"&gt;Book a 30-minute demo&lt;/a&gt; and bring a small change your PMs have been waiting on. Or check &lt;a href="https://www.butterneck.com/#pricing" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;: Starter is free for one developer and one requester, and Pro is $19 per person per month. Learn more at &lt;a href="https://www.butterneck.com/" rel="noopener noreferrer"&gt;butterneck.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productmanagement</category>
      <category>ai</category>
      <category>codereview</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Ask freely, ship deliberately: an architecture for human-in-the-loop AI product changes</title>
      <dc:creator>Butterneck</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:10:23 +0000</pubDate>
      <link>https://dev.to/butterneck/ask-freely-ship-deliberately-an-architecture-for-human-in-the-loop-ai-product-changes-b9</link>
      <guid>https://dev.to/butterneck/ask-freely-ship-deliberately-an-architecture-for-human-in-the-loop-ai-product-changes-b9</guid>
      <description>&lt;p&gt;Coding agents can now change a real codebase from a sentence. The industry's next move looks obvious: let the request go all the way to production. Ticket in, pull request out, merge, deploy.&lt;/p&gt;

&lt;p&gt;I think that is the wrong default for changes requested by people who can't read the diff. Not because the models are bad. Because the slow part of a small product change was never the typing, and the last step, a person deciding, is cheap and worth keeping.&lt;/p&gt;

&lt;p&gt;This piece lays out the argument and then the concrete architecture we use in Butterneck to keep a human in the loop without making them the bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a small change actually spends its time
&lt;/h2&gt;

&lt;p&gt;Take "make the button say Book a call". The edit is one line. The time goes to everything around it: which page, which button, a screenshot, someone finds the file, someone sends a link to check, a reply, another tweak.&lt;/p&gt;

&lt;p&gt;Or a ticket with a description, a dozen comments and three attachments, where a developer has to work out which comment is the real request.&lt;/p&gt;

&lt;p&gt;Agents are good at exactly this: reading context and making the edit. Automating the &lt;em&gt;decision to ship&lt;/em&gt; saves maybe a minute. It also removes the one check that catches a wrong change before customers do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three properties worth designing for
&lt;/h2&gt;

&lt;p&gt;If you want non-developers to ask an agent for changes, I'd argue the system needs three things.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The request happens next to the thing.&lt;/strong&gt; The person asking should be looking at the running product, not describing it from memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The change is visible before it's real.&lt;/strong&gt; They should see the result on the same screen, immediately, without anyone deploying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A developer is the only path to production.&lt;/strong&gt; The agent can edit files. Only a person can make them live.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these need new AI. They are plumbing decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;Here is how Butterneck implements those three properties. I'll keep it concrete.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The agent runs where the code already is
&lt;/h3&gt;

&lt;p&gt;A daemon (the bridge) runs on a developer's machine. The developer connects one or more project folders. Each folder can be the main checkout, a fresh clone, or a git worktree under &lt;code&gt;.worktrees/&lt;/code&gt; so several requests can run without touching the working copy.&lt;/p&gt;

&lt;p&gt;When a request arrives, the bridge's chat server starts the coding CLI the developer already uses, Cursor, Claude Code, or Antigravity, as a one-shot child process scoped to that folder. Butterneck does not ship a model. The developer's existing agent and its provider terms apply.&lt;/p&gt;

&lt;p&gt;Why local? The project already runs there, with its real dependencies, data and dev server. No cloud environment to keep in sync.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Requests come in where people already are
&lt;/h3&gt;

&lt;p&gt;There are two entry points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A chat widget embedded on the live preview. It sends the page URL along with the message, so "this button" has a referent.&lt;/li&gt;
&lt;li&gt;A Jira Cloud ticket with a &lt;code&gt;butterneck&lt;/code&gt; label. Title, description, comments and attachments become the request. A note with the preview link is posted back to the ticket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developer replies in the thread don't trigger the agent, so the developer can talk to the requester without kicking off another edit.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The preview is the running dev server
&lt;/h3&gt;

&lt;p&gt;The bridge starts the app and the server issues a public share URL that relays traffic over the bridge's WebSocket, including hot-reload sockets. When the agent saves a file, the dev server reloads and the requester sees it.&lt;/p&gt;

&lt;p&gt;That gives you property 2 with no deploy step. It also means the agent is told never to run a production build mid-turn; the dev server is the preview.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Guardrails in layers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scope.&lt;/strong&gt; The system prompt has a mandatory file-access section: only the attached folders, nothing outside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets.&lt;/strong&gt; A built-in ignore list (&lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;.env.*&lt;/code&gt;, and the same in any subfolder) is always merged with team-defined globs and included in that section. The agent is told to refuse any part of a request that needs those paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Undo.&lt;/strong&gt; Before each turn, the workspace is snapshotted (via git when available, file copy otherwise). Stopping a turn kills the agent and restores the snapshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence.&lt;/strong&gt; The agent ends each change with a hidden confidence level (very low to very high), shown to the team as a tag, so reviewers know where to look harder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access.&lt;/strong&gt; The developer chooses who may send requests: a named list or anyone with the link.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An honest note on layer one and two: they are instructions to the agent plus the CLI's workspace setting, and the CLIs run with their interactive permission prompts skipped. That is not the same as an OS sandbox. If you need hard isolation, run the bridge on a machine or account that has no production secrets. We'd rather say that plainly than overclaim.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The merge button doesn't exist
&lt;/h3&gt;

&lt;p&gt;There is no push, no pull request, no merge and no deploy in the bridge or chat server. The output of a turn is edited files in a folder plus a conversation and a live preview.&lt;/p&gt;

&lt;p&gt;The developer reviews all three, then commits and ships through the team's normal pipeline, with its tests, CI and code review intact. Or discards it.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Isn't the human the bottleneck now?"
&lt;/h2&gt;

&lt;p&gt;The developer's job changes from "find, edit, send link, wait, repeat" to "look, decide". That's the trade. The expensive loop moves to the agent and the requester, who iterate on the preview until it's right. The developer sees it once, at the end.&lt;/p&gt;

&lt;p&gt;Teams that want ticket-to-merge automation exist, and there are tools for them. This design is for teams where the person asking can't review code and someone still owns what ships.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't solve
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It needs a local project folder. Teams living only in cloud IDEs aren't a fit.&lt;/li&gt;
&lt;li&gt;It doesn't replace developers. It assumes one is there and decides.&lt;/li&gt;
&lt;li&gt;Your code context still goes to whichever AI provider your coding CLI uses, and preview traffic passes through Butterneck's relay. "Local" means the edits and the runtime are local, not that nothing leaves the machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Human-in-the-loop is often treated as a temporary crutch until the models get better. I think for product changes it's a permanent design choice: ask freely, preview instantly, ship deliberately.&lt;/p&gt;

&lt;p&gt;If that's how you want your team to work with coding agents, Butterneck has a free Starter plan at &lt;a href="https://www.butterneck.com" rel="noopener noreferrer"&gt;butterneck.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>humanintheloop</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How Butterneck runs an AI coding agent in a sandbox on your own machine</title>
      <dc:creator>Butterneck</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:06:26 +0000</pubDate>
      <link>https://dev.to/butterneck/how-butterneck-runs-an-ai-coding-agent-in-a-sandbox-on-your-own-machine-p91</link>
      <guid>https://dev.to/butterneck/how-butterneck-runs-an-ai-coding-agent-in-a-sandbox-on-your-own-machine-p91</guid>
      <description>&lt;p&gt;Butterneck lets a product manager ask for a change on a live copy of an app, and a coding agent makes the edit. The agent does not run on our servers. It runs on a developer's own computer, using the coding CLI that developer already has signed in: Cursor (&lt;code&gt;agent&lt;/code&gt;), Claude Code (&lt;code&gt;claude&lt;/code&gt;), or Antigravity (&lt;code&gt;agy&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;This post walks through how that works and what the guardrails actually are. Where a guardrail is a prompt instruction rather than a hard block, we say so.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pieces
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The bridge.&lt;/strong&gt; A small Node.js daemon (Node 22 or newer) that the developer pairs with their account. It watches the project folders the developer connects, starts the app, and keeps a WebSocket open to the Butterneck server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The chat server.&lt;/strong&gt; Runs in-process with the bridge for each connected folder. When a request arrives, it builds a prompt and starts the coding CLI as a child process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The chat widget.&lt;/strong&gt; A script embedded on the live preview, so the person asking types next to the screen they mean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The coding CLI is invoked in non-interactive print mode, one turn at a time. For example, Cursor's agent is started with &lt;code&gt;--print&lt;/code&gt;, &lt;code&gt;--trust&lt;/code&gt;, &lt;code&gt;--force&lt;/code&gt;, and &lt;code&gt;--workspace &amp;lt;folder&amp;gt;&lt;/code&gt;. Claude Code gets &lt;code&gt;--print&lt;/code&gt; and its own &lt;code&gt;--system-prompt&lt;/code&gt;. Antigravity runs with &lt;code&gt;--mode accept-edits&lt;/code&gt; and &lt;code&gt;--add-dir &amp;lt;folder&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those flags matter. The CLIs run with their own permission prompts skipped, because nobody is at the terminal to click "allow". So the boundaries below are what keep a turn in its lane.&lt;/p&gt;

&lt;h2&gt;
  
  
  Isolation: one folder per request stream
&lt;/h2&gt;

&lt;p&gt;Each private copy (we call it a sandbox) is tied to a folder on the developer's machine. The developer chooses it. It can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an existing project folder,&lt;/li&gt;
&lt;li&gt;a fresh clone of a repository, or&lt;/li&gt;
&lt;li&gt;a git worktree named after the sandbox, created under &lt;code&gt;.worktrees/&lt;/code&gt; inside the chosen repo (the bridge adds &lt;code&gt;.worktrees/&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Worktrees are the useful option when a team wants several requests in flight. Each one gets its own checkout and branch, and none of them touch the main working copy.&lt;/p&gt;

&lt;p&gt;The agent's working directory is set to that folder. The system prompt includes a mandatory "File access boundaries" section: read and edit only inside the attached folders; never write, move, or delete anything outside them.&lt;/p&gt;

&lt;p&gt;To be precise: that boundary is an instruction to the agent, plus the CLI's own workspace setting. It is not an OS-level sandbox like a container or a separate user account. The process runs as the developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Secrets: &lt;code&gt;.env&lt;/code&gt; is always on the ignore list
&lt;/h2&gt;

&lt;p&gt;There is a built-in ignore list that cannot be turned off:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env
.env.*
**/.env
**/.env.*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teams can add their own globs on top (for example &lt;code&gt;config/secrets/&lt;/code&gt; or &lt;code&gt;*.pem&lt;/code&gt;). The bridge merges the two, drops anything absolute or containing &lt;code&gt;..&lt;/code&gt;, and stores the result next to the sandbox data, not in your project.&lt;/p&gt;

&lt;p&gt;The merged list goes into the system prompt: never touch these paths, and refuse the part of a request that needs them. The same matcher (&lt;code&gt;isPathAllowed&lt;/code&gt;) is exported by the CLI package for checks in code.&lt;/p&gt;

&lt;p&gt;Same caveat as above: the agent is told not to touch those files. If you need a hard guarantee, keep production secrets off the machine that runs the bridge. That is good practice anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every turn can be undone
&lt;/h2&gt;

&lt;p&gt;Before a turn starts, the chat handler captures a baseline of the folder. In a git repo it uses git; otherwise it copies files (skipping &lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;, build output, and very large files).&lt;/p&gt;

&lt;p&gt;If the person asking or the developer stops the turn, the agent process is aborted and the files are put back to that baseline. A bad turn does not leave a half-edited project behind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Never merges, never opens a PR, never deploys
&lt;/h2&gt;

&lt;p&gt;There is no code path in the bridge or chat server that pushes, opens a pull request, merges, or deploys. The agent edits files in the folder. That's it.&lt;/p&gt;

&lt;p&gt;The system prompt also tells the agent not to run production builds during a chat turn. The dev server is already running and hot-reloads the edit, and a production build can break the running preview.&lt;/p&gt;

&lt;p&gt;What ships is up to the developer. They read the conversation, look at the running app, check the diff in their own tools, and commit and publish the way the team already does. Or they throw it away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preview links without a deploy
&lt;/h2&gt;

&lt;p&gt;The bridge starts the app (it detects the dev command and the port) and the Butterneck server gives it a public share URL. Requests to that URL are relayed over the bridge's WebSocket to the app on the developer's machine. The relay handles hot-reload WebSockets, event streams, and binary files such as office documents.&lt;/p&gt;

&lt;p&gt;So the person asking sees the change appear on the same screen they asked from, without a VPN, a staging deploy, or a localhost link. The developer controls who can send requests: a named list, or anyone with the link. Viewers do not need an account.&lt;/p&gt;

&lt;h2&gt;
  
  
  What leaves your machine
&lt;/h2&gt;

&lt;p&gt;Worth being exact here, because "runs locally" is easy to over-read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your source files are edited on your machine. Butterneck does not run its own model.&lt;/li&gt;
&lt;li&gt;The coding CLI sends prompts and code context to its own AI provider, the same as when you use it directly. That is governed by your agreement with Cursor, Anthropic, or Google.&lt;/li&gt;
&lt;li&gt;Preview traffic (the rendered app) passes through the Butterneck server so the share link works.&lt;/li&gt;
&lt;li&gt;Chat messages travel through the Butterneck server to reach the bridge.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Butterneck has a free Starter plan for one developer and one person asking for changes. If your team spends more time relaying small requests than making them, take a look at &lt;a href="https://www.butterneck.com" rel="noopener noreferrer"&gt;butterneck.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>devtools</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
