<?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>You just joined a project. Crewforth 3.2.0 draws you its map.</title>
      <dc:creator>Barış Yerlikaya</dc:creator>
      <pubDate>Thu, 22 Oct 2026 12:41:02 +0000</pubDate>
      <link>https://dev.to/byerlikaya/you-just-joined-a-project-crewforth-320-draws-you-its-map-4man</link>
      <guid>https://dev.to/byerlikaya/you-just-joined-a-project-crewforth-320-draws-you-its-map-4man</guid>
      <description>&lt;p&gt;You just joined a new project. Nothing looks familiar. There are folders called &lt;code&gt;core&lt;/code&gt;, &lt;code&gt;common&lt;/code&gt; and &lt;code&gt;shared&lt;/code&gt;, three &lt;code&gt;package.json&lt;/code&gt; files, and a &lt;code&gt;docker-compose.yml&lt;/code&gt; that mentions a queue nobody has told you about.&lt;/p&gt;

&lt;p&gt;The usual move today is to ask an AI agent to explore the repository. That works, more or less. It is also slow, it costs tokens every time, and when it tells you "the billing service talks to Stripe", you cannot tell whether it read that or guessed it.&lt;/p&gt;

&lt;p&gt;Crewforth 3.2.0 adds &lt;strong&gt;Crew Map&lt;/strong&gt;, which answers four questions about a project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What each part does&lt;/li&gt;
&lt;li&gt;What it's built with&lt;/li&gt;
&lt;li&gt;Who talks to whom&lt;/li&gt;
&lt;li&gt;Where something is wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does this without running anything. It reads the files.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Crewforth is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/crewforth/crewforth" rel="noopener noreferrer"&gt;Crewforth&lt;/a&gt; is an open-source (MIT) kit for Claude Code. It adds 14 specialist agents, 40 skills, 13 &lt;code&gt;/crew-…&lt;/code&gt; commands, and hooks that enforce the rules that matter: a destructive command is refused, a commit waits for your approval, a leaked key never reaches history. Crew Map is one part of it.&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;h2&gt;
  
  
  Step 1: a scan that cites its sources
&lt;/h2&gt;

&lt;p&gt;The first part is a scanner. It uses no model. It reads manifests and source for Node and TypeScript, Python, Go, .NET, Java and Kotlin, and writes one file, &lt;code&gt;.crewforth/crew-map.json&lt;/code&gt;, with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the modules,&lt;/li&gt;
&lt;li&gt;the external resources they touch (databases, caches, queues, outside APIs),&lt;/li&gt;
&lt;li&gt;the endpoints each module provides and the ones it calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every module, every line between modules and every finding carries the &lt;code&gt;file:line&lt;/code&gt; it was read from. If the map says module A calls module B, you can open the exact line.&lt;/p&gt;

&lt;p&gt;Two details matter in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It is deterministic.&lt;/strong&gt; The same tree gives the same bytes. Run it with &lt;code&gt;--check&lt;/code&gt; in CI and the build fails when the map is out of date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It does not copy secrets.&lt;/strong&gt; A configuration value is read only to name its kind (a Postgres URL, a Redis host), not stored.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: the model describes, but only what was read
&lt;/h2&gt;

&lt;p&gt;A list of modules is not yet understanding. So &lt;code&gt;/crew-map&lt;/code&gt; runs the scanner and then asks the model to describe what it found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;at most two sentences per module on what it is for,&lt;/li&gt;
&lt;li&gt;a short overview of the project,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;layer&lt;/strong&gt; for each module: &lt;code&gt;ui&lt;/code&gt;, &lt;code&gt;api&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;infra&lt;/code&gt;, &lt;code&gt;tool&lt;/code&gt; or &lt;code&gt;library&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;domain&lt;/strong&gt; it serves (billing, auth, search...),&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;tour&lt;/strong&gt; of up to eight stops that a newcomer reads in order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these must cite lines the scan itself read. &lt;code&gt;crew-map.sh --validate&lt;/code&gt; refuses a description that cites anything else or nothing, a layer not on the list, a domain written as a sentence, a tour stop that points at no module or visits one twice, and any scanner field changed by hand. When you scan again, descriptions that still hold are kept and the rest are dropped.&lt;/p&gt;

&lt;p&gt;Module READMEs are read too. On a real project, four of ten modules had nothing else to describe them by.&lt;/p&gt;

&lt;p&gt;This is the part I care about most: the model writes prose, but it cannot invent structure. A connection the model proposes is drawn differently from one a file proves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: look at it in Studio
&lt;/h2&gt;

&lt;p&gt;Studio is Crewforth's local panel (&lt;code&gt;npx crewforth studio&lt;/code&gt;). Its Map view (press &lt;code&gt;p&lt;/code&gt;) reads &lt;code&gt;crew-map.json&lt;/code&gt; and scans nothing itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modules sit in their layers, from UI down to Infrastructure. Each card names the module, its domain, up to three things it is built with and the outside services it calls.&lt;/li&gt;
&lt;li&gt;Lines are &lt;strong&gt;solid&lt;/strong&gt; where a file proves them, &lt;strong&gt;dotted&lt;/strong&gt; where inferred, and &lt;strong&gt;marked&lt;/strong&gt; where the model proposed them.&lt;/li&gt;
&lt;li&gt;Search dims everything it does not match.&lt;/li&gt;
&lt;li&gt;The tour steps through the map at the bottom of the pane.&lt;/li&gt;
&lt;li&gt;The inspector shows a module's entry point, its folders and their file counts. Any &lt;code&gt;file:line&lt;/code&gt; can be copied, and a finding can be copied as a task for the crew.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare with&lt;/strong&gt; matches another project's calls against this one's endpoints, which helps when a frontend and a backend live in separate repos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;crew-planner&lt;/code&gt;, the agent that turns an unclear request into tasks, reads the map when it works on an unfamiliar project, so it starts from the same picture you do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where something is wrong
&lt;/h2&gt;

&lt;p&gt;The scanner has ten gap rules. Five are proven by the lines they cite. The other five are conclusions from absence, such as an endpoint that nothing calls. Absence is easy to get wrong, so those five are hidden and only counted until their false-positive rate is measured. You can ask to see them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Also in 3.2.0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Watch your crew from your phone.&lt;/strong&gt; Studio can make a read-only viewer link, shown as a QR code. A phone on the same Wi-Fi opens the panel without ssh or a tunnel. Transcripts are hidden unless you tick them, a link lasts eight hours, and you can revoke it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A new agent that writes your docs.&lt;/strong&gt; &lt;code&gt;crew-docs-agent&lt;/code&gt; owns READMEs, guides, release notes and store listings. Legal and privacy texts run on the critical tier and are audited by &lt;code&gt;crew-privacy-agent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A guard that tells you what it stopped.&lt;/strong&gt; When the shell gate stops &lt;code&gt;git reset --hard&lt;/code&gt;, &lt;code&gt;git clean -f&lt;/code&gt;, &lt;code&gt;git push --force&lt;/code&gt; or &lt;code&gt;rm -r&lt;/code&gt;, one line says what it would have discarded, overwritten or deleted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full list is in the &lt;a href="https://github.com/crewforth/crewforth/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supported stacks are Node/TypeScript, Python, Go, .NET, Java and Kotlin. Others are not mapped yet.&lt;/li&gt;
&lt;li&gt;Connections come from what the files show: imports, project references, HTTP calls. Wiring decided at runtime is missed.&lt;/li&gt;
&lt;li&gt;The scan is free. The descriptions run in your Claude Code session and cost tokens like any other work.&lt;/li&gt;
&lt;/ul&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;npx crewforth init      &lt;span class="c"&gt;# or: npx crewforth adopt, for an existing repo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/crew-map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and open the Map with &lt;code&gt;npx crewforth studio&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If it helps you find your way around a codebase, a star on &lt;a href="https://github.com/crewforth/crewforth" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; is the simplest way to tell me, and it helps other people find the project. If the map gets your project wrong, please open an issue with what it missed. That is the feedback I need most.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <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>
