<?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: László Szabó</title>
    <description>The latest articles on DEV Community by László Szabó (@lezli01).</description>
    <link>https://dev.to/lezli01</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%2F4009493%2F4950fb77-1d74-4350-a023-25ad8d659dd3.jpg</url>
      <title>DEV Community: László Szabó</title>
      <link>https://dev.to/lezli01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lezli01"/>
    <language>en</language>
    <item>
      <title>Professional Antipatterns: The CTO Who Chose Agentic Development Over Agentic Development</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Mon, 05 Oct 2026 16:30:23 +0000</pubDate>
      <link>https://dev.to/lezli01/professional-antipatterns-the-cto-who-chose-agentic-development-over-agentic-development-2133</link>
      <guid>https://dev.to/lezli01/professional-antipatterns-the-cto-who-chose-agentic-development-over-agentic-development-2133</guid>
      <description>&lt;p&gt;A colleague recently gave an internal presentation about GitHub's Spec Kit and spec-driven development.&lt;/p&gt;

&lt;p&gt;It was a good presentation.&lt;/p&gt;

&lt;p&gt;The demo was practical. Claude Code and Cursor were used as the coding agents. The workflow showed how you can take an idea, turn it into a specification, create a technical plan, break that plan into tasks, and then let the agent work through the implementation.&lt;/p&gt;

&lt;p&gt;At the end, the presenter asked our CTO what he thought.&lt;/p&gt;

&lt;p&gt;The answer was approximately:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's cool, but I think we're going to go with agentic development instead."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There was a short silence.&lt;/p&gt;

&lt;p&gt;Because we had just spent the presentation looking at...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;agentic development.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, isn't Spec Kit agentic?
&lt;/h2&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;That's what made the answer so strange.&lt;/p&gt;

&lt;p&gt;Spec Kit isn't competing with Claude Code, Cursor, Copilot, or other coding agents.&lt;/p&gt;

&lt;p&gt;It gives those agents a process.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build this feature.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and hoping the agent correctly reconstructs all the missing context, the workflow becomes something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idea
  ↓
specification
  ↓
technical plan
  ↓
tasks
  ↓
agent implementation
  ↓
validation / convergence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent is still doing the work.&lt;/p&gt;

&lt;p&gt;In fact, that's the whole point.&lt;/p&gt;

&lt;p&gt;You're giving an autonomous or semi-autonomous coding agent better inputs, clearer boundaries, persistent artifacts, and checkpoints where a human can review what is happening.&lt;/p&gt;

&lt;p&gt;You can absolutely disagree with that approach.&lt;/p&gt;

&lt;p&gt;Maybe specifications create too much overhead.&lt;/p&gt;

&lt;p&gt;Maybe your team works on changes small enough that a formal planning phase isn't useful.&lt;/p&gt;

&lt;p&gt;Maybe you want agents to operate with significantly more autonomy.&lt;/p&gt;

&lt;p&gt;Maybe you have a completely different orchestration model.&lt;/p&gt;

&lt;p&gt;Those would all be interesting discussions.&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We won't use this because we're going agentic."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;isn't really one of them.&lt;/p&gt;

&lt;p&gt;It's like watching someone demonstrate Kubernetes and responding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Looks interesting, but we're going with containers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The actual antipattern
&lt;/h2&gt;

&lt;p&gt;The funny part isn't that someone didn't understand Spec Kit.&lt;/p&gt;

&lt;p&gt;Nobody understands everything.&lt;/p&gt;

&lt;p&gt;Especially now.&lt;/p&gt;

&lt;p&gt;The AI development ecosystem is moving ridiculously fast. New agent frameworks, protocols, models, IDE integrations, orchestration patterns, and methodologies appear constantly.&lt;/p&gt;

&lt;p&gt;A CTO not knowing the details of one of them is completely normal.&lt;/p&gt;

&lt;p&gt;The antipattern is something else:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feeling that being the most senior technical person in the room means you must always have an answer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you don't understand something, there are two options.&lt;/p&gt;

&lt;p&gt;You can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Help me understand how this differs from the agentic approach we're considering."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where does the human stay in the loop here?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I don't know Spec Kit well enough yet. Walk me through how it fits into an agent-based workflow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All three are good questions.&lt;/p&gt;

&lt;p&gt;And none of them make a technical leader look weak.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineers can tell
&lt;/h2&gt;

&lt;p&gt;Trying to bluff through a technical discussion has an unfortunate property:&lt;/p&gt;

&lt;p&gt;The people you're bluffing are usually technical too.&lt;/p&gt;

&lt;p&gt;They know.&lt;/p&gt;

&lt;p&gt;The moment a confident answer reveals that the underlying concept wasn't understood, something changes in the room.&lt;/p&gt;

&lt;p&gt;And it's not just about that one topic.&lt;/p&gt;

&lt;p&gt;People start wondering:&lt;/p&gt;

&lt;p&gt;If this decision wasn't based on understanding the thing we just demonstrated...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;what are the bigger technical decisions based on?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is where the real damage happens.&lt;/p&gt;

&lt;p&gt;A CTO doesn't need to personally know every framework.&lt;/p&gt;

&lt;p&gt;A CTO &lt;em&gt;does&lt;/em&gt; need engineers to trust the reasoning behind technical direction.&lt;/p&gt;

&lt;p&gt;And trust is surprisingly easy to lose.&lt;/p&gt;

&lt;h2&gt;
  
  
  "I don't know" is an underrated leadership skill
&lt;/h2&gt;

&lt;p&gt;One of the strongest things a technical leader can say is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I don't know."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Followed by:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Explain it to me."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That creates a completely different engineering culture.&lt;/p&gt;

&lt;p&gt;It tells people that learning is more important than appearing knowledgeable.&lt;/p&gt;

&lt;p&gt;It tells senior engineers that their expertise is actually wanted.&lt;/p&gt;

&lt;p&gt;It makes technical discussions about finding the right answer rather than defending hierarchy.&lt;/p&gt;

&lt;p&gt;And perhaps most importantly, it makes it safe for everyone else to admit when &lt;em&gt;they&lt;/em&gt; don't know something either.&lt;/p&gt;

&lt;p&gt;If the CTO has to pretend to understand everything, eventually everyone below the CTO learns to do the same.&lt;/p&gt;

&lt;p&gt;That's not a great environment for engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agentic development needs &lt;em&gt;more&lt;/em&gt; structure, not less
&lt;/h2&gt;

&lt;p&gt;There's another interesting part of this story.&lt;/p&gt;

&lt;p&gt;As coding agents become more capable, the need for good specifications doesn't disappear.&lt;/p&gt;

&lt;p&gt;Arguably, it becomes more important.&lt;/p&gt;

&lt;p&gt;When a developer writes every line manually, misunderstandings are discovered gradually during implementation.&lt;/p&gt;

&lt;p&gt;When an agent can produce thousands of lines of code in minutes, it can also implement the wrong interpretation incredibly efficiently.&lt;/p&gt;

&lt;p&gt;The bottleneck starts moving.&lt;/p&gt;

&lt;p&gt;Less:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How quickly can we write this?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Did we clearly define what should be built?
Did the agent understand the constraints?
Can we review the decisions it made?
Can we verify the result?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's exactly why specifications, plans, acceptance criteria, checkpoints, and review workflows are becoming interesting again.&lt;/p&gt;

&lt;p&gt;Agentic engineering doesn't make engineering discipline obsolete.&lt;/p&gt;

&lt;p&gt;It changes where that discipline needs to live.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson
&lt;/h2&gt;

&lt;p&gt;This isn't really a story about Spec Kit.&lt;/p&gt;

&lt;p&gt;And it's not about whether Spec Kit is the best way to build software with agents.&lt;/p&gt;

&lt;p&gt;It's about technical leadership.&lt;/p&gt;

&lt;p&gt;You don't lose credibility because you haven't heard of something.&lt;/p&gt;

&lt;p&gt;You don't lose credibility because an engineer knows more about a particular technology than you do.&lt;/p&gt;

&lt;p&gt;You don't even lose credibility by saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I don't understand this yet."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You lose credibility when everyone in the room realizes you don't understand something...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;while you're pretending that you do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A question might cost you five seconds of looking less than omniscient.&lt;/p&gt;

&lt;p&gt;A confident non-answer can cost you the trust of every engineer who heard it.&lt;/p&gt;




&lt;p&gt;This is part of my &lt;strong&gt;Professional Antipatterns&lt;/strong&gt; series: stories about the strange ways software organizations sometimes manage to make engineering harder than it needs to be.&lt;/p&gt;

&lt;p&gt;Originally published at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/professional-antipatterns-cto-spec-kit/" rel="noopener noreferrer"&gt;https://blog.lezli01.is-a.dev/blog/professional-antipatterns-cto-spec-kit/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>I Built an Agent Skill to Make Management Happy</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Tue, 29 Sep 2026 12:43:47 +0000</pubDate>
      <link>https://dev.to/lezli01/i-built-an-agent-skill-to-make-management-happy-1136</link>
      <guid>https://dev.to/lezli01/i-built-an-agent-skill-to-make-management-happy-1136</guid>
      <description>&lt;p&gt;It didn't make me write better code.&lt;/p&gt;

&lt;p&gt;It didn't make me deliver features faster.&lt;/p&gt;

&lt;p&gt;It didn't make the product more reliable.&lt;/p&gt;

&lt;p&gt;It made me &lt;strong&gt;commit more often&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And according to the KPI dashboard, that meant I had improved.&lt;/p&gt;




&lt;p&gt;A while ago, I worked at a company where individual Git commit counts were tracked as an engineering performance metric.&lt;/p&gt;

&lt;p&gt;One day, I was told that my number of commits was lower than some of my coworkers'.&lt;/p&gt;

&lt;p&gt;I needed to improve it.&lt;/p&gt;

&lt;p&gt;There was one small problem.&lt;/p&gt;

&lt;p&gt;At the time, I wasn't working purely as an individual contributor.&lt;/p&gt;

&lt;p&gt;I was simultaneously doing things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;software architecture&lt;/li&gt;
&lt;li&gt;technical decision-making&lt;/li&gt;
&lt;li&gt;mentoring&lt;/li&gt;
&lt;li&gt;code reviews&lt;/li&gt;
&lt;li&gt;team leadership&lt;/li&gt;
&lt;li&gt;debugging difficult problems&lt;/li&gt;
&lt;li&gt;coordinating work across products&lt;/li&gt;
&lt;li&gt;and, occasionally, actually writing code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of those things produce exactly &lt;strong&gt;zero Git commits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But the dashboard didn't know that.&lt;/p&gt;

&lt;p&gt;The dashboard knew one thing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commits = productivity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So I decided to improve my productivity.&lt;/p&gt;

&lt;p&gt;At least according to the dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  I built an agent skill
&lt;/h2&gt;

&lt;p&gt;My normal development style was fairly simple.&lt;/p&gt;

&lt;p&gt;I would work on a coherent piece of functionality, finish it, review the changes, and commit it.&lt;/p&gt;

&lt;p&gt;Sometimes that meant one commit.&lt;/p&gt;

&lt;p&gt;Sometimes a few.&lt;/p&gt;

&lt;p&gt;I never thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How many commits should this work generate so my KPI looks good?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Apparently, I should have.&lt;/p&gt;

&lt;p&gt;So I created an agent skill called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crazy-commiting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its job was simple.&lt;/p&gt;

&lt;p&gt;Take my current changes and split them into the &lt;strong&gt;maximum number of reasonable, coherent commits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not fake commits.&lt;/p&gt;

&lt;p&gt;Not whitespace changes.&lt;/p&gt;

&lt;p&gt;Not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix
fix2
final fix
final fix 2
really final
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every commit still had to make sense independently.&lt;/p&gt;

&lt;p&gt;The agent would inspect my changes, determine which parts could logically stand on their own, stage them separately, and create proper commit messages.&lt;/p&gt;

&lt;p&gt;Instead of doing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement user synchronization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I might now get something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add synchronization configuration model
Add repository method for loading remote users
Implement user mapping logic
Add synchronization service
Add synchronization validation
Add synchronization error handling
Add synchronization tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same feature.&lt;/p&gt;

&lt;p&gt;Same code.&lt;/p&gt;

&lt;p&gt;Same amount of engineering work.&lt;/p&gt;

&lt;p&gt;Much better KPI.&lt;/p&gt;

&lt;p&gt;My workflow effectively became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finish work
↓
review changes
↓
"do the crazy commiting"
↓
agent generates many clean commits
↓
push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And something interesting happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Management was happy
&lt;/h2&gt;

&lt;p&gt;A few weeks later, my numbers had improved.&lt;/p&gt;

&lt;p&gt;Management noticed.&lt;/p&gt;

&lt;p&gt;The KPI dashboard was happy.&lt;/p&gt;

&lt;p&gt;Therefore, apparently, my performance had improved.&lt;/p&gt;

&lt;p&gt;Except nothing meaningful had changed.&lt;/p&gt;

&lt;p&gt;I hadn't become a better engineer.&lt;/p&gt;

&lt;p&gt;I hadn't started delivering dramatically more value.&lt;/p&gt;

&lt;p&gt;I hadn't suddenly become more productive.&lt;/p&gt;

&lt;p&gt;I had simply optimized my behavior for the measurement system.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Same engineer.&lt;br&gt;&lt;br&gt;
Same work.&lt;br&gt;&lt;br&gt;
Same code.&lt;br&gt;&lt;br&gt;
More commits.&lt;br&gt;&lt;br&gt;
Better performance according to the dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was probably the clearest demonstration of &lt;strong&gt;Goodhart's Law&lt;/strong&gt; I've personally experienced:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a measure becomes a target, it stops being a good measure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The funny part is that I didn't even need to game the system dishonestly.&lt;/p&gt;

&lt;p&gt;I automated the completely legitimate act of making smaller commits.&lt;/p&gt;

&lt;p&gt;The metric did the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  A commit has no unit of value
&lt;/h2&gt;

&lt;p&gt;The fundamental problem with commit count is that a commit doesn't represent a standardized amount of work.&lt;/p&gt;

&lt;p&gt;These are both one commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fix typo in error message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Migrate authentication subsystem to new identity provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One might represent thirty seconds of work.&lt;/p&gt;

&lt;p&gt;The other might represent three weeks of investigation, architecture discussions, implementation, testing, deployment planning, and coordination.&lt;/p&gt;

&lt;p&gt;Git doesn't care.&lt;/p&gt;

&lt;p&gt;The counter goes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also take exactly the same change and represent it as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 commits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;17 commits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without changing the final state of the repository at all.&lt;/p&gt;

&lt;p&gt;That's not a great property for something you're using to evaluate human performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  It gets worse for senior engineers
&lt;/h2&gt;

&lt;p&gt;Commit count becomes even less meaningful as engineers become more senior.&lt;/p&gt;

&lt;p&gt;Imagine a staff engineer spends an afternoon helping three teams avoid a bad architectural decision.&lt;/p&gt;

&lt;p&gt;The outcome could be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commits: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another engineer spends that afternoon implementing the agreed solution.&lt;/p&gt;

&lt;p&gt;Their outcome might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commits: 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Who contributed more?&lt;/p&gt;

&lt;p&gt;That's not even the right question.&lt;/p&gt;

&lt;p&gt;They contributed in &lt;strong&gt;different ways&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A technical lead might spend time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reviewing pull requests&lt;/li&gt;
&lt;li&gt;mentoring engineers&lt;/li&gt;
&lt;li&gt;designing systems&lt;/li&gt;
&lt;li&gt;investigating production incidents&lt;/li&gt;
&lt;li&gt;coordinating migrations&lt;/li&gt;
&lt;li&gt;reducing technical risk&lt;/li&gt;
&lt;li&gt;challenging unnecessary complexity&lt;/li&gt;
&lt;li&gt;helping someone else solve a problem&lt;/li&gt;
&lt;li&gt;preventing bad code from being written in the first place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best architectural decision of the week might result in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 lines added
0 commits
0 pull requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;because someone realized that a new service didn't need to exist.&lt;/p&gt;

&lt;p&gt;That's still engineering.&lt;/p&gt;

&lt;p&gt;Sometimes the most valuable code is the code you successfully convince the team &lt;strong&gt;not to write&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The metric changes the behavior
&lt;/h2&gt;

&lt;p&gt;This is the part that worries me more than the accuracy of the dashboard.&lt;/p&gt;

&lt;p&gt;People adapt to incentives.&lt;/p&gt;

&lt;p&gt;If engineers know commits are measured, eventually they start optimizing commits.&lt;/p&gt;

&lt;p&gt;If lines of code are measured, they'll produce more lines.&lt;/p&gt;

&lt;p&gt;If story points are measured, suddenly every task becomes an eight.&lt;/p&gt;

&lt;p&gt;If pull requests are measured, features get fragmented into unnecessary PRs.&lt;/p&gt;

&lt;p&gt;If tickets closed are measured, tickets get smaller.&lt;/p&gt;

&lt;p&gt;You haven't necessarily improved productivity.&lt;/p&gt;

&lt;p&gt;You've improved people's ability to produce the thing being counted.&lt;/p&gt;

&lt;p&gt;My agent skill just made the feedback loop extremely obvious.&lt;/p&gt;

&lt;p&gt;I effectively automated KPI optimization.&lt;/p&gt;

&lt;p&gt;And the dashboard couldn't tell the difference between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;engineer became more productive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;engineer learned how the measurement works
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a serious problem if the number is being used for performance management.&lt;/p&gt;




&lt;h2&gt;
  
  
  Activity metrics aren't necessarily useless
&lt;/h2&gt;

&lt;p&gt;This doesn't mean commit data has zero value.&lt;/p&gt;

&lt;p&gt;A sudden change in activity can be useful context.&lt;/p&gt;

&lt;p&gt;If someone normally contributes regularly and disappears from the repository for three weeks, it might be worth asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What are you working on?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Maybe they're stuck.&lt;/p&gt;

&lt;p&gt;Maybe they're doing architecture work.&lt;/p&gt;

&lt;p&gt;Maybe they're mentoring a new engineer.&lt;/p&gt;

&lt;p&gt;Maybe they're investigating production issues.&lt;/p&gt;

&lt;p&gt;Maybe their work is happening in another repository.&lt;/p&gt;

&lt;p&gt;Maybe they're disengaged.&lt;/p&gt;

&lt;p&gt;The commit graph can help start the conversation.&lt;/p&gt;

&lt;p&gt;The problem begins when we skip the conversation and let the graph become the conclusion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signal → question → context → understanding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is useful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signal → performance score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is dangerous.&lt;/p&gt;




&lt;h2&gt;
  
  
  What should we measure instead?
&lt;/h2&gt;

&lt;p&gt;There isn't one magical replacement metric.&lt;/p&gt;

&lt;p&gt;That's kind of the point.&lt;/p&gt;

&lt;p&gt;Software engineering is a complex system.&lt;/p&gt;

&lt;p&gt;Frameworks such as &lt;a href="https://dora.dev/" rel="noopener noreferrer"&gt;DORA&lt;/a&gt; focus much more on how effectively software moves through an organization: delivery speed, reliability, recovery, and the performance of the delivery system.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://queue.acm.org/detail.cfm?id=3454124" rel="noopener noreferrer"&gt;SPACE framework&lt;/a&gt; explicitly treats developer productivity as multidimensional, covering things like satisfaction, performance, activity, communication, collaboration, efficiency, and flow.&lt;/p&gt;

&lt;p&gt;Notice the important difference.&lt;/p&gt;

&lt;p&gt;They aren't trying to find:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;developer_productivity = some_counter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;because that number probably doesn't exist.&lt;/p&gt;

&lt;p&gt;For individuals, I'd much rather have conversations around things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What did you help deliver?&lt;/li&gt;
&lt;li&gt;What difficult problems did you solve?&lt;/li&gt;
&lt;li&gt;What risks did you reduce?&lt;/li&gt;
&lt;li&gt;What did you improve?&lt;/li&gt;
&lt;li&gt;Who did you unblock?&lt;/li&gt;
&lt;li&gt;What knowledge did you spread?&lt;/li&gt;
&lt;li&gt;Did your decisions make the team faster?&lt;/li&gt;
&lt;li&gt;Did the system become easier or harder to maintain?&lt;/li&gt;
&lt;li&gt;Did the product become better?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions are messier than a dashboard.&lt;/p&gt;

&lt;p&gt;They're also much closer to the work we're actually trying to evaluate.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI makes this problem even more interesting
&lt;/h2&gt;

&lt;p&gt;There's another reason I've been thinking about this lately.&lt;/p&gt;

&lt;p&gt;AI coding agents make activity metrics even easier to inflate.&lt;/p&gt;

&lt;p&gt;Generating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;commits&lt;/li&gt;
&lt;li&gt;pull requests&lt;/li&gt;
&lt;li&gt;lines of code&lt;/li&gt;
&lt;li&gt;tests&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;tickets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is becoming increasingly cheap.&lt;/p&gt;

&lt;p&gt;If an organization measures engineering productivity primarily through visible repository activity, agents can generate enormous amounts of apparently productive activity.&lt;/p&gt;

&lt;p&gt;That doesn't necessarily mean more value is being delivered.&lt;/p&gt;

&lt;p&gt;In my case, the agent wasn't even writing more code.&lt;/p&gt;

&lt;p&gt;It was simply reorganizing the same code into a shape that made the KPI dashboard happier.&lt;/p&gt;

&lt;p&gt;We're entering an era where optimizing superficial engineering metrics can literally be delegated to an agent.&lt;/p&gt;

&lt;p&gt;That should probably make us reconsider the metrics.&lt;/p&gt;




&lt;h2&gt;
  
  
  The weirdest part
&lt;/h2&gt;

&lt;p&gt;I originally created &lt;code&gt;crazy-commiting&lt;/code&gt; partly because I thought the situation was absurd.&lt;/p&gt;

&lt;p&gt;But it worked.&lt;/p&gt;

&lt;p&gt;The number went up.&lt;/p&gt;

&lt;p&gt;The dashboard showed improvement.&lt;/p&gt;

&lt;p&gt;Management was happy.&lt;/p&gt;

&lt;p&gt;And that might be the best test of a bad KPI I've found so far:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If I can improve the metric significantly with an agent without improving the product, the team, or the engineering outcome, what exactly is the metric measuring?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Probably not productivity.&lt;/p&gt;




&lt;p&gt;This is part of my &lt;strong&gt;Professional Antipatterns&lt;/strong&gt; series, where I write about strange, counterproductive, and occasionally absurd things I've encountered in software engineering — without naming the companies or people involved.&lt;/p&gt;

&lt;p&gt;The original post is also available on my blog:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/professional-antipatterns-commit-count/" rel="noopener noreferrer"&gt;https://blog.lezli01.is-a.dev/blog/professional-antipatterns-commit-count/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've encountered similarly questionable engineering KPIs, I'd genuinely like to hear the story.&lt;/p&gt;

&lt;p&gt;Because somewhere out there, a dashboard is probably congratulating someone for generating their 47th commit today.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>antipattern</category>
      <category>kpi</category>
      <category>programming</category>
    </item>
    <item>
      <title>Vincent 0.10.0: Less Hype, More Reliability for Agentic Development</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Thu, 24 Sep 2026 05:25:16 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-0100-less-hype-more-reliability-for-agentic-development-5bbi</link>
      <guid>https://dev.to/lezli01/vincent-0100-less-hype-more-reliability-for-agentic-development-5bbi</guid>
      <description>&lt;p&gt;Not every release needs a giant new feature.&lt;/p&gt;

&lt;p&gt;Sometimes the most useful release is the one that removes friction from everything you already do.&lt;/p&gt;

&lt;p&gt;That is the idea behind &lt;strong&gt;vincent 0.10.0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After several releases that expanded vincent quite aggressively, this one focuses more on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;robustness&lt;/li&gt;
&lt;li&gt;fixing rough edges&lt;/li&gt;
&lt;li&gt;improving everyday workflows&lt;/li&gt;
&lt;li&gt;adding familiar developer conveniences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a smaller release on paper, but one that makes vincent noticeably more comfortable to use.&lt;/p&gt;




&lt;h2&gt;
  
  
  First: what is vincent?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;vincent&lt;/a&gt; is an open-source tool for running agentic software-development workflows with human control built in.&lt;/p&gt;

&lt;p&gt;Instead of treating AI coding agents as isolated chat sessions, vincent gives them structure around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflows&lt;/li&gt;
&lt;li&gt;tasks&lt;/li&gt;
&lt;li&gt;branches&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;human approval gates&lt;/li&gt;
&lt;li&gt;transcripts&lt;/li&gt;
&lt;li&gt;pull requests&lt;/li&gt;
&lt;li&gt;containers&lt;/li&gt;
&lt;li&gt;parallel work&lt;/li&gt;
&lt;li&gt;cost controls&lt;/li&gt;
&lt;li&gt;external triggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to remove engineers from the loop.&lt;/p&gt;

&lt;p&gt;It is to make agentic development &lt;strong&gt;repeatable, observable, and controllable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Version 0.10.0 mostly improves what working inside that environment feels like.&lt;/p&gt;




&lt;h2&gt;
  
  
  Skills are now much more natural in chat
&lt;/h2&gt;

&lt;p&gt;Claude Code and Codex increasingly rely on skills to extend what agents can do.&lt;/p&gt;

&lt;p&gt;Vincent can now discover those skills and expose them directly inside chat.&lt;/p&gt;

&lt;p&gt;Press &lt;code&gt;Tab&lt;/code&gt; or &lt;code&gt;F2&lt;/code&gt; and vincent shows the skills available to the current agent.&lt;/p&gt;

&lt;p&gt;You can then select one and insert its invocation directly into your message.&lt;/p&gt;

&lt;p&gt;Completion also appears automatically while typing things such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for Claude Code, or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for Codex.&lt;/p&gt;

&lt;p&gt;Vincent also understands where those skills actually come from.&lt;/p&gt;

&lt;p&gt;For example, Codex can expose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repository skills&lt;/li&gt;
&lt;li&gt;user skills&lt;/li&gt;
&lt;li&gt;system skills&lt;/li&gt;
&lt;li&gt;plugin skills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when a chat belongs to a containerized task, vincent looks at the environment &lt;strong&gt;inside the container&lt;/strong&gt;, rather than incorrectly showing skills from the host machine.&lt;/p&gt;

&lt;p&gt;That distinction matters once agents start running in more isolated environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skill execution is visible too
&lt;/h3&gt;

&lt;p&gt;A skill invocation should not disappear into an opaque agent transcript.&lt;/p&gt;

&lt;p&gt;In 0.10.0, executed skills are represented explicitly.&lt;/p&gt;

&lt;p&gt;Instead of seeing a large dump of skill content — or nothing at all — the transcript can show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Skill: review
Arguments: ...
Status: completed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or indicate when the skill failed.&lt;/p&gt;

&lt;p&gt;That applies both in the TUI and when reading task or chat transcripts later.&lt;/p&gt;

&lt;p&gt;For me, this is part of an important principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If an agent performs an action, the surrounding system should make that action observable.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;@file&lt;/code&gt; mentions arrive in chat
&lt;/h2&gt;

&lt;p&gt;This is probably one of those features that feels obvious the moment you use it.&lt;/p&gt;

&lt;p&gt;Typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;inside the chat composer now opens a ranked list of files from the chat workspace.&lt;/p&gt;

&lt;p&gt;Keep typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and vincent narrows down the candidates.&lt;/p&gt;

&lt;p&gt;Select a result, and vincent inserts the reference in the format expected by the underlying agent.&lt;/p&gt;

&lt;p&gt;No manually copying paths.&lt;/p&gt;

&lt;p&gt;No jumping between terminal panes just to point the model at a file.&lt;/p&gt;

&lt;p&gt;There is also a CLI equivalent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent chat files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is exactly the kind of small quality-of-life improvement that makes conversational coding workflows much less annoying over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Work on a branch that already exists
&lt;/h2&gt;

&lt;p&gt;Previously, vincent generally created its own branch and worktree when starting work.&lt;/p&gt;

&lt;p&gt;That isolation is useful, especially for autonomous tasks.&lt;/p&gt;

&lt;p&gt;But sometimes you already have the branch you want.&lt;/p&gt;

&lt;p&gt;Maybe you created it yourself.&lt;/p&gt;

&lt;p&gt;Maybe you checked it out and started experimenting manually.&lt;/p&gt;

&lt;p&gt;Maybe you want an agent to continue exactly where you left off.&lt;/p&gt;

&lt;p&gt;0.10.0 adds support for that.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent task add &lt;span class="nt"&gt;--branch&lt;/span&gt; my-feature &lt;span class="nt"&gt;--existing-branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent chat start &lt;span class="nt"&gt;--branch&lt;/span&gt; my-feature &lt;span class="nt"&gt;--existing-branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vincent can now work directly on that branch.&lt;/p&gt;

&lt;p&gt;It also tries to behave conservatively around Git state.&lt;/p&gt;

&lt;p&gt;If the branch is safely behind its upstream, vincent can fast-forward it.&lt;/p&gt;

&lt;p&gt;If it has diverged, vincent blocks rather than trying to modify it behind your back.&lt;/p&gt;

&lt;p&gt;And if the branch is already checked out in your normal working copy, vincent can work there directly instead of creating another worktree.&lt;/p&gt;

&lt;p&gt;That makes vincent much easier to introduce into an existing workflow rather than forcing every interaction to start from vincent itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Multiline chat input
&lt;/h2&gt;

&lt;p&gt;Yes, this deserves its own section.&lt;/p&gt;

&lt;p&gt;Chat drafts can finally contain newlines.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl+J
Shift+Enter
Alt+Enter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while plain &lt;code&gt;Enter&lt;/code&gt; continues to send the message.&lt;/p&gt;

&lt;p&gt;It is not a groundbreaking AI capability.&lt;/p&gt;

&lt;p&gt;It is also one of those things you immediately miss when a terminal chat does not support it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;/clear&lt;/code&gt; is represented correctly
&lt;/h2&gt;

&lt;p&gt;Agent conversations have context boundaries.&lt;/p&gt;

&lt;p&gt;The UI should not pretend otherwise.&lt;/p&gt;

&lt;p&gt;When &lt;code&gt;/clear&lt;/code&gt; is used, vincent now marks that location in the transcript.&lt;/p&gt;

&lt;p&gt;Previously, reading an old conversation could make earlier messages appear as though the agent still had them in context.&lt;/p&gt;

&lt;p&gt;Now the transcript represents what actually happened more accurately.&lt;/p&gt;

&lt;p&gt;That becomes increasingly important when transcripts are used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;auditing&lt;/li&gt;
&lt;li&gt;understanding agent decisions&lt;/li&gt;
&lt;li&gt;reproducing failures&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Send messages from files or stdin
&lt;/h2&gt;

&lt;p&gt;Large prompts and shell-sensitive commands are another source of unnecessary friction.&lt;/p&gt;

&lt;p&gt;Vincent now supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent chat send &lt;span class="nt"&gt;--message-file&lt;/span&gt; prompt.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the same capability when starting a chat.&lt;/p&gt;

&lt;p&gt;This also helps with skill invocations such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$my-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which some shells may otherwise interpret or modify unexpectedly.&lt;/p&gt;

&lt;p&gt;It is a small addition, but useful when chat becomes part of a scripted workflow instead of something driven exclusively from the keyboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Safer global workflow updates
&lt;/h2&gt;

&lt;p&gt;Vincent already has workflows that can be created and updated with agent assistance.&lt;/p&gt;

&lt;p&gt;0.10.0 extends that idea to global workflows.&lt;/p&gt;

&lt;p&gt;An update can now produce a &lt;strong&gt;proposal&lt;/strong&gt; rather than silently replacing your configuration.&lt;/p&gt;

&lt;p&gt;The workflow waits at an approval gate before installation.&lt;/p&gt;

&lt;p&gt;You can inspect the proposal and then explicitly apply it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent workflow &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--global&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent workflow apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction matters to the direction of the project.&lt;/p&gt;

&lt;p&gt;I want agents to be able to help operate and evolve the system.&lt;/p&gt;

&lt;p&gt;I do &lt;strong&gt;not&lt;/strong&gt; want that to mean quietly giving them ownership of every configuration change.&lt;/p&gt;

&lt;p&gt;Automation and control do not have to be opposites.&lt;/p&gt;




&lt;h2&gt;
  
  
  And a lot of fixes
&lt;/h2&gt;

&lt;p&gt;The release also contains a collection of less glamorous but important fixes.&lt;/p&gt;

&lt;p&gt;Among them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;containerized chats now see the correct agent credentials&lt;/li&gt;
&lt;li&gt;skills typed as the first message of a task chat work correctly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@something&lt;/code&gt; no longer accidentally disables skill completion&lt;/li&gt;
&lt;li&gt;cleaner Claude Code and Cursor output handling&lt;/li&gt;
&lt;li&gt;task forms no longer retain stale branch names&lt;/li&gt;
&lt;li&gt;blank workflow values behave consistently&lt;/li&gt;
&lt;li&gt;installing vincent skills for multiple agents works correctly&lt;/li&gt;
&lt;li&gt;example DAG workflows handle unpushed parent branches correctly&lt;/li&gt;
&lt;li&gt;Windows installation documentation is clearer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these make for a dramatic release announcement.&lt;/p&gt;

&lt;p&gt;Together, they matter quite a lot.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I like releases like this
&lt;/h2&gt;

&lt;p&gt;Agentic development is moving extremely quickly.&lt;/p&gt;

&lt;p&gt;It is easy to focus only on capability:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can the agent do one more thing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But once these tools become part of everyday engineering, a different set of questions becomes equally important.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I understand what happened?&lt;/li&gt;
&lt;li&gt;Can I trust what branch it is touching?&lt;/li&gt;
&lt;li&gt;Can I see which skill executed?&lt;/li&gt;
&lt;li&gt;Can I recover the transcript later?&lt;/li&gt;
&lt;li&gt;Can I move between manual work and agentic work naturally?&lt;/li&gt;
&lt;li&gt;Does the tool stay out of my way?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is where a lot of the work in vincent is moving now.&lt;/p&gt;

&lt;p&gt;The goal is not simply to give an agent more power.&lt;/p&gt;

&lt;p&gt;It is to build a dependable control plane around that power.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try vincent
&lt;/h2&gt;

&lt;p&gt;If you are experimenting with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex&lt;/li&gt;
&lt;li&gt;coding agents&lt;/li&gt;
&lt;li&gt;multi-step agent workflows&lt;/li&gt;
&lt;li&gt;human-in-the-loop automation&lt;/li&gt;
&lt;li&gt;agent-driven pull request workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would love for you to try vincent.&lt;/p&gt;

&lt;p&gt;It is fully open source.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;https://github.com/lezli01/vincent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;vincent 0.10.0 changelog:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://lezli01.is-a.dev/vincent/changelog.html#0100--skills-and-files-in-chat-and-work-on-an-existing-branch" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/changelog.html#0100--skills-and-files-in-chat-and-work-on-an-existing-branch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues, ideas, and contributions are very welcome.&lt;/p&gt;

&lt;p&gt;And if you are already building agentic development workflows, I am especially interested in hearing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the small workflow annoyances that bother you most when working with coding agents every day?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>devtools</category>
      <category>agents</category>
    </item>
    <item>
      <title>AI Can Write Code Faster Than We Can Review It</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Wed, 23 Sep 2026 07:21:40 +0000</pubDate>
      <link>https://dev.to/lezli01/ai-can-write-code-faster-than-we-can-review-it-15jb</link>
      <guid>https://dev.to/lezli01/ai-can-write-code-faster-than-we-can-review-it-15jb</guid>
      <description>&lt;p&gt;Coding agents are getting very good at producing code.&lt;/p&gt;

&lt;p&gt;Maybe &lt;em&gt;too&lt;/em&gt; good.&lt;/p&gt;

&lt;p&gt;One engineer working with agents can now generate multiple meaningful pull requests in the time it previously took to implement a single feature.&lt;/p&gt;

&lt;p&gt;That sounds like a massive productivity win.&lt;/p&gt;

&lt;p&gt;Until you look at the review queue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;More agent throughput
        ↓
More code
        ↓
More pull requests
        ↓
Same number of experienced reviewers
        ↓
Review becomes the bottleneck
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We didn't eliminate the bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We moved it.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why not let another agent review it?
&lt;/h2&gt;

&lt;p&gt;That's the obvious next step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A
   ↓
writes code
   ↓
Agent B
   ↓
reviews code
   ↓
CI passes
   ↓
merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And I absolutely think agent review will become an important part of modern engineering pipelines.&lt;/p&gt;

&lt;p&gt;But there is an uncomfortable question hiding behind this model:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Who takes responsibility for code that no human has ever reviewed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This matters a lot more when you're building systems where failures have consequences.&lt;/p&gt;

&lt;p&gt;I've worked on cybersecurity products deployed in environments where security and reliability are not abstract quality metrics.&lt;/p&gt;

&lt;p&gt;They matter operationally.&lt;/p&gt;

&lt;p&gt;In that kind of environment, telling engineers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The agents reviewed each other's work."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is not necessarily enough.&lt;/p&gt;

&lt;p&gt;Agents can independently catch bugs.&lt;/p&gt;

&lt;p&gt;But they can also independently misunderstand the same requirement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code generation isn't the same as delivery throughput
&lt;/h2&gt;

&lt;p&gt;There's another problem.&lt;/p&gt;

&lt;p&gt;Imagine your agents create ten PRs today.&lt;/p&gt;

&lt;p&gt;Your team can realistically review three.&lt;/p&gt;

&lt;p&gt;Tomorrow the agents create ten more.&lt;/p&gt;

&lt;p&gt;You haven't increased delivery throughput.&lt;/p&gt;

&lt;p&gt;You've created &lt;strong&gt;17 pieces of unfinished inventory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is basically a queueing problem.&lt;/p&gt;

&lt;p&gt;And once you start looking at agentic development through that lens, the optimization target changes.&lt;/p&gt;

&lt;p&gt;The question stops being:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we make agents generate even more code?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we safely move agent-generated changes through the engineering system?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  I think the review pipeline needs to change
&lt;/h2&gt;

&lt;p&gt;The answer probably isn't "humans review everything exactly as before."&lt;/p&gt;

&lt;p&gt;That doesn't scale.&lt;/p&gt;

&lt;p&gt;But I also don't think the answer is "agents approve agents and humans disappear."&lt;/p&gt;

&lt;p&gt;A more realistic agent-native pipeline might look something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent implementation
        ↓
Deterministic verification
        ↓
Independent agent review
        ↓
Risk classification
        ↓
┌───────────────────────────────┐
│ Low risk → automated pipeline │
│ Medium   → targeted review    │
│ High     → deep human review  │
└───────────────────────────────┘
        ↓
Merge queue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is &lt;strong&gt;risk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Changing a typo in documentation isn't the same as changing authentication logic.&lt;/p&gt;

&lt;p&gt;Updating a test helper isn't the same as touching authorization, cryptography, persistence, financial calculations, or safety-critical behavior.&lt;/p&gt;

&lt;p&gt;Yet most PR workflows still treat them remarkably similarly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Human attention becomes the scarce resource
&lt;/h2&gt;

&lt;p&gt;Agents make implementation cheaper.&lt;/p&gt;

&lt;p&gt;That means something else becomes relatively more expensive:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;experienced human judgment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We should probably stop spending that judgment on things machines can verify reliably.&lt;/p&gt;

&lt;p&gt;Humans shouldn't be hunting for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;formatting mistakes&lt;/li&gt;
&lt;li&gt;lint violations&lt;/li&gt;
&lt;li&gt;missing imports&lt;/li&gt;
&lt;li&gt;obvious null errors&lt;/li&gt;
&lt;li&gt;trivial test failures&lt;/li&gt;
&lt;li&gt;mechanical style inconsistencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Machines are better suited for those.&lt;/p&gt;

&lt;p&gt;Human reviewers should spend their limited attention asking questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this architecture still make sense?&lt;/li&gt;
&lt;li&gt;Is the requirement interpreted correctly?&lt;/li&gt;
&lt;li&gt;What happens when a dependency fails?&lt;/li&gt;
&lt;li&gt;Did we introduce a security boundary violation?&lt;/li&gt;
&lt;li&gt;Does this change create an operational risk?&lt;/li&gt;
&lt;li&gt;Are there domain assumptions hidden in this implementation?&lt;/li&gt;
&lt;li&gt;Is this actually the right solution?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's where engineering judgment matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  And sometimes agents should simply stop coding
&lt;/h2&gt;

&lt;p&gt;This may be one of the stranger consequences of agentic development.&lt;/p&gt;

&lt;p&gt;If your review queue is already overloaded...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;generating more code may have negative value.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means agent orchestration systems may eventually need WIP limits just like mature manufacturing and Kanban systems.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if review_queue &amp;gt; threshold:
    stop_starting_new_work()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most productive coding agent might occasionally be the one that decides:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't write another PR yet.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  This is becoming a real engineering problem
&lt;/h2&gt;

&lt;p&gt;I've been discussing this with people from other companies dealing with variations of the same problem.&lt;/p&gt;

&lt;p&gt;The interesting part is that the conversation is already moving beyond:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How can we use AI to write code?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;toward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How do we redesign the SDLC when producing code is no longer the expensive part?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've also been experimenting with some of these ideas while building &lt;strong&gt;Vincent&lt;/strong&gt;, particularly around controlled agent workflows, deterministic steps, explicit states, human gates, and workflows that know when they should stop rather than blindly continuing.&lt;/p&gt;

&lt;p&gt;I wrote a longer article exploring the problem, possible review architectures, and the parts I still don't think we have good answers for.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/agent-review-bottleneck/" rel="noopener noreferrer"&gt;When Agents Write Faster Than Humans Can Review&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  I'm curious how other teams are handling this
&lt;/h2&gt;

&lt;p&gt;If you're already using coding agents heavily:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Has code generation started outpacing your team's review capacity?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if it has, what did you change?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More automated verification?&lt;/li&gt;
&lt;li&gt;Agent reviewers?&lt;/li&gt;
&lt;li&gt;Smaller PRs?&lt;/li&gt;
&lt;li&gt;Risk-based reviews?&lt;/li&gt;
&lt;li&gt;Merge queues?&lt;/li&gt;
&lt;li&gt;WIP limits?&lt;/li&gt;
&lt;li&gt;Something completely different?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd especially love to hear from teams using agents in security-sensitive or high-reliability systems.&lt;/p&gt;

&lt;p&gt;Because I suspect the next major problem in agentic software development isn't going to be writing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's going to be deciding what code we can trust.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>productivity</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Vincent 0.9.0: Coding-agent automation that knows when to stop</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Fri, 18 Sep 2026 19:39:31 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-090-coding-agent-automation-that-knows-when-to-stop-40n2</link>
      <guid>https://dev.to/lezli01/vincent-090-coding-agent-automation-that-knows-when-to-stop-40n2</guid>
      <description>&lt;p&gt;Vincent 0.9.0 is out.&lt;/p&gt;

&lt;p&gt;And while there are plenty of new features in this release, the part I care about most is something less flashy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vincent is getting better at knowing what it should &lt;em&gt;not&lt;/em&gt; do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fourteen days after 0.8.0, the release contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;428 commits&lt;/li&gt;
&lt;li&gt;23 additions&lt;/li&gt;
&lt;li&gt;6 changes&lt;/li&gt;
&lt;li&gt;11 fixes&lt;/li&gt;
&lt;li&gt;57 pull requests represented in the changelog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For anyone unfamiliar with the project, &lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;vincent&lt;/a&gt; is a local, vendor-independent control plane for coding agents.&lt;/p&gt;

&lt;p&gt;It can run tools such as Claude Code, Codex and Cursor through explicit workflows, isolate tasks into branches and worktrees, coordinate parallel work, enforce gates, run verification, and keep the orchestration state on your machine.&lt;/p&gt;

&lt;p&gt;0.9.0 takes another major step toward making that model useful for longer-running automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work can now start itself
&lt;/h2&gt;

&lt;p&gt;Until 0.9.0, something had to explicitly invoke vincent.&lt;/p&gt;

&lt;p&gt;You could create a task from the TUI, CLI or API, but there was always a direct action that started the process.&lt;/p&gt;

&lt;p&gt;0.9.0 introduces &lt;strong&gt;event triggers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vincent can now react to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub issues&lt;/li&gt;
&lt;li&gt;GitHub pull requests&lt;/li&gt;
&lt;li&gt;command output&lt;/li&gt;
&lt;li&gt;signed HTTP events&lt;/li&gt;
&lt;li&gt;cron schedules&lt;/li&gt;
&lt;li&gt;recurring intervals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means workflows such as these are now possible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;issue receives "agent-please" label
        ↓
Vincent creates task
        ↓
workflow starts
        ↓
agent implements change
        ↓
checks run
        ↓
human reviews result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;02:00 every night
        ↓
dependency audit
        ↓
agent investigates outdated packages
        ↓
proposed changes wait for review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But adding event-driven execution introduces a much more important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is allowed to turn automation on?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents can propose automation. They cannot arm it.
&lt;/h2&gt;

&lt;p&gt;Triggers are intentionally conservative.&lt;/p&gt;

&lt;p&gt;A trigger does nothing until both the trigger itself and trigger support globally are enabled.&lt;/p&gt;

&lt;p&gt;When a trigger is armed for the first time, vincent records the events that already exist instead of executing a backlog of old work.&lt;/p&gt;

&lt;p&gt;Triggered tasks can also default to a paused state.&lt;/p&gt;

&lt;p&gt;And there is another rule I consider particularly important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An agent can create or modify a trigger proposal, but vincent will refuse to apply it if doing so would arm the trigger.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is no override flag.&lt;/p&gt;

&lt;p&gt;The agent can write the automation.&lt;/p&gt;

&lt;p&gt;A human decides whether that automation gets authority to run.&lt;/p&gt;

&lt;p&gt;That distinction is going to matter more as coding agents become increasingly capable.&lt;/p&gt;

&lt;h2&gt;
  
  
  From issue to pull request to merge
&lt;/h2&gt;

&lt;p&gt;Vincent 0.8.0 could open a pull request for a task.&lt;/p&gt;

&lt;p&gt;0.9.0 goes further.&lt;/p&gt;

&lt;p&gt;From the task itself you can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect PR checks&lt;/li&gt;
&lt;li&gt;comment&lt;/li&gt;
&lt;li&gt;re-run checks&lt;/li&gt;
&lt;li&gt;close a PR&lt;/li&gt;
&lt;li&gt;reopen it&lt;/li&gt;
&lt;li&gt;merge it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But again, the interesting part is the boundary.&lt;/p&gt;

&lt;p&gt;The merge action is &lt;strong&gt;not exposed as an MCP tool&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agents do not get the merge button.&lt;/p&gt;

&lt;p&gt;And when a human requests a merge, vincent checks that the exact state being reviewed is still valid.&lt;/p&gt;

&lt;p&gt;It refuses the operation if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the branch is behind&lt;/li&gt;
&lt;li&gt;a check is still running&lt;/li&gt;
&lt;li&gt;the PR head has moved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to eliminate human involvement.&lt;/p&gt;

&lt;p&gt;The goal is to make human involvement happen at the places where it actually matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents now live inside the task container
&lt;/h2&gt;

&lt;p&gt;Containerized tasks are also more complete in 0.9.&lt;/p&gt;

&lt;p&gt;Previously, command steps and checks could execute inside the task container while the actual agent CLI still ran on the host.&lt;/p&gt;

&lt;p&gt;That meant a supposedly containerized workflow was partially split across environments.&lt;/p&gt;

&lt;p&gt;Now, when a task defines a container image, the agent itself runs inside that container as well.&lt;/p&gt;

&lt;p&gt;That gives the workflow a much cleaner execution boundary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;task
 └── container
      ├── agent
      ├── commands
      ├── checks
      └── task environment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The transcripts, cost tracking and controls remain available just like they are for host execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Talk to a task after it stops
&lt;/h2&gt;

&lt;p&gt;A workflow stopping does not necessarily mean the work is finished.&lt;/p&gt;

&lt;p&gt;Sometimes a task is blocked.&lt;/p&gt;

&lt;p&gt;Sometimes it is sitting at a gate.&lt;/p&gt;

&lt;p&gt;Sometimes it failed in a way that needs investigation.&lt;/p&gt;

&lt;p&gt;0.9 adds the ability to open a conversation with an agent directly on that task.&lt;/p&gt;

&lt;p&gt;The agent starts with the task context, its branch and the reason execution stopped.&lt;/p&gt;

&lt;p&gt;So instead of reconstructing the problem somewhere else, you can investigate it where the work actually happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parallel workflows got harder to break
&lt;/h2&gt;

&lt;p&gt;0.8 introduced fan-out workflows: one task could split an issue into multiple parallel lanes.&lt;/p&gt;

&lt;p&gt;0.9 contains the first substantial reinforcement of that system.&lt;/p&gt;

&lt;p&gt;Previously, blocked lanes could make the fan-out painful to recover.&lt;/p&gt;

&lt;p&gt;Now retrying the parent task can re-admit all blocked lanes below it.&lt;/p&gt;

&lt;p&gt;Vincent also tracks resource usage across the whole task tree more accurately, including a new tree-wide spending ceiling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;parent task
├── lane A
├── lane B
├── lane C
├── retries
└── follow-ups

        ↓

one shared cost limit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That matters once a single user action can produce a substantial amount of autonomous work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better observability into what the agent actually received
&lt;/h2&gt;

&lt;p&gt;Agent orchestration becomes difficult to debug when configuration comes from several levels.&lt;/p&gt;

&lt;p&gt;What model ran?&lt;/p&gt;

&lt;p&gt;What effort level?&lt;/p&gt;

&lt;p&gt;What exact prompt was rendered?&lt;/p&gt;

&lt;p&gt;Was the value set globally, in the workflow or on the step?&lt;/p&gt;

&lt;p&gt;0.9 adds a Step Details view that records the actual values when execution happens.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendered prompt or script&lt;/li&gt;
&lt;li&gt;agent&lt;/li&gt;
&lt;li&gt;model&lt;/li&gt;
&lt;li&gt;effort level&lt;/li&gt;
&lt;li&gt;source of each configuration value&lt;/li&gt;
&lt;li&gt;execution outcome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Older task attempts are not retroactively guessed.&lt;/p&gt;

&lt;p&gt;If vincent did not record something at the time, it says so.&lt;/p&gt;

&lt;p&gt;That sounds small, but I think this kind of honesty in tooling matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  A lot of 0.9 is about refusing invalid states
&lt;/h2&gt;

&lt;p&gt;There is a pattern throughout this release.&lt;/p&gt;

&lt;p&gt;Vincent now refuses more operations that previously could have been ambiguous or silently incorrect.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unsafe PR merges are refused&lt;/li&gt;
&lt;li&gt;trigger proposals cannot secretly arm automation&lt;/li&gt;
&lt;li&gt;invalid retry configuration on unsupported workflow steps is rejected&lt;/li&gt;
&lt;li&gt;conflicting TUI keybindings are rejected before being written&lt;/li&gt;
&lt;li&gt;branches with commits beyond their base are protected from permanent deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That leads to one of the principles behind this release:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Much of a stable release is a promise about what the tool will refuse to do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Features make automation powerful.&lt;/p&gt;

&lt;p&gt;Refusals make it trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better recovery and operational tooling
&lt;/h2&gt;

&lt;p&gt;There are plenty of smaller changes around the edges too.&lt;/p&gt;

&lt;p&gt;Scheduled backups can now be maintained by the daemon.&lt;/p&gt;

&lt;p&gt;Individual deleted tasks can be restored from an archive.&lt;/p&gt;

&lt;p&gt;Agent usage limits are tracked more carefully so multiple tasks do not repeatedly launch processes into a known quota wall.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vincent doctor&lt;/code&gt; performs more useful diagnostics.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vincent agents&lt;/code&gt; shows installed agent versions, authentication state and quota information.&lt;/p&gt;

&lt;p&gt;And vincent can now detect when its installed agent skills are older than the running build.&lt;/p&gt;

&lt;p&gt;None of these features make a particularly dramatic screenshot.&lt;/p&gt;

&lt;p&gt;They do, however, make a system considerably nicer to operate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vincent is building vincent
&lt;/h2&gt;

&lt;p&gt;One metric from this release probably says more about the project than anything else.&lt;/p&gt;

&lt;p&gt;Between the 0.8.0 and 0.9.0 tags, &lt;strong&gt;88 pull requests were merged&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;76 originated from &lt;code&gt;vincent/&lt;/code&gt; task branches.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The 0.9 release preparation itself was also executed as a vincent workflow: 21 steps that eventually produced the PR used to prepare the release.&lt;/p&gt;

&lt;p&gt;Using your own orchestration system to build itself is an extremely effective way to discover where the abstractions break.&lt;/p&gt;

&lt;p&gt;And they do break.&lt;/p&gt;

&lt;p&gt;0.9 contains plenty of fixes precisely because vincent is now exercising those workflows every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The road to 1.0
&lt;/h2&gt;

&lt;p&gt;Vincent is still 0.x.&lt;/p&gt;

&lt;p&gt;Some interfaces still change.&lt;/p&gt;

&lt;p&gt;Some workflow configurations that previously failed silently are now errors.&lt;/p&gt;

&lt;p&gt;Some TUI keys moved to make behavior consistent.&lt;/p&gt;

&lt;p&gt;That instability is intentional while the foundations are still being hardened.&lt;/p&gt;

&lt;p&gt;For me, the important change in 0.9 is that vincent is starting to feel less like a tool that happens to run coding agents and more like an actual &lt;strong&gt;control plane for agent-driven software work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Something can observe an event.&lt;/p&gt;

&lt;p&gt;Decide that work may need to happen.&lt;/p&gt;

&lt;p&gt;Create a controlled task.&lt;/p&gt;

&lt;p&gt;Run agents in isolated environments.&lt;/p&gt;

&lt;p&gt;Fan the work out.&lt;/p&gt;

&lt;p&gt;Verify the results.&lt;/p&gt;

&lt;p&gt;Produce a pull request.&lt;/p&gt;

&lt;p&gt;And then stop at the boundary where a human decision still matters.&lt;/p&gt;

&lt;p&gt;That is the direction I want to keep pushing toward 1.0.&lt;/p&gt;




&lt;p&gt;📖 &lt;strong&gt;Full 0.9.0 release write-up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/vincent-0-9-release/" rel="noopener noreferrer"&gt;https://blog.lezli01.is-a.dev/blog/vincent-0-9-release/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;https://github.com/lezli01/vincent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues and contributions are very welcome.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>programming</category>
    </item>
    <item>
      <title>Failure Should Be a State, Not a Dead End</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Thu, 17 Sep 2026 09:09:16 +0000</pubDate>
      <link>https://dev.to/lezli01/failure-should-be-a-state-not-a-dead-end-54p3</link>
      <guid>https://dev.to/lezli01/failure-should-be-a-state-not-a-dead-end-54p3</guid>
      <description>&lt;p&gt;AI agents fail.&lt;/p&gt;

&lt;p&gt;That part is inevitable.&lt;/p&gt;

&lt;p&gt;What matters is what your workflow does next.&lt;/p&gt;

&lt;p&gt;In many agentic systems, failure effectively means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stop the execution&lt;/li&gt;
&lt;li&gt;lose useful context&lt;/li&gt;
&lt;li&gt;restart the task&lt;/li&gt;
&lt;li&gt;rediscover what went wrong&lt;/li&gt;
&lt;li&gt;repeat work that already happened&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That feels less like recovery and more like starting over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure should be part of the workflow
&lt;/h2&gt;

&lt;p&gt;In vincent, I wanted failure to be something the workflow can represent explicitly.&lt;/p&gt;

&lt;p&gt;A failed attempt still has valuable information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the agent transcript&lt;/li&gt;
&lt;li&gt;produced output&lt;/li&gt;
&lt;li&gt;timing information&lt;/li&gt;
&lt;li&gt;the failure reason&lt;/li&gt;
&lt;li&gt;the branch and worktree&lt;/li&gt;
&lt;li&gt;everything that happened before the failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That state should not disappear just because one step failed.&lt;/p&gt;

&lt;p&gt;Instead, the workflow can decide what happens next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recovery can take different forms
&lt;/h2&gt;

&lt;p&gt;Depending on the situation, you might want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔄 Retry the same task&lt;/li&gt;
&lt;li&gt;✏️ Change something and retry&lt;/li&gt;
&lt;li&gt;🛠️ Run a repair agent in the existing worktree&lt;/li&gt;
&lt;li&gt;⏭️ Skip the failed task&lt;/li&gt;
&lt;li&gt;🛑 Cancel the workflow&lt;/li&gt;
&lt;li&gt;👤 Ask a human to decide what happens next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that none of these require pretending the previous attempt never happened.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Restarting an agent is not the same as recovering a workload.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;As agent workflows become longer and more complex, failures become normal operational events.&lt;/p&gt;

&lt;p&gt;A workflow with ten, twenty, or fifty dependent tasks cannot realistically treat every failure as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Something failed.
Start again.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The orchestration layer needs to understand failure as a first-class state.&lt;/p&gt;

&lt;p&gt;That makes workflows easier to debug, easier to recover, and much safer to run when agents are touching real codebases.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is especially important for autonomous agents
&lt;/h2&gt;

&lt;p&gt;The more autonomy we give agents, the more important recovery becomes.&lt;/p&gt;

&lt;p&gt;Retries alone are not enough.&lt;/p&gt;

&lt;p&gt;Sometimes the right response is another agent.&lt;/p&gt;

&lt;p&gt;Sometimes it is a human.&lt;/p&gt;

&lt;p&gt;Sometimes the task should simply remain blocked until somebody understands what happened.&lt;/p&gt;

&lt;p&gt;The orchestration system should preserve enough context to make that decision intelligently.&lt;/p&gt;




&lt;p&gt;I wrote more about how I approach this in &lt;strong&gt;vincent&lt;/strong&gt;, my open-source AI SDLC workflow tool:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://lezli01.is-a.dev/vincent/docs/why/failure-should-be-a-state-not-a-dead-end.html" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/docs/why/failure-should-be-a-state-not-a-dead-end.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m curious how others are handling this in agent orchestration systems.&lt;/p&gt;

&lt;p&gt;Do you treat agent failure mostly as a retry problem, or as workflow state?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>The Terminal Should Show the Work, Not Own It</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Tue, 15 Sep 2026 06:51:25 +0000</pubDate>
      <link>https://dev.to/lezli01/the-terminal-should-show-the-work-not-own-it-ihk</link>
      <guid>https://dev.to/lezli01/the-terminal-should-show-the-work-not-own-it-ihk</guid>
      <description>&lt;p&gt;As AI coding agents become more capable, I think we need to rethink one assumption that still shapes a lot of developer tooling:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The terminal session that starts the work should not necessarily own the work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For short interactions, the traditional model is perfectly fine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;open terminal
→ start agent
→ ask for something
→ get result
→ exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But agentic development is moving beyond short conversations.&lt;/p&gt;

&lt;p&gt;Tasks can now involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;approval gates&lt;/li&gt;
&lt;li&gt;parallel branches&lt;/li&gt;
&lt;li&gt;long-running implementation work&lt;/li&gt;
&lt;li&gt;rate limits&lt;/li&gt;
&lt;li&gt;scheduled execution&lt;/li&gt;
&lt;li&gt;external validation&lt;/li&gt;
&lt;li&gt;Git worktrees&lt;/li&gt;
&lt;li&gt;multiple agents&lt;/li&gt;
&lt;li&gt;human intervention halfway through a workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, the task starts looking less like a chat session and more like a &lt;strong&gt;workload&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The terminal is ephemeral
&lt;/h2&gt;

&lt;p&gt;Terminal sessions are temporary by nature.&lt;/p&gt;

&lt;p&gt;You close the tab.&lt;br&gt;
Your SSH connection drops.&lt;br&gt;
Your laptop sleeps.&lt;br&gt;
You restart the application.&lt;br&gt;
You simply want your terminal back for something else.&lt;/p&gt;

&lt;p&gt;None of those things should necessarily mean that the underlying work has to disappear with it.&lt;/p&gt;

&lt;p&gt;That is the distinction I wanted to make in vincent.&lt;/p&gt;
&lt;h2&gt;
  
  
  The execution should live somewhere durable
&lt;/h2&gt;

&lt;p&gt;In vincent, workflow execution is owned by a background daemon.&lt;/p&gt;

&lt;p&gt;That layer is responsible for things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflow state&lt;/li&gt;
&lt;li&gt;agent processes&lt;/li&gt;
&lt;li&gt;scheduling&lt;/li&gt;
&lt;li&gt;persistence&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;approvals&lt;/li&gt;
&lt;li&gt;Git worktrees&lt;/li&gt;
&lt;li&gt;task lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The TUI, CLI and API are clients of that state.&lt;/p&gt;

&lt;p&gt;They let you inspect and interact with the work, but they do not define its lifetime.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        CLI
         │
         │
TUI ── Control Plane ── API
         │
         │
    Agent Workloads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Close the TUI and the workload can continue.&lt;/p&gt;

&lt;p&gt;Reconnect later and you can inspect the same task again.&lt;/p&gt;

&lt;p&gt;Use another client and you are still looking at the same underlying execution state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think this matters
&lt;/h2&gt;

&lt;p&gt;As coding agents become more autonomous, the distinction between &lt;strong&gt;interface&lt;/strong&gt; and &lt;strong&gt;execution lifecycle&lt;/strong&gt; becomes more important.&lt;/p&gt;

&lt;p&gt;We already accept this separation in many other areas of software engineering.&lt;/p&gt;

&lt;p&gt;A Kubernetes workload does not disappear because you close &lt;code&gt;kubectl&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A CI pipeline does not stop because you close the browser tab.&lt;/p&gt;

&lt;p&gt;A background job does not belong to the shell command that originally enqueued it.&lt;/p&gt;

&lt;p&gt;So why should a long-running AI engineering workflow belong to one terminal process?&lt;/p&gt;

&lt;h2&gt;
  
  
  Agentic coding is becoming infrastructure
&lt;/h2&gt;

&lt;p&gt;The more responsibility we give coding agents, the more orchestration concerns start appearing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state
retries
concurrency
approval
scheduling
recovery
observability
persistence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are not really terminal concerns.&lt;/p&gt;

&lt;p&gt;They are control-plane concerns.&lt;/p&gt;

&lt;p&gt;And I think developer tools built around agents will increasingly need to treat them that way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The terminal still matters
&lt;/h2&gt;

&lt;p&gt;None of this means the terminal is going away.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;The terminal is still one of the best interfaces for developers.&lt;/p&gt;

&lt;p&gt;But there is an important difference between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The terminal controls the workload."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The terminal owns the workload."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I strongly prefer the first.&lt;/p&gt;

&lt;p&gt;The terminal should be a window into the system.&lt;/p&gt;

&lt;p&gt;Not the system itself.&lt;/p&gt;




&lt;p&gt;I wrote more about the reasoning and the architecture behind this approach in the vincent documentation:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://lezli01.is-a.dev/vincent/docs/why/the-terminal-should-not-own-the-work.html" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/docs/why/the-terminal-should-not-own-the-work.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vincent is an open-source project exploring workflow-driven, human-controlled AI software development.&lt;/p&gt;

&lt;p&gt;I’m curious how other agent frameworks and developer tools approach this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should long-running coding agents belong to the terminal session that launched them, or to a durable orchestration layer behind it?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>Did I Build a Worse LangGraph?</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Thu, 10 Sep 2026 10:22:02 +0000</pubDate>
      <link>https://dev.to/lezli01/did-i-build-a-worse-langgraph-4b8f</link>
      <guid>https://dev.to/lezli01/did-i-build-a-worse-langgraph-4b8f</guid>
      <description>&lt;p&gt;When you build an orchestration tool for AI agents, there is an uncomfortable question you eventually have to ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does this need to exist when LangGraph already exists?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I recently tried to answer that question for &lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;vincent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And the answer was not that LangGraph and vincent are completely different.&lt;/p&gt;

&lt;p&gt;They aren't.&lt;/p&gt;

&lt;p&gt;There is substantial overlap.&lt;/p&gt;

&lt;p&gt;Both can coordinate agentic workloads. Both can express structured execution. Both can deal with parallel work, retries, long-running processes, and human checkpoints.&lt;/p&gt;

&lt;p&gt;The real difference is the level of abstraction.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LangGraph orchestrates what an AI agent does.&lt;br&gt;
vincent orchestrates what AI coding agents do to a software project.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction has turned out to be much more important than I originally expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Repository Is Part of the Workflow
&lt;/h2&gt;

&lt;p&gt;In a typical agent orchestration system, the central abstraction is application state.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state
  ↓
node
  ↓
new state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For software-development automation, there is another extremely important piece of state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A coding agent does not merely return structured output.&lt;/p&gt;

&lt;p&gt;It modifies files.&lt;/p&gt;

&lt;p&gt;Those files live inside Git repositories.&lt;/p&gt;

&lt;p&gt;Changes may need to happen in isolated worktrees.&lt;/p&gt;

&lt;p&gt;Parallel agents may produce separate branches.&lt;/p&gt;

&lt;p&gt;Results may need to pass deterministic verification.&lt;/p&gt;

&lt;p&gt;A human may need to approve them.&lt;/p&gt;

&lt;p&gt;Eventually, those branches may need to merge.&lt;/p&gt;

&lt;p&gt;And that merge may fail.&lt;/p&gt;

&lt;p&gt;In vincent, those are not just implementation details around the agent.&lt;/p&gt;

&lt;p&gt;They are part of the orchestration model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parallelism Means Something Different
&lt;/h2&gt;

&lt;p&gt;Consider a fan-out workflow.&lt;/p&gt;

&lt;p&gt;In a general-purpose agent graph, several nodes may execute independently and later combine their resulting state.&lt;/p&gt;

&lt;p&gt;For coding agents, parallelism can mean something much more concrete:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main
├── agent-a branch
├── agent-b branch
└── agent-c branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each agent works in an isolated repository state.&lt;/p&gt;

&lt;p&gt;The join is no longer only about combining application data.&lt;/p&gt;

&lt;p&gt;It can literally mean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And therefore it can produce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;merge conflict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That changes what the runtime needs to understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Is About Defaults, Not Possibility
&lt;/h2&gt;

&lt;p&gt;An important point in this comparison:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not a capability argument.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can absolutely build repository-aware coding workflows using LangGraph.&lt;/p&gt;

&lt;p&gt;You can put repository paths, commit hashes, branch information, diff metadata, and verification results into graph state.&lt;/p&gt;

&lt;p&gt;You can implement worktree management.&lt;/p&gt;

&lt;p&gt;You can implement merge semantics.&lt;/p&gt;

&lt;p&gt;You can build approval gates.&lt;/p&gt;

&lt;p&gt;You can integrate coding agents.&lt;/p&gt;

&lt;p&gt;The difference is not what is possible.&lt;/p&gt;

&lt;p&gt;The difference is what the runtime treats as a &lt;strong&gt;first-class concept&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;LangGraph deliberately provides flexible, low-level orchestration primitives.&lt;/p&gt;

&lt;p&gt;vincent deliberately provides opinionated software-development primitives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Being Opinionated Has a Cost
&lt;/h2&gt;

&lt;p&gt;That specialization is not universally better.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;LangGraph can be used to build an enormous variety of agent systems.&lt;/p&gt;

&lt;p&gt;vincent intentionally has a much narrower domain.&lt;/p&gt;

&lt;p&gt;Its workflows revolve around concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repositories&lt;/li&gt;
&lt;li&gt;coding agents&lt;/li&gt;
&lt;li&gt;commands&lt;/li&gt;
&lt;li&gt;checks&lt;/li&gt;
&lt;li&gt;worktrees&lt;/li&gt;
&lt;li&gt;branches&lt;/li&gt;
&lt;li&gt;approvals&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;merging&lt;/li&gt;
&lt;li&gt;software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your problem has nothing to do with software-development automation, vincent is probably the wrong abstraction.&lt;/p&gt;

&lt;p&gt;That is the tradeoff.&lt;/p&gt;

&lt;p&gt;Generality gives you flexibility.&lt;/p&gt;

&lt;p&gt;Opinionated semantics give you stronger defaults.&lt;/p&gt;

&lt;h2&gt;
  
  
  They Can Also Work Together
&lt;/h2&gt;

&lt;p&gt;The comparison becomes even more interesting when you stop thinking about the projects as mutually exclusive.&lt;/p&gt;

&lt;p&gt;A sophisticated architecture could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vincent
   ↓
coding workflow
   ↓
custom agent
   ↓
LangGraph
   ↓
reasoning / retrieval / tools / memory
   ↓
repository changes
   ↓
vincent verification / approval / merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LangGraph could power the intelligence inside an agent.&lt;/p&gt;

&lt;p&gt;vincent could govern how that agent is allowed to operate against a real software project.&lt;/p&gt;

&lt;p&gt;Those are different responsibilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Comparison
&lt;/h2&gt;

&lt;p&gt;I wrote a more detailed breakdown covering the architectural overlap, repository semantics, fan-out/fan-in behavior, human control, durability, and the tradeoffs of an opinionated coding-agent runtime.&lt;/p&gt;

&lt;p&gt;You can read it here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/langgraph-vs-vincent/" rel="noopener noreferrer"&gt;LangGraph vs vincent: generic graph primitives against an opinionated coding-agent runtime&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd be very interested to hear how others building coding agents, AI development platforms, or LangGraph-based systems think about this separation.&lt;/p&gt;

&lt;p&gt;Is repository-aware orchestration something that should live inside the agent framework itself?&lt;/p&gt;

&lt;p&gt;Or does it make sense as a separate layer?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>opensource</category>
      <category>agentaichallenge</category>
    </item>
    <item>
      <title>Automation Without Giving Up Control — or Your Profession</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Wed, 09 Sep 2026 17:53:39 +0000</pubDate>
      <link>https://dev.to/lezli01/automation-without-giving-up-control-or-your-profession-21fg</link>
      <guid>https://dev.to/lezli01/automation-without-giving-up-control-or-your-profession-21fg</guid>
      <description>&lt;p&gt;There is a recurring fear around AI and agentic automation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If agents can eventually do most of the work, what is left for us?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think this question starts from the wrong assumption.&lt;/p&gt;

&lt;p&gt;It treats professional work as if its value comes primarily from &lt;strong&gt;performing individual steps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Write this code.&lt;br&gt;
Run this command.&lt;br&gt;
Check this test.&lt;br&gt;
Create this pull request.&lt;br&gt;
Deploy this service.&lt;/p&gt;

&lt;p&gt;But those steps have never been the whole profession.&lt;/p&gt;

&lt;p&gt;The real value comes from knowing &lt;strong&gt;why those steps should happen, what good looks like, which trade-offs are acceptable, and when the result is safe to ship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agentic automation doesn't necessarily remove that responsibility.&lt;/p&gt;

&lt;p&gt;It can actually make it more visible.&lt;/p&gt;


&lt;h2&gt;
  
  
  Automation changes where your skills are applied
&lt;/h2&gt;

&lt;p&gt;Imagine an experienced software engineer using an agentic workflow.&lt;/p&gt;

&lt;p&gt;The agent may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create an isolated worktree&lt;/li&gt;
&lt;li&gt;inspect the codebase&lt;/li&gt;
&lt;li&gt;implement a change&lt;/li&gt;
&lt;li&gt;add or modify tests&lt;/li&gt;
&lt;li&gt;run the test suite&lt;/li&gt;
&lt;li&gt;format the code&lt;/li&gt;
&lt;li&gt;analyze failures&lt;/li&gt;
&lt;li&gt;iterate on the implementation&lt;/li&gt;
&lt;li&gt;prepare the result for review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A significant amount of traditional implementation work can happen automatically.&lt;/p&gt;

&lt;p&gt;At first glance, that sounds like the engineer is being removed from the process.&lt;/p&gt;

&lt;p&gt;But look at what the workflow still depends on.&lt;/p&gt;

&lt;p&gt;Someone needs to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What problem are we solving?&lt;/li&gt;
&lt;li&gt;Is this actually the right problem?&lt;/li&gt;
&lt;li&gt;What architectural constraints apply?&lt;/li&gt;
&lt;li&gt;What should the agent be allowed to change?&lt;/li&gt;
&lt;li&gt;Which existing behavior must remain compatible?&lt;/li&gt;
&lt;li&gt;What level of test coverage is sufficient?&lt;/li&gt;
&lt;li&gt;Which trade-offs are acceptable?&lt;/li&gt;
&lt;li&gt;What risks deserve additional review?&lt;/li&gt;
&lt;li&gt;Is the resulting implementation maintainable?&lt;/li&gt;
&lt;li&gt;Should this change actually reach production?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those aren't incidental details.&lt;/p&gt;

&lt;p&gt;They determine whether the automated work produces something valuable or merely produces &lt;strong&gt;something&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Execution is not ownership
&lt;/h2&gt;

&lt;p&gt;This distinction becomes increasingly important as agents become more capable.&lt;/p&gt;

&lt;p&gt;An agent can execute a task.&lt;/p&gt;

&lt;p&gt;That does not mean the agent owns the outcome.&lt;/p&gt;

&lt;p&gt;A compiler can compile bad architecture.&lt;/p&gt;

&lt;p&gt;A CI pipeline can successfully validate the wrong feature.&lt;/p&gt;

&lt;p&gt;An automated deployment system can deploy a perfectly functioning implementation of a bad product decision.&lt;/p&gt;

&lt;p&gt;AI doesn't fundamentally change this.&lt;/p&gt;

&lt;p&gt;It just increases the amount of execution we can delegate.&lt;/p&gt;

&lt;p&gt;The professional still owns the context around that execution.&lt;/p&gt;

&lt;p&gt;And that context often requires years of accumulated experience.&lt;/p&gt;


&lt;h2&gt;
  
  
  The engineer doesn't disappear. The engineer moves up a level.
&lt;/h2&gt;

&lt;p&gt;For a long time, automation has pushed engineering work upward.&lt;/p&gt;

&lt;p&gt;We stopped manually writing machine instructions.&lt;/p&gt;

&lt;p&gt;We stopped managing memory addresses for most applications.&lt;/p&gt;

&lt;p&gt;We stopped manually provisioning every server.&lt;/p&gt;

&lt;p&gt;We stopped copying binaries onto production machines.&lt;/p&gt;

&lt;p&gt;We automated builds.&lt;/p&gt;

&lt;p&gt;We automated tests.&lt;/p&gt;

&lt;p&gt;We automated infrastructure.&lt;/p&gt;

&lt;p&gt;We automated deployment.&lt;/p&gt;

&lt;p&gt;And software engineering did not disappear.&lt;/p&gt;

&lt;p&gt;Instead, the abstraction level moved.&lt;/p&gt;

&lt;p&gt;Agentic development is another step in that direction.&lt;/p&gt;

&lt;p&gt;If an agent can handle more of the implementation loop, the engineer can spend more attention on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How should the system evolve?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product understanding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What actually creates value for the user?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constraints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What must never be violated?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What could go wrong, and how serious would it be?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How do we know the result is actually correct?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What should happen next?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When is the machine technically successful but professionally wrong?&lt;/p&gt;

&lt;p&gt;These are not secondary skills.&lt;/p&gt;

&lt;p&gt;They increasingly become the job.&lt;/p&gt;


&lt;h2&gt;
  
  
  Full automation does not have to mean zero control
&lt;/h2&gt;

&lt;p&gt;There is another false choice hidden in many conversations about AI automation.&lt;/p&gt;

&lt;p&gt;Either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a human supervises every individual step, or&lt;/li&gt;
&lt;li&gt;the agent receives complete autonomy and we accept whatever happens.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Neither model is particularly attractive.&lt;/p&gt;

&lt;p&gt;If I have to approve every command, I haven't automated much.&lt;/p&gt;

&lt;p&gt;But if the system can freely publish packages, merge code, deploy services, or modify external systems without meaningful boundaries, I've probably automated too much.&lt;/p&gt;

&lt;p&gt;There is a better model.&lt;/p&gt;

&lt;p&gt;Automate aggressively &lt;strong&gt;inside well-defined boundaries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then require human judgment when crossing the boundaries that matter.&lt;/p&gt;


&lt;h2&gt;
  
  
  Execution permission is not delivery authorization
&lt;/h2&gt;

&lt;p&gt;This is a principle I've been thinking about while building &lt;a href="https://lezli01.is-a.dev/vincent/" rel="noopener noreferrer"&gt;vincent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An agent may need considerable freedom while working on a task.&lt;/p&gt;

&lt;p&gt;For example, inside an isolated worktree it may be perfectly reasonable to allow it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;edit files
run commands
execute tests
retry failed approaches
generate artifacts
inspect diffs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requiring approval after every action would destroy much of the value of agentic automation.&lt;/p&gt;

&lt;p&gt;But that doesn't mean the same agent automatically receives permission to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;merge the pull request
publish the package
deploy to production
close the issue
release the artifact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are different permissions.&lt;/p&gt;

&lt;p&gt;I think of it as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Execution permission != delivery authorization&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can be trusted to explore and execute within the task while the professional retains authority over whether the outcome crosses an important external boundary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Human gates should be part of the workflow
&lt;/h2&gt;

&lt;p&gt;This is why vincent has explicit manual steps.&lt;/p&gt;

&lt;p&gt;A workflow can execute automatically until it reaches a meaningful decision point.&lt;/p&gt;

&lt;p&gt;At that point it pauses.&lt;/p&gt;

&lt;p&gt;The state of the task remains available for inspection: the branch, worktree, results, transcripts, and diff.&lt;/p&gt;

&lt;p&gt;The professional can then decide whether to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approve and continue&lt;/li&gt;
&lt;li&gt;reject the result&lt;/li&gt;
&lt;li&gt;skip the action where appropriate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that the approval isn't an informal convention.&lt;/p&gt;

&lt;p&gt;It is part of the executable workflow.&lt;/p&gt;

&lt;p&gt;For example, conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;implement-feature&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet test&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;manual&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Review the implementation before creating the PR&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-pull-request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything before the gate can run efficiently.&lt;/p&gt;

&lt;p&gt;But the action that changes the outside world requires a deliberate decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where you put the human matters
&lt;/h2&gt;

&lt;p&gt;Simply saying &lt;em&gt;"a human reviews AI-generated code"&lt;/em&gt; isn't enough.&lt;/p&gt;

&lt;p&gt;Review timing matters.&lt;/p&gt;

&lt;p&gt;Consider this workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agent writes code
↓
tests run
↓
PR created
↓
package published
↓
deployment starts
↓
human reviews eventually
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Technically, there is a human in the loop.&lt;/p&gt;

&lt;p&gt;Practically, there isn't much control.&lt;/p&gt;

&lt;p&gt;Compare it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agent writes code
↓
tests run
↓
results collected
↓
HUMAN DECISION
↓
PR / publish / deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the approval has meaning.&lt;/p&gt;

&lt;p&gt;It defines a clear boundary:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everything before this point may happen automatically. Crossing this point requires authorization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is much stronger than relying on someone to notice afterwards that automation made a poor decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Expertise becomes the input to automation
&lt;/h2&gt;

&lt;p&gt;There is another reason I don't believe agentic development automatically devalues experienced professionals.&lt;/p&gt;

&lt;p&gt;Good automation is built from expertise.&lt;/p&gt;

&lt;p&gt;Consider two engineers asking an agent to implement the same feature.&lt;/p&gt;

&lt;p&gt;One says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement feature X.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The other provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;relevant architecture&lt;/li&gt;
&lt;li&gt;domain constraints&lt;/li&gt;
&lt;li&gt;compatibility requirements&lt;/li&gt;
&lt;li&gt;testing expectations&lt;/li&gt;
&lt;li&gt;security boundaries&lt;/li&gt;
&lt;li&gt;expected failure modes&lt;/li&gt;
&lt;li&gt;performance constraints&lt;/li&gt;
&lt;li&gt;acceptance criteria&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They may technically be using the same model.&lt;/p&gt;

&lt;p&gt;They are not going to get the same result.&lt;/p&gt;

&lt;p&gt;The quality of agentic work depends heavily on the quality of the environment, constraints, workflow, evaluation, and decisions surrounding the agent.&lt;/p&gt;

&lt;p&gt;And creating those things requires understanding the profession.&lt;/p&gt;




&lt;h2&gt;
  
  
  The valuable skill is increasingly knowing what to automate
&lt;/h2&gt;

&lt;p&gt;There is an interesting inversion happening.&lt;/p&gt;

&lt;p&gt;Previously, professional expertise was mostly demonstrated by performing difficult work yourself.&lt;/p&gt;

&lt;p&gt;Increasingly, another form of expertise is becoming important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Knowing which parts you no longer need to perform manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means recognizing repetitive processes.&lt;/p&gt;

&lt;p&gt;Turning implicit knowledge into explicit constraints.&lt;/p&gt;

&lt;p&gt;Building reliable verification.&lt;/p&gt;

&lt;p&gt;Separating reversible actions from dangerous ones.&lt;/p&gt;

&lt;p&gt;Designing useful approval boundaries.&lt;/p&gt;

&lt;p&gt;Creating workflows that can fail safely.&lt;/p&gt;

&lt;p&gt;Giving agents enough autonomy to be useful without giving them authority they don't need.&lt;/p&gt;

&lt;p&gt;That is engineering too.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automation should amplify expertise, not erase it
&lt;/h2&gt;

&lt;p&gt;I don't want an AI agent that needs me to press &lt;strong&gt;Continue&lt;/strong&gt; every 30 seconds.&lt;/p&gt;

&lt;p&gt;That isn't meaningful automation.&lt;/p&gt;

&lt;p&gt;I also don't want an AI agent making every consequential decision simply because it technically can.&lt;/p&gt;

&lt;p&gt;The useful space lies between those extremes.&lt;/p&gt;

&lt;p&gt;Let agents do what machines are increasingly good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repetition&lt;/li&gt;
&lt;li&gt;exploration&lt;/li&gt;
&lt;li&gt;execution&lt;/li&gt;
&lt;li&gt;iteration&lt;/li&gt;
&lt;li&gt;mechanical verification&lt;/li&gt;
&lt;li&gt;information gathering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And let professionals concentrate on what expertise is particularly valuable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;intention&lt;/li&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;judgment&lt;/li&gt;
&lt;li&gt;trade-offs&lt;/li&gt;
&lt;li&gt;risk&lt;/li&gt;
&lt;li&gt;quality&lt;/li&gt;
&lt;li&gt;accountability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to keep humans artificially busy.&lt;/p&gt;

&lt;p&gt;It's to make sure human attention is spent where it has the highest value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Our profession will change
&lt;/h2&gt;

&lt;p&gt;I don't think software engineering ten years from now will look exactly like software engineering today.&lt;/p&gt;

&lt;p&gt;It shouldn't.&lt;/p&gt;

&lt;p&gt;Our profession has always changed as our tools improved.&lt;/p&gt;

&lt;p&gt;Some tasks we currently consider fundamental may become almost entirely automated.&lt;/p&gt;

&lt;p&gt;Other skills will become far more important.&lt;/p&gt;

&lt;p&gt;We may spend less time writing individual implementations and more time designing systems in which implementations can be generated, evaluated, rejected, improved, and safely delivered.&lt;/p&gt;

&lt;p&gt;But that is not the same thing as giving up the profession.&lt;/p&gt;

&lt;p&gt;It is the profession evolving.&lt;/p&gt;

&lt;p&gt;The engineer who understands the system, defines the boundaries, evaluates the result, and owns the outcome still matters enormously.&lt;/p&gt;

&lt;p&gt;Perhaps more than ever.&lt;/p&gt;




&lt;h2&gt;
  
  
  The point is not to stay in the loop everywhere
&lt;/h2&gt;

&lt;p&gt;It's to stay in the loop &lt;strong&gt;where your judgment matters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's the philosophy I'm trying to apply while building &lt;a href="https://lezli01.is-a.dev/vincent/" rel="noopener noreferrer"&gt;vincent&lt;/a&gt;: automate repeatable agentic workloads without forcing professionals to surrender control over their outcomes.&lt;/p&gt;

&lt;p&gt;Agents can execute.&lt;/p&gt;

&lt;p&gt;Automation can orchestrate.&lt;/p&gt;

&lt;p&gt;But professionals still decide what success means.&lt;/p&gt;

&lt;p&gt;And ultimately, that decision determines the outcome.&lt;/p&gt;




&lt;p&gt;If you're interested in the implementation side of this idea, I wrote a shorter piece in the vincent documentation about explicit approval gates and separating execution permission from delivery authorization:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://lezli01.is-a.dev/vincent/docs/why/automation-without-giving-up-control.html" rel="noopener noreferrer"&gt;Automation without giving up control&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're interested in vincent itself:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://lezli01.is-a.dev/vincent/" rel="noopener noreferrer"&gt;vincent — durable local orchestration for agentic development&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>softwaredevelopment</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🔥 HotRulez just passed 1,000 downloads</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Mon, 07 Sep 2026 06:34:39 +0000</pubDate>
      <link>https://dev.to/lezli01/hotrulez-just-passed-1000-downloads-308d</link>
      <guid>https://dev.to/lezli01/hotrulez-just-passed-1000-downloads-308d</guid>
      <description>&lt;p&gt;HotRulez has officially passed &lt;strong&gt;1,000 downloads on the JetBrains Marketplace&lt;/strong&gt;. 🎉&lt;/p&gt;

&lt;p&gt;I originally built it for a very simple reason:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I wanted proper tooling for Firebase Security Rules in my IDE, but every option I found was paid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built my own — and released it &lt;strong&gt;free and open source under the MIT license&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;HotRulez adds proper &lt;code&gt;.rules&lt;/code&gt; file support to JetBrains IDEs, including Android Studio and IntelliJ IDEA.&lt;/p&gt;

&lt;p&gt;Some of the features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔥 Syntax highlighting&lt;/li&gt;
&lt;li&gt;🧹 Formatting&lt;/li&gt;
&lt;li&gt;🔎 Structural diagnostics&lt;/li&gt;
&lt;li&gt;🧭 Symbol resolution and navigation&lt;/li&gt;
&lt;li&gt;📚 Quick documentation&lt;/li&gt;
&lt;li&gt;🧱 Structure view and code folding&lt;/li&gt;
&lt;li&gt;💡 Quick fixes and member inspections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Roughly two months after its first Marketplace release, the download counter crossed &lt;strong&gt;1,000&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's obviously a small number compared with huge developer tools, but for a niche plugin I originally created because &lt;em&gt;I personally wanted it to exist&lt;/em&gt;, it means a lot.&lt;/p&gt;

&lt;p&gt;More importantly, downloads continued growing after the initial launch traffic disappeared.&lt;/p&gt;

&lt;p&gt;That tells me something I find much more interesting than the number itself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other developers had the same problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wrote more about the milestone, what HotRulez supports today, and what I've learned from seeing people actually use it:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://blog.lezli01.is-a.dev/blog/hotrulez-1000-downloads/" rel="noopener noreferrer"&gt;HotRulez crossed 1,000 downloads — and I'm pretty proud of that&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HotRulez is open source, and feedback and contributions are always welcome.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>firebase</category>
      <category>jetbrains</category>
      <category>androidstudio</category>
    </item>
    <item>
      <title>Resolving one GitHub issue as a DAG of parallel AI agents</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Sun, 06 Sep 2026 12:58:06 +0000</pubDate>
      <link>https://dev.to/lezli01/resolving-one-github-issue-as-a-dag-of-parallel-ai-agents-34ic</link>
      <guid>https://dev.to/lezli01/resolving-one-github-issue-as-a-dag-of-parallel-ai-agents-34ic</guid>
      <description>&lt;p&gt;One AI coding agent is still fundamentally sequential.&lt;/p&gt;

&lt;p&gt;It reads something, changes something, runs a test, reacts to the result, and moves to the next piece of work.&lt;/p&gt;

&lt;p&gt;Giving it more tokens doesn't change that execution model.&lt;/p&gt;

&lt;p&gt;With vincent 0.8.0, I wanted to explore a different approach: &lt;strong&gt;split an issue into a dependency graph of work units and let independent agents execute those units concurrently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nodes are implementation units&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;needs&lt;/code&gt; edges describe real dependencies&lt;/li&gt;
&lt;li&gt;independent nodes can run in parallel&lt;/li&gt;
&lt;li&gt;each unit gets its own branch and worktree&lt;/li&gt;
&lt;li&gt;dependent units start from a branch that already contains their dependencies&lt;/li&gt;
&lt;li&gt;an integration step validates the combined result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve now been running this workflow against vincent itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real run
&lt;/h2&gt;

&lt;p&gt;Issue #324 was decomposed into three units across two waves.&lt;/p&gt;

&lt;p&gt;Wave 1 produced a dependency required by the remaining work.&lt;/p&gt;

&lt;p&gt;Wave 2 then ran two independent implementation lanes concurrently.&lt;/p&gt;

&lt;p&gt;Their individual coding times were roughly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4m18s&lt;/li&gt;
&lt;li&gt;10m22s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sequentially: ~14m40s.&lt;/p&gt;

&lt;p&gt;As one parallel wave: ~10m22s.&lt;/p&gt;

&lt;p&gt;So this particular run saved around four minutes.&lt;/p&gt;

&lt;p&gt;That number isn't spectacular, and I don't want to pretend it is.&lt;/p&gt;

&lt;p&gt;What's more interesting is the scaling property:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the floor becomes the longest dependency chain through the graph rather than the sum of all independent work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are costs, of course.&lt;/p&gt;

&lt;p&gt;More parallel lanes mean more agent sessions, more worktrees, more merges, and more opportunities for integration problems. The article goes into those trade-offs as well as how vincent constrains lanes to avoid agents modifying overlapping files.&lt;/p&gt;

&lt;p&gt;I also found something counterintuitive while testing the scheduler.&lt;/p&gt;

&lt;p&gt;vincent supports both &lt;code&gt;barrier&lt;/code&gt; and &lt;code&gt;eager&lt;/code&gt; DAG scheduling.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;eager&lt;/code&gt; sounds obviously better because dependent work can start as soon as its own dependencies finish.&lt;/p&gt;

&lt;p&gt;But across the real workflows I've run so far, it saved &lt;strong&gt;zero additional time&lt;/strong&gt; compared with &lt;code&gt;barrier&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;What it did sacrifice was reproducibility: an eagerly scheduled lane can start from a different branch state depending on timing.&lt;/p&gt;

&lt;p&gt;For agent-generated code, that's a meaningful debugging cost.&lt;/p&gt;

&lt;p&gt;My takeaway so far:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get the graph right first. The scheduler is the last thing to optimize.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wrote up the implementation, actual workflow, real timings, costs, failure modes, and the lessons from running it on vincent itself:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/vincent-dag-workflows/#two-waves-on-a-real-issue" rel="noopener noreferrer"&gt;https://blog.lezli01.is-a.dev/blog/vincent-dag-workflows/#two-waves-on-a-real-issue&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>community</category>
    </item>
    <item>
      <title>vincent v0.8.0: From Agent Conversations to Durable Workflows</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Sun, 06 Sep 2026 11:59:23 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-v080-from-agent-conversations-to-durable-workflows-501b</link>
      <guid>https://dev.to/lezli01/vincent-v080-from-agent-conversations-to-durable-workflows-501b</guid>
      <description>&lt;p&gt;I've released &lt;strong&gt;vincent v0.8.0&lt;/strong&gt;, and this release pushes the project much further toward the workflow I've wanted from coding agents from the beginning:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;explore conversationally, then turn that work into controlled and repeatable execution.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chat first. Workflow when you're ready.
&lt;/h2&gt;

&lt;p&gt;One of the biggest additions is &lt;strong&gt;free chat&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;vincent can now maintain conversational coding sessions with Claude, Codex and Cursor, each running against its own Git worktree and branch.&lt;/p&gt;

&lt;p&gt;But the important part isn't simply having another chat interface.&lt;/p&gt;

&lt;p&gt;A chat can now be &lt;strong&gt;handed off directly to a task&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The task adopts the same worktree, branch, base revision and existing changes. Nothing needs to be copied or recreated.&lt;/p&gt;

&lt;p&gt;That means you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explore a problem interactively with an agent.&lt;/li&gt;
&lt;li&gt;Inspect or modify the result.&lt;/li&gt;
&lt;li&gt;Decide that the direction is worth pursuing.&lt;/li&gt;
&lt;li&gt;Hand the existing workspace to a structured vincent workflow.&lt;/li&gt;
&lt;li&gt;Let deterministic commands, agents, checks, gates and fan-out take over.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That transition between exploration and orchestration has been one of the missing pieces in agentic development for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fan-out is becoming a real execution graph
&lt;/h2&gt;

&lt;p&gt;v0.8.0 also significantly expands parallel agent workloads.&lt;/p&gt;

&lt;p&gt;Fan-out lanes can now depend on sibling lanes using &lt;code&gt;needs:&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;They can also be &lt;strong&gt;derived dynamically at runtime&lt;/strong&gt;, allowing a planning step to decide what work should exist rather than requiring the complete graph to be hard-coded in advance.&lt;/p&gt;

&lt;p&gt;And with &lt;code&gt;schedule: eager&lt;/code&gt;, dependent work can start as soon as its actual dependencies have completed instead of waiting for every unrelated lane in the current round.&lt;/p&gt;

&lt;p&gt;This makes workflows such as:&lt;/p&gt;

&lt;p&gt;planning → parallel implementation → dependent implementation → integration&lt;/p&gt;

&lt;p&gt;much more natural to express.&lt;/p&gt;

&lt;p&gt;Importantly, barrier scheduling remains the default because eager scheduling intentionally trades some reproducibility for throughput.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better observability
&lt;/h2&gt;

&lt;p&gt;Agent orchestration becomes difficult very quickly if you can't answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did the agent actually receive?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;v0.8.0 adds a new &lt;strong&gt;Step Details&lt;/strong&gt; view that records the resolved execution context at the time the step runs.&lt;/p&gt;

&lt;p&gt;That includes things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the fully rendered prompt or command&lt;/li&gt;
&lt;li&gt;agent, model and effort resolution&lt;/li&gt;
&lt;li&gt;permission mode&lt;/li&gt;
&lt;li&gt;timeouts&lt;/li&gt;
&lt;li&gt;loop and fan-out context&lt;/li&gt;
&lt;li&gt;rendered conditions&lt;/li&gt;
&lt;li&gt;token usage&lt;/li&gt;
&lt;li&gt;cost&lt;/li&gt;
&lt;li&gt;duration&lt;/li&gt;
&lt;li&gt;exit codes&lt;/li&gt;
&lt;li&gt;failure reasons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information is recorded when execution happens instead of being reconstructed later from configuration that may already have changed.&lt;/p&gt;

&lt;p&gt;For debugging non-deterministic workflows, that distinction matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Containers, GitHub and workflow authoring
&lt;/h2&gt;

&lt;p&gt;There is quite a bit more in this release.&lt;/p&gt;

&lt;p&gt;Task command/check steps can now execute inside task-scoped containers.&lt;/p&gt;

&lt;p&gt;vincent can create GitHub pull requests directly from completed work and display live CI checks inside the task workspace.&lt;/p&gt;

&lt;p&gt;The TUI workflow editor has grown from editing a subset of workflow properties into a much more complete structured editor, including nested fan-out lanes, defaults, fields and control-flow settings.&lt;/p&gt;

&lt;p&gt;Daemon configuration can also be inspected and edited through the API, CLI and TUI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better everyday interaction
&lt;/h2&gt;

&lt;p&gt;A large amount of work also went into making vincent nicer to actually use every day.&lt;/p&gt;

&lt;p&gt;Assistant output now has richer Markdown rendering, including tables, links and highlighted code blocks.&lt;/p&gt;

&lt;p&gt;There is a raw/rendered toggle and better copy support.&lt;/p&gt;

&lt;p&gt;Chat scrolling and navigation have improved.&lt;/p&gt;

&lt;p&gt;And there's now a &lt;code&gt;quiet&lt;/code&gt; output level for the times when you want to read the conversation rather than every tool invocation behind it.&lt;/p&gt;

&lt;p&gt;vincent can also surface real usage quota windows from Codex and Claude Code where those CLIs make the information available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where vincent is heading
&lt;/h2&gt;

&lt;p&gt;The individual features are useful, but v0.8.0 is really about the direction of the project.&lt;/p&gt;

&lt;p&gt;I don't think agentic software development should be reduced to repeatedly opening a coding agent and writing increasingly elaborate prompts.&lt;/p&gt;

&lt;p&gt;There should be a layer around those agents that understands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;execution&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;li&gt;human gates&lt;/li&gt;
&lt;li&gt;Git state&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;failures&lt;/li&gt;
&lt;li&gt;costs&lt;/li&gt;
&lt;li&gt;provenance&lt;/li&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;li&gt;recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while still leaving room for the interactive conversation that makes coding agents so useful in the first place.&lt;/p&gt;

&lt;p&gt;That's the problem I'm trying to solve with &lt;strong&gt;vincent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The complete v0.8.0 release notes are here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lezli01.is-a.dev/vincent/changelog.html" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/changelog.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd especially love feedback from people already using coding agents for workflows that go beyond a single interactive session.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>coding</category>
      <category>git</category>
    </item>
  </channel>
</rss>
