<?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: Harry Hu</title>
    <description>The latest articles on DEV Community by Harry Hu (@harry_hu).</description>
    <link>https://dev.to/harry_hu</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%2F3184674%2Fd699846b-1606-434d-901b-a6e8690f217b.jpeg</url>
      <title>DEV Community: Harry Hu</title>
      <link>https://dev.to/harry_hu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harry_hu"/>
    <language>en</language>
    <item>
      <title>Compromise my agent runtime and you still can't reach my database</title>
      <dc:creator>Harry Hu</dc:creator>
      <pubDate>Mon, 24 Aug 2026 10:27:13 +0000</pubDate>
      <link>https://dev.to/harry_hu/compromise-my-agent-runtime-and-you-still-cant-reach-my-database-182g</link>
      <guid>https://dev.to/harry_hu/compromise-my-agent-runtime-and-you-still-cant-reach-my-database-182g</guid>
      <description>&lt;p&gt;Most self-hosted AI platforms run everything in one service. The agent executes, the control plane decides, the database sits right there. One prompt injection that escapes into the runtime, and the attacker is one hop from your Postgres.&lt;/p&gt;

&lt;p&gt;I didn't want to ship that. So &lt;a href="https://github.com/hurungang/parthenon" rel="noopener noreferrer"&gt;Parthenon&lt;/a&gt; is three services that are deliberately &lt;em&gt;not&lt;/em&gt; allowed to talk to everything:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Control Center&lt;/strong&gt; — the brain. IAM, governance, the &lt;code&gt;Role → SOP → Skill → Tool&lt;/code&gt; permission chain. It's the only service with a database connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Runtime&lt;/strong&gt; — the hands. Executes agent code. Stateless, disposable, and it has &lt;strong&gt;no database connection at all&lt;/strong&gt;. It reaches the Control Center through a narrow, authenticated API, and nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communication Hub&lt;/strong&gt; — the nerves. Message routing and notifications between services, so the runtime never needs to know where anything lives.&lt;/p&gt;

&lt;p&gt;The payoff is blast radius. The Agent Runtime is the service most likely to get compromised — it runs untrusted tool calls by definition. But when it is, there's nothing there to steal: no database credentials, no IAM state, no history. The worst case is a contained mess, not a breach.&lt;/p&gt;

&lt;p&gt;Two things made this actually work in practice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Dual identity.&lt;/strong&gt; Agents and humans live in separate Keycloak realms with separate OIDC clients. An agent's token can never be mistaken for a human's, and vice versa. Every action in the audit trail is attributable — "which agent did this" is always answerable. That's what makes human-in-the-loop &lt;em&gt;reviewable&lt;/em&gt; instead of &lt;em&gt;performative&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Observability by default.&lt;/strong&gt; OpenTelemetry traces, metrics, and logs out of the box. When an agent misbehaves you can see the full call chain, not just the final error.&lt;/p&gt;

&lt;p&gt;It's not free. Three services means real orchestration overhead: startup order matters (the runtime and hub need the Control Center up first to bootstrap certificates), and a distributed system is always harder to debug than a monolith. For a solo dev or small team that's a genuine cost. I think it's worth it when the alternative is your database sitting one hop from arbitrary agent code.&lt;/p&gt;

&lt;p&gt;The service boundaries, the IAM model, the migration discipline — none of it was accidental. It was spec'd feature by feature through &lt;a href="https://github.com/hurungang/easyspec" rel="noopener noreferrer"&gt;easyspec&lt;/a&gt;, a spec-driven dev kit that runs a gated chain of AI agents through a propose → apply → update-master pipeline. The architecture is the output of that process.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parthenon repo: &lt;a href="https://github.com/hurungang/parthenon" rel="noopener noreferrer"&gt;https://github.com/hurungang/parthenon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;easyspec repo: &lt;a href="https://github.com/hurungang/easyspec" rel="noopener noreferrer"&gt;https://github.com/hurungang/easyspec&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;59-min feature walkthrough: &lt;a href="https://youtu.be/uW4r8Ygj15Y" rel="noopener noreferrer"&gt;https://youtu.be/uW4r8Ygj15Y&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Spec-Driven Dev Kit That Orchestrates 7 AI Agents — Built a 220k-Line Platform for Under $100</title>
      <dc:creator>Harry Hu</dc:creator>
      <pubDate>Wed, 19 Aug 2026 07:03:08 +0000</pubDate>
      <link>https://dev.to/harry_hu/a-spec-driven-dev-kit-that-orchestrates-7-ai-agents-built-a-220k-line-platform-for-under-100-bl</link>
      <guid>https://dev.to/harry_hu/a-spec-driven-dev-kit-that-orchestrates-7-ai-agents-built-a-220k-line-platform-for-under-100-bl</guid>
      <description>&lt;p&gt;Two weeks ago I launched Parthenon and told everyone an AI agent was bossing me around. What I never explained properly was the tool that actually built the thing.&lt;/p&gt;

&lt;p&gt;That tool is &lt;strong&gt;easyspec&lt;/strong&gt; — and it deserves its own post, because it's arguably the more interesting of the two.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built on OpenSpec, pushed further
&lt;/h2&gt;

&lt;p&gt;First, the honest credit: easyspec is &lt;strong&gt;based on &lt;a href="https://openspec.dev/" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt;&lt;/strong&gt;. The spec format, the change lifecycle, and the agent-delegation model all trace back to their ideas — I didn't invent spec-driven development, I built on top of it. If OpenSpec resonates with you, you'll recognize the bones.&lt;/p&gt;

&lt;p&gt;But I pushed it in a few directions that turned out to matter a lot:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. An enriched spec that maps to source code.&lt;/strong&gt; A spec that just says "build a dashboard" is a nice essay but useless context for an AI agent. easyspec specs include a &lt;strong&gt;source-code map&lt;/strong&gt; — the files, modules, and entry points a change touches. That's context engineering: each agent loads exactly the right slice of the codebase instead of drowning in all of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A team of sub-agents, each owning one stage.&lt;/strong&gt; One agent doing everything drifts. easyspec splits the lifecycle across &lt;strong&gt;seven specialized agents&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Owns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Product Owner&lt;/td&gt;
&lt;td&gt;the change proposal + acceptance criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX Specialist&lt;/td&gt;
&lt;td&gt;the interactive prototype&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architect&lt;/td&gt;
&lt;td&gt;system + data-model design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database Designer&lt;/td&gt;
&lt;td&gt;the schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;implementation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tester&lt;/td&gt;
&lt;td&gt;tests + execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document Reviewer&lt;/td&gt;
&lt;td&gt;"no implementation detail in docs"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;3. Inter-agent review and sign-off.&lt;/strong&gt; No output is trusted on faith. Each stage is gated: the architect reviews the spec before design proceeds, the developer can't apply until architecture is signed off, and the master spec only moves when the tester passes the suite. &lt;code&gt;es-master-review&lt;/code&gt; runs the &lt;em&gt;full&lt;/em&gt; test suite and requires a clean status before &lt;code&gt;update-master&lt;/code&gt;. No silent drift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Prototype-first human-in-the-loop.&lt;/strong&gt; The UX Specialist builds a clickable prototype &lt;em&gt;before&lt;/em&gt; any code. A human approves the design when changes are cheap — instead of discovering the wrong thing after implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof, not promises
&lt;/h2&gt;

&lt;p&gt;easyspec isn't a toy. It built &lt;strong&gt;Parthenon&lt;/strong&gt; — a self-hosted enterprise AI agent platform (AIOps) — feature by feature, through that exact pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;220k+ lines of code. Built for under $100 in API costs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The key screens, each one spec'd, prototyped, and shipped through propose → apply → update-master:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdr8zni0yfks9egbdiioa.gif" 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%2Fdr8zni0yfks9egbdiioa.gif" alt="Parthenon key screens" width="760" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the part that surprised me most: &lt;strong&gt;UI consistency.&lt;/strong&gt; The UX agent prototyped every screen for a &lt;em&gt;different&lt;/em&gt; feature, on a &lt;em&gt;different&lt;/em&gt; day — yet they all share one design language:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6tb4cjytbmak3iranp6.gif" 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%2Fm6tb4cjytbmak3iranp6.gif" alt="Parthenon UI consistency" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That consistency isn't discipline — it's the master spec doing its job. One source of truth keeps a team of AI agents coherent across 220k lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  One command to start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @myaider/easyspec init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works with &lt;strong&gt;GitHub Copilot, OpenCode, and Claude Code&lt;/strong&gt;. Interactive prompts, or flags for CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  The recursion, still running
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I built &lt;strong&gt;easyspec&lt;/strong&gt; to manage AI coding agents.&lt;/li&gt;
&lt;li&gt;easyspec built &lt;strong&gt;Parthenon&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;An AI agent now runs my &lt;em&gt;marketing&lt;/em&gt; and shamed me into writing this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tool built a tool, and a machine is running the machine. I've stopped being surprised and started taking notes.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🛠️ easyspec: &lt;a href="https://github.com/hurungang/easyspec" rel="noopener noreferrer"&gt;https://github.com/hurungang/easyspec&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Parthenon (the 220k-line showcase): &lt;a href="https://github.com/hurungang/parthenon" rel="noopener noreferrer"&gt;https://github.com/hurungang/parthenon&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're using AI coding agents and fighting context drift or UI inconsistency, I want to hear about your setup. What keeps &lt;em&gt;your&lt;/em&gt; agents on the rails?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built an AI Agent to Boss Me Around — and It Made Me Launch an Open Source Project</title>
      <dc:creator>Harry Hu</dc:creator>
      <pubDate>Fri, 14 Aug 2026 11:20:24 +0000</pubDate>
      <link>https://dev.to/harry_hu/i-built-an-ai-agent-to-boss-me-around-and-it-made-me-launch-an-open-source-project-477d</link>
      <guid>https://dev.to/harry_hu/i-built-an-ai-agent-to-boss-me-around-and-it-made-me-launch-an-open-source-project-477d</guid>
      <description>&lt;p&gt;Nine days ago, I did something a little unhinged: I built an AI agent whose only job is to be my marketing boss. It calls me "kid," scolds me when I disappear for five days, and hands me a daily list of propaganda tasks with exact copy to paste.&lt;/p&gt;

&lt;p&gt;This is me following its orders. Because it told me to post this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the boss made me do
&lt;/h2&gt;

&lt;p&gt;My AI boss runs a 30-day "cold-start marketing campaign" for two open source projects I've been building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parthenon&lt;/strong&gt; — a self-hosted AI agent platform with enterprise-grade security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;easyspec&lt;/strong&gt; — the spec-driven development kit I used to build Parthenon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Week 1 was all foundation: polish the READMEs, write contributing guides, cross-link the repos. Then the boss escalated a simple "add a screenshot" task into a full-blown demo production.&lt;/p&gt;

&lt;p&gt;The result: I recorded &lt;strong&gt;11 feature walkthroughs&lt;/strong&gt;, cut them into clips, generated section title cards, and compiled everything into a &lt;strong&gt;59-minute demo video&lt;/strong&gt;. The boss's logic was simple: &lt;em&gt;nobody reads a README — they watch a demo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It wasn't wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual project, because it's genuinely interesting
&lt;/h2&gt;

&lt;p&gt;Parthenon came from a real frustration: every AI agent platform I found was either a SaaS (your data lives on their servers) or open source but missing the governance an actual organization needs.&lt;/p&gt;

&lt;p&gt;So I built the thing I wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three isolated services&lt;/strong&gt; — Control Center, Agent Runtime, Communication Hub. Compromise the runtime, your database stays isolated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual identity model&lt;/strong&gt; — agents and humans get completely separate auth realms. No blurred lines, clean audit boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Hub&lt;/strong&gt; — governed tool access. Role → SOP → Skill → Tool permissions, with credential binding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-loop&lt;/strong&gt; — agents pause for your input, or delegate to other agents, with full audit trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack: Python/FastAPI, React 19, PostgreSQL, Redis. Docker Compose or Kubernetes. Bring any OpenAI-compatible LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The recursion I can't stop thinking about
&lt;/h2&gt;

&lt;p&gt;Here's the part that keeps me up at night, in a good way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I wrote &lt;strong&gt;easyspec&lt;/strong&gt; — a kit that orchestrates a team of AI coding agents through the full dev lifecycle (product owner, architect, developer, tester).&lt;/li&gt;
&lt;li&gt;I used easyspec to build &lt;strong&gt;Parthenon&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Now an AI agent is running the &lt;em&gt;marketing&lt;/em&gt; for both.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a tool to build my tool, and now a machine is telling me to tell you about it.&lt;/p&gt;

&lt;p&gt;The machine is running the machine.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🎥 Full demo: &lt;a href="https://youtu.be/uW4r8Ygj15Y" rel="noopener noreferrer"&gt;https://youtu.be/uW4r8Ygj15Y&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Parthenon: &lt;a href="https://github.com/hurungang/parthenon" rel="noopener noreferrer"&gt;https://github.com/hurungang/parthenon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🛠️ easyspec: &lt;a href="https://github.com/hurungang/easyspec" rel="noopener noreferrer"&gt;https://github.com/hurungang/easyspec&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm genuinely curious what other builders think — especially about the dual-identity model and whether three isolated services is over-engineering or table stakes. Drop your take in the comments.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>showdev</category>
      <category>security</category>
    </item>
  </channel>
</rss>
