> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vectorlint.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuring a project

> Choose which rules apply to which files and configure review behavior.

`.vectorlint.ini` is VectorLint's project configuration file. It lives in your project root and controls three things: global behavior settings, where VectorLint looks for custom rules, and which rule packs run on which files.

Run `vectorlint init` to generate a starter file. You can edit it manually at any time.

## Global Settings

These settings apply to all reviews in the project.

| Setting           | Type    | Default   | Description                                                                       |
| ----------------- | ------- | --------- | --------------------------------------------------------------------------------- |
| `RulesPath`       | string  | *(none)*  | Root directory for custom rule packs. If omitted, only built-in presets are used. |
| `Concurrency`     | integer | `4`       | Number of reviews to run in parallel.                                             |
| `DefaultSeverity` | string  | `warning` | Severity level for reported violations: `warning` or `error`.                     |

```ini theme={null}
# .vectorlint.ini

RulesPath=.github/rules
Concurrency=4
DefaultSeverity=warning
```

## File Pattern Sections

Use `[glob/pattern]` sections to map file types to rule packs. Each section targets files matching the pattern and specifies which rules to run.

```ini theme={null}
[**/*.md]
RunRules=Acme

[content/docs/**/*.md]
RunRules=Acme

[content/marketing/**/*.md]
RunRules=TechCorp

[content/drafts/**/*.md]
RunRules=
```

### `RunRules`

A comma-separated list of rule pack names. Pack names correspond to subdirectory names inside `RulesPath`.

```ini theme={null}
RunRules=Acme, TechDocs
```

Set `RunRules=` with no value to explicitly skip all rules for matching files (useful for drafts or generated content).

## Rule Pack Directory Structure

The `RulesPath` setting defines where VectorLint looks for rule packs. Each subdirectory becomes an available pack name.

```
project/
├── .github/
│   └── rules/              ← RulesPath
│       ├── Acme/           ← Pack: "Acme"
│       │   ├── grammar.md
│       │   └── style.md
│       └── TechCorp/       ← Pack: "TechCorp"
│           └── brand.md
└── .vectorlint.ini
```

Rules inside `Acme/` are available when you set `RunRules=Acme`. Nesting is supported: you can organize rules into subdirectories within a pack.

## Cascading Configuration

VectorLint applies configuration blocks from general to specific, similar to Vale's cascade behavior. All blocks that match a given file are applied, and rule packs accumulate. A file runs every pack from every matching block, from the most general to the most specific.

```ini theme={null}
# Applied first: general
[**/*.md]
RunRules=GeneralRules

# Applied second: more specific
# Result: content/docs/api.md runs GeneralRules AND TechDocs
[content/docs/**/*.md]
RunRules=TechDocs
```

**Specificity** is determined by path depth and wildcard count. `content/docs/**/*.md` is more specific than `**/*.md`.

## Confidence threshold

VectorLint filters findings through confidence checks before surfacing violations. The confidence threshold controls how aggressively this filter applies.

Set it in your `.env` file or as an environment variable:

```bash theme={null}
CONFIDENCE_THRESHOLD=0.75
```

| Value                      | Effect                                                           |
| -------------------------- | ---------------------------------------------------------------- |
| Lower (for example `0.5`)  | More findings surfaced, higher recall, more noise                |
| Default (`0.75`)           | Balanced precision and recall                                    |
| Higher (for example `0.9`) | Fewer findings surfaced, higher precision, fewer false positives |

Invalid values fall back to the default of `0.75`.

## Complete Example

```ini theme={null}
# .vectorlint.ini

RulesPath=.github/rules
Concurrency=4
DefaultSeverity=warning

# All markdown files: baseline checks
[**/*.md]
RunRules=Acme

# Technical docs
[content/docs/**/*.md]
RunRules=Acme

# Marketing: brand voice rules
[content/marketing/**/*.md]
RunRules=TechCorp

# Drafts: skip all checks
[content/drafts/**/*.md]
RunRules=
```

## Global Style Guide (VECTORLINT.md)

In addition to `.vectorlint.ini`, you can place a `VECTORLINT.md` file in your project root to define global style instructions in plain language.

**Zero-config mode:** If no `.vectorlint.ini` exists, VectorLint automatically detects `VECTORLINT.md`, creates a synthetic "Style Guide Compliance" rule, and reviews content against it.

**Combined mode:** When `.vectorlint.ini` is present, the contents of `VECTORLINT.md` apply globally to every review, making your tone and terminology preferences active across all rules.

<Note>
  Keep `VECTORLINT.md` concise. VectorLint emits a warning if the file exceeds approximately 4,000 tokens, as very large contexts can degrade review quality and increase API costs.
</Note>

## Next Steps

* [LLM Providers](/llm-providers): configure the model that runs reviews
* [Style Guide](/style-guide): write custom rules for your content standards
