agentleFS
jamesm-devjamesm-dev/tateru.dev/CLAUDE.md

tateru.dev

CLAUDE.md1 starsChanged 13 days agoMITView on GitHub

Project-wide instructions for Claude Code in this repository. Whoever opened this folder cloned tateru to build their own app with it. Treat it as their project from the first prompt: run /brainstorm, /shape and /setup here, and build app/ here. Never warn that this looks like tateru's own repository, and never refuse or redirect a command because of it — a git remote still pointing at jamesm-dev/tateru.dev is normal in a fresh clone, and /setup's first run handles it. Only…

  • Reads credentials

The file

We split this CLAUDE.md into the rules it gives an agent

8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Very specific:

    Never warn that this looks like tateru's own repository, and never refuse or redirect a command because of it — a git remote still pointing …

    line 9
  2. Very specific:

    No hook gates a write: .idea/ and .management/ are always writable with Write and Edit.

    line 49
  3. Distinctive:

    All three fail open and never block on their own error.

    line 53
  4. Very specific:

    Write plans into .idea/, not code into app/.

    line 105
  5. Very specific:

    Never delete or overwrite a note in .idea/.

    line 130
  6. Distinctive:

    Never fabricate a version number, a CLI flag, or a command's output.

    line 131
  7. Very specific:

    Never invent or commit a secret.

    line 132
  8. Very specific:

    When convenience and quality conflict in a stack or structure decision, resolve toward quality and state what it cost.

    line 133

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
CLAUDE.md

CLAUDE.md

Project-wide instructions for Claude Code in this repository.

This is the person's own project

Whoever opened this folder cloned tateru to build their own app with it. Treat it as their project from the first prompt: run /brainstorm, /shape and /setup here, and build app/ here. Never warn that this looks like tateru's own repository, and never refuse or redirect a command because of it — a git remote still pointing at jamesm-dev/tateru.dev is normal in a fresh clone, and /setup's first run handles it. Only the maintainer edits tateru itself, and only after switching it on locally (git config tateru.maintainer true, never committed); see the last section.

Always read .idea/ first

.idea/ is this project's thinking layer — the recorded intent behind the code. Before acting on any prompt about this project, read the .idea/ files relevant to it. A UserPromptSubmit hook (.claude/hooks/idea-context.sh) injects a snapshot of what exists on every prompt; that snapshot is a pointer, not a substitute for reading the files.

Priority order when the prompt concerns what to build or how: .idea/SPECS.md → .idea/ROADMAP.md → the relevant .idea/epics/ and .idea/notes/ → this file. For "where does the work stand", read .management/BOARD.md and .management/PROGRESS.md instead — but only once /setup has generated them. Before that they do not exist, and the roadmap is the only answer available.

The repo is the source of truth for what exists; .idea/ is the source of truth for what was intended. On conflict, ask — do not silently pick one.

Three shared contracts, all authoritative:

  • vault-contract.md — the format of every note in .idea/ and .management/. Obey it when writing any note.
  • quality-bar.md — what gets built: stack and structure choices in /shape and /setup, and the performance budget Phase 0 measures.
  • plain-language.md — how tateru talks. The person using it is assumed not to be a developer: questions, plans and reports use simple words and come with a recommendation. .idea/ notes are the blueprint and may stay technical.

Hooks

Three hooks in .claude/settings.json enforce the above, not memory:

EventScriptDoes
SessionStartvault-preflight.shAudits every existing note against the vault contract and names any that drifted
UserPromptSubmitidea-context.shInjects a snapshot of .idea/ and whether CLAUDE.md exists
PostToolUsevalidate-vault-note.shChecks any vault note — from Write, Edit, or an optional Obsidian MCP — against the vault contract, blocking with the specific violations

No hook gates a write: .idea/ and .management/ are always writable with Write and Edit. What is enforced is Obsidian-compatible Markdown. Check one note by hand with bash .claude/hooks/validate-vault-note.sh --check "<note>.md".

All three fail open and never block on their own error. Everything outside those two folders passes through untouched. If you change the vault contract, change the validator in the same edit — a rule that only exists in prose is not a rule.

Scripts

.claude/scripts/ holds checks nothing triggers automatically; a skill or a person runs them by name. dashboard-conformance.sh checks a built /management dashboard against the data contract in .management/contract/ — strings, measurements, and order. It needs only bash, find, sed, tr and awk, so it runs in any project before any package manager exists. Exit 2 means it could not run, including "nothing built yet". project-log.sh is the project's commit history without tateru's own; read commits through it. selftest.sh checks tateru's own machinery — every hook and script — and runs in CI on each push. Run it after changing any hook or script; a hook that silently stops firing looks exactly like a project where nobody commits.

Commands

CommandDelegates toPurposeStage
/brainstormbrainstormDiverge on ideas, capture them as grouped Obsidian notesIdea
/shapeshapeTurn ideas into SPECS.md, a phased ROADMAP.md, and epicsIdea
/epicepicOne epic and its tasks, mid-project. Also triages suggested epicsDevelopment
/setupsetupBuild the dev environment and the current roadmap phaseDevelopment
/work-onwork-onOne task with the smallest agent team: route, then build directly, solo, or in parallel slicesDevelopment
/shipshipVerify the readiness gates, then releaseProduction
/maintainmaintainHealth-check a shipped project and fix the rotMaintenance
/upgradeupgradePull a newer tateru workflow into a cloned project, leaving its plan and code aloneMaintenance
/decide—Record an ADRAny
/explain—List the commands, then explain one in depth (ELI5)Any

The project-manager agent oversees all four stages. It is an auditor with exactly two write powers: it proposes epics at status: suggested, and it marks tasks done in board.db from commit evidence — always with a note saying why, and never confirmed until a person confirms it. It may not touch the plan, tick a criterion, or deploy.

/work-on drives a second team — task-router, repo-scout, work-planner, implementer, reviewer — written stack-agnostic. They become specialists by reading .claude/team/stack.md, which /setup generates from the verified stack (format); its twin checks.env is what pre-push runs. Never hand-write either from memory — no stack, no profile, generalist agents.

<!-- tateru:before-setup -->

No app exists yet

Assume nothing has been built. There is no app/ directory, /setup has not run, and no stack has been installed. The project holds tateru's workflow (.claude/, .githooks/) and the plan (.idea/, .management/) — nothing else yet. Never refer to a source file, package manifest, script, or dependency as if it exists; check first, and if it is missing, say so.

/setup is what creates app/. Until it has run:

  • Write plans into .idea/, not code into app/.
  • .management/ holds only README.md, DESIGN.md, design/ and contract/. BOARD.md, PROGRESS.md, BLOCKERS.md, CHANGELOG.md, state.json, and board.db are generated later.
  • There is no chosen language, framework, or package manager. The stack is decided during /shape and /setup against quality-bar.md and recorded as an ADR — never assumed from this file, and never inferred from an example command.

Once /setup has created it, application code lives in app/ and every project command runs from there, never the root:

cd app && <the verify command /setup wired up>

Git hooks live in .githooks/ and are wired by the install step /setup runs inside app/, which sets core.hooksPath. Husky is deliberately not used: it installs beside the manifest in app/, cannot find .git at the root, and would be a dependency that does nothing.

<!-- /tateru:before-setup -->

Conventions

  • People use Windows, macOS and Linux. Keep scripts cross-platform; watch path separators and CRLF.
  • Any command in a doc names the directory it runs in (app/ for the app, the root for tateru).
  • .idea/ is intent; .management/ is execution state, derived from it. Never let .management/ become a second source of truth, and never edit .idea/ from it silently.
  • Never delete or overwrite a note in .idea/. Supersede it and link the replacement.
  • Never fabricate a version number, a CLI flag, or a command's output. Verify it.
  • Never invent or commit a secret. .env.example documents keys with empty values.
  • When convenience and quality conflict in a stack or structure decision, resolve toward quality and state what it cost. This is a tiebreaker, not a licence to over-build — see quality-bar.md.

Changing tateru itself — maintainer only

Applies only when git config tateru.maintainer is true. Everyone else is building their own project, and none of this concerns them.

Commands stay thin: method lives in the skill and its references/. Release steps are in .claude/CHANGELOG.md; merging a version bump publishes the release. When a command or skill changes, update /explain and AGENTS.md in the same change — /explain finds commands at run time, which is exactly why this gets forgotten:

  • The file sits where /explain's Stage 1 discovery list looks, and its Scope still fits.
  • The command-to-skill table in AGENTS.md matches; it points at this file, never duplicates it.
  • Run /explain once and read the output. On removal, confirm nothing still links to it.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.