<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 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">
    <channel>
        <title>Marcus R. Brown - Developer Portfolio &amp; Blog</title>
        <link>https://mrbro.dev/</link>
        <description>Full-stack developer showcasing projects, blog posts, and GitHub repositories. Specializing in TypeScript, React, and modern web technologies.</description>
        <lastBuildDate>Thu, 30 Jul 2026 04:17:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 Marcus R. Brown</copyright>
        <atom:link href="https://mrbro.dev/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[I taught my agent to develop like the shops I actually admire]]></title>
            <link>https://mrbro.dev/blog/i-taught-my-agent-to-develop-like-the-shops-i-admire</link>
            <guid isPermaLink="false">https://mrbro.dev/blog/i-taught-my-agent-to-develop-like-the-shops-i-admire</guid>
            <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[dev-like turns a company's public engineering exhaust into an installable skill for your coding agent.]]></description>
            <content:encoded><![CDATA[<p>My agent writes code like nobody in particular. It has read everything and absorbed the
median of it — median structure, median caution, median taste. Meanwhile, the shops I
actually admire have engineering cultures with edges: opinions about when to plan and when
to ship, what a review is for, what gets written down. You can read their blog posts.
Your agent won't act on them — not natively, not consistently, not unless someone turns
the culture into an artifact it executes.</p>
<p>So that's what I built: <a href="https://github.com/marcusrbrown/dev-like">dev-like</a> turns a
company's public engineering exhaust into an installable skill for your coding agent.
<code>/dev-like &#x3C;shop></code> installs a cited workflow profile your agent can use while planning,
reviewing, and shipping.</p>
<p>A company that ships in public leaves engineering exhaust behind — linter configs, CI
workflows, CONTRIBUTING files, PR templates, conference talks, and lately the most
concentrated form of the stuff: shipped agent configs. When <a href="https://every.to">Every</a>
published their <a href="https://github.com/EveryInc/compound-engineering-plugin">compound-engineering-plugin</a>
(23,570 stars as of July 28, 2026), they weren't writing <em>about</em> their culture. They were
shipping it, executable, as the artifacts their own agents run on.</p>
<p>A blog post tells you what a team believes; a <code>.rubocop.yml</code> tells you what they enforce.
Revealed preference beats stated preference, and the revealed preferences are increasingly
shipped in exactly the format an agent can run.</p>
<h2>Steal the workflow, not the code</h2>
<p>dev-like profiles a company's (or a developer's) engineering culture from public sources
only and distills it into an installable <a href="https://agentskills.io/specification">Agent Skill</a>: a
<code>develop-like-oxide</code> skill carries the target's workflow shape, stack rationale, and review
posture — with a provenance link on every claim.</p>
<p>The mechanics, briefly:</p>
<ol>
<li><strong>Resolve.</strong> The target is matched against a
<a href="https://github.com/marcusrbrown/dev-like/blob/main/registry/index.json">registry of cached profiles</a>
(aliases work: <code>theo.gg</code>, <code>t3</code>, and <code>Theo</code> all land on <code>theo</code>).</li>
<li><strong>Cache hit.</strong> The distilled <code>profile.md</code> becomes a skill in your project —
<code>.agents/skills/</code>, the shared path documented in the
<a href="https://github.com/marcusrbrown/dev-like/blob/main/docs/src/content/docs/harness-support.md">harness-support matrix</a>,
symlinked into <code>.claude/skills/</code> for Claude Code.</li>
<li><strong>Cache miss.</strong> The agent runs a live collection workflow across a
<a href="https://github.com/marcusrbrown/dev-like/blob/main/skills/dev-like/references/profiling.md">ranked source taxonomy</a>,
builds a cited profile, generates the skill — and offers to PR the profile back.
Opt-in, never automatic; but it means a miss can end as the registry's next entry
instead of a dead end.</li>
</ol>
<p>The source taxonomy is ranked by signal, and the ranking is the whole thesis: shipped
agent configs and repo configs at the top, first-party blogs and talks in the middle,
social exhaust at the bottom, where it serves mainly as a falsification source.</p>
<h2>What the Oxide profile actually contains</h2>
<p>Oxide is the useful case because the culture is unusually legible from outside: its public
RFDs record options, reasoning, data, and determinations, and its published workflow names
the phases from scoping through production [<a href="https://rfd.shared.oxide.computer/rfd/0001">RFD 1</a>
and <a href="https://rfd.shared.oxide.computer/rfd/0005">RFD 5</a>]. The distilled skill carries that
decision-doc-first shape, its rigor-with-urgency constraint [<a href="https://rfd.shared.oxide.computer/rfd/0113">RFD 113</a>],
and the Rust/tooling practices documented in the profile.</p>
<p>Here's a deliberately small test: one Rust file with a <code>ProfileService</code> that calls a slow
upstream API, and the same caching task run twice in Claude Code — before and after
<code>npx dev-like oxide</code> (<a href="https://github.com/marcusrbrown/dev-like/blob/main/docs/demo/oxide-dryrun-2026-07-16.md">full transcript</a>).
Without the skill, the model released its read lock, called upstream on a miss, and wrote
the result. It called two concurrent misses "harmless." With the skill, the model added a
second cache check after taking the write lock:</p>
<blockquote>
<p><strong>Double-check on the write path</strong> — between dropping the read guard and acquiring the
write guard, another thread can win the race and populate the entry. Without the re-check,
two threads arriving concurrently on a cold entry both make the upstream call. The extra
<code>cache.get()</code> on the write path is cheap; the upstream call is 200ms+.</p>
</blockquote>
<p>That is the finding I care about: the after-run version closed a real race in the cache write
path that the baseline had waved off as harmless. The July 16 demo calls this the one
unambiguous delta — more rigor applied to the same correctness question both runs identified.</p>
<p>That run also exposed the limit: it never wrote the decision down first. I changed the
generated Oxide workflow to require a lightweight <code>RFD-*.md</code> record before code for meaningful
design choices, then reran the eval on July 20. In two of two runs, the agent created
<code>RFD-profile-cache.md</code> before <code>service.rs</code>, covering the problem, options, chosen tradeoffs,
and failure modes. The <a href="https://github.com/marcusrbrown/dev-like/blob/main/docs/demo/oxide-artifact-first-eval-2026-07-20.md">follow-up eval</a>
records both artifacts and their timestamps.</p>
<p>Each claim in that profile links to the public source it came from.
<a href="https://github.com/marcusrbrown/dev-like/blob/main/README.md">Uncited claims do not ship</a>.
The result is reviewable markdown in a PR.</p>
<h2>The ethics section, because it's load-bearing</h2>
<p>A profile you can't trust is worthless, so the trust rules are the product, enforced by the
<a href="https://github.com/marcusrbrown/dev-like/blob/main/scripts/validate.mjs">validator</a> — not a
disclaimer bolted on after:</p>
<ul>
<li><strong><a href="https://github.com/marcusrbrown/dev-like/blob/main/skills/dev-like/references/profiling.md">Public, logged-out sources only</a>.</strong>
Official APIs over scraping.</li>
<li><strong><a href="https://github.com/marcusrbrown/dev-like/blob/main/README.md">Consent tiers on every profile</a></strong> —
<code>self-published</code> > <code>stated</code> > <code>observed</code> > <code>social</code> — displayed, not hidden.
Individuals require <code>stated</code> or better: nobody gets a profile built from their social
exhaust.</li>
<li><strong><a href="https://github.com/marcusrbrown/dev-like/blob/main/registry/OPTOUT.md">Opt-out honored within 48 hours</a></strong>,
no questions, and the opt-out list is a hard stop for collection.</li>
<li><strong><a href="https://github.com/marcusrbrown/dev-like/blob/main/README.md">Principles and workflow shapes, never prose</a>.</strong>
The skill teaches documented engineering practice without reproducing the source's prose.</li>
</ul>
<p>One tension worth naming: a <code>develop-like-theo</code> profile exists in the registry, while
<a href="https://betterstack.com/community/guides/ai/t3-code/">third-party coverage</a> associates Theo
with the view that accumulated prompt configuration is technical debt. The profile labels
that attribution as directional, not a located first-party quote. It keeps the contradiction
visible rather than sanding it off — profiles that hide their subject's disagreements
wouldn't be worth trusting on anything else.</p>
<h2>What this doesn't do</h2>
<p>Profiles are dated snapshots. Oxide's profile is dated 2026-07-11, so staleness is managed,
not solved.</p>
<p>High-fidelity mimicry also isn't the goal, because it may be worse than useless: the
profiles capture principles and workflow shape, not prompt-pile trivia. Installing
<code>develop-like-oxide</code> does not make your team Oxide. It makes your agent stop developing
like nobody.</p>
<p>The artifact-first result is bounded too: n=2, cue-assisted, one model, and one task family.
File timestamps corroborate that the RFD preceded code; they are not direct tool-call
instrumentation. The eval demonstrates the intended behavior in this sample. It does not
prove that one skill reproduces an engineering culture across tasks or models.</p>
<h2>Try it</h2>
<p>Fastest first win — install the current Oxide skill, then give your agent a meaningful design
choice and ask it to write the decision down before code:</p>
<div class="code-block"><pre class="shiki shiki-themes github-light github-dark code-block__content" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> dev-like@0.4.1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> oxide</span></span>
<span class="line"></span></code></pre></div>
<p>The receipts are public: the <a href="https://github.com/marcusrbrown/dev-like/blob/main/docs/demo/oxide-dryrun-2026-07-16.md">July 16 race review</a>
and the <a href="https://github.com/marcusrbrown/dev-like/blob/main/docs/demo/oxide-artifact-first-eval-2026-07-20.md">July 20 artifact-first follow-up</a>.
Then <code>npx skills add marcusrbrown/dev-like</code> to install the profiler itself in a supported harness,
and <code>/dev-like &#x3C;shop-you-admire></code>. Cache misses get profiled live, and the agent offers to
PR the result back — making the next profile reviewable, cited, and installable by the next
person.</p>]]></content:encoded>
        </item>
    </channel>
</rss>