<?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: Võ Vương Thành Đạt</title>
    <description>The latest articles on DEV Community by Võ Vương Thành Đạt (@vovuongthanhdat).</description>
    <link>https://dev.to/vovuongthanhdat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1124756%2F9c354a1d-d2f7-4780-a3de-3eb9e0894996.png</url>
      <title>DEV Community: Võ Vương Thành Đạt</title>
      <link>https://dev.to/vovuongthanhdat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vovuongthanhdat"/>
    <language>en</language>
    <item>
      <title>From Spec to PR: agentflow's Dynamic Multi-Agent Workflow for Claude Code</title>
      <dc:creator>Võ Vương Thành Đạt</dc:creator>
      <pubDate>Mon, 01 Jun 2026 14:10:40 +0000</pubDate>
      <link>https://dev.to/vovuongthanhdat/from-spec-to-pr-agentflows-dynamic-multi-agent-workflow-for-claude-code-404h</link>
      <guid>https://dev.to/vovuongthanhdat/from-spec-to-pr-agentflows-dynamic-multi-agent-workflow-for-claude-code-404h</guid>
      <description>&lt;blockquote&gt;
&lt;h3&gt;
  
  
  🚀 TL;DR
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/VoVuongThanhDat/agentflow" rel="noopener noreferrer"&gt;&lt;strong&gt;agentflow&lt;/strong&gt;&lt;/a&gt; turns Claude Code into a coordinated team of specialized agents. A feature request flows through a fixed pipeline —&lt;br&gt;
&lt;strong&gt;&lt;code&gt;BA → branch → plan → implement → review → verify → test → ship&lt;/code&gt;&lt;/strong&gt; —&lt;br&gt;
where the slow multi-agent middle runs as &lt;strong&gt;one dynamic workflow&lt;/strong&gt; that decomposes the work into file-disjoint waves and fans agents over it in parallel. A human only steps in at &lt;strong&gt;two points&lt;/strong&gt;: approving the spec, and approving the push.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📑 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The problem with "one big agent"&lt;/li&gt;
&lt;li&gt;The shape of it&lt;/li&gt;
&lt;li&gt;Two halves: planning &amp;amp; execution&lt;/li&gt;
&lt;li&gt;Inside the workflow: 6 phases&lt;/li&gt;
&lt;li&gt;The gate&lt;/li&gt;
&lt;li&gt;Discipline as a feature&lt;/li&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;Try it&lt;/li&gt;
&lt;li&gt;Why I built it this way&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  😵 The problem with "one big agent"
&lt;/h2&gt;

&lt;p&gt;Most people use AI coding agents the same way: open a chat, describe a feature, and let a single agent run wild across the codebase. It works for toy tasks. It falls apart on real ones.&lt;/p&gt;

&lt;p&gt;You've probably hit all of these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;❌ Symptom&lt;/th&gt;
&lt;th&gt;What actually happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No plan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The agent edits 14 files in random order — and two edits stomp on each other.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No review&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Whatever it writes is whatever ships. Nobody checks for a swallowed exception or a leaked secret.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Done" means "it compiled once on my machine."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No discipline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It refactors code you didn't ask about, deletes "dead" code that wasn't dead, and force-pushes because it felt confident.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The instinct is to write a longer system prompt. But a single context window doing &lt;em&gt;everything&lt;/em&gt; — planning, coding, reviewing, testing, git — is a generalist with no separation of concerns. &lt;strong&gt;The reviewer and the author are the same entity, so the review is theater.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;agentflow takes the opposite bet:&lt;/strong&gt; give each concern its own agent, wire them into a fixed pipeline, and keep humans only at the decision points that actually matter.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🗺️ The shape of it
&lt;/h2&gt;

&lt;p&gt;A feature request flows through this pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  User request
       │
       ▼
  ┌─────────┐   asks questions, writes OpenSpec specs        ⟵ interactive
  │  @ba    │
  └─────────┘
       │
       ▼
  ┌─────────┐   creates feature branch from `dev`            ⟵ interactive
  │ @devops │
  └─────────┘
       │
       ▼
  ┌──────────────────────────────────────────────┐
  │  opsx-feature-core  (background workflow)      │
  │  Plan → Implement → Review → Verify →          │
  │  Critic → Test                                 │
  └──────────────────────────────────────────────┘
       │
       ▼
  ◇ gate: no blocking findings AND tests pass? ◇
       │ no  → surface findings → re-run / fix (max 3 rounds)
       │ yes
       ▼
  user approves push → @devops opens PR → `dev`    ⟵ interactive
       │
       ▼
  📋 report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice where the human is: &lt;strong&gt;at the two ends only.&lt;/strong&gt; You approve the spec, and you approve the push. Everything in between — the tedious, error-prone part — runs autonomously. (A workflow can't pause to ask a question, so the interactive ends live &lt;em&gt;outside&lt;/em&gt; it on purpose.)&lt;/p&gt;

&lt;p&gt;You kick the whole thing off with &lt;strong&gt;one command&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/opsx:feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 Two halves: planning &amp;amp; execution
&lt;/h2&gt;

&lt;p&gt;agentflow pairs two things usually missing from "one big agent" setups.&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ OpenSpec — structured planning
&lt;/h3&gt;

&lt;p&gt;Before any code is written, the &lt;strong&gt;BA agent&lt;/strong&gt; (running on &lt;strong&gt;Opus&lt;/strong&gt;, because requirements gathering is the high-leverage step) asks you 2–3 rounds of questions, reads your codebase, and writes structured artifacts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;openspec/changes/&lt;span class="nt"&gt;&amp;lt;change-id&amp;gt;&lt;/span&gt;/
├── proposal.md   # what &amp;amp; why
├── design.md     # how
├── tasks.md      # the durable checklist  ← source of truth
└── specs/&lt;span class="nt"&gt;&amp;lt;capability&amp;gt;&lt;/span&gt;/spec.md   # delta requirements + scenarios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the &lt;strong&gt;contract&lt;/strong&gt;. The agents downstream don't get to improvise scope — they implement &lt;em&gt;this&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ opsx-feature-core — the execution workflow
&lt;/h3&gt;

&lt;p&gt;The heart of agentflow: a single &lt;a href="https://claude.com/claude-code" rel="noopener noreferrer"&gt;Claude Code workflow&lt;/a&gt; that automates everything between &lt;em&gt;"specs exist"&lt;/em&gt; and &lt;em&gt;"ready to push."&lt;/em&gt; It runs &lt;strong&gt;six phases&lt;/strong&gt; ↓&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Inside the workflow: 6 phases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;① Plan&lt;/code&gt; — decompose into waves
&lt;/h3&gt;

&lt;p&gt;A &lt;code&gt;dev-lead&lt;/code&gt; agent reads the OpenSpec change and emits a &lt;strong&gt;structured task plan&lt;/strong&gt; (not prose). The key idea is &lt;strong&gt;file-disjoint, dependency-ordered waves&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 Tasks &lt;em&gt;within&lt;/em&gt; a wave touch &lt;strong&gt;disjoint files&lt;/strong&gt; → safe to run &lt;strong&gt;in parallel&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;🔵 Dependent tasks go in a &lt;strong&gt;later wave&lt;/strong&gt; → prerequisites always finish first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plan is forced into a JSON schema so it's machine-consumable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PLAN_SCHEMA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;waves&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ordered waves. Tasks within a wave touch DISJOINT files &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(safe to run in parallel). Dependent tasks go in a later wave.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* tasks: id, title, description, repo, layer, files, commit */&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;waves&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🛠️ &lt;strong&gt;Design note:&lt;/strong&gt; an earlier version routed tasks through an external issue DB (Beads) — the planner &lt;em&gt;imported&lt;/em&gt; tasks, then DEV agents &lt;em&gt;pulled&lt;/em&gt; them back out. Slow, and a dependency on the critical path. Now the planner emits tasks as structured output and the workflow &lt;strong&gt;fans agents over it directly, in memory.&lt;/strong&gt; No external DB blocks the build.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;② Implement&lt;/code&gt; — parallel DEV agents per wave
&lt;/h3&gt;

&lt;p&gt;For each wave, &lt;code&gt;dev-be&lt;/code&gt; (Python/FastAPI) and &lt;code&gt;dev-fe&lt;/code&gt; (React/Vite) pick up their tasks &lt;strong&gt;in parallel&lt;/strong&gt; — safe, because the planner guaranteed disjoint files. Each task is self-contained; DEV agents never re-read the full spec. They commit on the branch. &lt;strong&gt;They never push.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⏱️ Waves run sequentially; tasks within a wave run concurrently. Wall-clock cost ≈ &lt;em&gt;number of waves&lt;/em&gt;, not &lt;em&gt;number of tasks&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;③ Review&lt;/code&gt; — four specialists fan out
&lt;/h3&gt;

&lt;p&gt;Once the diff exists, four reviewers run &lt;strong&gt;simultaneously&lt;/strong&gt;, each with a narrow mandate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;👀 Reviewer&lt;/th&gt;
&lt;th&gt;Hunts for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;python-reviewer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Python correctness, idioms, type issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;typescript-reviewer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TS/React correctness and patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;security-reviewer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OWASP Top 10, leaked secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;silent-failure-hunter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Swallowed errors, empty &lt;code&gt;catch&lt;/code&gt;, bad fallbacks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;The reviewer is not the author.&lt;/strong&gt; That separation is what makes the review real instead of self-congratulatory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;④ Verify&lt;/code&gt; — adversarial voting
&lt;/h3&gt;

&lt;p&gt;Reviewers produce false positives. So every &lt;strong&gt;CRITICAL/HIGH&lt;/strong&gt; finding is put to a vote: three independent "perspective lenses" judge whether it's real. A finding is &lt;strong&gt;kept only on a ≥ 2/3 vote&lt;/strong&gt; — otherwise dropped as noise. Runs on a cheaper model (focused yes/no, not open-ended analysis).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;⑤ Critic&lt;/code&gt; — completeness check
&lt;/h3&gt;

&lt;p&gt;A completeness critic asks the opposite question: &lt;em&gt;what did the reviewers miss?&lt;/em&gt; It hunts specifically for HIGH/CRITICAL issues that slipped through the four specialists — the "what's &lt;strong&gt;not&lt;/strong&gt; here" pass that single-agent setups never do.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;⑥ Test&lt;/code&gt; — write missing tests, then run them
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;tester&lt;/code&gt; agent writes the unit tests that &lt;em&gt;should&lt;/em&gt; exist for the new code, then runs the full suite. &lt;strong&gt;No green suite, no gate.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚦 The gate, and why it matters
&lt;/h2&gt;

&lt;p&gt;After the workflow runs, there's a hard gate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;blockingFindings&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;   &lt;span class="nx"&gt;AND&lt;/span&gt;   &lt;span class="nx"&gt;tests&lt;/span&gt; &lt;span class="nx"&gt;pass&lt;/span&gt;   &lt;span class="err"&gt;⇒&lt;/span&gt;   &lt;span class="err"&gt;✅&lt;/span&gt; &lt;span class="nx"&gt;ready&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;push&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not, the workflow surfaces the findings and loops — re-running or applying &lt;strong&gt;targeted&lt;/strong&gt; fixes — for up to &lt;strong&gt;3 rounds&lt;/strong&gt; before escalating to you. There is no path where unreviewed, untested code reaches a "ready" state.&lt;/p&gt;

&lt;p&gt;And then it &lt;strong&gt;stops&lt;/strong&gt;. agentflow never pushes or opens a PR on its own. It commits locally and waits. Only after &lt;em&gt;you&lt;/em&gt; approve does the &lt;code&gt;devops&lt;/code&gt; agent push branches and open one PR per repo into &lt;code&gt;dev&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔒 Leaving work local-only is acceptable. Pushing without permission is not.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧱 Discipline as a first-class feature
&lt;/h2&gt;

&lt;p&gt;The part I'm most opinionated about isn't the orchestration — it's the &lt;strong&gt;constraints&lt;/strong&gt;. agentflow bakes in rules that stop agents from doing the annoying things agents do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✂️ &lt;strong&gt;Surgical changes only&lt;/strong&gt; — touch only what the task requires. Don't "improve" adjacent code. Every changed line traces to the task.&lt;/li&gt;
&lt;li&gt;🙋 &lt;strong&gt;Surface, don't assume&lt;/strong&gt; — if a task has multiple interpretations, present them instead of silently picking one.&lt;/li&gt;
&lt;li&gt;🏷️ &lt;strong&gt;Mention dead code, don't delete it&lt;/strong&gt; — unrelated dead code gets flagged, not removed.&lt;/li&gt;
&lt;li&gt;🛑 &lt;strong&gt;Never push without approval&lt;/strong&gt; — full stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These live in a tool-agnostic &lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt; (so Cursor, Aider, or Codex read the same rules), which &lt;strong&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/strong&gt; imports for Claude Code specifically.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎛️ Skills: changing &lt;em&gt;how&lt;/em&gt; agents work
&lt;/h2&gt;

&lt;p&gt;Beyond the agents, agentflow ships &lt;strong&gt;~48 behavioral skills&lt;/strong&gt; — small instruction modules that change &lt;em&gt;how&lt;/em&gt; an agent works rather than &lt;em&gt;what&lt;/em&gt; it does. Each agent loads only what's relevant to its role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧪 &lt;strong&gt;Engineering discipline&lt;/strong&gt; — &lt;code&gt;test-driven-development&lt;/code&gt;, &lt;code&gt;systematic-debugging&lt;/code&gt;, &lt;code&gt;verification-before-completion&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🐍 &lt;strong&gt;Backend&lt;/strong&gt; — &lt;code&gt;python-patterns&lt;/code&gt;, &lt;code&gt;fastapi-templates&lt;/code&gt;, &lt;code&gt;postgres-patterns&lt;/code&gt;, &lt;code&gt;api-design-principles&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;⚛️ &lt;strong&gt;Frontend &amp;amp; design&lt;/strong&gt; — &lt;code&gt;frontend-patterns&lt;/code&gt;, &lt;code&gt;vercel-react-best-practices&lt;/code&gt;, &lt;code&gt;web-design-guidelines&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Review &amp;amp; security&lt;/strong&gt; — &lt;code&gt;requesting-code-review&lt;/code&gt;, &lt;code&gt;security-review&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus &lt;strong&gt;17 single-purpose commands&lt;/strong&gt; — &lt;code&gt;/polish&lt;/code&gt; · &lt;code&gt;/harden&lt;/code&gt; · &lt;code&gt;/audit&lt;/code&gt; · &lt;code&gt;/simplify&lt;/code&gt; · &lt;code&gt;/optimize&lt;/code&gt; and more — for tightening existing UI or code on demand.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Try it in 3 steps
&lt;/h2&gt;

&lt;p&gt;agentflow is a &lt;strong&gt;template&lt;/strong&gt; — nothing is tied to a specific product. You copy it in and replace a handful of placeholders.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone agentflow&lt;/span&gt;
git clone https://github.com/VoVuongThanhDat/agentflow.git

&lt;span class="c"&gt;# 2. Copy the toolkit into your project&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; agentflow/.claude   /path/to/your-project/.claude
&lt;span class="nb"&gt;cp    &lt;/span&gt;agentflow/CLAUDE.md  /path/to/your-project/CLAUDE.md
&lt;span class="nb"&gt;cp    &lt;/span&gt;agentflow/AGENTS.md  /path/to/your-project/AGENTS.md

&lt;span class="c"&gt;# 3. Fill in the Target Repos table + placeholders in AGENTS.md, then:&lt;/span&gt;
&lt;span class="c"&gt;#    /opsx:feature&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;PROJECT_NAME&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;specs-repo&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;backend-repo&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;frontend-repo&amp;gt;&lt;/code&gt;, fill the &lt;strong&gt;Target Repos&lt;/strong&gt; table (one row per repo agents may touch), then run &lt;code&gt;/opsx:feature&lt;/code&gt;, describe what you want, approve the spec, and let the pipeline run. Approve the push when the gate goes green.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧷 &lt;strong&gt;Single repo?&lt;/strong&gt; Treat the specs repo and your code repo as the same directory — the agents handle both layouts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🤔 Why I built it this way
&lt;/h2&gt;

&lt;p&gt;The lesson, for me: &lt;strong&gt;autonomy and control aren't opposites — they're a question of &lt;em&gt;where&lt;/em&gt; you put the human.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Put a human in the middle of every code edit → you've built a slow pair-programmer.&lt;br&gt;
Remove the human entirely → you've built a liability.&lt;/p&gt;

&lt;p&gt;agentflow puts the human at exactly &lt;strong&gt;two points&lt;/strong&gt; — the spec and the push — and makes the machine &lt;em&gt;earn its way&lt;/em&gt; past a real gate in between.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/VoVuongThanhDat/agentflow" rel="noopener noreferrer"&gt;github.com/VoVuongThanhDat/agentflow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧩 Built with &lt;a href="https://github.com/fission-ai/openspec" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt; · &lt;a href="https://skills.sh/obra/superpowers" rel="noopener noreferrer"&gt;Superpowers&lt;/a&gt; · &lt;a href="https://claude.com/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📄 MIT licensed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If you try it, I'd love to hear what your pipeline produced — drop a comment! 👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
