Understanding Claude Code and using it effectively
Same tool, same model: some developers get entire features out of it, others get throwaway code. The difference isn’t in the prompt. It’s in the method, and in what you write before Claude writes the first line.
RBBy Rivel BabindamanaAbout a 55-minute read
Written for
devs
Tuesday, 10 a.m. Two developers on the same team open Claude Code on the same repository, with the same model and the same subscription. By noon, the first has shipped their feature, tests included, and has had time to reread every line. The second is looking at a fourteen-file diff for what was supposed to be a simple CSV export, and Claude assures them, with undiminished enthusiasm, that everything is done.
claude — ~/shop
> add a CSV export of orders● I’ll start by exploring the project structure…● Read src/orders/ · Grep "Order" · Read src/admin/…● I created a generic export service, reusable for
every entity, with a system of configurable columns,
and while I was at it I harmonized the date format. 14 files changed, +612 −88✓ Done! The CSV export is ready.
Nobody had asked it for a generic service. Nobody had forbidden it either. And that is what this whole article is about.
I use Claude Code in both my personal and my professional projects, and I’ve lived both versions of that Tuesday. I draw one simple conclusion from it:
With an agent like Claude Code, the prompt matters less than the organization.Organization comes down to four things, and the article covers them one by one.
What it knows
before it starts: the context, memory, the spec.
What it’s allowed to do
on its own, with your approval, or never.
How it checks
its work: tests, types, rendering.
Who reviews
at the end, and what gets pushed.
The question everyone asksWhat’s the best prompt for Claude Code?
The question I suggest insteadWhich way of working for which need, and what do I, myself, have to write so that the code it writes is the right code?
Since we’re talking to developers, the article is built like a Git branch: one commit per part, and a merge at the end. We start by opening the hood, because you can only drive well what you understand. Then come the seven ways of working with Claude Code, without judgment, then mine, with my reasons. We finish in the workshop, with configuration files you can copy, and a plan for your first week.
This article describes Claude Code as it stands at the end of October 2026. The tool changes every week: the principles will hold, the commands and options will shift. For up-to-date details, the reference remains the official documentation. I’ll update the article when the essentials change.
Part 1
Under the hood
You can only drive well what you understand. Before talking method, let’s open the hood: what Claude Code really is, what it sees, what it remembers, and who holds the wheel. Two images will help us, and will stay with us to the end of the article: a new colleague, for the way it works, and a car, for the way it is built and driven.
A harness, not autocomplete
Definition
Claude Code is not a model. It’s a harness: a program that runs on your machine and wraps an Anthropic model (Opus, Sonnet, Haiku or Fable) in tools, permissions, memory and a loop.
The word comes from the article “Understanding AI and mastering its jargon”. The model itself never touches your disk. It asks to read a file or run a command; Claude Code checks that it’s allowed, executes, and hands back the result. Then the model decides what comes next.
The loop: a simple request takes a few turns, a feature several dozen.
Key point
On every turn of the loop, everything that is read or displayed is added to the context. This detail explains half the advice in this article.
Image 1 · the colleague
A new colleague, every morning
A direct consequence of the loop: Claude Code doesn’t “know” your project. It discovers it in every session, by reading. Imagine a new colleague, brilliant and very fast, who shows up every morning with no memory of the day before. To work well with it, you need to know what it has in its head, what it can do with its hands, what it puts on its desk, and what it writes in its notebook.
Claude Codethe colleague who shows up every morning with no memory of the day before
Its brain= the model
It understands, reasons and decides. It’s also the car’s engine, further down.
Its hands= the tools
Reading, searching, editing, running a command. Without tools, it can only talk.
Its desk= the context
Everything it has in front of it while it works. Large, but not infinite.
Its notebook= memory
What survives the night: only what is written down in files.
Its equipment (the badge, the welcome sheet, the binder of procedures, the specialists it delegates to) is waiting in Part 4, in the workshop.
So before it starts, it knows only three things: what you wrote for it, what it noted down itself, and what it finds by searching. Everything else, it guesses. Let’s look at each trait more closely.
The colleague · its hands
The built-in tools
A tool is an action the model can request. Claude Code provides about ten, and you can add more (we’ll get to that in Part 4). You’ll see their names scroll by in the terminal.
Read and searchRead, Glob, Grep: open a file, find files by name, search their contents.
EditEdit, Write: replace a specific passage, or write a whole file.
RunBash: tests, build, git, any command. The most useful, and the most dangerous.
The webWebSearch, WebFetch: search, read a documentation page.
DelegateAgent: hand a subtask to a subagent, which works in its own context.
Get organizedA task list it keeps up to date as it works (Ctrl+T to show it).
Ask youMultiple-choice questions when a decision is yours to make.
ExtensionsTools from MCP servers and skills, which you add yourself.
The colleague · its desk
The context, its working memory
The article “Understanding AI and mastering its jargon” compared the context to a desk: everything the model needs in front of it to work is laid out there, and its size is limited. On recent models, Claude Code gets a huge desk, a million tokens, enough to lay out several thousand pages.
What’s already on it when you type your first message: the harness instructions, your CLAUDE.md files, the index of its auto memory, one line of description per skill, the tool definitions (for MCP servers, only the names are loaded at first; the details come on demand). After that, everything piles up: your messages, every file read, every command output, every answer.
First message
An hour later
Three tasks later
After the summary
Laid out at the start (instructions, CLAUDE.md, tools)Your messages and its answersFiles read, command outputsAutomatic summary
Illustrative proportions. To see yours, type /context.
When the desk nears its limit, Claude Code compacts it: it replaces the history with a summary, then reloads your CLAUDE.md files, its memory and the current plan. It’s convenient, and it’s a loss.
The image
Compaction is the minutes of a long meeting: the decisions remain, the nuances you spent twenty minutes explaining disappear.
Above all, a big desk is not a tidy desk. Anthropic acknowledges this itself in its writing on context engineering: the more loaded the context, the less precise the model’s attention. Specialists call it context rot, the context slowly going bad. An instruction given at the start of a long session carries less weight than the 300 lines of logs that followed. Hence the most profitable rule in this article:
One task, one session./clear between two unrelated topics. /compact followed by an instruction (“keep the decisions about the date format”) to carry on with a lighter load. /btw for a quick side question that isn’t added to the history. And subagents for broad searches: they read fifty files on their own desk and report back only their conclusion.
The colleague · its notebook
What it remembers
Since the desk is cleared every evening, everything that must last goes through files. Claude Code knows four kinds, and mixing them up is a classic source of disappointment.
Memory
The image
Who writes it
Where
When it’s read
CLAUDE.md
The welcome sheet handed to it every morning
You (and the team)
~/.claude/CLAUDE.md for you, ./CLAUDE.md for the project (versioned), CLAUDE.local.md for your personal notes (kept out of Git), one per subfolder if needed
At launch; those in subfolders when Claude reads a file there. An @path imports another file.
Rules
The note stuck on one specific cabinet
You
.claude/rules/*.md, which can be limited to certain files (paths:)
At launch, or when Claude touches the files concerned
Auto memory
Its personal notebook
Claude, on its own
~/.claude/projects/<project>/memory/, with a MEMORY.md index
The start of the index in every session; the rest on demand. /memory to view it or turn it off.
Sessions and checkpoints
The recording of the meeting, and the “undo” button
Claude Code
The history of each conversation
When you resume (claude -c, /resume) or go back (/rewind, Esc twice)
Advice, not a constraint
Claude reads the CLAUDE.md, almost always follows it, and may forget it in a busy session.
Anything that must never happen gets locked down with a permission or a hook (Part 4).
Not a substitute for Git
Checkpoints track the files Claude edits itself, not the effects of its commands.
An rm or a migration can’t be “rewound.”
Does your team use several agents? Claude Code also reads an AGENTS.md file, the format shared by other tools, when no CLAUDE.md is present. And nothing stops you from writing @AGENTS.md in your CLAUDE.md so you only maintain one file.
Image 2 · the car
One engine, one car, several bodies
The colleague tells us how Claude Code works. To understand how it’s built, and who drives it, let’s switch images. The article “Understanding AI and mastering its jargon” distinguished the model and the product the way you distinguish the engine from the car. Claude Code is a car built around an Anthropic engine. Each part matches a setting you’ll come across.
The same engine can power several bodies, and each car can be driven in several ways. That’s what the next three sections cover in detail.The car · the body
The surfaces: terminal, editor, web…
The same harness comes in several forms. They share your settings and your configuration files; what changes is where the loop runs and how you watch it.
Surface
What it brings
For whom, for what
The terminal
Every feature, first. Scriptable.
The reference. It’s where everything lands first.
VS Code, JetBrains
Diffs in the editor, the current selection as context.
The Pair, when you want to see each change in place.
The desktop app
Visual diff review, several sessions side by side, a browser preview.
Running several workstreams in parallel without juggling terminals.
The web (claude.ai/code)
Cloud sessions that keep going when you close your computer. claude --cloud starts one, claude --teleport brings it back.
Long tasks, or tasks started from another machine.
Mobile
Start and follow tasks; drive a local session remotely (/remote-control).
Unblocking the agent’s question from the subway.
Slack, GitHub, GitLab
You mention @claude in a thread, an issue, a pull request.
The team, and continuous integration.
claude -p and the Agent SDK
No interface: a command for scripts, a Python and TypeScript library for your own agents.
Automation, and people who build their own tools.
Installation (macOS, Linux, WSL), then launch inside a project
$ curl -fsSL https://claude.ai/install.sh | bash # Windows: irm https://claude.ai/install.ps1 | iex$ cd ~/my-project && claude # and claude doctor if something gets stuck
You need a paid Claude subscription (Pro, Max, Team or Enterprise) or an API account. Prices change often: the official page is the reference, and /usage tells you where you stand.
The car · the steering wheel
Who drives: the permission modes
It’s the most important setting, and the least looked at. It decides what Claude can do without asking you, in other words who holds the wheel. Shift+Tab cycles through the modes during a session, and the active mode is shown below the input box.
Planplan
You study the map, engine off.
Read-only. Claude explores, thinks and proposes a plan, without changing anything. /plan followed by the task takes you straight there.
To understand, design, prepare.
Manualdefault
The driving school: it drives, you keep your foot over the brake.
Claude asks for your approval before every file change and every command. You see everything go by.
For sensitive code, the step-by-step Pair.
Edit without askingacceptEdits
It drives alone in town; to get on the highway, it asks you.
File edits go through on their own, commands still ask. You review the diff at the end.
To carry out a plan you’ve already approved.
Autoauto
It drives, and a co-driver brakes as soon as it leaves the route.
A second model, a classifier, examines every action that is neither a read nor an edit in the working folder, and blocks anything that goes beyond your request: an escalation, unknown infrastructure, a hostile instruction read in a file. After three blocks in a row, it goes back to asking you.
The starting mode for new sessions in the terminal and VS Code.
UnattendeddontAsk
The driverless shuttle: authorized routes only.
Nobody is there to answer: anything not explicitly allowed is denied, without a question.
For scripts and continuous integration.
Anything goesbypassPermissions
The closed track: pedal to the metal, but on a circuit.
No more questions at all. Only the deny rules (deny) still hold, in this mode as in every other.
Only in a disposable container, with no secrets.
Good to know
Auto mode has become the default mode for new sessions.
To work as a Pair, you have to switch back to manual, once per session or once and for all in your settings.
Permissions aren’t the only barrier. /sandbox turns on operating-system-level isolation for shell commands: writes limited to the project folder, network filtered by a list of domains. These are our car’s guardrails: the permission decides whether a command can go, the sandbox limits what it can damage.
The car · the engine
Models, effort, thinking
/model chooses the engine (Option+P on Mac, Alt+P elsewhere). The aliases opus, sonnet, haiku and fable always point to the latest version of each family, and opusplan uses Opus to plan, then Sonnet to execute.
/effort sets the revs, that is, how hard it thinks, from low to max: more effort means a better answer on a hard problem, and more time and tokens on an easy one. The word ultrathink in a message pushes the thinking for that turn only. /fast turns on a fast mode for Opus, more expensive, in preview.
My rule of thumb
The engine
The revs
Planning, designing, debugging a tricky problem
The most capable
Default, higher if the first try fails
Executing a clear plan
A faster model
Default
Subagents digging through the code
The lightest
Default
4e1b0d2part 1: a harness, a loop, a context that fills up
You now know the colleague and its car: a loop that reads, acts and checks, a desk that fills up, a notebook made of files, and modes that decide who holds the wheel. With these same parts, you can drive in seven very different ways.
In the article “Will AI replace developers?”, I ranked AI tools for developers on an autonomy scale, from L0 (no AI) to L5 (from sentence to app). Claude Code sat at L4, among the agents. That was true, and incomplete: depending on how you use it, it covers almost the whole scale. Here are the seven uses I come across, ranked by who holds the wheel. None of them is the right one in absolute terms.
Each card follows the same format: the principle, an example request, the settings that go with it, and the trap. Skim the ones that don’t concern you yet, and try the switchman at the end.
1
The Explorer
Understand before you touch
Autonomy
You ask questions, Claude reads the code, the Git history, the documentation, and explains. It changes nothing. It’s the most underrated use of the tool, and often the most profitable: an unfamiliar codebase takes an hour to read instead of a week.
Best for
Joining a project, taking over old code, preparing an estimate, understanding a bug before fixing it.
Your place
In charge. You lead the investigation, it does the digging.
Settings
Plan mode (read-only). For broad questions, it will hand the digging to its Explore subagent, which reports back only its conclusion.
The trap
A fluent explanation is not a correct one. Demand references (file:line) and check one or two.
Example request
> Explain how an order goes from “cart” to “paid”.
Trace the path through the code, with file:line
at each step. Don’t change anything.
> Why is this test disabled? Look in the Git
history for who did it, when, and why.
2
The Pair
Step by step, every change approved
Autonomy
Pair programming, in the literal sense. You break the work into small steps, Claude proposes each change, you accept it, reject it or correct it. You stay in the code, and you interrupt it as soon as it drifts.
Best for
Sensitive code (payments, security, personal data), small fixes, learning a language or a codebase.
Your place
Right beside it, on every line.
Settings
Manual mode (default). The VS Code or JetBrains extension, to see each diff in place. Esc to stop it, Esc twice to go back to an earlier point.
The trap
Approval fatigue. By the thirtieth “yes,” you stop reading. If you approve without reading, switch methods instead of pretending.
Example request
> In src/pricing/discount.ts, the loyalty discount
is applied before VAT. It must be applied after.
First write the test that proves it, show it to me,
then propose the fix.
3
Plan then code
Agree before writing
Autonomy
Claude explores and proposes a plan in read-only mode; you amend it; it executes it in one go; you review the diff and commit. This is the “explore, plan, code, commit” cycle Anthropic recommended in its very first best practices, in 2025. It is still the best way in for anyone starting out with an agent.
Best for
A feature spanning a few files, a non-trivial bug, a localized refactoring.
Your place
Upstream (the plan) and downstream (the diff).
Settings
/plan or Shift+Tab to plan, then “edit without asking” to execute. The opusplan model alias is made for this. Ctrl+G opens your editor so you can write a long message comfortably.
The trap
Approving a plan you only skimmed. A ten-line plan for five files hides decisions Claude will make on its own. Read it like a code review.
Example request
> /plan Add pagination to the /orders API, by
cursor and not by offset. First look at how
/products does it. Propose a plan, and ask me
your questions before coding.
4
Spec-driven
The file is the reference, not the conversation
Autonomy
The plan doesn’t stay in the conversation: it becomes a file in the repository, with the need, the acceptance criteria, what’s out of scope, the steps and a tracking table. Each step runs in a fresh session, tests first, and the file outlives every session. It’s my method, detailed in Part 3.
Best for
Anything that lasts more than one session, anything headed for production, and team work.
Your place
Author of the spec, editor of the code.
Settings
Plan mode to write the spec with Claude, then “edit without asking” or auto for each step. /clear between two steps. A rule in CLAUDE.md that says how to read the file.
The trap
The novel-length spec and the dead spec. Too long, and nobody reads it, Claude included. And a decision made in the conversation without being written into the file no longer exists in the next session.
Example request
> I described the need in docs/workstream-csv-export/
NEED.md. Question me on what’s missing, then write
PLAN.md: criteria, out of scope, steps, tracking.
… (a few exchanges later, new session)
> step 2 of the file docs/workstream-csv-export/PLAN.md
5
The Prototype
Vibe coding, and proud of it
Autonomy
You describe, Claude produces, you judge by the visible result, without reading the code. This is the vibe coding described in the article “Will AI replace developers?”, and it is perfect for what it was invented for: explore fast, then throw away. Pasting a screenshot (Ctrl+V) is often enough to say what’s wrong.
Best for
Testing an idea, a demo, a personal tool, comparing several design directions.
Your place
Demanding client: you judge the screen, not the code.
Settings
Auto mode. In a separate folder or branch, ideally a worktree (claude -w mockups), so nothing gets polluted.
The trap
The prototype that ends up in production. Put “throwaway” in the folder name. If the idea is good, you start again from a spec, not from the prototype.
Example request
> Make three very different mockups of the home
page, in throwaway/home-a.html, -b and -c.
Throwaway code: aim for the effect, not quality.
> [Image #1] B, but with A’s title and
fewer colors.
6
The Orchestra
Several agents, in parallel
Autonomy
Several sessions work at the same time, each in its own Git worktree (a working copy on its own branch), or a main session hands out subtasks to subagents. A useful variant: one agent writes, another reviews, without sharing the same context, and so without the same blind spots.
Best for
Truly independent tasks, a migration that can be split up, a broad search, a cross-review.
Your place
Conductor: you assign, you arbitrate, you merge.
Settings
claude -w <name> creates the worktree and its branch, .worktreeinclude copies your unversioned files into it (.env). Ctrl+B or claude --bg for the background, claude agents to see everything. The desktop app shows sessions side by side.
The trap
The bottleneck is you. Three agents means three diffs to review, and “independent” tasks that end up touching the same files. Start with two.
Example
$ claude -w auth-migration # terminal 1$ claude -w payment-tests # terminal 2
> Launch three subagents in parallel to audit
orders/, billing/ and shipping/: dead dependencies,
duplicated code. Then give me a ranked summary.
7
The Robot
Nobody at the screen
Autonomy
Claude Code runs without an interface: in a script with claude -p, in your continuous integration, on a scheduled task, or when someone writes @claude in a GitHub issue. It works alone and delivers a result: a pull request, a comment, a report.
Reviewer of the deliverable, and author of the guardrails.
Settings
dontAsk mode and a list of allowed tools kept as tight as possible. --max-turns and --max-budget-usd as limits. --bare in scripts, to ignore the local configuration. On the GitHub side, /install-github-app installs the official action. /schedule creates a scheduled task in the cloud.
The trap
Prompt injection. A robot that reads issues reads text written by anyone. It delivers a pull request, never a push to the main branch, and never has access to production secrets (Part 5).
Example, in a script
$ claude -p "Fix the lint warnings without changing
behavior, then summarize your changes." \
--permission-mode dontAsk \
--allowedTools "Read,Edit,Bash(npm run lint *)" \
--max-turns 20 \
--output-format json
Which one to choose?
The choice depends less on the size of the project than on three questions: what you’re trying to get, what will become of the code, and the cost of a mistake. The switchman below asks them in order.
The switchman
My recommendationAnswer the questions above.
And to keep the big picture in view, here are all seven side by side:
Way
Starting mode
Your place
What to write
The main risk
1The Explorer
Plan
You investigate
Precise questions
Believing a wrong explanation
2The Pair
Manual
On every line
One step at a time
Approving without reading
3Plan then code
Plan, then edit without asking
The plan and the diff
The goal and the context
A skimmed plan
4Spec-driven
Plan, then auto
The spec and the diff
A complete spec file
A dead or overlong spec
5The Prototype
Auto, off the main branch
The visible result
The desired effect
That it ends up in production
6The Orchestra
Auto, one worktree per agent
Assigning and merging
Well-separated tasks
Being swamped by reviewing
7The Robot
dontAsk, listed tools
The deliverable
The instructions and the guardrails
Prompt injection
9c27f5apart 2: seven ways, from the Explorer to the Robot
I presented these seven ways without taking sides. You probably noticed that only one of them puts a file at the center rather than a conversation. That one is mine. Here’s why, and how I go about it, in practice.
The seven ways of working all have their place, and I use each of them at one point or another. But for anything that goes to production, I have one, and only one. It follows directly from what I argued in the article “Will AI replace developers?”.
From editor to spec
There I wrote that developers move from the role of author to that of editor, and that the spec becomes the real code again. In practice, I go one step further, and that is the heart of this article. Not a metaphor: a concrete way of organizing the repository and the working day.
The real code is the spec.The spec is the source. The code is derived from it.
The history of the profession has seen this shift before. When developers moved from assembly to languages like Java, source code changed language. Compiled code didn’t disappear: it became a derivative, regenerated at every build, that no one writes by hand anymore. With Claude Code, I’m living through a shift of the same order. The source is the specification, written in English in a file in the repository. The code is derived from it.
With each leap, you write one level higher, and the old source becomes the derivative: yesterday’s source code is what Claude Code produces today. Only one column really changes in nature: the action.
The same intent, in three eras. The table follows the columns of the diagram, with one line of code each time:
Before: assembly
Yesterday: Java
Today: Claude Code
You
write every instruction for the processor
write the logic, in a readable language
write the intent and the rules, in English
The source
imul eax, [qty] in boutique.asm
total = price * qty; in Boutique.java
The total is the price times the quantity, in cents. in PLAN.md
The tool
the assembler: one line gives one instruction
the compiler: one line gives several instructions, always the same ones
Claude Code: one sentence gives several lines, never quite the same ones
The derivative
0F AF 05 …, the binary
the bytecode, Boutique.class, that no one writes anymore
total = price * qty;, yesterday’s source
The action
you run it
you run it, without reading it
you read it, question it, test it, then approve it
If it’s wrong
you fix boutique.asm
you fix Boutique.java and recompile; never the bytecode
you fix the spec first, then regenerate
We used to write Java. Now we write English, and read the Java.
RBRivel Babindamana Developer
The difference that changes everything
This compiler has imagination. A compiler like javac produces the same bytecode every time and never takes the initiative. Claude does.
Two consequences. The spec must be precise wherever imagination would be costly. And the output must be reviewed, which no one ever does with bytecode: that’s where the editor gets back to work.
Coding as a pair: who does what
I haven’t stopped coding. I code as a pair, and each of us has our own lines. The split is nothing theoretical: it’s the one I find in every workstream.
Me
the intent, and the why
the constraints and what’s off limits
what’s out of scope
the breakdown into steps
the acceptance criteria
the trade-offs along the way
the review: question, decide, approve before pushing
The planthe only file we truly write together. That’s why it’s the reference.
Claude
explore the existing code
ask me the questions I forgot
propose a plan, and its variants
write the code and the tests
run the checks
explain its choices when I question them
update the progress table and the documentation
flag what doesn’t add up
The cycle of a workstream
Definition
I call a workstream any piece of work that spans more than one session: a feature, a redesign, a migration.
Every workstream follows the same six-stage cycle.
MeThe intent
I write the need in ten lines, as I would to a colleague: the problem, who it’s for, what’s out of scope. Then I ask Claude to question me before writing anything. Its questions always reveal a gap.
TogetherExploration and plan
In plan mode, Claude reads the code without changing anything and proposes an approach. I amend it, decide between the variants, cut whatever goes too far.
TogetherThe plan becomes a file
The approved plan is written to docs/workstream-<name>/PLAN.md: the need, the steps, the shared rules, a progress table. It is versioned like code.
ClaudeOne step, one session
I run one step at a time, in a clean session. Claude carries it out, checks it (tests, types, rendering), commits it locally and ticks the progress table. Nothing goes to the shared repository yet.
MeThe reviewThe biggest part of the job
I read the diff and I question it. The spec first, then everything else: the libraries, the approach, the architecture, the naming. Every approved decision goes into the spec. And I only push what I have approved.
TogetherWrapping up
Lasting decisions go into the permanent documentation (architecture, design). The workstream folder is deleted: Git history keeps it.
Here’s what the file looks like, for our Tuesday-morning CSV export:
docs/workstream-csv-export/PLAN.md
# Workstream: CSV export of orders> Temporary folder. Lasting decisions will go into docs/ARCHITECTURE.md,
> then this folder will be deleted.## Need
At the end of every month, accounting matches paid orders against bank transfers.
Today, they copy and paste from the admin, page by page.
## Acceptance criteria
- “Export” button on /admin/orders; the list filters apply.
- Columns: no., date (YYYY-MM-DD), customer, total incl. tax, status.
- Semicolon separator, UTF-8 with BOM (otherwise Excel mangles accents).
- 50,000 rows without exhausting memory: streamed writing.
- Restricted to the `accounting` role; every export is logged.
## Out of scope
- No generic export for other entities. No PDF.
## Shared rules
- Follow docs/ARCHITECTURE.md § Admin. No new dependencies.
- Tests first. `npm test` and `npm run lint` green before each commit.
- Never modify an existing migration.
## Progress
| Step | Content | Status |
|-------|----------------------------------------------|--------|
| 1 | Format tests (headers, dates, BOM) | ✅ |
| 2 | Streamed export service + `accounting` role | ⬜ |
| 3 | Admin button + logging | ⬜ |
| 4 | Trial on 50,000 rows, documentation | ⬜ |
With this file, Tuesday’s generic service would never have existed: it’s written in black and white under “Out of scope”. For Claude to know what to do with the file, a single rule in the project’s CLAUDE.md is enough:
CLAUDE.md (excerpt)
When the user writes “step X of file …”, carry out exactly that
step following the file’s “Shared rules”, then update
its “Progress” table.
And the working session then fits in one line:
claude — ~/boutique
> step 2 of file docs/workstream-csv-export/PLAN.md● Read docs/workstream-csv-export/PLAN.md · Read docs/ARCHITECTURE.md● Step 2: streamed export service and “accounting” role.● Update src/admin/orders/export.ts · Update src/auth/roles.ts● Bash npm test48 passed, 0 failed● Bash npm run lintok● Update docs/workstream-csv-export/PLAN.mdstep 2: ✅✓ Step 2 committed locally, ready for your review.
Heads-up: the date filters use local time,
and the spec says nothing about time zones. Decide before step 3?
The last line is my favorite. A good pair partner doesn’t just execute: it surfaces the gaps in the spec. And the answer, whatever it is, will go into the file, not into the conversation.
The review, the biggest part of the job
Reading a diff isn’t about hunting for typos. It’s where a developer’s experience weighs the most, and it’s where I spend the most time. It happens in a precise order.
1
First, the spec
Does the code do what the spec says? And does the spec say what I want? If the error comes from a vague spec, that’s what I fix first, before the code. It’s the most important fix: it holds for every session that follows.
2 · Then, everything an experienced developer knows how to question
The libraries
Why this one? Did we need one more dependency?
The approach
Why a generic service rather than a twenty-line function?
The architecture
Is the code in the right place? Are the layers respected?
The language and the framework
Is it idiomatic? Doesn’t the framework already do this?
The naming
Does the name say what the code does? Does it follow the project’s conventions?
The tests
Do they test the behavior, or only the implementation?
Every question follows the same path. What matters is the second-to-last step: an approved change that doesn’t make it into the spec will be forgotten by the next session.
I questionClaude explains, or proposes something elseI decidethe decision goes into the specClaude regeneratesI approvegit push
claude — ~/boutique · review of step 2
> Why csv-stringify? The shared rules say
“no new dependencies”.● Right. I added it to escape the fields. I can
write a tested streaming generator of about thirty lines.> Do it. And rename exportOrders to streamOrdersCsv: in this
project, streaming functions start with stream. Add
this convention to the plan’s shared rules.● Update src/admin/orders/export.ts · Update package.json● Update docs/workstream-csv-export/PLAN.mdrule added● Bash npm test51 passed, 0 failed✓ Dependency removed, function renamed, convention in the plan.
Only push what has been approved.Claude can commit locally as much as it likes. The push comes after the review, never before.
This isn’t a lab method. I’ve tried it out.
The five rules I don’t negotiate
rule 1
Fix the spec, not just the code
When Claude gets it wrong, I first ask myself whether the spec allowed it to get it wrong. If so, I fix the spec, then run it again. It’s the first fix, and the most important one. Fixing the code by hand is patching a binary: it works until the next build.
rule 2
What isn’t written down doesn’t exist
A decision made in a conversation disappears with it, or gets diluted in the first automatic summary. Its automatic memory doesn’t change much: it notes what it considers useful, not necessarily what you decided. Everything that must outlive the session goes into a file: the plan, the CLAUDE.md, the documentation.
rule 3
One step, one verifiable commit
Every step ends with a check that Claude can run on its own: tests, a type check, a screenshot. A step that can’t be checked is a badly cut step. And an “everything else” step isn’t a step.
rule 4
I approve before pushing
That’s the editor’s job, and the biggest part of my work. I don’t read every line with the same intensity, but I question everything that commits what comes next: a dependency, an approach, a name. Nothing gets pushed without my approval. The day I approve without reading, I’m vibe coding without admitting it.
rule 5
Production goes through me
Deploying, migrating a production database, touching secrets: Claude can prepare, never launch on its own. The project’s CLAUDE.md spells it out, and the permissions lock it down.
Why it works
There’s nothing magic about this method. It answers, point by point, the colleague’s limits described in Part 1:
What the machine doesWhat the method does
Its desk degrades as it fills up.One step per session keeps it small.
Its notebook keeps only what it chooses to write down.The plan keeps what we decided together.
It works better when it can check its work.Every step ends with a check.
It has imagination.The “out of scope” section and the review channel it.
I’m not the only one converging on this shape. For its agents that work over long periods, Anthropic describes a similar setup: a feature list and a progress file that the agent rereads at every new session, with work carried out one feature at a time. The spec-driven development tools cited in the article “Will AI replace developers?”, such as GitHub’s Spec Kit or AWS’s Kiro, point the same way. The name will change. The principle holds:
The more code AI writes, the more what’s written beforehand matters.
When I depart from my method
A method applied everywhere becomes a dogma. Here’s when I do things differently.
Situation
What I do
Why
A typo, an obvious bug, a rename
2The Pair, directly, no plan
Writing a plan would take longer than the fix.
Choosing a design
5The Prototype: three throwaway mock-ups, then I pick
It’s easier to judge on the real thing.
Code I don’t know
1The Explorer, before anything else
You can only specify well what you understand.
A repetitive, verifiable task
7The Robot
If the check is automatic, my review can focus on the result.
b81e04cpart 3: the spec is the reference, the code derives from it
A method is good. Files that carry it are better. Time to move to the workshop: where to put what, how to write it, and which tools to add to the box.
A good method rests on a well-organized workshop. Claude Code offers half a dozen configuration building blocks, similar enough to be easily confused. Back to our colleague: in Part 1, we saw its brain, its hands, its desk and its notebook. Time to equip it. This part says what goes where, what each block is for, and gives you files ready to adapt.
The colleague · its equipment
Equipping the colleague
Each configuration block matches an object you would hand a new colleague so they work well, and for a long time. The colors in this portrait are the colors of the labels throughout this part.
Claude Codethe same colleague, equipped to last
The welcome sheet= the CLAUDE.md
What it needs to know when it arrives, every morning.
The note on the cabinet= a targeted rule
An instruction it only reads when opening that particular cabinet.
The binder of procedures= skills
It reads the label on the spine, and only opens the sheet when needed.
The specialists= subagents
Sent on a mission with their own desk, they come back with one page.
The security gate= hooks
It goes off without fail, whatever the colleague decided.
The badge= permissions
The doors it opens alone, the ones where it rings, the ones that stay shut.
The sockets= MCP servers
To plug into the company’s tools: tickets, errors, browser.
The toolkit case= plugins
A complete kit, ready to use, installed in one go.
The workshop layout
Here is where to put all of this, in the tree of a well-equipped project. You don’t need everything on day one: a CLAUDE.md and a settings file are enough to start. The rest gets added when a need keeps coming back.
my-project/
├── CLAUDE.mdthe project’s welcome sheet, versioned
├── CLAUDE.local.md your personal notes, outside Git
├── .mcp.jsonthe team’s MCP servers
├── .worktreeinclude files to copy into each worktree (.env)
├── .claude/
│ ├── settings.jsonthe team’s permissions and hooks, versioned
│ ├── settings.local.json your settings for this project, outside Git
│ ├── rules/targeted rules: tests.md, api.md…
│ ├── hooks/the scripts called by the hooks
│ ├── skills/one folder per piece of know-how
│ │ └── release/SKILL.md
│ └── agents/one file per specialist
│ └── reviewer.md
├── docs/
│ ├── ARCHITECTURE.md the map: the what and the how
│ ├── CONCEPTION.md the decisions: the why
│ └── workstream-csv-export/temporary: PLAN.md
└── src/ …~/.claude/your settings, valid in all your projects
├── CLAUDE.md your preferences: language, style, habits
├── settings.json
├── skills/agents/rules/
└── keybindings.json
When to use what
All these blocks change Claude’s behavior, but not in the same way. The most important distinction fits in two words:
CLAUDE.md is advice.
Claude reads it and follows it almost always. Almost. In a busy session, an instruction can slip through the cracks, and the official documentation says so itself.
A hook is a law.
A script that runs without fail, at a precise moment, whatever the model “decided.” Same for a permission rule. What must never happen gets locked down there.
The image
A “No smoking” sign doesn’t detect smoke. A detector does. Write the sign in the CLAUDE.md, install the detector with a hook.
Block
It’s…
Loaded when
For
Example
CLAUDE.md
standing advice
at launch
what it needs to know in every session
test commands, the don’ts
Rule
targeted advice
when it touches the targeted files
the conventions of one part of the code
“tests don’t use mocks”
Skill
a piece of know-how
the description always, the content on use
a recurring procedure
publishing a release
Subagent
a specialist, with its own context
when Claude delegates to it
reading a lot, or bringing fresh eyes
a reviewer
Hook
a law
on a specific event
what must never be forgotten
formatting after every edit
Permission
a right
on every tool call
what it can do alone, or never
allow the tests, forbid .env
MCP server
a connection
names at the start, details on use
talking to the team’s tools
GitHub, Sentry, a browser
Plugin
a bundle of all of the above
at install
sharing a configuration
a turnkey code review
The colleague · its welcome sheet
CLAUDE.md: short, precise, alive
/init writes a first draft of CLAUDE.md by reading your project. It’s a good starting point, and a bad end point: it often describes what Claude could find on its own. A good CLAUDE.md says what the code doesn’t. The documentation recommends staying under 200 lines; a good file often fits in far fewer.
The CLAUDE.md that does nothing
# My project
This project is a modern, high-performance
web application.
Write clean, maintainable code.
Follow best practices.
Be careful about security.
The code is in src/. Components are
in src/components/. Tests are in
tests/.
[followed by 400 lines copied from the wiki]
generic advice the model already applies
a description ls gives you in one second
a length that drowns the two lines that matter
The one that changes everything
# Shop: API and admin
Node 24, Fastify, PostgreSQL.
## Commands
- `npm test`: unit tests, fast
- `npm run test:e2e`: slow, only when asked
- `npm run check`: types + lint, after every edit
## Rules
- SQL only in src/db/queries/.
- Amounts in cents (integers), never floats.
- New table = new migration. Never
modify an existing migration.
- Never run `npm run deploy`.
## Pointers
- Architecture: @docs/ARCHITECTURE.md
- “step X of file …”: run that step,
follow its common rules, tick the tracker.
the exact commands, and when to run them
the rules no model can guess
pointers rather than copies (@ imports a file)
Treat it like code: it gets reviewed in pull requests, and it gains a line every time Claude repeats the same mistake. That’s rule 1 from part 3, applied to configuration.
The colleague · its badge
Permissions: write down the rights once and for all
Rather than answering “yes” fifty times to npm test, write it into the permissions. Each rule targets a tool, and optionally a pattern: Bash(npm run check) for an exact command, Bash(git diff *) for every command that starts that way, Read(./.env) for a file. Denials (deny) take precedence over questions (ask), which take precedence over approvals (allow).
Settings stack up: yours (~/.claude/settings.json), the team’s (.claude/settings.json), yours for this project (.claude/settings.local.json), and, in companies, settings managed by the administrator, which override everything. /permissions shows the result, /status where each setting comes from. One limit to know: a deny rule on a shell command is a safety net, not a wall, because there are a thousand ways to write the same command. For truly sensitive files, add the sandbox (/sandbox), which filters at the system level.
The colleague · the security gate
Hooks: the law
A hook is a command Claude Code runs on a specific event: before or after a tool is used, when a message is sent, at the end of a turn, when a session starts, when Claude is waiting for your answer. There are about thirty of them. The hook receives the event details as JSON on its standard input. If it exits with code 2, the action is blocked, and its error message is sent back to Claude as an explanation.
#!/usr/bin/env bash
# Blocks edits to sensitive files.
file=$(jq -r '.tool_input.file_path // empty')
case"$file"in
*.env|*.env.*|*package-lock.json)
echo "Protected file: $file" >&2
exit 2 ;;
*/migrations/*)
if [ -e "$file" ]; then
echo "Existing migration: create a new one." >&2
exit 2
fi ;;
esacexit 0
The first hook formats every edited file: no more “remember to run Prettier” in the CLAUDE.md. The second turns the rule “never modify an existing migration” from advice into law. Another use I recommend: a hook on the Stop event, which runs the tests when Claude thinks it’s done, and sends it back to work if they fail. /hooks lists the active ones. And remember that a hook is a program running with your permissions: one that comes with a cloned repository gets read like any other script.
The colleague · its binder of procedures
Skills: the know-how
A skill is a folder containing a SKILL.md file: a name, a description, then instructions, and possibly scripts or templates alongside. Only the description is loaded at startup, one line per skill. The content only enters the context when the skill is used, either because you type /release, or because Claude recognizes the situation from the description. Like a binder where you only read the spines, you can have dozens of them without cluttering the desk. The old custom commands (.claude/commands/) still work, but skills replace them.
.claude/skills/release/SKILL.md
---name: release
description: Prepares a new release (changelog, version number, tag).
Use when asked to publish, ship or deliver a release.
disable-model-invocation: true
---# Publish a release
1. Check that we’re on main, up to date, and that `npm test` passes.
2. List the commits since the last tag and sort them
(additions, fixes, breaking changes).
3. Propose the version number (semver) and wait for my approval.
4. Update CHANGELOG.md, then run `npm version <number>`.
5. Don’t push anything: display the `git push --follow-tags` command.
The line disable-model-invocation: true reserves triggering for you alone: for a procedure with side effects, I don’t want Claude deciding on its own that the time has come. Skills follow an open standard, Agent Skills, which other tools read too. Anthropic publishes examples in the anthropics/skills repository (including those that handle Word, Excel, PowerPoint and PDF files), and an official plugin, skill-creator, helps you write your own.
The colleague · its specialists
Subagents: the specialists
A subagent is an instance of Claude with its own prompt, its own tools, its own model, and above all its own context. Claude Code ships three: Explore (search the code, read-only), Plan (prepare a plan) and a general-purpose agent. They serve three purposes: protecting the main desk from a search that would read fifty files (the specialist reads them on its own desk and comes back with one page), bringing fresh eyes to a piece of work, and parallelizing. You write your own in Markdown:
.claude/agents/reviewer.md
---name: reviewer
description: Reviews a diff with fresh eyes. Use at the end
of each step of a workstream, before the commit.
tools: Read, Grep, Glob, Bash
model: opus
---
You are a demanding reviewer. You are given a PLAN.md step and a diff.
Check, in this order:
1. The diff does what the step says, and nothing more (read “Out of scope”).
2. Edge cases: empty values, large volumes, time zones.
3. Security: access rights, personal data, injections.
Answer with a ranked list: blocking, to fix, suggestion.
Don’t modify any file.
This reviewer hasn’t seen the conversation that produced the code. That’s precisely what makes it useful: it doesn’t share the author’s blind spots. It prepares your review, it doesn’t replace it. Other options exist, like isolation: worktree so a subagent works on its own copy of the repository, or background so it runs while you keep working.
The colleague · its sockets
MCP: plugging the workshop into the rest of the company
The Model Context Protocol, introduced in the article “Understanding AI and mastering its jargon” as a standard socket, lets you plug Claude Code into your tools through MCP servers: tickets, production errors, database, browser, documentation. You add an MCP server with one command:
$ claude mcp add --transport http github https://api.githubcopilot.com/mcp/
$ claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
$ claude mcp add --scope project playwright -- npx @playwright/mcp@latest
Three scopes: local (the default: just you, this project), project (in .mcp.json, versioned, approved by each person on first use) and user (you, all your projects). /mcp shows their status and handles authentication. Since Claude Code only loads tool names at the start, plugging in several servers costs little context. The real cost lies elsewhere: each server is a door. Treat it like a dependency: a source you know, and minimal rights, for example a read-only token.
Code and tickets
GitHub, GitLab, Linear, Jira, Asana: read an issue, open a pull request.
Production
Sentry for errors, a read-only database to check a hypothesis.
The browser
Playwright, so Claude opens the page, clicks, and checks its own work.
Documentation
Notion for your documents, Context7 for up-to-date library documentation, Figma for mockups.
The colleague · its toolkit case
Plugins: the ready-made toolkit case
A plugin bundles skills, subagents, hooks, MCP servers or language servers (LSP) into a package you install with one command. /plugin opens the catalog. Anthropic’s official marketplace, claude-plugins-official, is added automatically; a community marketplace exists alongside it. Careful: “official” refers to the catalog. Most of the plugins in it come from partners, and Anthropic itself maintains a smaller selection. Here are the ones from that selection I find most useful:
A guided path for a feature: exploration, architecture, implementation, review.
Gitcommit-commands
Commit, push and open a pull request in one command.
Securitysecurity-guidance
Flags dangerous patterns while writing, reviews the diff at the end of the turn, and checks commits (injections, XSS, hardcoded secrets…).
Qualitycode-simplifier
An agent that simplifies the code you just changed, without changing its behavior.
Interfacefrontend-design
A skill for interfaces that don’t look like all the others.
Configurationclaude-md-managementhookify
Maintain your CLAUDE.md, and create hooks by describing them in plain language.
Navigationtypescript-lsppyright-lspgopls-lsp…
The LSP plugins: Claude navigates the code like your editor does (definitions, references, errors).
Going furtherskill-creatorplugin-dev
Write your own skills and plugins, with Claude’s help.
Autonomyralph-loop
Re-runs the same instruction in a loop until the work is done. Keep it for the robot, with guardrails.
Learninglearning-output-style
Claude lets you write the key pieces yourself, and explains its choices.
Claude Code also ships ready-to-use skills: /simplify to clean up a diff, /verify to check a change in the real application, /loop to repeat a task at an interval. And the /code-review command runs a local review at several levels of rigor, up to ultra, a multi-agent review in the cloud. For everything else, one rule: a plugin can contain hooks and MCP servers, which means code that runs on your machine. Install it the way you would install a dependency.
Four typical setups
To make this concrete, here are four typical workshops, from the lightest to the most fully equipped. Pick the one that looks like yours and remove what you don’t need.
The personal project
One developer, one repository, an urge to move fast
A twenty-line CLAUDE.md: the stack, the commands, three rules.
Auto mode by default, plan mode for features.
The LSP plugin for your language, and commit-commands.
A throwaway/ folder in the .gitignore for prototypes.
The product team
Several developers, code in production
CLAUDE.md and .claude/settings.json versioned, reviewed in pull requests like code.
Formatting and protection hooks; secrets and deployment under deny.
Two or three in-house skills (release, migration, new screen) and a reviewer subagent.
.mcp.json with GitHub, Sentry and the ticketing tool; the GitHub action for @claude.
Company-managed settings for the non-negotiable rules.
The old monolith
Lots of code, little documentation, no wish to break everything
Two weeks of the Explorer before any change.
A docs/ARCHITECTURE.md written by Claude, corrected by you, then imported into CLAUDE.md.
Rules per area (.claude/rules/ with paths:) rather than one giant file.
Characterization tests (which freeze the current behavior) before each refactoring; the Pair on critical areas.
The robot room
Agents that run without you
A development container, modeled on the one Anthropic publishes, with an outbound firewall.
No production secrets, no ~/.ssh mounted.
claude -p --bare, dontAsk mode, tools listed one by one, capped budget.
Only one possible way out: a pull request, reviewed by a human.
Commands worth knowing
There are many more, and the list grows every month. Here are the ones I actually use, grouped by moment. Type / in a session to see every command available to you, and check the official list of commands, the list of keyboard shortcuts and the list of command-line options.
Command
What it does
Starting
claudeclaude "task"
Opens a session, with or without a first instruction.
claude -cclaude -r
Resumes the last session, or picks one from the list. /resume from inside a session.
claude -w name
Opens the session in a new Git worktree, on its own branch.
/init
Writes a first CLAUDE.md from the project.
Steering
Shift+Tab/plan
Switches permission mode; enters plan mode with a task.
Esc
Interrupts Claude, without losing the work done.
EscEsc/rewind
Goes back to an earlier point: the code, the conversation, or both.
@file!command
Mentions a file; runs a shell command whose output joins the session.
Ctrl+VCtrl+G
Pastes an image (a screenshot); opens your editor for a long message.
Ctrl+B/tasks
Sends a command or an agent to the background; lists what’s running.
/btw
Asks a side question without adding it to the history.
Context and cost
/context
Shows what is taking up the context, by category.
/clear/compact
Starts from scratch; or summarizes, with an instruction on what to keep.
/model/effort/fast
Picks the model, the thinking intensity, fast mode.
/usage
Your usage and your limits.
Configuring
/memory
Opens the CLAUDE.md files and auto memory.
/permissions/status/config
The rights in effect; where each setting comes from; preferences.
/hooks/agents/mcp/plugin
The state of hooks, subagents, MCP servers, plugins.
/statusline/keybindings
Customizes the status line (model, context, cost) and the shortcuts.
Reviewing and shipping
/code-review
Reviews the work in progress or a pull request, from level low to ultra; --fix applies the fixes.
/security-review
Security analysis of the branch’s changes.
/install-github-app
Installs the GitHub action that responds to @claude.
Automating
claude -p
Headless mode, for scripts and continuous integration.
/schedule/loop
A scheduled task in the cloud; an instruction repeated at an interval within the session.
claude --cloud/remote-control
Launches a session in the cloud; drives the local session from the web or your phone.
claude doctor
Diagnoses the installation when something doesn’t work.
d3f6a19part 4: a tidy workshop, every block in its place
The workshop is in order. What’s left is merging all of this into your daily work without breaking production: the mistakes everyone makes, the security people forget, and a plan for the first week.
Everything above only counts if it makes it into your working days. This last part gathers the mistakes I see most often (I’ve made every one of them), what agents change about security, and a one-week program to get started without getting burned.
The ten mistakes everyone makes
The never-ending session“It forgot what I told it earlier.”
One task, one session. /clear between two topics, and whatever needs to last goes in a file.
The one-sentence request“Fourteen files for a CSV export?”
Say what’s out of scope, point to existing code to imitate, and give the criterion that says it’s done.
Correcting in the conversation“It’s making the same mistake as on Monday.”
Fix the source: one line in CLAUDE.md, a clarification in the spec.
No verification“It said ‘done’, and nothing works.”
Give it a way to check on its own: a test command, a type check, a screenshot. A Stop hook if needed.
Accommodating tests“The tests pass… because it changed them.”
Write the tests first, approve them, then forbid touching them during implementation. Always review the tests first.
Stubbornness“Fourth attempt, and it’s worse than at the start.”
After two failed corrections, rewind (Esc twice) or start over with what you’ve learned. A context polluted by failures produces more of them.
The novel-length CLAUDE.md“But it’s written right there, line 312.”
Short, specific, with pointers. Whatever must never happen goes into a hook or a permission.
Allowing everything to go faster“I was tired of clicking yes.”
Auto mode, written permissions and the sandbox. “Anything goes” mode only in a throwaway container.
The promoted prototype“It worked in the demo, so we kept it.”
A prototype is for deciding. For production, you start again from a spec, carrying over what the prototype taught you.
Measuring your impression“I’m twice as fast, I’m sure of it.”
The METR study cited in the article “Will AI replace developers?” showed it: your impression lies. Measure the time to merge, and what has to be reworked afterwards.
Security: what an agent changes
An assistant that suggests code does nothing on its own. An agent does: it runs commands with your permissions, on your machine, and it reads a lot of text it didn’t choose. A dependency’s README, a GitHub issue, a web page, a comment in a file: any of them can contain instructions written for it. That’s prompt injection, and no model is fully immune to it. The Claude Code documentation says so plainly.
British developer Simon Willison gave the most dangerous case a name: the lethal trifecta. An agent that combines the three capabilities below can be manipulated into leaking your data. The defense is simple to state: always take away at least one of the three.
The lethal trifecta, after Simon Willison (2025). A robot that reads public issues necessarily touches “untrusted content”: so you have to take away its access to secrets or its external communication, and ideally both.
In practice, six habits cover the essentials:
Secrets out of reach
deny on .env and key folders, and no production keys on the machine where the agent runs.
The sandbox
/sandbox limits writes to the project and the network to a list of domains. Auto mode adds a classifier that spots hostile instructions.
Extensions are dependencies
MCP servers, plugins, hooks from a cloned repo: code that runs on your machine. Check the source.
Read before approving
A command with curl, a push, a change to the CI: that’s where your attention should go.
Autonomy in a container
The more autonomous the agent, the more isolated its environment must be. Anthropic publishes a reference development container for this.
In companies
Managed settings, enforced for everyone, for what isn’t negotiable: allowed MCP servers, prohibitions, disabled modes.
Your first week
If you’re just starting, don’t read all this as a checklist to tick off in one go. Here’s the progression I recommend, one day per way of working.
Monday1The Explorer
Install it and launch it in a project you know by heart.
In plan mode, ask ten questions you already know the answers to.
Note where it gets things wrong: that’s your trust benchmark.
Tuesday2The Pair
/init, then cut the CLAUDE.md in half and add your commands and three rules.
Fix a small bug in manual mode, step by step.
Wednesday3Plan then code
A real feature, with /plan.
Read the plan like a code review, and amend it.
/context before and after: watch what fills up.
ThursdayThe workshop
Permissions: tests in allow, secrets in deny.
A formatting hook, the LSP plugin for your language.
A throwaway prototype in a worktree, just to see.
Friday4Spec-driven
Write, with Claude, the PLAN.md for next week’s workstream.
Add a reviewer subagent.
Record in CLAUDE.md what the week taught you.
The Robot and the Orchestra can wait until the second week. You only delegate well what you’ve first done yourself with the tool.
Your turn
As in the article “Will AI replace developers?”, I’ll end with the questions I’m still asking myself. I’d like to hear your answers.
If the spec becomes the source code, will we have to test it like code? And how do you test a sentence?
How many agents in parallel can a developer really review before becoming a diff rubber stamp?
Will beginners learn the job by writing code, by reading Claude’s, or by writing specs?
And you: which of the seven ways do you use most? Which one have you given up, and why?
To reply, write to me by email or on LinkedIn. I’m always happy to reply, as my schedule allows, sometimes a little late, but I always reply.
If you enjoyed this article, follow me on X, Facebook, LinkedIn and Instagram to hear when my book on AI comes out. It will go further than my articles, with the same rigor, the same method and the same approach to writing.
$ git merge --no-ff my-method
Merge made by the 'ort' strategy.
Claude Code writes faster than I do, reads faster than I do, and never gets tired. But it doesn’t know what I want until I’ve written it down. My code now starts with a sentence in English. And I’m still the one who signs it.
RBRivel Babindamana Developer, October 2026
PS: this article was prepared with Claude Code, following the method it describes: a workstream folder, a plan, steps, and a human review before publication.