write-claude-md
About
This skill generates CLAUDE.md files that provide project-specific instructions to AI coding assistants. It covers file structure, common sections, do/don't patterns, and MCP server integration. Use it when starting new AI-assisted projects or improving AI behavior on existing codebases.
Quick Install
Claude Code
Recommendednpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/write-claude-mdCopy and paste this command in Claude Code to install this skill
Documentation
Write CLAUDE.md
CLAUDE.md → AI assistants effective project-specific ctx.
Use When
- New project → AI used
- Improve AI behavior on existing
- Doc project conventions, workflows, constraints
- Integrate MCP servers|agent defs
In
- Required: Project type + tech stack
- Required: Key conventions + constraints
- Optional: MCP server configs
- Optional: Author + contributor info
- Optional: Security + confidentiality reqs
Do
Step 1: Basic CLAUDE.md
Place CLAUDE.md in project root:
# Project Name
Brief description of what this project is and its purpose.
## Quick Start
Essential commands for working on this project:
```bash
# Install dependencies
npm install # or renv::restore() for R
# Run tests
npm test # or devtools::test() for R
# Build
npm run build # or devtools::check() for R
Architecture
Key architectural decisions and patterns used in this project.
Conventions
- Always use descriptive variable names
- Follow [language-specific style guide]
- Write tests for all new functionality
**Got:** `CLAUDE.md` in project root w/ min: project desc, quick start cmds, architecture, conventions.
**If err:** Unsure what to include → start w/ Quick Start only (3 most important: install, test, build). Expand incrementally.
### Step 2: Tech-Specific Sections
**R packages**:
```markdown
## Development Workflow
```r
devtools::load_all() # Load for development
devtools::document() # Regenerate docs
devtools::test() # Run tests
devtools::check() # Full package check
Package Structure
R/- Source code (one function per file)tests/testthat/- Tests mirror R/ structurevignettes/- Long-form documentationman/- Generated by roxygen2 (do not edit manually)
Critical Files (Do Not Delete)
.Rprofile- Session configuration.Renviron- Environment variables (git-ignored)renv.lock- Locked dependencies
**Node.js/TS**:
```markdown
## Stack
- Next.js 15 with App Router
- TypeScript strict mode
- Tailwind CSS for styling
- Vercel for deployment
## Conventions
- Use `@/` import alias for src/ directory
- Server Components by default, `"use client"` only when needed
- API routes in `src/app/api/`
Got: Tech-specific sections match actual stack — R pkg structure for R, Node.js details for web. Cmds + paths reference real layout.
If err: Unfamiliar stack → inspect package.json, DESCRIPTION, Cargo.toml, equivalent → ID tech + add corresponding section.
Step 3: MCP Server Info
## Available MCP Servers
### r-mcptools (R Integration)
- **Purpose**: Connect to R/RStudio sessions
- **Status**: Configured
- **Configuration**: `claude mcp add r-mcptools stdio "Rscript.exe" -- -e "mcptools::mcp_server()"`
### hf-mcp-server (Hugging Face)
- **Purpose**: AI/ML model and dataset access
- **Status**: Configured
- **Configuration**: `claude mcp add hf-mcp-server -e HF_TOKEN=token -- mcp-remote https://huggingface.co/mcp`
Got: Each MCP server: purpose, status (configured|available|not configured), cmd to add. No actual tokens|secrets.
If err: MCP not yet configured → doc as "Available" w/ setup instructions, not "Configured." Placeholder vals like your_token_here.
Step 4: Author Info
## Author Information
### Standard Package Authorship
- **Name**: Author Name
- **Email**: [email protected]
- **ORCID**: 0000-0000-0000-0000
- **GitHub**: username
Got: Author section w/ name, email, ORCID (academic|research), GitHub. R pkgs match DESCRIPTION reqs.
If err: Author info sensitive|shouldn't be public → org name vs personal, or omit for internal-only.
Step 5: Security Guidelines
## Security & Confidentiality
- Never commit `.Renviron`, `.env`, or files containing tokens
- Use placeholder values in documentation: `YOUR_TOKEN_HERE`
- Environment variables for all secrets
- Git-ignored: `.Renviron`, `.env`, `credentials.json`
Got: Security section lists never-commit files, placeholder conventions, confirms .gitignore covers sensitive.
If err: Unsure which sensitive → grep -rn "sk-\|ghp_\|password" . for exposed secrets. Real creds → .gitignore + mention here.
Step 6: Reference Skills + Guides
## Development Best Practices References
@agent-almanac/skills/write-testthat-tests/SKILL.md
@agent-almanac/skills/submit-to-cran/SKILL.md
Got: Relevant skills + guides ref'd via @ paths → AI assistants get detailed procedures for common tasks.
If err: Ref'd skills|guides don't exist at paths → verify or remove. Broken @ refs no value, may confuse.
Step 7: Quality + Status
## Quality Status
- R CMD check: 0 errors, 0 warnings, 1 note
- Test coverage: 85%
- Tests: 200+ passing
- Vignettes: 3 (rated 9/10)
Got: Quality metrics → current state, accurate nums for check, coverage, test count, doc status.
If err: Metrics not yet avail (new project) → placeholder "TBD" + update as matures. No fabricate.
Check
- CLAUDE.md in project root
- Quick start cmds accurate + work
- Architecture reflects actual structure
- No sensitive (tokens, passwords, private paths)
- MCP server configs current
- Ref'd files + paths exist
Traps
- Stale info: Update CLAUDE.md when project structure changes
- Too much detail: Concise. Link detailed guides vs duplicate
- Sensitive data: Never include actual tokens|creds. Placeholders.
- Conflicting instructions: CLAUDE.md doesn't contradict other config
- Missing from
.Rbuildignore: R pkgs → add^CLAUDE\\.md$to.Rbuildignore
Examples
Pattern across successful projects:
- putior (829 lines): Comprehensive CLAUDE.md w/ quality metrics, 20 accomplishments, MCP integration, dev workflow
- Simple project (20 lines): Quick start + key conventions
Scale to match project complexity.
→
create-r-package— CLAUDE.md as part of pkg setupconfigure-mcp-server— MCP config ref'd in CLAUDE.mdsecurity-audit-codebase— verify no secrets in CLAUDE.md
GitHub Repository
Related Skills
content-collections
MetaThis skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.
polymarket
MetaThis skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.
creating-opencode-plugins
MetaThis skill helps developers create OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It provides the plugin structure, event API specifications, and implementation patterns for JavaScript/TypeScript modules. Use it when you need to intercept, monitor, or extend the OpenCode AI assistant's lifecycle with custom event-driven logic.
sglang
MetaSGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.
