<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kix Panganiban's Blog]]></title><description><![CDATA[Kix Panganiban's Blog]]></description><link>https://kix-sisigai.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:35:16 GMT</lastBuildDate><atom:link href="https://kix-sisigai.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How we stopped our coding agents from writing like LinkedIn posts]]></title><description><![CDATA[Agent-written PR descriptions have a smell. "This robust solution seamlessly leverages..." You know it when you see it, and reviewers start skimming once…]]></description><link>https://kix-sisigai.hashnode.dev/how-we-stopped-our-coding-agents-from-writing-like-linkedin-posts</link><guid isPermaLink="true">https://kix-sisigai.hashnode.dev/how-we-stopped-our-coding-agents-from-writing-like-linkedin-posts</guid><category><![CDATA[AI]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[technical writing]]></category><dc:creator><![CDATA[Kix Panganiban]]></dc:creator><pubDate>Fri, 23 Oct 2026 04:58:22 GMT</pubDate><content:encoded><![CDATA[<p>Agent-written PR descriptions have a smell. "This robust solution seamlessly leverages..." You know it when you see it, and reviewers start skimming once they do.</p>
<p>When we open-sourced <a href="https://github.com/sisig-ai/agent-doctrine">agent-doctrine</a>, our workflow for taking coding agents from spec to tested PR, the prose rules turned out to be one of the most-asked-about parts. Here's what they are and why.</p>
<h3>Simplified technical English</h3>
<p>We borrowed from ASD-STE100, the controlled language used in aerospace maintenance manuals:</p>
<ul>
<li>one meaning per word</li>
<li>one idea per sentence</li>
<li>8 to 20 words per sentence</li>
<li>active voice</li>
</ul>
<h3>Answer, facts, stop</h3>
<p>Every reply starts with the answer, then gives the supporting facts, then ends. No recap, no "let me know if you need anything else", no praise or apologies.</p>
<h3>Every claim carries a fact</h3>
<p>Each claim needs a number, file, name or decision. "Improved performance" fails. "Cut p95 from 800ms to 210ms in export.ts" passes.</p>
<h3>Banned words and punctuation</h3>
<p>No "robust", "seamless", "leverage" or "delve". No metaphors when a plain phrase works. No em dashes.</p>
<h3>How it's enforced</h3>
<p>The rules live in CLAUDE.md, which syncs to all seven supported hosts. A short per-prompt style reminder is also injected on every turn (there's an Amp plugin for it in <code>amp/plugins/style-reminder</code>). The reminder matters because long sessions drift, and a rule stated once at the top gets forgotten by turn 40.</p>
<h3>Does it work?</h3>
<p>Mostly. Reviews got faster because PR bodies say what changed and how it was tested, in that order. The rest of the doctrine (the pre-code gate, adversarial review) is in the repo if you want the full loop.</p>
]]></content:encoded></item></channel></rss>