Empty cells
| ID | Description |
|--------|-------------|
| FR-101 | User login |
| FR-102 | | Your AI writes the docs. contextlint verifies them — deterministically. A semantic linter for structured Markdown that catches broken cross-references, missing sections, and dependency drift across your editor, your AI assistants, and your CI.
A modern spec-driven repo can have hundreds of Markdown files referencing each other. When your AI adds another one — or rewrites three at once — humans can't track what just broke.
Reviewers nod.
CI passes.
The drift compounds.
Use AI to write your docs — that's where it shines. Use contextlint to verify them. Static analysis catches what's checkable; AI focuses on what's actually generative. The separation keeps your CI deterministic and your reviews fast.
contextlint plugs into the entire document lifecycle — from your editor to your AI assistant to your CI gate.
See errors as you type. Hover for context. Quick-fix common violations with one click.
Your AI calls contextlint to verify its own output before handing it back to you.
The last gate. Block PRs with broken cross-references or missing sections.
See errors as you type. Hover for context. Quick-fix common violations with one click.
Your AI calls contextlint to verify its own output before handing it back to you.
The last gate. Block PRs with broken cross-references or missing sections.
[ref:proto] Built on Model Context Protocol (MCP) and Language Server Protocol (LSP). Works with any compatible client.
A glimpse of what contextlint catches. The full set spans tables, sections, structure, references, checklists, content quality, and dependency graphs.
| ID | Description |
|--------|-------------|
| FR-101 | User login |
| FR-102 | | # ADR-005: Database choice
## Context
We need persistent storage.
## Decision
Use PostgreSQL. ## Login spec
See [FR-102](./req.md#fr-102) for the
full requirement and test cases. ## Acceptance criteria
- [x] User can log in
- [ ] Session persists across reloads
- [ ] Logout clears all tokens ## Non-functional
- Performance target: TBD
- Owner: TODO
- Review date: <pending> architecture.md → api-design.md
api-design.md → data-model.md
data-model.md → architecture.md npm install -D @contextlint/cli // or: bunx, pnpm, yarn
npx contextlint "**/*.md" // add a config file to enable cross-file rules
{
"$schema": "https://raw.githubusercontent.com/nozomi-koborinai/contextlint/main/schema.json",
"include": ["docs/**/*.md", "specs/**/*.md"],
"rules": [
{ "rule": "ref001" },
{ "rule": "sec001", "options": { "sections": ["Context", "Decision", "Consequences"] } },
{ "rule": "grp002" }
]
} Then plug into your editor for live diagnostics, or run as a CI gate. See the README for the full configuration reference.
One core engine, three protocols. No editor lock-in, no AI vendor lock-in.
[testimony:001]"I practice spec-driven development at work. Maintaining consistency across hundreds of Markdown files is a real problem — broken cross-references and duplicate IDs go undetected. So I built contextlint to solve it."
contextlint is open source. Contributions, rule proposals, and bug reports are welcome on GitHub.