agentleFS
poshan0126poshan0126/dotclaude/skills/setupdotclaude/SKILL.md

setupdotclaude

Skill871 starsChanged 5 months agoMITView on GitHub

Set up dotclaude in any project. Deep-scans the codebase, interviews the user, installs only justified components, customized to the stack.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. krishnamallam/upbox★ 2same name

    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 repository14 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    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
  1. Very specific:

    If $ARGUMENTS names a focus area (e.g.

    line 16
  2. Very specific:

    Git: default branch (git symbolic-ref refs/remotes/origin/HEAD), commit message style (git log --oneline -20), whether PRs/gh are part of …

    line 30
  3. Distinctive:

    If the project is empty (no source files, no manifests): say so, offer only the minimal baseline (CLAUDE.md template + safety hooks + …

    line 35
  4. Very specific:

    Use AskUserQuestion (batch up to 4 questions per call.

    line 39
  5. Distinctive:

    If monorepo: "Which packages should this setup focus on?" (multiSelect of detected packages).

    line 43
  6. Distinctive:

    Ask one final AskUserQuestion: approve the plan / adjust (loop back) / cancel.

    line 83
  7. Very specific:

    If $CLAUDE_PLUGIN_ROOT is unset and there are no copied files to work with, tell the user to install via the marketplace (/plugin install …

    line 107
  8. Distinctive:

    Add approved components that are missing.

    line 110
  9. Very specific:

    block-dangerous-commands.sh: update the protected-branch regex if the default branch isn't main/master.

    line 130
  10. Very specific:

    Mechanical checks: every hook wired in settings.json exists and is executable.

    line 137
  11. Distinctive:

    NEVER write or delete without confirmation.

    line 149
  12. Distinctive:

    Keep it minimal. If a default works, leave it alone.

    line 154

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill 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
SKILL.md

Set up dotclaude in this project with one governing principle: install nothing without evidence and consent. Every rule, hook, agent, and skill must be justified by something found in the codebase or explicitly requested by the user. When in doubt, leave it out — the user can always add more later; unused config costs tokens and trust forever.

CLAUDE.md for this project goes at the project root (./CLAUDE.md), committed so the team shares it; all other config lives inside .claude/. Claude reads and layers other scopes too: ~/.claude/CLAUDE.md (your personal, cross-project preferences), CLAUDE.local.md (gitignored personal overrides for this project), and nested CLAUDE.md in subdirectories (monorepo packages). Route team-shared instructions to the committed root file, personal ones to the home or .local file.

Two modes, decided by what exists:

  • Fresh: no .claude/ content yet (whether the user will install from this plugin or has nothing at all).
  • Existing: .claude/ already has settings, rules, skills, agents, or hooks (from a clone+copy, an earlier run, or hand-rolled). Same scan and interview, but Phase 4 becomes a gap analysis: add what's missing and justified, propose removing what's unjustified, never touch user-customized content without showing the change first.

If $ARGUMENTS names a focus area (e.g. frontend), weight the scan and the proposals toward it.

Phase 1: Deep scan (read-only — no writes of any kind in this phase)

Build an evidence table. Don't stop at manifests; read real code.

  1. Stack: manifests (package.json, pyproject.toml, Cargo.toml, go.mod, Gemfile, composer.json, build.gradle, pom.xml, Makefile, Dockerfile) and CI workflows (.github/workflows/, .gitlab-ci.yml). Record the actual build/test/lint/dev commands and script names, not guesses.
  2. Monorepo: workspaces key, pnpm-workspace.yaml, lerna.json, nx.json, turbo.json, or multiple manifests at depth 2+. List the packages.
  3. Source layout: list the real source directories (src/, app/, lib/, packages/*/src, cmd/, internal/, ...). These become rule paths: globs later — record actual paths, never assume src/.
  4. Tests: config files (jest.config.*, vitest.config.*, pytest.ini, conftest.py, playwright.config.*, ...), then open 2-3 real test files: runner, naming convention (*.test.ts vs test_*.py), test directory layout, assertion style, how much mocking they actually do.
  5. Frontend: .tsx/.jsx/.vue/.svelte files, component directories, framework and styling approach from dependencies.
  6. Backend/API: route/controller/handler/service directories; ORM and migration dirs (prisma/, alembic/, migrations/, db/migrate/, ...).
  7. Docs: a docs/ directory or substantial .md files beyond the README.
  8. Formatter/linter: configs AND binaries (Biome, Prettier, Ruff, Black, rustfmt, gofmt, ESLint).
  9. Git: default branch (git symbolic-ref refs/remotes/origin/HEAD), commit message style (git log --oneline -20), whether PRs/gh are part of the workflow (remote on GitHub, gh installed).
  10. Read 5-10 representative source files across the main directories: naming style (camelCase vs snake_case), error-handling patterns (typed errors vs bare catch), comment density, generated-file markers (*.gen.ts, *_pb2.py, // Code generated).
  11. Existing AI/editor config: ./CLAUDE.md, AGENTS.md, .cursorrules, .cursor/rules/, .github/copilot-instructions.md, current .claude/*. This is content to migrate, never to clobber.
  12. Domain: skim the README for domain terms, abbreviations, and architecture statements that aren't obvious from code.

If the project is empty (no source files, no manifests): say so, offer only the minimal baseline (CLAUDE.md template + safety hooks + settings), and stop after installing it. "Re-run after adding code to customize."

Phase 2: Interview

Use AskUserQuestion (batch up to 4 questions per call; use multiSelect where choices aren't exclusive). Two rounds — enough to capture intent, not an interrogation.

Round 1 — confirm reality. First present a compact findings summary in text (stack, package manager, test runner, formatter, layout, git workflow, anything ambiguous). Then ask:

  • "Did I read the project right?" — options: correct / mostly (I'll correct via Other) / wrong, let me describe it.
  • If monorepo: "Which packages should this setup focus on?" (multiSelect of detected packages).
  • "Anything the scan can't see?" — options like: generated dirs I must never touch / unusual deploy or branch constraints / domain terms worth recording / nothing special. Fold answers into the evidence table.

Round 2 — scope and taste.

  • "Setup size?"
    • Minimal: CLAUDE.md + settings.json + the four safety hooks + code-quality.md. (Recommended for small projects or skeptics.)
    • Standard (recommended): Minimal + every component the evidence justifies (see Phase 3 mapping) — and nothing else.
    • Full kit: everything dotclaude ships, trimmed only where clearly inapplicable.
    • Let me pick: walk through each component group.
  • "Which workflow skills do you want?" (multiSelect). Offer only the justified ones: ship/pr-review need a git/PR workflow, fix-issue needs a GitHub remote with gh, tdd/test-writer need a working test runner, catchup/claude-md/debug-fix/explain/refactor/context-budget are universal. Preselect per evidence; let the user drop any.
  • "Optional hooks?" (multiSelect):
    • format-on-save — only offer if a formatter was detected.
    • auto-test — warn plainly: runs the matching test file after every edit; only sensible with a fast suite.
    • notify — OS notification when Claude needs attention. Personal taste.
    • session-start — injects branch + dirty state, ~5-10 tokens/session. Cheap, default on.
    • The four safety hooks (protect-files, scan-secrets, block-dangerous-commands, warn-large-files) are default-on in every size; only "Let me pick" can drop them.

Phase 3: Install plan — the manifest

Produce a single plan table before touching anything. For every dotclaude component: Install? | Evidence | Cost class (always-loaded / path-scoped / invoked-only / hook—no context cost). Then a short "Not installing" list, each with a one-line reason. The plan is the contract: Phase 4 applies exactly this, nothing more.

Hard mapping rules (no exceptions without the user overriding):

ComponentInstalls only if
rules/frontend.md, agents/frontend-designer/Frontend files exist (Phase 1.5)
rules/database.mdMigrations or ORM detected (1.6), paths: rewritten to the real migration dirs
rules/security.md, rules/error-handling.mdBackend/API surfaces exist (1.6), paths: rewritten to the real dirs (with monorepo prefixes)
rules/testing.mdA test suite actually exists
agents/doc-reviewer/Docs exist (1.7)
agents/code-reviewer/, agents/silent-failure-hunter/, agents/security-reviewer/, agents/performance-reviewer/Standard size and up
agents/pr-test-analyzer/A test suite actually exists (1.4), Standard size and up
hooks/format-on-save.shFormatter detected AND selected
hooks/auto-test.shTest runner detected AND explicitly selected
hooks/notify.sh, hooks/session-start.shSelected in Round 2
SkillsSelected in Round 2 (only justified ones were offered)
skills/setupdotclaude itselfSkip when running from the plugin ($CLAUDE_PLUGIN_ROOT set) — re-runs come from the plugin. Offer only in the clone flow.

settings.json is never copied verbatim: its hooks section must wire only the hooks being installed, and permissions.allow must list only commands that exist in this project (real package manager, real script names; gh rules only if PRs are part of the workflow). Keep the deny rules for secrets as-is — those are universal.

Ask one final AskUserQuestion: approve the plan / adjust (loop back) / cancel. Do not proceed without approval.

Phase 4: Apply the plan

Fresh mode (plugin install). Copy each approved file individually from $CLAUDE_PLUGIN_ROOT/template/ (the plugin bundles the full dotclaude template there). Copying per-file keeps folder READMEs and hooks/tests/ out automatically. Example shape:

mkdir -p .claude/rules .claude/hooks .claude/agents .claude/skills
cp "$CLAUDE_PLUGIN_ROOT/template/rules/code-quality.md" .claude/rules/
cp "$CLAUDE_PLUGIN_ROOT/template/hooks/protect-files.sh" .claude/hooks/   # ...one cp per approved file
cp -r "$CLAUDE_PLUGIN_ROOT/template/skills/debug-fix" .claude/skills/     # skills copy as directories
cp -r "$CLAUDE_PLUGIN_ROOT/template/agents/code-reviewer" .claude/agents/ # agents too (one dir per agent; scanned recursively)
chmod +x .claude/hooks/*.sh

Project-root files (never clobber):

[ -f ./CLAUDE.md ]               || cp "$CLAUDE_PLUGIN_ROOT/template/CLAUDE.md" ./CLAUDE.md
[ -f ./CLAUDE.local.md.example ] || cp "$CLAUDE_PLUGIN_ROOT/template/CLAUDE.local.md.example" ./
touch .gitignore
grep -qxF 'CLAUDE.local.md' .gitignore || echo 'CLAUDE.local.md' >> .gitignore

If $CLAUDE_PLUGIN_ROOT is unset and there are no copied files to work with, tell the user to install via the marketplace (/plugin install setupdotclaude@dotclaude) or follow the clone flow at https://github.com/poshan0126/dotclaude.

Existing/clone mode. The user already has files. Apply the same plan as a diff:

  • Add approved components that are missing.
  • Propose removing files the plan doesn't justify (the whole-kit clone brings everything): unjustified rules/agents/skills/hooks, plus repo artifacts (.claude/README.md, CONTRIBUTING.md, LICENSE, .gitignore, CLAUDE.template.md, settings.local.json.example, folder READMEs, .claude-plugin/, hooks/tests/, plugins/, legacy scripts/). Confirm before each rm; list, don't surprise.
  • Where a kept file differs from the shipped version, assume the user customized it: show the proposed change before applying.

Customize while installing (confirm each file's changes before writing):

  1. CLAUDE.md (target <25 non-blank lines, hard cap 50): replace template commands with the real ones from Phase 1.1; strip every > REPLACE: block. For each remaining section keep it only if the scan produced real content for it:
SectionKeep if...Otherwise
ArchitectureA non-obvious structural decision surfaced (1.3/1.12)Delete — Claude can explore
Key DecisionsA WHY exists that would prevent a wrong fixDelete
Domain KnowledgeNon-obvious terms surfaced (1.12 / Round 1)Delete
WorkflowProject-specific quirks existDelete — generic lines duplicate code-quality.md
Don'tsProject-specific don'ts exist (e.g. generated dirs from Round 1)Delete

Most projects end up with Commands plus three to five lines. A 10-line CLAUDE.md is healthy. 2. settings.json: generate hooks + permissions per the plan (above). 3. Rule paths: rewritten to the directories actually found, with monorepo package prefixes when applicable. 4. code-quality.md naming: change only if the sampled code (1.10) genuinely differs from the defaults. 5. block-dangerous-commands.sh: update the protected-branch regex if the default branch isn't main/master. 6. Migrate existing AI config (1.11): offer to fold .cursorrules / AGENTS.md / copilot-instructions content into CLAUDE.md or a rule. Never delete the originals without asking.

Phase 5: Verify, fingerprint, and report

  1. CLAUDE.md budget: count non-blank lines (grep -cv '^[[:space:]]*$' CLAUDE.md). Under 25 = PASS. 25-50 = WARN: list the longest sections, ask which to trim. Over 50 = FAIL: propose specific cuts and don't finish until ≤50.
  2. Always-loaded estimate: CLAUDE.md + rules without paths:, chars/4. Report the number; over ~1000 tokens, propose the single biggest trim.
  3. Mechanical checks: every hook wired in settings.json exists and is executable; every installed file parses (YAML frontmatter, JSON); nothing was installed beyond the approved plan; no rule duplicates what a hook already enforces.
  4. Write the drift fingerprint so the setup stays tuned over time. If session-start.sh was installed:

    [ -x .claude/hooks/session-start.sh ] && DOTCLAUDE_FINGERPRINT=1 .claude/hooks/session-start.sh > .claude/.dotclaude.json

    This records a hash of the project's manifests. From then on, the session-start hook emits a one-line "config drift" nudge whenever the manifests change (new scripts, new framework, new package manager) — the signal to re-run this skill. Commit .claude/.dotclaude.json so the whole team shares the baseline. If session-start.sh was not installed, skip and instead tell the user to re-run /setupdotclaude manually after stack changes.

  5. Summary: three lists — installed (with the evidence that justified each), skipped (with reason), customized (what changed). Budget verdict. Close with the maintenance cadence: "Re-run /setupdotclaude when the drift nudge appears, after adding a framework or test runner, or after a big restructuring — it runs as a gap analysis on an existing setup, so re-runs are cheap and only propose deltas." Tip: run /context-budget for the full per-turn breakdown.

Rules

  • NEVER write or delete without confirmation. Propose, show, then apply.
  • Install nothing the scan can't justify and the user didn't approve. The plan table is the contract.
  • Preserve user edits. When changing a file the user may have touched, show the diff first.
  • Uncertain detection → ask, don't guess.
  • Empty project → minimal baseline, then stop.
  • Keep it minimal. If a default works, leave it alone; if a component lacks evidence, leave it out.

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.