claude-setup
CLAUDE.md0 starsChanged 3 months agoMITView on GitHub
@language.md @env-local.md - Don't mint false certainty — honesty about confidence applies inward, to code, not only outward to the user. Comment justifying a constant (// junk volume, // safe default) is a claim, not proof of one; where a value carries a judgment you didn't measure or cite, tag its confidence in prose ("heuristic, not derived") — calibration, not more words, often claiming less. Descriptive comments need no tag; only justifying ones. Untagged legacy comment means confidence unknown, never…
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- loonylabs/claude-setupword for word, first seen Oct 17, 2026
Other versions1 project uses a version of this.
Word for word · 1
- loonylabs/claude-setup★ 0100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- analyze-fix-cheapSkill
- analyze-fixSkill
- changelog-summarySkill
- claude-md-hygieneSkill
- codebase-designSkill
- create-stories-from-docsSkill
- domain-modelingSkill
- grillingSkill
- grill-meSkill
- handoverSkill
- implement-storiesSkill
- improve-codebase-architectureSkill
- setup-matt-pocock-skillsSkill
- step-by-stepSkill
- to-ticketsSkill
- update-claude-mdSkill
- wakeSkill
- work-with-meSkill
The file
We split this CLAUDE.md into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Never "clean up" a missing figure, unit or empty cell into something tidier than the source — carry gaps verbatim.
- Distinctive: line 40
Don't reflexively run the whole suite on every change.
- Distinctive: line 62
No baton, or no git: say so and answer from what you can measure, instead of reconstructing a plausible state.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md — global (all projects)
@language.md @env-local.md
Intellectual honesty
- Don't mint false certainty — honesty about confidence applies inward, to code,
not only outward to the user. Comment justifying a constant (
// junk volume,// safe default) is a claim, not proof of one; where a value carries a judgment you didn't measure or cite, tag its confidence in prose ("heuristic, not derived") — calibration, not more words, often claiming less. Descriptive comments need no tag; only justifying ones. Untagged legacy comment means confidence unknown, never "guess": treat as unverified, check before relying, don't relabel wholesale. Correcting one: fix the comment, never the value's behaviour, and only down to what you can show. - Measure, don't guess — including when fixing, and including numbers arriving inside an agent's report. Returning agent's finding, paywalled fact, green status field are claims, not proof; verify the load-bearing ones before relying on them. Never "clean up" a missing figure, unit or empty cell into something tidier than the source — carry gaps verbatim.
- Silent wrongness is the dangerous kind — ask what it would look like. Before trusting a new data path, ask how you would notice it quietly doing the wrong thing: shape/dimension mismatch, resume keyed on position, config captured at module load, warm cache — each returns plausible output and raises nothing. Add the assertion that makes it loud, and verify through a different path than the one that produced the artifact; the writer will cheerfully confirm its own malformed output.
Skepticism & the confidence gate
- Challenge the user and yourself toward the better solution; agreement is not the goal. Below ~90% confidence on a load-bearing assumption, research or ask — don't guess. On non-trivial work, confirm the understanding before implementing.
Tests
- Keep tests fast — everywhere, and watch the clock. Fast feedback is a standing goal in every project; the everyday loop should feel like seconds, not minutes. Don't reflexively run the whole suite on every change. When a suite's time creeps up, say so unprompted and propose a fix — fast/default lane, split, parallelization — instead of treating the wait as unavoidable. The concrete lane is per-project; the vigilance is not.
- Where a project has tests and the change is testable, fix bugs red→green: write the failing test first and run it RED — a test you never saw fail may be testing nothing — then fix to green and keep it as the regression guard. Not blanket TDD for features; purely visual findings verify by screenshot.
- A convenient stand-in can hide the one thing that breaks. Subprocess test
driving
process.execPathproves the mechanism and nothing about the real program — that path is an.exeand never exercises the wrapper the tool actually ships. Where the environment is part of the contract, build the real artefact in the test rather than the substitute that is easy to reach for.
Session handover
- At session start read
docs/HANDOVER.mdwhere the project has one — the previous session's baton. Before acting on it rungit log <its-sha>..HEAD --onelineandgit status: where they disagree the tree wins — the baton says what was intended, not what is, and its open items may already be done. Then answer in this order — where things stand, what the baton got wrong, the next step as a proposal — and wait for a yes before building. - No baton, or no git: say so and answer from what you can measure, instead of reconstructing a plausible state.
- Refresh with
/handover, and offer it unprompted once work has landed and the baton no longer matches HEAD.
Communication
- The user is a product engineer, not a software developer: explain what a decision means for the end user and the trade-offs it carries, recommend rather than enumerate options, keep answers short and focused.
Claude Code as a subprocess
- Never pass
--bare. It ignores the subscription credentials, leaving onlyANTHROPIC_API_KEYto authenticate with, so it bills by token behind the user's back — the opposite of what starting the logged-in CLI is for. Without that variable it refuses outright:Not logged in · Please run /login, exit 1. Same reason: never set that variable in the environment of a-prun. --output-format stream-jsonrequires--verbose, else there is no stream. Its last line is theresultobject carrying text and cost;--resume <session_id>continues a conversation, enough to build a chat on the subscription without any API key.api_error_statusis present-and-null on success, so!== undefinedreads every successful run as a failure. Measured 2026-08-26: it silently replaced each run's own summary with"". Test a harness field for a value, never for presence — and preferis_error, which the sameresultobject carries.subtypeis no success test either: an expired login returnssubtype: "success"WITHis_error: trueand the result textFailed to authenticate: OAuth session expired(measured 2026-10-02) — a reader that trustssubtypereads a dead CLI as an answer.- The CLI and the desktop app log in separately. The app kept working while
~/.local/bin/claudehad been logged out for a week (OAuth expired, found 2026-10-02);claude auth status(loggedIn) tells,claude auth loginfixes it — the user's step, not Claude's. The init line'sapiKeySourcereads"none"on the subscription, logged in or not; any other value means an API key pays. --safe-modestill reads the user'ssettings.json. It drops CLAUDE.md, hooks, plugins and MCP and keeps the login — butlanguage: germanmade a headless answer German (measured 2026-10-02).--setting-sources projectin a directory without a project drops the user settings too; thenalwaysThinkingEnabledand anything else needed must be given explicitly (--settings '{...}'), or the run goes without it.- Prompt cache across
-pruns works (measured 2026-10-02, Sonnet): a follow-up through--resumeread the whole prior context from the cache (5,343 tokens read, 89 written). A NEW session with an identical prompt re-used ~85 % and re-wrote ~750 tokens every time, reproducibly;--exclude-dynamic-system-prompt-sectionsdid not change that. Readcache_read_input_tokensper assistant message, not only the result totals. --include-partial-messagesaddsstream_eventlines carryingcontent_block_delta— the answer while it is written, which fills a stage that otherwise sends nothing for minutes. Most deltas arethinking_delta, nottext_delta, so filtering on the latter alone reproduces the very silence this flag exists to fix. Forward the text so far rather than each fragment, and let the finished turn replace it.- CLAUDE.md lands in the FIRST USER MESSAGE, not the system prompt — documented,
and upstream closed the caching complaint as not planned (claude-code#47098). A
large one is therefore re-prefilled at every session start and every
/clear; a prefix cache in front of a local model never covers it. The way out, measured 2026-09-01 (80.7k-token cold starts fell to ~2k computed): rename the file and startclaude --append-system-prompt-file <file>— works interactively. The inline--append-system-promptvariant cannot carry a large block on Windows: cmd caps a line at 8,191 chars, CreateProcess at 32,767.
Tools and runtime
Behaviour of Claude Code, its tools and Node itself — not of any one machine. These sat under "Environment (this machine)" until 2026-08-28 and were measured on Windows, but nothing in them is Windows-specific: deleting them along with the OS section is the mistake this heading exists to prevent.
- A doubled backslash reaches the Bash tool as a single one — inside a quoted
heredoc and inside single quotes alike, so no quoting style protects it.
C:\\Userswritten into a script becomesC:\Users, and where the next character forms an escape the file gets a real newline or backspace and stays syntactically valid: the program runs and works on a path nobody asked for. Write anything carrying Windows paths or regex escapes through the Write/Edit tool. Measured 2026-08-27. - Python heredoc patching source code eats its escapes, and one is invisible. In
a non-raw string
\bis a backspace character: goes into the file,tscaccepts it, the regex silently stops matching.\nbecomes a real line break,\s/\d/\wonly warn. Patch code through the Edit tool; where a script is unavoidable, use raw strings orchr(92). Measured 2026-08-26. - A
cdinside a compound Bash call hijacks every command after it. A chaincd ~/x && … && bash tests/run.shran the tests from~/xand died with "no such file" mid-chain while the earlier links succeeded — and the harness resets cwd only after the call, so the next call shows nothing. Keep chains cwd-free (absolute paths,git -C); where acdis unavoidable, give it the whole call. Measured 2026-08-31. - Don't detect a missing command by its exit code. Bash returns 127 (measured
2026-08-27) but not every shell does, so a check written for it is shell-specific
without saying so. Ask PATH (
which) rather than the exit code, and resolve a path-shaped command against the project. - A helper script outside the project cannot import the project's dependencies.
ESM resolves
node_modulesfrom the script's location, not the cwd, so a scratchpad tool importingcheeriodies withERR_MODULE_NOT_FOUNDhowever the invocation is written. Put throwaway analysis scripts in the repo and delete them afterwards. - claude.ai/design share link (
/design/p/<uuid>) is 403 for WebFetch;DesignSync get_project/list_files/get_filewith that uuid returns the files (plain projects too, not only design systems). - Browser pane:
navigateto 127.0.0.1 or localhost is "blocked by policy" — open local servers withpreview_start {url}— and google.com was denied the same way (2026-08-31), so the block is not only about local addresses.computer key "Return"never reaches the page as Enter,"Enter"does. Screenshot withoutscaleis a 1:1 crop of the top-left;scale: 1is the whole viewport shrunk;zoomunsupported — and any screenshot fails outright while the pane is hidden, so verify server-rendered pages by fetching the HTML instead.confirm()/alert()dialogs are auto-dismissed, confirm returning false (measured 2026-09-01) — a page path gated on one cannot be exercised by automation; drive the underlying request instead. (volatile — tool behaviour) fetchgives up on a slow local model server after 5 minutes. undici's headersTimeout (300 s) is not settable through fetch options and surfaces as a bareTypeError: fetch failed/UND_ERR_HEADERS_TIMEOUT— indistinguishable from the server being down. Usenode:httpwithsetTimeout(0)for model calls.- The auto-mode classifier denies BUNDLED destructive calls, not the
actions. A multi-file
rmin$HOMEand asystemctl disable+enable+ verifychain were both denied; the samesystemctlsteps passed as single calls, and the samermpassed verbatim right after an explicit user go (2×, 01.09.2026). On a denial: split the call or hand the user a run-block — never resend without new user intent. (volatile — classifier behaviour) - A detached job's PID is not
$!, andpgrep -ffinds your own command.setsid nohup cmd &puts the work in a grandchild:$!names the setsid wrapper, which exits at once — and apgrep -f <pattern>moments later matches the Bash tool's ownbash -cline, which contains the pattern too. A Monitor armed on either PID reports "ended" seconds later while the work runs on. Watch the job's LOG for a terminal marker it always writes (its own DONE line,Traceback) instead of a PID; where a PID is unavoidable, anchor the match on the interpreter (pgrep -f '^python3 …') after launch. Measured 2026-08-31, three false "ended" events in one evening. - Backticks in a
git commit -m "…"are executed by the shell, and the words between them vanish from the message (each substitution prints an error and yields empty). A commit landed with holes mid-sentence before it was noticed; measured 2026-09-01. Write any formatted commit message to a file and usegit commit -F <file>— same for amend.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

