Rzemiosło · The Craft
What is The CraftLevelsGet startedChapters Search Download PLEN
Level 1 · Business ~3 min read

In one sentence: Plan → iterate → review, confirm irreversible things and report honestly — even when something didn’t work.

This chapter in plain terms

A chapter about how to work well with the assistant and how not to lose context between conversations.

The most important rhythm: plan → iterate → review. Before the AI does something at scale, it should show a plan or a small sketch (three examples, not a hundred), you give feedback, and only then do you scale up. That saves producing hundreds of things to throw away.

The second rule: confirm what’s irreversible or “external” — sending an email, publishing, deleting data, deploying live. And remember that approval in one place doesn’t extend to the next: “deploy this” doesn’t mean “always deploy everything”.

There’s also memory (memory/) — a place for what can’t be read from the code: who you are, how you prefer to work, what the business goal is. You don’t store there things the repo already knows (code structure, git history).

Finally — close a piece of work with a scannable summary (what changed, proof it works, next steps), not a wall of text. You match the depth to the reader: a technical one gets hashes and numbers, a non-technical one a plain “what changed and what’s next”.

The whole boundary in one table (permission map). Instead of gathering rules from six chapters, the boundary sits in one place, in three columns: allowed (read, test, commit locally, Dry-run — A “dry” run — the script shows what it WOULD do but changes nothing. You see the effects before executing; a data change happens only after deliberate confirmation.), ask first (deploy, push, prod Migration (database) — A controlled change to the database layout — adding a column, a table or moving data — step by step. Like a renovation to plan: rebuilding data in a set order so nothing “collapses”., emails to people), never (invent legal data, commit secrets, weaken tests, report “it works” without proof). The left column is deliberately wide — that’s what makes autopilot safe.

Handing over the baton when context runs out. A long session doesn’t end — it gets summarised, and the summary loses the why you chose this over that, and the half-finished state in the tree. So ship in commits, not in the conversation; record a decision the moment you make it (CLAUDE.md/ADR); durable facts go to memory/; leave a readable git status — that’s the handoff to the next session. The test: would it pick the work up from the repo alone, without this conversation?

Example of iterating: you make social-media graphics 3 → fixes → 10 → fixes → 100. Never the other way round — because a fix on three is free, on a hundred it hurts.

Read more: Claude Code best practices · project memory in Claude Code.

06 — Collaboration and Memory

Commandments VI and X: how we work together and how we keep from losing context.

Collaboration style (user + Claude)

  • Plan → iterate → review. First show a plan or a small sketch (3 examples, not 100), gather feedback, then scale. OG cards in the reference project: 3 → fixes → 10 → fixes → 100. Never the other way around.
  • Recommend; don’t lay out a menu of options. When weighing a choice, give a recommendation with reasoning, not an exhaustive list you won’t act on anyway. Ask only when the answer genuinely changes what you do next (and when it doesn’t follow from the code or a sensible default).
  • Verify numbers at the source — not from memory, not from docs.
  • UX with warmth. Correctness is the minimum; the product should be pleasant. Aesthetics and tone matter (especially in sensitive products: minimalist, but warm).
  • Speak the user’s language. Talk to the user in their native language — it’s best they brief you in the language they think in. Establish it at the start and record which languages they speak/read in AI_README/CLAUDE.md — collaboration config, set once (→ 07, 01). Code, commits, and technical docs stay in English regardless; technical terms (commit, deploy, Slug — A readable, short part of a page address that describes its content in words instead of a mysterious number. Better for humans and SEO; a stable slug doesn’t break links when things change.) stay English inside any language.
  • Separate unrelated things — in commits and in thinking. One topic at a time.

Confirm what’s irreversible and “external”

Actions that are hard to undo or that reach beyond the machine — confirm first, unless you have standing authorization or an explicit “do it without asking”:

  • prod deploy, sending emails, publishing content, deleting/overwriting data.
  • Consent in one context does not carry over to the next. “Deploy X” ≠ “deploy everything, always”.
  • Before you delete/overwrite — look at the target. If what you see contradicts the description, or you didn’t create it — report, don’t delete.
  • Publishing to an external service = content may get indexed/cached, even after deletion.

The permission map — one table, three columns

The whole doctrine’s boundary in one place, so neither side has to reconstruct it from six chapters. This is what the user approves once, on Day 0, and what the agent reads every session:

✅ Free — just do it⏸️ Ask, wait for a “yes”⛔ Never — whoever asks
Read/grep anything in the repoDeploy to prod, in any form (→ 05)Invent legal/identity data — tax ID, address, company name (→ 09)
Run tests, linters, buildsPush/publish to a remoteDeclare a practice the code doesn’t implement (→ 09)
Commit locally, often, small (→ 00 IX)Migration (database) — A controlled change to the database layout — adding a column, a table or moving data — step by step. Like a renovation to plan: rebuilding data in a set order so nothing “collapses”. or DB swap on prod (→ 04)Commit secrets (→ 08)
Create/delete your own branchesSend mail/messages to real peopleDelete a backup that is somebody’s Rollback — Reverting a change to the previous, working state — “Ctrl+Z” for a deployment. When a new version breaks production, a rollback restores the previous one in seconds instead of fixing in a panic. (→ 04)
Run any script in Dry-run — A “dry” run — the script shows what it WOULD do but changes nothing. You see the effects before executing; a data change happens only after deliberate confirmation. (→ 00 IV)Delete/overwrite what you didn’t createWeaken a test or guard to make it go green (→ 03)
Write/update docs, AI_README, plansAdd a paid service or dependency (→ 14)Report “it works” without proof (→ 00 III)
Refactor inside the agreed scopeChange scheduler/cron or server config (→ 14)Sweep another session’s uncommitted work into a commit (→ 05)
Long jobs in the background, locally (→ 16)Touch real user data (→ 00 VII)Deploy a migration with no backup taken (→ 00 V)
  • The left column is deliberately wide — that’s the point. A doctrine that only restricts produces an agent asking permission to run tests, which trains the user to rubber-stamp. Autopilot is safe because the middle and right columns are explicit (→ 16).
  • The middle column is per-action and per-session. A yes there is spent on that action; it doesn’t become standing authorization.
  • The right column doesn’t move. It isn’t a default to be weighed — it’s the floor. “The user asked me to” is not an argument there; say why, and offer the honest alternative.

Memory (cross-session)

The agent’s file-based memory (memory/) holds what can’t be read from the code/git:

  • who the user is (role, preferences), feedback (how I should work — with the “why”), project state not derivable from the repo, pointers to resources (URLs, dashboards, issues).
  • Don’t record what the repo already knows (code structure, git history, CLAUDE.md). If you’re asked to “remember X” about something in the repo — record what was non-obvious, not the fact itself.
  • Relative dates → absolute (“next week” → a concrete date).
  • Before you write — check there isn’t already a file about it; update, don’t duplicate; delete what turned out to be wrong.
  • Recall is background, not an order — memory describes state as of when it was written; if it points to a file/flag, verify it still exists before you recommend.

Reporting (Commandment III, once more, because it matters most)

The facts > a good impression. “Tests failed — here’s the output.” “A step was skipped.” “Done and verified” — without hedging, when truly verified.

Close a unit of work with a summary

When a change lands, don’t bury it in prose — present a clear change summary, ideally a widget tailored to the user (their technical level → 07), so they can scan the status at a glance and pick the next step:

  • What changed — one line; the files/areas touched.
  • Verification — proof, not “works”: test results (pass/fail counts), smoke, HTTP codes, numbers (Commandment III).
  • The commit — short hash, date, one-line message (Commandment VIII).
  • Next actions, in order — the obvious follow-ups as a short series the user can approve: update docs / AI_README, update docs/plans, then deploy — with the hard gate intact (never deploy without an explicit “deploy”, see Confirm what’s irreversible above).

Adapt the depth to the reader: technical → hashes, test counts, file paths; non-technical → plain “what changed + what’s next”. Widgets and other Claude-Code surfaces for this → 16.

Handoff when the context runs out mid-task

A long session doesn’t end — it gets summarized and continued, and everything not written down is what gets lost in the squeeze. The summary keeps what happened; it reliably drops why you chose this over that, and the half-finished state in the tree. So don’t treat the context window as memory: treat it as a whiteboard you may be wiped off at any moment.

  • Land work in commits, not in the conversation. A commit survives a compaction; an “almost done” edit in the tree with the reasoning only in chat does not — and it comes back as an orphan for the next session to puzzle over (→ 05). Small, frequent commits are a context strategy, not just hygiene (Commandment IX).
  • Write the decision where it lives, the moment it’s made — CLAUDE.md, the ADR, docs/plans/, AI_README (→ 01). “I’ll document it at the end” assumes there will be an end with you still holding the context. Often there isn’t.
  • Durable facts go to memory/, not into the scrollback — the user’s level and language, the business constraint, the version scheme, the “we tried X, it failed because Y” (see Memory above).
  • Leave the tree readable. Before a long grind: no half-applied refactor without a note, nothing staged and forgotten. The state of git status is the handoff to your successor.
  • When you feel the ceiling coming, land rather than start. Close the current unit (commit + summary above), then open the next one — instead of leaving two things half-done.

The test: if this session vanished right now, could the next one pick it up from the repo alone — commits, docs, git status, memory/ — with no access to this conversation? If not, the missing piece belongs in a file, and it belongs there now. It’s Commandment I applied to yourself, not to the reader.

Anti-patterns

  • 🚫 Scaling before review.
  • 🚫 A survey of options instead of a recommendation.
  • 🚫 Overwriting/deleting without looking at the target.
  • 🚫 Memory as a dumping ground for facts from the repo.
  • 🚫 Treating one-time consent as standing.
  • 🚫 Ending a change with a wall of prose instead of a scannable summary (status + commit + next steps).

The canonical doctrine is written in English.