
Project Memory
- 134 installs
- 353 repo stars
- Updated August 2, 2026
- jamditis/claude-skills-journalism
Persist and reload project context—decisions, files, goals, and open threads—so long-running journalism or editorial work stays coherent across sessions.
About
Establishes a project-memory discipline for Claude Code: what to capture, where to store it, and how to reload decisions, constraints, and progress so multi-session journalism or software projects do not lose narrative or technical continuity.
- Cross-session context
- Decision logging
- State persistence
- Reduced re-briefing
- Living project notes
Project Memory by the numbers
- 134 all-time installs (skills.sh)
- +6 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #1,233 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/jamditis/claude-skills-journalism --skill project-memoryAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 134 |
|---|---|
| repo stars | ★ 353 |
| Last updated | August 2, 2026 |
| Repository | jamditis/claude-skills-journalism ↗ |
What it does
Persist and reload project context—decisions, files, goals, and open threads—so long-running journalism or editorial work stays coherent across sessions.
Files
Project memory generator
Create CLAUDE.md files that transfer institutional knowledge, not obvious information. Think like a senior journalist onboarding a competent colleague — you don't explain how journalism works, you explain YOUR project's quirks.
CLAUDE.md is advisory, not enforced
Anthropic is explicit on this point: CLAUDE.md content is delivered as a user message after the system prompt. Claude reads it and tries to follow it, but there's no guarantee of strict compliance — especially with vague or conflicting instructions. Source: https://code.claude.com/docs/en/memory
This affects how you write a CLAUDE.md and what you put elsewhere:
| Mechanism | Use for | Source-of-truth |
|---|---|---|
| CLAUDE.md | Standing facts, conventions, "always do X" rules | Advisory |
| Skills | Multi-step procedures, on-demand workflows | Loaded when invoked |
| Hooks | Actions that must happen every time, no exceptions | Deterministic — runs as a shell command (e.g., hooks/one-way-door-check.md) or as a prompt the harness enforces (e.g., hooks/enforce-test-first.md) |
If an instruction is "block writes to published/" or "run accessibility check before commit," that belongs in a hook, not CLAUDE.md. If it's "fact-check workflow" or "FOIA-letter drafting," that's a skill. CLAUDE.md is the place for things Claude must hold in every session.
What belongs in CLAUDE.md
Anthropic publishes an explicit include/exclude table for what makes an effective CLAUDE.md. Source: https://code.claude.com/docs/en/best-practices
| ✅ Include | ❌ Exclude |
|---|---|
| Bash commands Claude can't guess | Anything Claude can figure out by reading code |
| Code style rules that differ from defaults | Standard language conventions Claude already knows |
| Testing instructions and preferred test runners | Detailed API documentation (link to docs instead) |
| Repository etiquette (branch naming, PR conventions) | Information that changes frequently |
| Architectural decisions specific to your project | Long explanations or tutorials |
| Developer environment quirks (required env vars) | File-by-file descriptions of the codebase |
| Common gotchas or non-obvious behaviors | Self-evident practices like "write clean code" |
For journalism projects, translate to:
- Include: AP-style preferences that override defaults, "always cite source URLs," byline policy, embargo handling, source-protection invariants, CMS quirks (e.g., "story slugs must be unique across ALL desks, not just metro").
- Exclude: "We verify facts before publishing" (every journalist knows this), "use AP Style" without specifics (every journalism stack does this), framework documentation, generic git commands.
The deletion test
For every line you write, ask: "Would removing this cause Claude to make mistakes?" If not, cut it.
Size guidance: target under 200 lines
Anthropic's explicit guidance as of 2026: target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence. Bloated CLAUDE.md files cause Claude to ignore the actual rules. Source: https://code.claude.com/docs/en/best-practices
Going over 200 lines is a signal to use one of these instead:
- `.claude/rules/` with `paths:` frontmatter — file-pattern-scoped rules that load only when Claude works with matching files. Replaces
@importchains as the size-management mechanism. (Note:@importsno longer help with context size — Anthropic explicitly notes that imports load fully at launch.) - Skills — for multi-step procedures that don't need to be in every session.
- Hooks — for deterministic enforcement.
Where to put CLAUDE.md files
CLAUDE.md location precedence (more specific wins). Source: https://code.claude.com/docs/en/memory
| Scope | Location | Use case |
|---|---|---|
| Managed policy | Linux/WSL: /etc/claude-code/CLAUDE.md<br/>macOS: /Library/Application Support/ClaudeCode/CLAUDE.md<br/>Windows: C:\Program Files\ClaudeCode\CLAUDE.md | Org-wide standards (IT/DevOps managed; cannot be excluded by individual settings) |
| Project | ./CLAUDE.md OR ./.claude/CLAUDE.md | Team-shared instructions (check into git) |
| User | ~/.claude/CLAUDE.md | Personal preferences across all projects |
| Local | ./CLAUDE.local.md | Personal project-specific notes (add to .gitignore) |
The ./.claude/CLAUDE.md location and managed-policy tier are 2026 additions to Anthropic's documented locations. Templates that say "put this at project root" should mention ./.claude/CLAUDE.md as an equally valid location.
AGENTS.md interop
If your repo already has AGENTS.md for other coding agents (Cursor, Codex, etc.), don't duplicate the content. Anthropic's recommended pattern is @AGENTS.md import (or symlink) with Claude-specific overrides appended:
@AGENTS.md
## Claude Code
- Use plan mode for changes under `src/billing/`.For journalism teams using multiple agents, this matters — shared editorial standards (AP-style preferences, source-handling invariants, fact-check protocols) belong to the org, not one agent.
Anti-patterns to warn about
Anthropic now names these explicitly. Source: https://code.claude.com/docs/en/best-practices and https://code.claude.com/docs/en/memory
1. The over-specified CLAUDE.md. Bloat causes Claude to ignore real rules. If Claude keeps doing something despite a CLAUDE.md rule, the file is probably too long and the rule is getting lost. 2. Conflicting instructions across nested CLAUDE.md files. Claude picks one arbitrarily. Review periodically to remove outdated rules. 3. Hand-coded standard conventions Claude already knows. "Use proper indentation," "write clean code" — delete. 4. Detailed API docs / file-by-file descriptions / info that changes frequently. Link to the canonical source instead. 5. Secrets in CLAUDE.md. It's checked into git. Use CLAUDE.local.md (gitignored) for sandbox URLs, test credentials, personal overrides.
Minimum-viable CLAUDE.md (~6 lines)
Anthropic ships this as the canonical starter. Templates should default to something this short and grow only as needed:
# Code style
- Use ES modules (import/export) syntax, not CommonJS (require)
- Destructure imports when possible
# Workflow
- Be sure to typecheck when you're done making a series of code changes
- Prefer running single tests, and not the whole test suite, for performanceEach of the 6 journalism templates ships a sub-30-line "starter" variant alongside the fuller version. Adopt incrementally.
Auto memory is separate from CLAUDE.md
As of Claude Code v2.1.59+, there's a second memory mechanism alongside CLAUDE.md: auto memory, where Claude writes notes to itself in ~/.claude/projects/<project>/memory/ based on your corrections. The first 200 lines of that directory's MEMORY.md are loaded into every session. Source: https://code.claude.com/docs/en/memory
Practical implication for templates: don't ask the user to manually write down "things Claude learns over time" — that's auto memory's job now. CLAUDE.md is for facts you write up front; auto memory is for things Claude notices.
Voice guidelines
- Direct and terse
- Like notes you'd leave for yourself
- No marketing language
- No "Welcome to..." introductions
- No "This project is..." padding
Example: good vs bad
Bad (too verbose, obvious):
# CLAUDE.md
## Overview
Welcome to our newsroom's story tracking system! This is a
web application built with React and Node.js that helps
editors and reporters collaborate on stories.
## Getting started
First, make sure you have Node.js installed. Then:
npm install
npm startGood (institutional knowledge only):
# CLAUDE.md
## Overview
Story tracker for metro desk. React + Supabase.
## Gotchas
- Story slugs must be unique across ALL desks, not just metro
- "Hold" status doesn't stop the autopublish cron — use "Kill"
- Reporter dropdown caches for 1 hour; new hires won't appear
## Commands
npm run sync-ap # Pull latest from AP, runs automatically at :15
## Credentials
Supabase key in 1Password "Metro Desk" vault, not .envJournalism-specific templates
Templates are in the templates/ directory:
| Template | Use for |
|---|---|
editorial-tool.md | Newsroom tools, fact-checkers, AI assistants |
event-website.md | Conferences, workshops, campaign sites |
publication.md | Newsletters, podcasts, ongoing content series |
research-project.md | Investigations, data journalism with defined scope |
content-pipeline.md | CMS workflows, publishing automation |
digital-archive.md | Historical collections, document repositories |
Template selection guide
What are you building?
├── Tool for the newsroom → editorial-tool.md
├── Site for an event → event-website.md
├── Recurring content series → publication.md
├── One-time investigation → research-project.md
├── Publishing automation → content-pipeline.md
└── Archive/preservation → digital-archive.mdHow to use templates
1. Copy the appropriate template to ./CLAUDE.md OR ./.claude/CLAUDE.md at your project root 2. Fill in the bracketed placeholders with YOUR specifics 3. Delete any sections that don't apply 4. If your project uses other agents (Cursor, Codex), add @AGENTS.md at the top instead of duplicating shared content 5. Add project-specific gotchas as you discover them — but stay under 200 lines 6. Move multi-step procedures to skills, deterministic enforcement to hooks
Last currency sweep
2026-05-09. Sources verified: code.claude.com/docs/en/memory, code.claude.com/docs/en/best-practices.
---
The best CLAUDE.md files are written by people who've been burned by the quirks they're documenting.
CLAUDE.md - [Project name]
Template for: Content pipelines (publishing workflows, content automation)
Project overview
[One sentence: What content this pipeline processes and where it publishes]
Content types: [Articles, newsletters, social posts, etc.] Sources: [CMS, Google Docs, RSS, etc.] Destinations: [Website, email, social platforms] Frequency: [Daily, weekly, on-demand]
Tech stack
Language: [Python, Node.js, etc.] Automation: [GitHub Actions, cron, Zapier, etc.] Storage: [Database, cloud storage, etc.] APIs: [CMS, social platforms, email service]
Commands
# Run full pipeline
[command to process and publish content]
# Preview without publishing
[command for dry run]
# Process single item
[command to process one piece of content]
# Check pipeline status
[command to view queue/status]Content flow
[Source] --> [Ingest] --> [Transform] --> [Enrich] --> [Publish]
│
└--> [Review Queue] (if needed)Content schema
Input format:
title: ""
body: ""
author: ""
date: ""
tags: []
status: draft|review|approvedOutput transformations:
- [HTML formatting]
- [Image optimization]
- [SEO metadata generation]
File structure
project-root/
├── src/
│ ├── ingest/ # Content ingestion
│ ├── transform/ # Format conversion
│ ├── enrich/ # AI enhancement, metadata
│ ├── publish/ # Platform publishers
│ └── utils/ # Shared utilities
├── templates/ # Output templates
├── config/ # Platform configs
└── queue/ # Processing queuePlatform integrations
[Platform A]:
- API credentials location
- Rate limits
- Publishing rules
[Platform B]:
- Authentication method
- Content requirements
- Scheduling capabilities
AI enrichment
- [Summarization: model and prompts]
- [Tagging: automated categorization]
- [SEO: title/description generation]
- [Human review: when required]
Quality gates
- [ ] Spell check / grammar
- [ ] Link validation
- [ ] Image alt text
- [ ] SEO requirements
- [ ] Editorial approval (if required)
Error handling
- [Failed publish retry strategy]
- [Notification on failure]
- [Manual intervention process]
Things to avoid
- Don't publish without preview
- Avoid duplicate posts to same platform
- Don't skip quality gates for "urgent" content
---
Update when adding new content types or platforms.
CLAUDE.md - [Project name]
Template for: Digital archives (preservation, collections, research databases)
Project overview
[One sentence: What this archive contains and who uses it]
Collection scope: [Date range, subject matter, media types] Primary users: [Researchers, public, internal] Record count: [Approximate size of collection]
Tech stack
Backend: [Python, Node.js, etc.] Database: [PostgreSQL, SQLite, etc.] Storage: [Local, S3, Google Drive, etc.] Search: [Full-text, Elasticsearch, Algolia, etc.] Frontend: [If applicable]
Commands
# Ingest new records
[command to add content to archive]
# Run enrichment pipeline
[command to process/analyze content]
# Export data
[command to generate exports]
# Backup
[command to backup archive]Data model
Core entities:
- Record: [fields and relationships]
- Entity: [people, places, organizations]
- Media: [files, formats supported]
Relationships:
- [How records link to entities]
- [How records relate to each other]
Metadata schema
{
"id": "unique identifier",
"title": "record title",
"date": "YYYY-MM-DD or date range",
"source": "original source",
"content_type": "article|video|audio|document",
"entities": ["extracted entities"],
"tags": ["manual or AI-generated tags"]
}File structure
project-root/
├── src/ # Application code
│ ├── ingest/ # Content ingestion
│ ├── enrich/ # AI/metadata enrichment
│ └── export/ # Export utilities
├── data/ # Database files
├── media/ # Archived media files
└── config/ # ConfigurationRights and permissions
- [Copyright status of materials]
- [Access restrictions]
- [Attribution requirements]
- [Embargo periods if applicable]
Preservation standards
- [File format requirements]
- [Metadata standards: Dublin Core, etc.]
- [Backup frequency and locations]
- [Format migration strategy]
AI enrichment
- [Entity extraction: which models/APIs]
- [Categorization approach]
- [Summarization if used]
- [Quality verification for AI outputs]
Search and discovery
- [Searchable fields]
- [Faceted search options]
- [Related record algorithms]
Quality control
- [Validation rules for new records]
- [Duplicate detection]
- [Data cleaning procedures]
- [Review workflow for flagged items]
Things to avoid
- Don't ingest without metadata
- Never delete original source files
- Avoid bulk operations without backup
---
Keep this updated as the collection grows or standards change.
CLAUDE.md - [Project name]
Template for: Editorial tools (writing aids, fact-checking, research tools)
Project overview
[One sentence: What editorial task this tool helps with and who uses it]
Tool type: [Fact-checker, research assistant, writing aid, etc.] Users: [Reporters, editors, researchers] Interface: [CLI, web app, browser extension, API]
Tech stack
Language: [Python, TypeScript, etc.] Framework: [If web-based] AI/ML: [Models and APIs used] Data sources: [Databases, APIs, archives accessed]
Commands
# Start the tool
[command to run]
# Run on specific content
[command with input]
# Update data sources
[command to refresh reference data]
# Test
[command to run tests]Core functionality
Primary features: 1. [Feature A]: [what it does] 2. [Feature B]: [what it does] 3. [Feature C]: [what it does]
Workflow:
[Input] --> [Analysis] --> [Results] --> [Human Review]File structure
project-root/
├── src/
│ ├── analyzers/ # Content analysis modules
│ ├── sources/ # Data source integrations
│ ├── ui/ # User interface (if applicable)
│ └── utils/ # Shared utilities
├── data/ # Reference data
├── prompts/ # AI prompts (if applicable)
└── tests/ # Test suiteData sources
[Source A]:
- Type: [API, database, file]
- Update frequency: [real-time, daily, etc.]
- Access credentials: [location]
[Source B]:
- [Same structure]
AI/ML components
- Model(s): [GPT-4, Claude, custom, etc.]
- Prompts: [Location and versioning]
- Confidence thresholds: [When to flag for review]
- Cost management: [API limits, caching]
Output format
{
"confidence": 0.95,
"result": "verified|unverified|needs_review",
"evidence": [],
"suggestions": []
}Accuracy and reliability
- [Known limitations]
- [False positive/negative rates if known]
- [When human review is mandatory]
- [Disclaimer text for outputs]
Ethical considerations
- [Bias awareness in training data]
- [Source transparency]
- [Human oversight requirements]
- [Not a replacement for: X, Y, Z]
Things to avoid
- Don't present AI output as definitive fact
- Avoid single-source verification
- Don't skip human review for high-stakes content
---
Update when adding new analysis capabilities or data sources.
CLAUDE.md - [Project name]
Template for: Event websites (conferences, workshops, campaigns)
Project overview
[One sentence: What event this site promotes and when it happens]
Event date(s): [Specific dates] Event type: [Conference, workshop, campaign, etc.] Audience: [Who attends] Status: [Planning, registration open, post-event, archived]
Tech stack
Framework: [Static HTML, Next.js, Hugo, etc.] Hosting: [Vercel, Netlify, GitHub Pages] CMS: [If applicable: Sanity, Contentful, etc.] Registration: [Eventbrite, Tito, custom, etc.]
Commands
# Development
[command to start dev server]
# Build
[command to build for production]
# Deploy
[command to deploy, or auto-deploy notes]
# Content updates
[how to update speakers, schedule, etc.]Site structure
/ # Landing page
/schedule # Event schedule
/speakers # Speaker bios
/register # Registration
/venue # Location info
/about # About the eventContent management
Speakers:
- [Where speaker data lives: JSON, CMS, etc.]
- [Required fields: name, bio, photo, talk title]
- [Image specs: dimensions, format]
Schedule:
- [Format: time blocks, tracks, sessions]
- [Timezone handling]
Sponsors:
- [Sponsor tiers and logo requirements]
Design system
- Primary color: [hex code]
- Accent color: [hex code]
- Font: [display and body fonts]
- Logo: [location and variants]
Key dates and deadlines
- [ ] [Date]: Call for speakers opens
- [ ] [Date]: Early bird registration ends
- [ ] [Date]: Schedule finalized
- [ ] [Date]: Event day(s)
- [ ] [Date]: Recordings published
Integrations
- Registration: [Platform and embed method]
- Email: [Newsletter signup, integration]
- Analytics: [GA4, Plausible, etc.]
- Social: [Embed feeds, share buttons]
Post-event updates
After the event:
- [ ] Update status to "Past Event"
- [ ] Add recording links
- [ ] Publish slide decks
- [ ] Archive registration links
Things to avoid
- Don't remove speaker pages after event
- Avoid time-sensitive content without dates
- Don't break URLs that may be shared
---
Update dates and status as the event progresses.
CLAUDE.md - [Project name]
Template for: Publications (newsletters, blogs, magazines, news sites)
Project overview
[One sentence: What this publication covers and who reads it]
Publication type: [Newsletter, blog, magazine, news site] Frequency: [Daily, weekly, monthly] Audience: [Target readership] Established: [When it started]
Tech stack
CMS: [WordPress, Ghost, Substack, custom, etc.] Hosting: [Platform or host] Email: [Mailchimp, ConvertKit, built-in, etc.] Analytics: [GA4, Plausible, etc.]
Commands
# Local development
[command to run locally]
# Build/deploy
[command to publish]
# Newsletter send
[how newsletters are sent]
# Content backup
[backup command or process]Content structure
Sections:
- [Section A]: [What it covers]
- [Section B]: [What it covers]
- [Section C]: [What it covers]
Content types:
- Articles: [Long-form, short-form specs]
- Newsletters: [Format, length]
- [Other types]: [Specs]
File structure
project-root/
├── content/ # Articles and posts
│ ├── articles/
│ ├── newsletters/
│ └── pages/
├── assets/ # Images, media
├── templates/ # Layout templates
├── styles/ # CSS/design files
└── config/ # Site configurationEditorial standards
Voice and tone:
- [Publication's voice description]
- [Style guide reference]
Formatting:
- Headlines: [Sentence case, title case, etc.]
- Bylines: [Format]
- Dates: [Format]
- Images: [Caption style, attribution]
Quality checklist:
- [ ] Spell-checked
- [ ] Links verified
- [ ] Images optimized with alt text
- [ ] SEO metadata complete
- [ ] Mobile preview checked
Workflow
[Draft] --> [Edit] --> [Review] --> [Schedule] --> [Publish]
│
└--> [Revisions] (if needed)SEO and distribution
- SEO approach: [Keywords, meta, structured data]
- Social sharing: [Platforms, posting schedule]
- RSS: [Feed location]
- Syndication: [If applicable]
Subscriber management
- [How subscriptions work]
- [Segmentation approach]
- [Unsubscribe handling]
- [GDPR/privacy compliance]
Things to avoid
- Don't publish without editorial review
- Avoid breaking existing URLs
- Don't change published content without correction notes
- Never remove subscriber data improperly
---
Update as editorial policies or tech stack evolves.
CLAUDE.md - [Project name]
Template for: Research projects (investigations, data journalism, academic)
Project overview
[One sentence: What question this research answers]
Research type: [Investigative, data analysis, academic, etc.] Timeline: [Start date - expected completion] Status: [Planning, data collection, analysis, writing, published] Team: [Who is working on this]
Research question
[The central question or hypothesis being investigated]
Sub-questions: 1. [Sub-question A] 2. [Sub-question B] 3. [Sub-question C]
Tech stack
Analysis: [Python, R, SQL, etc.] Visualization: [D3, Matplotlib, Flourish, etc.] Data storage: [CSV, SQLite, PostgreSQL, etc.] Collaboration: [Git, Google Docs, etc.]
Commands
# Run analysis
[command to run main analysis]
# Generate visualizations
[command to create charts/graphics]
# Export findings
[command to export results]
# Run validation checks
[command to verify data integrity]Data sources
Primary sources:
| Source | Type | Access | Status |
|---|---|---|---|
| [Source A] | [FOIA, API, etc.] | [Public, restricted] | [Obtained, pending] |
| [Source B] |
Data lineage:
- Original source → Cleaned data → Analysis → Findings
File structure
project-root/
├── data/
│ ├── raw/ # Original, unmodified data
│ ├── processed/ # Cleaned data
│ └── outputs/ # Analysis results
├── analysis/ # Analysis scripts
├── notebooks/ # Jupyter/R notebooks
├── docs/ # Documentation, methodology
├── visuals/ # Charts, graphics
└── drafts/ # Story draftsMethodology
Data collection:
- [How data was obtained]
- [Sample size and selection]
Analysis approach:
- [Statistical methods]
- [Tools and techniques]
Validation:
- [How findings were verified]
- [Expert review if applicable]
Source log
| Date | Source | Contact | Notes |
|---|---|---|---|
| [Date] | [Source name] | [Person/method] | [What was obtained] |
Key findings
1. [Finding A]: [brief description] 2. [Finding B]: [brief description] 3. [Finding C]: [brief description]
Ethical considerations
- [IRB approval if applicable]
- [Anonymization requirements]
- [Informed consent status]
- [Potential harms considered]
Publication plan
- Target outlet: [Publication name]
- Format: [Article, interactive, series]
- Embargo: [If applicable]
- Data release: [What will be published]
Things to avoid
- Don't modify raw data files
- Avoid cherry-picking data
- Don't publish without methodology documentation
- Never reveal confidential sources
---
Update status and findings as research progresses.