JSPM

@felixgeelhaar/cclint

0.7.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 83
  • Score
    100M100P100Q90556F
  • License MIT

A comprehensive linter for CLAUDE.md files - 10/10 alignment with Anthropic's official best practices

Package Exports

  • @felixgeelhaar/cclint
  • @felixgeelhaar/cclint/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@felixgeelhaar/cclint) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

CC Linter ๐Ÿ”

CI npm version TypeScript License: MIT

A fast, extensible linter for validating and optimizing CLAUDE.md context files. Achieves 10/10 alignment with Anthropic's official best practices. Built with TypeScript for developers who demand excellence in their Claude AI context files.

โœจ Features

  • ๐ŸŽฏ Perfect Alignment: 10/10 alignment with Anthropic's official CLAUDE.md best practices
  • ๐Ÿš€ Fast & Modern: Built with TypeScript and Vitest for lightning-fast execution
  • ๐Ÿ” Complete Validation: Import resolution, content quality, command safety, monorepo hierarchy
  • ๐ŸŽฏ Extensible: Plugin architecture for custom rules
  • ๐Ÿ“Š Multiple Output Formats: Human-readable text and machine-parseable JSON
  • โšก Developer-Friendly: Instant feedback with detailed error locations
  • ๐Ÿ”ง Configurable: Customizable rules and options

๐Ÿ“ฆ Installation

Global Installation

npm install -g @felixgeelhaar/cclint

Local Installation

npm install --save-dev @felixgeelhaar/cclint

Using npx (No Installation Required)

npx @felixgeelhaar/cclint lint your-claude.md

๐Ÿš€ Quick Start

Basic Usage

# Lint a CLAUDE.md file
cclint lint CLAUDE.md

# Lint with JSON output
cclint lint CLAUDE.md --format json

# Set custom file size limit
cclint lint CLAUDE.md --max-size 5000

Example Output

๐Ÿ“ Linting results for CLAUDE.md:

โŒ error: Missing required section: "Development Commands" at 1:1 [structure]
โš ๏ธ warning: File size (12,543 characters) exceeds maximum allowed size (10,000 characters) at 1:1 [file-size]
โš ๏ธ warning: Missing required content: TypeScript usage (expected: "TypeScript") at 1:1 [content]

Summary: 1 errors, 2 warnings

๐Ÿ“ Built-in Rules

Import Syntax Rule (import-syntax) ๐Ÿ†•

Validates Anthropic's @path/to/file import syntax for CLAUDE.md files.

  • Checks:
    • Import syntax outside code blocks/spans
    • Path format validation (relative, absolute, ~/)
    • Duplicate import detection
    • Max depth violations (5 hops)
  • Severity: Mixed (errors for syntax, warnings for patterns)
  • Enabled: By default

Content Organization Rule (content-organization) ๐Ÿ†•

Validates content quality and structure following Anthropic best practices.

  • Checks:
    • Heading hierarchy (h1 โ†’ h2 โ†’ h3, no skipping)
    • Bullet point usage for organization
    • Vague language detection ("properly" โ†’ specific instructions)
    • Emphasis markers (IMPORTANT, YOU MUST)
    • Specificity (measurements, tool names)
  • Severity: Info (suggestions for improvement)
  • Purpose: Ensures clear, actionable instructions

File Location Rule (file-location) ๐Ÿ†•

Validates file placement and naming conventions.

  • Checks:
    • CLAUDE.local.md deprecation warnings
    • File naming (CLAUDE.md required)
    • Location recommendations (user vs project)
    • Git awareness (.gitignore suggestions)
  • Severity: Mixed (errors for naming, warnings/info for recommendations)
  • Enabled: By default

Import Resolution Rule (import-resolution) โญ v0.6.0

Validates that imports resolve to existing files and detects circular dependencies.

  • Checks:
    • File existence validation for all @path imports
    • Circular dependency detection (A โ†’ B โ†’ A)
    • Recursive depth limit enforcement (5 hops max)
    • Path resolution (relative, absolute, home directory)
  • Severity: Error for missing files and cycles
  • Enabled: By default

Content Appropriateness Rule (content-appropriateness) โญ v0.6.0

Ensures content is specific, actionable, and belongs in CLAUDE.md.

  • Checks:
    • Generic instructions detection ("follow best practices")
    • File size recommendations (~5KB limit)
    • Content placement (README vs CLAUDE.md)
    • Section size optimization
    • Actionable vs passive language
  • Severity: Warning for size, Info for suggestions
  • Enabled: By default

Monorepo Hierarchy Rule (monorepo-hierarchy) โญ v0.6.0

Validates CLAUDE.md file relationships in monorepos.

  • Checks:
    • Parent/child CLAUDE.md conflict detection
    • Duplicate content across hierarchy
    • Organization recommendations for multi-package repos
    • Import-based consolidation suggestions
  • Severity: Warning for conflicts, Info for guidance
  • Enabled: By default

Command Safety Rule (command-safety) โญ v0.6.0

Validates bash command safety in code blocks.

  • Checks:
    • Dangerous commands (rm -rf /, curl | bash, fork bombs)
    • Error handling (set -e, || exit 1)
    • Variable quoting in destructive operations
    • Unsafe sudo usage warnings
  • Severity: Error for dangerous commands, Warning for safety issues
  • Enabled: By default

File Size Rule (file-size)

Validates that CLAUDE.md files don't exceed size limits for optimal performance.

  • Default: 10,000 characters
  • Severity: Warning
  • Configurable: --max-size <number>

Structure Rule (structure)

Ensures required sections are present in CLAUDE.md files.

  • Required Sections:
    • "Project Overview"
    • "Development Commands"
    • "Architecture"
  • Severity: Error
  • Purpose: Maintains consistent documentation structure

Content Rule (content) โš ๏ธ Deprecated

Note: This rule is deprecated in v0.5.0. Use content-organization instead.

Technology-specific content validation (deprecated in favor of content-organization).

  • Status: Maintained for backward compatibility
  • Migration: Switch to content-organization rule

Format Rule (format)

Validates Markdown syntax and formatting best practices.

  • Checks:
    • Header spacing (# Header not #Header)
    • Trailing whitespace
    • Consecutive empty lines (max 2)
    • Code block formatting
    • File ending with newline
  • Severity: Mixed (errors for syntax, warnings for style)

โš™๏ธ Configuration

Command Line Options

cclint lint [options] <file>

Options:
  -f, --format <format>   Output format (text, json) (default: "text")
  --max-size <size>       Maximum file size in characters (default: "10000")
  -c, --config <path>     Path to configuration file
  --fix                   Automatically fix problems where possible
  -h, --help              Display help for command

cclint install [options]

Options:
  --hooks                 Install pre-commit git hooks (default: true)
  --pre-push              Install pre-push quality check hooks (default: true)
  -h, --help              Display help for command

Exit Codes

  • 0: No errors (warnings allowed)
  • 1: Errors found or execution failed

๐Ÿ—๏ธ Architecture

CC Linter follows a hexagonal architecture with clean separation of concerns:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   CLI Adapter   โ”‚    โ”‚ VS Code Extensionโ”‚
โ”‚                 โ”‚    โ”‚    (Future)      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚                      โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚   Core Engine        โ”‚
          โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
          โ”‚ โ”‚ Rules Engine    โ”‚  โ”‚
          โ”‚ โ”‚ - FileSizeRule  โ”‚  โ”‚
          โ”‚ โ”‚ - StructureRule โ”‚  โ”‚
          โ”‚ โ”‚ - ContentRule   โ”‚  โ”‚
          โ”‚ โ”‚ - FormatRule    โ”‚  โ”‚
          โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Domain Model

  • ContextFile: Represents a CLAUDE.md file with parsing capabilities
  • Rule: Interface for validation logic
  • Violation: Represents a rule violation with location and severity
  • LintingResult: Aggregates all violations for a file

๐Ÿ› ๏ธ Development

Prerequisites

  • Node.js 18+
  • npm or yarn

Setup

# Clone the repository
git clone https://github.com/felixgeelhaar/cclint.git
cd cclint

# Install dependencies
npm install

# Run tests
npm test

# Build the project
npm run build

# Run the linter on itself
npm run dev -- lint CLAUDE.md
# Or after global install
cclint lint CLAUDE.md

Scripts

npm test              # Run test suite with Vitest
npm run test:watch    # Run tests in watch mode
npm run test:coverage # Generate coverage report
npm run typecheck     # Type check with TypeScript
npm run lint          # Lint source code
npm run build         # Build for production
npm run dev           # Run development version

Testing Philosophy

CC Linter follows Test-Driven Development (TDD):

  • โœ… 235 tests with comprehensive coverage
  • ๐Ÿš€ Vitest for ultra-fast test execution
  • ๐ŸŽฏ Unit tests for domain logic
  • ๐Ÿ”— Integration tests for CLI functionality
  • ๐Ÿ“Š Coverage reporting for quality assurance

๐Ÿค Contributing

We welcome contributions! Please read our Contributing Guide for details on:

  • Code of conduct
  • Development process
  • Pull request requirements
  • Testing guidelines

Quick Contribution Steps

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes with tests
  4. Run the test suite (npm test)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to your branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™‹ Support

๐Ÿ† Why CC Linter?

For Developers

  • Consistency: Maintain standardized CLAUDE.md files across projects
  • Quality: Catch common issues before they impact AI interactions
  • Speed: Fast feedback loop with instant validation
  • Integration: Works with CI/CD pipelines and development workflows

For Teams

  • Standards: Enforce documentation standards across repositories
  • Onboarding: Help new developers understand project structure
  • Maintenance: Keep context files up-to-date and effective
  • Automation: Integrate with existing development processes

โš™๏ธ Advanced Features

Configuration Files

Create a .cclintrc.json file to customize rules for your project:

{
  "rules": {
    "file-size": {
      "enabled": true,
      "severity": "warning",
      "options": {
        "maxSize": 15000
      }
    },
    "structure": {
      "enabled": true,
      "options": {
        "requiredSections": ["Overview", "Commands", "Architecture"]
      }
    }
  },
  "ignore": ["*.backup.md"]
}

๐Ÿ“š Full Configuration Guide

Auto-fix

Automatically fix common formatting issues:

cclint lint CLAUDE.md --fix

Git Hooks

Install pre-commit hooks to lint files automatically:

cclint install --hooks

Install pre-push hooks for comprehensive quality checks:

cclint install --pre-push

Install both hooks:

cclint install --hooks --pre-push

The pre-push hook runs:

  • TypeScript type checking
  • ESLint linting
  • Prettier formatting check
  • Full test suite

GitHub Action

Add automated linting to your CI/CD pipeline:

- name: Lint CLAUDE.md
  uses: felixgeelhaar/cclint@v0.6.0
  with:
    files: 'CLAUDE.md'
    format: 'text'

๐Ÿ“š GitHub Action Guide

Custom Rules API

Create your own validation rules with the powerful Custom Rules API:

import { CustomRule } from '@felixgeelhaar/cclint';

class MyCustomRule extends CustomRule {
  constructor() {
    super('my-rule', 'Description of my custom rule');
  }

  validateInternal(file) {
    const violations = [];
    // Your validation logic here
    return violations;
  }

  generateFixes(violations, content) {
    // Your auto-fix logic here
    return [];
  }
}

// Plugin export
export default {
  name: 'my-plugin',
  version: '1.0.0',
  rules: [new MyCustomRule()],
};

Configuration (.cclintrc.json):

{
  "plugins": [
    {
      "name": "./my-plugin.js",
      "enabled": true
    }
  ],
  "rules": {
    "my-rule": {
      "enabled": true,
      "severity": "warning"
    }
  }
}

Features:

  • ๐Ÿ”Œ Plugin System: Load custom rules dynamically
  • ๐ŸŽฏ TypeScript Support: Full type safety and IntelliSense
  • ๐Ÿ”ง Auto-fix Integration: Custom rules support automatic fixes
  • โš™๏ธ Configurable: Enable/disable and configure custom rules
  • ๐Ÿ“Š Multiple Severities: Error, warning, or info levels

๐Ÿ“š View Example Custom Rules

๐Ÿ”ฎ Roadmap

  • VS Code Extension - Real-time linting in your editor
  • Custom Rules API - Plugin system for custom validation logic โœ…
  • Enhanced Auto-fix - More intelligent fixes and suggestions โœ…
  • Configuration Files - .cclintrc.json for project-specific rules โœ…
  • Auto-fix Suggestions - Automatic fixes for common issues โœ…
  • Pre-push Quality Hooks - Comprehensive quality checks before push โœ…
  • Git Hooks Integration - Pre-commit validation โœ…
  • GitHub Action - Easy CI/CD integration โœ…

Made with โค๏ธ by Felix Geelhaar for the Claude AI developer community

โญ Star us on GitHub โ€ข ๐Ÿ“ฆ View on npm โ€ข ๐Ÿ› Report Bug