<?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: Akshay Pimprikar</title>
    <description>The latest articles on DEV Community by Akshay Pimprikar (@akshaypimprikar).</description>
    <link>https://dev.to/akshaypimprikar</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%2F4085520%2Fb0dc75d5-dd6f-42b8-acf7-130b77a2c795.png</url>
      <title>DEV Community: Akshay Pimprikar</title>
      <link>https://dev.to/akshaypimprikar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akshaypimprikar"/>
    <language>en</language>
    <item>
      <title>I Built an 8-Agent Pipeline That Ships Real iOS Features. Here's the Part That Actually Works.</title>
      <dc:creator>Akshay Pimprikar</dc:creator>
      <pubDate>Wed, 19 Aug 2026 18:55:13 +0000</pubDate>
      <link>https://dev.to/akshaypimprikar/i-built-an-8-agent-pipeline-that-ships-real-ios-features-heres-the-part-that-actually-works-ocf</link>
      <guid>https://dev.to/akshaypimprikar/i-built-an-8-agent-pipeline-that-ships-real-ios-features-heres-the-part-that-actually-works-ocf</guid>
      <description>&lt;p&gt;Multi-agent systems fail 41-86% of the time across common frameworks. That's not a hot take, it's the finding from the MAST study, which analyzed 1,642 real multi-agent execution traces and found 32.3% of failures came from inter-agent misalignment, not model quality. A separate 2025 study found unstructured agent networks amplify errors up to 17x over single-agent baselines.&lt;/p&gt;

&lt;p&gt;So when I set out to build a pipeline where Claude Code owns the full SDLC of an iOS app, spec through merged, tagged release, I started from that failure data, not from "let's see what the model can do."&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Pragma is a set of Claude Code slash commands that take an iOS feature from idea to production:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwl1yvgxb2o7c394u39gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwl1yvgxb2o7c394u39gl.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Human approval happens at exactly two points: after &lt;code&gt;/spec&lt;/code&gt; and after &lt;code&gt;/plan&lt;/code&gt;. Every other stage runs as an agent. &lt;code&gt;/feature&lt;/code&gt; implements task by task with strict TDD (write the failing test, confirm it fails for the right reason, implement, run the full suite, commit). &lt;code&gt;/gates&lt;/code&gt; verifies build, tests, and architecture compliance before a PR opens. &lt;code&gt;/review&lt;/code&gt; and &lt;code&gt;/test&lt;/code&gt; run after the PR is up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that matters: enforcement doesn't trust the agent's self-report
&lt;/h2&gt;

&lt;p&gt;Here's what I think most "spec-driven" tooling gets wrong. A spec mode can generate a great plan.md and still ship code that violates it, because nothing re-checks the output independently of the agent that produced it.&lt;/p&gt;

&lt;p&gt;Pragma's &lt;code&gt;/gates&lt;/code&gt; runs a set of checks locally before a PR opens. The same checks then re-run independently in GitHub Actions after the PR is up. That's not redundancy, it's the actual point: CI enforcement that can't be talked around by rerunning the agent with a different prompt. If the agent says "tests pass" and CI disagrees, CI wins.&lt;/p&gt;

&lt;p&gt;There's a second piece I didn't expect to matter as much as it does: a memory layer. &lt;code&gt;.claude/context/invariants.md&lt;/code&gt;, &lt;code&gt;decisions.md&lt;/code&gt;, &lt;code&gt;feature-log.md&lt;/code&gt;, and &lt;code&gt;rejections.md&lt;/code&gt; persist across every session boundary. Every agent reads these before acting. It's the difference between a fresh model with a good prompt and something closer to institutional memory: what's inviolable, what's already been decided, what's already been tried and rejected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof, not a demo
&lt;/h2&gt;

&lt;p&gt;I built this on FinanceTracker, a real SwiftUI + SwiftData app, not a toy repo. It tracks spending across multiple accounts, sets monthly budgets per category with progress tracking, calculates net worth across assets and liabilities, and imports transactions from CSV through a three-step flow (file picker, column mapping, preview with dedup) that hashes date + amount + payee to avoid double-importing the same transaction on re-upload.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dashboard: net worth, this month's spending, and budget progress in one view.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dmkr9okau5tl4xp41vp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dmkr9okau5tl4xp41vp.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Transactions: searchable across every account, with manual entry alongside CSV import.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7u8d75lfl3g5t6s9c5qe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7u8d75lfl3g5t6s9c5qe.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Budgets: monthly limits per category, with live progress tracking.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft8doekpikqz8cnc68yya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft8doekpikqz8cnc68yya.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Accounts: assets and liabilities together, net worth calculated automatically.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fce4zhtjnwe58ffyf4x0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fce4zhtjnwe58ffyf4x0f.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;94 merged PRs, specs and plans predating every feature back to the first commit. Every PR has an approved spec, an approved plan, and a passing CI run before merge, checkable in the actual history, not asserted in a README.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's held up, and where it hasn't
&lt;/h2&gt;

&lt;p&gt;The behavioral-correctness problem (does the agent's code actually do the right thing, not just pass the checks I thought to write) is still the hardest part. &lt;code&gt;/test&lt;/code&gt; plus &lt;code&gt;/gates&lt;/code&gt;' coverage gate are my concrete attempt at it, and I don't think it's solved so much as bounded.&lt;/p&gt;

&lt;p&gt;The layer separation rules (Views have no business logic, Domain Services have zero SwiftData imports, ViewModels depend on protocols never concrete types) get violated by the agent occasionally, just like they get violated by junior engineers. The difference is &lt;code&gt;/review&lt;/code&gt; catches it every time, because it's a fixed checklist, not a vibe check.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add akshaypimprikar/pragma
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;pragma@pragma
/pragma:init MyApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Pipeline: &lt;a href="https://github.com/akshaypimprikar/pragma" rel="noopener noreferrer"&gt;github.com/akshaypimprikar/pragma&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The proof, FinanceTracker: &lt;a href="https://github.com/akshaypimprikar/financetracker-ios" rel="noopener noreferrer"&gt;github.com/akshaypimprikar/financetracker-ios&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd genuinely like to hear how others are handling the same problem, especially the part where you have to independently re-verify what an agent claims it did, instead of trusting its own report of success.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ios</category>
      <category>swift</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
