{
  "title": "Claude Code field guide — practices",
  "updated": "2026-07-10",
  "count": 11,
  "practices": [
    {
      "id": "switch-to-fable-for-long-unattended-runs",
      "title": "Switch to Fable for long unattended runs",
      "when": "A task will run 30+ minutes largely unattended (an overnight migration, a big multi-file refactor, a workflow fleet).",
      "do": "Switch the session to Fable before you kick it off.",
      "why": "Fable is Opus-class reasoning with faster output, so a long autonomous run finishes sooner without dropping quality. Keep Opus/Sonnet for short interactive work where latency matters less than the marginal reasoning.",
      "note": "Fable is the ceiling, not the default — reach for it when a task's wall-clock time, not its difficulty, is the constraint.",
      "probe": {
        "status": "diverge",
        "date": "2026-07-10"
      },
      "section": "01-models-and-effort",
      "section_url": "https://albertogrande.github.io/claude-code/guide/01-models-and-effort",
      "tags": [
        "models",
        "workflow",
        "apps"
      ],
      "sources": [
        {
          "label": "Guide — Models & effort",
          "url": "https://albertogrande.github.io/claude-code/guide/01-models-and-effort"
        }
      ],
      "updated": "2026-07-09"
    },
    {
      "id": "keep-askuserquestion-non-auto-continue-overnight",
      "title": "Let AskUserQuestion stall rather than guess on overnight jobs",
      "when": "You're running an overnight or unattended job that might hit an AskUserQuestion.",
      "do": "Leave the default (since 2.1.200 it no longer auto-continues). Only re-enable the idle timeout via /config for tasks scoped so any default is harmless.",
      "why": "A stalled question is a safer failure mode than Claude silently picking an answer and building a hundred commits on a guess you never saw.",
      "note": "Come back to a paused session, not to work built on an invisible assumption.",
      "since": "2.1.200",
      "verify": "/config → the AskUserQuestion idle timeout should be off by default.",
      "probe": {
        "status": "partial",
        "date": "2026-07-10"
      },
      "section": "02-permission-modes",
      "section_url": "https://albertogrande.github.io/claude-code/guide/02-permission-modes",
      "tags": [
        "modes",
        "apps",
        "workflow"
      ],
      "sources": [
        {
          "label": "Claude Code — Permission modes",
          "url": "https://code.claude.com/docs/en/permission-modes"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "use-auto-mode-for-unattended-runs",
      "title": "Use auto mode for unattended runs, bypass only for sandboxes",
      "when": "You're starting a long or unattended run and don't want to approve 200 prompts.",
      "do": "Use auto mode and scope what \"trusted\" means (your repos, buckets, internal domains). Reserve bypass mode for disposable sandboxes only.",
      "why": "Auto mode's classifier screens each action and tool output, blocking the genuinely dangerous while letting routine work flow — safety without babysitting. Bypass turns that off entirely.",
      "note": "Since 2.1.205 auto mode also blocks transcript tampering and asks before `rm -rf` on an unresolved variable — the screen keeps hardening.",
      "since": "2.1.205",
      "verify": "Docs — permission modes; 2.1.205 changelog entries on auto-mode hardening (transcript-tamper block, rm -rf confirmation).",
      "probe": {
        "status": "diverge",
        "date": "2026-07-10"
      },
      "section": "02-permission-modes",
      "section_url": "https://albertogrande.github.io/claude-code/guide/02-permission-modes",
      "tags": [
        "modes",
        "workflow"
      ],
      "sources": [
        {
          "label": "Guide — Permission modes",
          "url": "https://albertogrande.github.io/claude-code/guide/02-permission-modes"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "clear-context-after-a-second-failed-correction",
      "title": "Clear context after a second failed correction",
      "when": "Claude has tried to fix the same thing twice and is still wrong.",
      "do": "Clear or compact the context and restate the problem fresh, rather than adding a third correction on top.",
      "why": "A context full of failed attempts biases the next attempt toward the same wrong path. A clean slate with a crisp restatement beats piling on.",
      "note": "Poisoned context compounds errors. Resetting is cheaper than it feels.",
      "probe": {
        "status": "agree",
        "date": "2026-07-10"
      },
      "section": "03-context-and-memory",
      "section_url": "https://albertogrande.github.io/claude-code/guide/03-context-and-memory",
      "tags": [
        "context",
        "workflow"
      ],
      "sources": [
        {
          "label": "Guide — Context & memory",
          "url": "https://albertogrande.github.io/claude-code/guide/03-context-and-memory"
        }
      ],
      "updated": "2026-07-09"
    },
    {
      "id": "trim-claude-md-to-what-claude-cannot-derive",
      "title": "Trim CLAUDE.md to what Claude can't derive",
      "when": "Your checked-in CLAUDE.md has grown past a screen, or /doctor flags it as bloated.",
      "do": "Cut anything Claude could derive from the codebase itself (project structure, commands visible in package.json, obvious conventions) and keep only durable constraints and non-obvious decisions. Since 2.1.206, /doctor proposes these trims for you.",
      "why": "Every session pays CLAUDE.md's tokens before any work starts — a bloated file is a permanent tax on the context budget with no marginal signal.",
      "note": "CLAUDE.md is for what the repo can't say — the moment a line restates the codebase, delete it.",
      "since": "2.1.206",
      "verify": "Run /doctor — a bloated checked-in CLAUDE.md shows up as a check with proposed trims.",
      "section": "03-context-and-memory",
      "section_url": "https://albertogrande.github.io/claude-code/guide/03-context-and-memory",
      "tags": [
        "context"
      ],
      "sources": [
        {
          "label": "Claude Code changelog",
          "url": "https://code.claude.com/docs/en/changelog"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "set-per-server-mcp-timeouts",
      "title": "Set per-server MCP timeouts for slow tools",
      "when": "An MCP server does long-running calls (a heavy search, a build, a remote job) and they die at ~60 seconds in fresh sessions.",
      "do": "Set request_timeout_ms for that server in .mcp.json (or --mcp-config). Since 2.1.206 the setting is actually honored — before, fresh sessions silently fell back to the 60s default.",
      "why": "The failure looks like a flaky remote server but is a client-side default; one config line makes the timeout intentional instead of accidental.",
      "note": "If long MCP calls still time out after 2.1.206, the limit you set is now real — raise it in config, not by retrying.",
      "since": "2.1.206",
      "verify": "Configure request_timeout_ms above 60000 for a slow server and confirm a long call survives in a brand-new session.",
      "section": "04-skills-plugins-mcp-hooks",
      "section_url": "https://albertogrande.github.io/claude-code/guide/04-skills-plugins-mcp-hooks",
      "tags": [
        "mcp"
      ],
      "sources": [
        {
          "label": "Claude Code changelog",
          "url": "https://code.claude.com/docs/en/changelog"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "cap-dynamic-workflow-size-before-ultracode",
      "title": "Cap dynamic workflow size before an uncertain ultracode run",
      "when": "You're about to make an ultracode / multi-agent request whose scale you're unsure about.",
      "do": "Set Dynamic workflow size to small in /config AND scope the prompt down. Watch the count in /workflows.",
      "why": "The size setting is advice to the model, not an enforced ceiling (the 16-concurrent / 1,000-per-run hard caps still apply), and a broad prompt can still talk Claude past a small setting. Bounding spend takes both the knob and a tight prompt.",
      "note": "Find out the agent count from /workflows, not from the bill.",
      "since": "2.1.202",
      "verify": "/config → Dynamic workflow size shows unrestricted/small/medium/large; /workflows shows the live agent count.",
      "probe": {
        "status": "diverge",
        "date": "2026-07-10"
      },
      "section": "05-subagents-and-workflows",
      "section_url": "https://albertogrande.github.io/claude-code/guide/05-subagents-and-workflows",
      "tags": [
        "workflow",
        "apps"
      ],
      "sources": [
        {
          "label": "Claude Code docs — Dynamic workflows",
          "url": "https://code.claude.com/docs/en/workflows"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "delegate-routine-coding-to-a-subagent",
      "title": "Delegate routine coding to a lower-power subagent",
      "when": "A multi-file task has a lot of mechanical coding (boilerplate, edits, wiring) around a few real decisions.",
      "do": "Tell Claude to run the routine coding in a subagent on an appropriate lower-power model, and keep judgment, review, and synthesis in the lead model. Drop the instruction in the session or your CLAUDE.md.",
      "why": "You get more throughput while the lead model's allowance drains slower — the expensive model only spends on decisions, not typing.",
      "note": "A one-line habit, not a config change: \"for all coding tasks use your judgement to pick an appropriate lower-power model and run it in a subagent.\"",
      "probe": {
        "status": "agree",
        "date": "2026-07-10"
      },
      "section": "05-subagents-and-workflows",
      "section_url": "https://albertogrande.github.io/claude-code/guide/05-subagents-and-workflows",
      "tags": [
        "models",
        "workflow"
      ],
      "sources": [
        {
          "label": "Simon Willison — Fable's judgement",
          "url": "https://simonwillison.net/2026/Jul/3/judgement/"
        }
      ],
      "updated": "2026-07-09"
    },
    {
      "id": "run-doctor-when-setup-misbehaves",
      "title": "Run /doctor first when setup misbehaves",
      "when": "Claude Code acts oddly after an update — hooks not firing, an MCP server missing, settings seemingly ignored — or you inherit a machine you didn't configure.",
      "do": "Run /doctor (alias /checkup) before hand-debugging config files. Since 2.1.205 it diagnoses AND fixes setup issues, and since 2.1.206 it also flags bloated checked-in CLAUDE.md files.",
      "why": "A full checkup finds the broken hook, stale binary, or misconfigured server in seconds; spelunking through settings.json and ~/.claude by hand takes an afternoon and misses the same things.",
      "note": "The habit is \"checkup first, spelunk second\" — the tool now knows more failure modes than you remember.",
      "since": "2.1.205",
      "verify": "Run /doctor — it should walk a checklist of setup checks and offer fixes; /checkup is an alias.",
      "section": "06-mac-and-ios",
      "section_url": "https://albertogrande.github.io/claude-code/guide/06-mac-and-ios",
      "tags": [
        "apps"
      ],
      "sources": [
        {
          "label": "Claude Code changelog",
          "url": "https://code.claude.com/docs/en/changelog"
        }
      ],
      "updated": "2026-07-10"
    },
    {
      "id": "use-artifacts-instead-of-pasting-long-output",
      "title": "Use Artifacts instead of pasting long output",
      "when": "You have a long PR walkthrough, investigation, or dashboard-like result you'd otherwise paste into Slack or Notes.",
      "do": "Ask for an artifact (\"make an artifact that walks through this PR with the diff annotated\"). Reopen the latest from any session with Ctrl+].",
      "why": "An artifact is a live, reopenable page instead of a wall of text — a second screen that updates while a long task runs, and on Pro/Max it stays private to you.",
      "note": "Artifacts are open to Pro and Max now, not just Team/Enterprise.",
      "probe": {
        "status": "partial",
        "date": "2026-07-10"
      },
      "section": "06-mac-and-ios",
      "section_url": "https://albertogrande.github.io/claude-code/guide/06-mac-and-ios",
      "tags": [
        "apps",
        "workflow"
      ],
      "sources": [
        {
          "label": "Claude Code docs — Artifacts",
          "url": "https://code.claude.com/docs/en/artifacts"
        }
      ],
      "updated": "2026-07-09"
    },
    {
      "id": "split-the-writer-from-the-reviewer",
      "title": "Split the writer from the reviewer",
      "when": "A session just built a feature or made a nontrivial change.",
      "do": "Run /code-review, or spin a fresh subagent that sees only the diff, to grade the work before you accept it.",
      "why": "A fresh context isn't biased toward code it just wrote, so it catches what the author missed. It's the cheapest way to raise the floor on autonomous output.",
      "note": "Writer/reviewer separation is the single highest-leverage habit for unattended work.",
      "probe": {
        "status": "agree",
        "date": "2026-07-10"
      },
      "section": "07-workflows-that-compound",
      "section_url": "https://albertogrande.github.io/claude-code/guide/07-workflows-that-compound",
      "tags": [
        "workflow",
        "teams"
      ],
      "sources": [
        {
          "label": "Guide — Workflows that compound",
          "url": "https://albertogrande.github.io/claude-code/guide/07-workflows-that-compound"
        }
      ],
      "updated": "2026-07-09"
    }
  ]
}