Skip to content

File Discovery

claudelint automatically discovers project-level and plugin-level Claude Code configuration files using predefined glob patterns. Global user configurations (~/.claude/) are out of scope.

Discovery respects .claudelintignore, .gitignore patterns, and always excludes node_modules/ and .git/.

File Type Reference

File TypeLocationsValidatorRecursive
CLAUDE.mdCLAUDE.md, .claude/CLAUDE.md, CLAUDE.local.mdclaude-mdYes (**/)
Rules.claude/rules/**/*.mdclaude-mdYes
Skills.claude/skills/<name>/SKILL.md, skills/<name>/SKILL.mdskillsYes (**/) for .claude/
Agents.claude/agents/<name>.md, agents/<name>.mdagentsNo
Output Styles.claude/output-styles/<name>/*.md, output-styles/<name>/*.mdoutput-stylesNo
Settings.claude/settings.json, .claude/settings.local.jsonsettingsNo
Hookshooks/hooks.json (plugin, auto-loaded)hooksNo
MCP.mcp.jsonmcpNo
LSP.claude/lsp.json, .lsp.jsonlspNo
Pluginplugin.json, .claude-plugin/plugin.jsonpluginNo
Commands.claude/commands/**/*, commands/**/*commandsYes

Recursive patterns (**/) find files in nested directories, supporting monorepo layouts where packages have their own .claude/ directories.

Monorepo Support

claudelint supports monorepo-style projects where multiple packages each have their own Claude Code configuration. All CLAUDE.md and CLAUDE.local.md files are discovered recursively, and skills inside .claude/skills/ are discovered within nested packages.

For workspace detection, config inheritance, and per-package validation, see Monorepo Support.

Plugin File Discovery

When building a Claude Code plugin, files use a different directory structure at the plugin root:

text
my-plugin/
  plugin.json                       # Plugin manifest
  skills/
    my-skill/SKILL.md               # Plugin skill
  agents/
    my-agent.md                     # Plugin agent
  hooks/
    hooks.json                      # Plugin hooks
  output-styles/
    concise/style.md                # Plugin output style
  commands/
    deploy.md                       # Plugin command

claudelint detects both the standard .claude/ project structure and the plugin root structure. See Plugin Manifest: Auto-discovery for how Claude Code loads plugin config files.

Ignoring Files

.claudelintignore

Create a .claudelintignore file in your project root using .gitignore syntax:

text
# Ignore build artifacts
dist/
build/

# Ignore a specific CLAUDE.md
packages/legacy/CLAUDE.md

# Ignore all files in a directory
experiments/**

Syntax rules:

  • # for comments
  • * matches any characters except /
  • ** matches any characters including /
  • Trailing / matches directories
  • Blank lines are ignored

Default ignores (always applied): node_modules/**, .git/**, dist/**, build/**.

You can also add patterns in your config file with the ignorePatterns field:

json
{
  "ignorePatterns": ["**/*.generated.ts", ".cache/", "coverage/"]
}

.gitignore

Patterns in .gitignore are also respected automatically. Files matched by .gitignore will not be discovered.