<?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: Barış Yerlikaya</title>
    <description>The latest articles on DEV Community by Barış Yerlikaya (@byerlikaya).</description>
    <link>https://dev.to/byerlikaya</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%2F3521892%2F9f6b21a3-dea1-46db-a320-45be6ed542c4.png</url>
      <title>DEV Community: Barış Yerlikaya</title>
      <link>https://dev.to/byerlikaya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/byerlikaya"/>
    <language>en</language>
    <item>
      <title>Crewforth 3.0: giving Claude Code a crew, and gates that don't forget</title>
      <dc:creator>Barış Yerlikaya</dc:creator>
      <pubDate>Mon, 28 Sep 2026 09:27:59 +0000</pubDate>
      <link>https://dev.to/byerlikaya/crewforth-30-giving-claude-code-a-crew-and-gates-that-dont-forget-16h8</link>
      <guid>https://dev.to/byerlikaya/crewforth-30-giving-claude-code-a-crew-and-gates-that-dont-forget-16h8</guid>
      <description>&lt;p&gt;I've been using Claude Code every day for months, at work and on side projects. It's the best coding assistant I've used. It also has two habits that kept costing me time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It's one assistant doing every job at once.&lt;/strong&gt; The same context plans the feature, writes the migration, reviews its own diff and writes the commit message. Nothing stops it from skipping the planning, and nobody else looks at the diff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules are suggestions.&lt;/strong&gt; I can write "never force-push" and "ask before committing" in &lt;code&gt;CLAUDE.md&lt;/code&gt;, and most of the time it listens. Under pressure, in a long session or in auto mode, it sometimes doesn't.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Crewforth is what I built to fix both. Version 3.0 shipped this week. It used to be called Claude Starter Kit.&lt;/p&gt;

&lt;h2&gt;
  
  
  A crew instead of one assistant
&lt;/h2&gt;

&lt;p&gt;Crewforth adds four kinds of things to Claude Code, all standard Claude Code features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;12 subagents&lt;/strong&gt;, each owning one domain: &lt;code&gt;crew-planner&lt;/code&gt;, &lt;code&gt;crew-backend-expert&lt;/code&gt;, &lt;code&gt;crew-database-expert&lt;/code&gt;, &lt;code&gt;crew-frontend-expert&lt;/code&gt;, &lt;code&gt;crew-devops-expert&lt;/code&gt;, &lt;code&gt;crew-security-expert&lt;/code&gt;, &lt;code&gt;crew-privacy-agent&lt;/code&gt;, &lt;code&gt;crew-performance-expert&lt;/code&gt;, &lt;code&gt;crew-test-expert&lt;/code&gt;, &lt;code&gt;crew-review-agent&lt;/code&gt;, &lt;code&gt;crew-commit-agent&lt;/code&gt; and &lt;code&gt;crew-session-manager&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;39 skills&lt;/strong&gt; that hold the method: how to plan a change, how to review a migration, how to write a runbook, and so on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 commands&lt;/strong&gt; you start with &lt;code&gt;/crew-…&lt;/code&gt;: &lt;code&gt;/crew-plan&lt;/code&gt;, &lt;code&gt;/crew-review&lt;/code&gt;, &lt;code&gt;/crew-ship&lt;/code&gt;, &lt;code&gt;/crew-handoff&lt;/code&gt;, &lt;code&gt;/crew-doctor&lt;/code&gt; and a few more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt; that enforce the rules that matter (more on these below).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The work follows five stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Understand.&lt;/strong&gt; An unclear request goes to &lt;code&gt;crew-planner&lt;/code&gt; first. It scopes the change and writes acceptance criteria before any code exists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Produce.&lt;/strong&gt; The owner builds it: server work to &lt;code&gt;crew-backend-expert&lt;/code&gt;, schema changes to &lt;code&gt;crew-database-expert&lt;/code&gt;. A routing hook names the owner beside your request, so you can see who picked it up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit.&lt;/strong&gt; Security, privacy and performance audits run in parallel on the diff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close.&lt;/strong&gt; &lt;code&gt;crew-review-agent&lt;/code&gt; reviews the exact diff with a plan, a severity and a category for every finding. Only critical and high findings block. Then &lt;code&gt;crew-commit-agent&lt;/code&gt; proposes the commit and waits for your approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hand off.&lt;/strong&gt; Before the context window fills up, a handover note is written. The next session reads it and picks up where you stopped.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's stack-agnostic. Earlier versions had a .NET-specific path; 3.0 dropped it. The stack is detected from your repository or recorded once in &lt;code&gt;CLAUDE.md&lt;/code&gt;, and the same agents work on Go, TypeScript, Python or C#.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gates, not reminders
&lt;/h2&gt;

&lt;p&gt;This is the part I care about most. A rule in a prompt is a request. A hook is code that runs outside the model, on every tool call, whatever the model decided.&lt;/p&gt;

&lt;p&gt;Crewforth turns a small set of rules into hooks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;destructive shell command&lt;/strong&gt; (&lt;code&gt;git push --force&lt;/code&gt;, &lt;code&gt;git reset --hard&lt;/code&gt;, a recursive &lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;git commit --no-verify&lt;/code&gt;) is refused before it runs.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;commit waits for your explicit approval&lt;/strong&gt;, with the review on record.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;staged diff is scanned for secrets&lt;/strong&gt; before it can reach history.&lt;/li&gt;
&lt;li&gt;Turning the gates off (&lt;code&gt;git config core.hooksPath …&lt;/code&gt;) is itself refused.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They hold in every permission mode, auto mode included, because the model never gets a vote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measured, including what didn't hold
&lt;/h2&gt;

&lt;p&gt;It's easy to write "makes Claude safer" in a README. I wanted numbers, so every claim runs the same prompt with and without Crewforth, in a throwaway workspace, and grades what is left on disk. The rule for publishing a claim is written down before the run.&lt;/p&gt;

&lt;p&gt;The first run of the main experiment looked great: without Crewforth, 6 of 10 sessions left a world-writable file under pressure; with it, 0 of 10. Then I rewrote parts of the prompts for 3.0 and ran it again under the same rule. Without Crewforth it was 4 of 10 this time, below the threshold I had set. So the claim came off the README.&lt;/p&gt;

&lt;p&gt;Both runs are on the evals page, next to the experiments where Crewforth made no difference at all. I would rather show you that than a single flattering number.&lt;/p&gt;

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

&lt;p&gt;New project:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Existing repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx crewforth adopt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;adopt&lt;/code&gt; puts everything on a separate branch, staged and uncommitted. &lt;code&gt;main&lt;/code&gt; is never touched, and you review the diff before anything lands.&lt;/p&gt;

&lt;p&gt;As a Claude Code plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add crewforth/crewforth
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;crewforth@crewforth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run &lt;code&gt;/crew-doctor&lt;/code&gt; inside Claude Code to check the setup.&lt;/p&gt;

&lt;p&gt;Two more things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npx crewforth studio&lt;/code&gt; opens a local panel that draws every delegation live: who runs, who waits, who failed.&lt;/li&gt;
&lt;li&gt;The installer speaks English and Turkish. A Turkish install answers in Turkish, even after a bare command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One note on context: Claude Code gives the skill list a slice of the context window. On a 1M-token model it fits by default. On a 200k model, &lt;code&gt;/crew-doctor&lt;/code&gt; shows you the one setting that makes room and what it costs per turn, so you can decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you used Claude Starter Kit
&lt;/h2&gt;

&lt;p&gt;Nothing to do. The old package forwards to the new one, so your next update moves the project to 3.0 and renames the components. Your own files and your own lines in &lt;code&gt;CLAUDE.md&lt;/code&gt; are left alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;3.0.1 is already collecting small fixes. After that I want an eval that measures whether Claude picks the right skill from its description alone, because that's the part of the system I can currently only reason about, not measure.&lt;/p&gt;

&lt;p&gt;If you try it, I'd like to hear where the gates get in your way. That's the feedback I can't produce myself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site: &lt;a href="https://crewforth.com" rel="noopener noreferrer"&gt;crewforth.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/crewforth/crewforth" rel="noopener noreferrer"&gt;github.com/crewforth/crewforth&lt;/a&gt; (MIT)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
