Git-native · Self-hostable · Claude-ready

Inline threads on
your Markdown, in Git.

Select any text in any .md file. A thread starts there — anchored to that paragraph, visible in VS Code, readable by Claude, persistent across rebases.

$ npx @limn/cli show docs/auth.md
limn.sh/view?repo=acme/api&file=docs/auth.md
Authentication Service
The auth service handles token issuance and validation across all client-facing APIs.
Token Lifecycle
All tokens expire after 24 hours and are stored in Redis. 3
The gateway validates tokens on every request. Rate limiting is applied at the gateway level with a 1,000 req/min ceiling.
Database
We use PostgreSQL 16 with PgBouncer for connection pooling…
"All tokens expire after 24 hours…"
Claude AI 3d ago
24h may violate your compliance policy. Legal should review before next audit.
A alice 2d ago
Legal confirmed: must be 1h. Updating in PR #291.
B bob 1d ago
PR merged. Resolving thread.
Works with GitHub / GitLab Enterprise / VS Code / Claude Code MCP / CLI

PR comments are not documentation

When a PR merges, every comment on it is effectively archived. The Markdown file it edited has no record of what was discussed.

PR #247 Merged & closed
reviewer Why 24h? That seems long for tokens
author Legacy decision — probably should revisit
PR merged · thread locked · 8 clicks to find
Slack #eng 3 months ago
alice Should token expiry really be 24h? Legal flagged it
bob let's change to 1h
Buried under 4,000 messages
auth.md Live thread
Claude 24h may violate compliance — legal should review
alice Legal confirmed: must be 1h. PR #291 in progress
bob PR merged. Resolving ✓

Features

01

Text-anchored threads, not line numbers

Each thread is anchored to a text fingerprint — selected text plus surrounding context. When the file changes, the anchor fuzzy-matches back to position. When text is gone, the thread becomes detached rather than silently wrong.

02

VS Code extension with gutter UI

Open any .md file and threads appear in the editor gutter — same feel as GitHub code review. Reply and resolve without leaving the editor. Thread count shows in the status bar and file explorer badge.

03

MCP server for Claude Code

Add one line to .claude/mcp.json and every file Claude reads comes with your team's open threads as built-in context. Claude can post AI-attributed comments, surface stale discussions, and suggest resolutions.

"limn": { "command": "npx @limn/mcp" }
# Claude now reads before every file:
→ alice (2d): "24h expiry flagged by legal…"
→ bob (1d): "+1, updating in PR #291 now"
→ 1 open thread · 0 resolved
04

GitHub App for org-wide awareness

When a PR touches a Markdown file with open threads, the bot posts a summary with deep links to each thread. Teams stay aware of doc feedback without manually checking a separate tool.

05

Self-hostable, one command

All comments stay in your infrastructure. GitLab EE on-prem, air-gapped networks, SAML SSO. No data leaves your environment.

# docker-compose.yml included
docker compose up

Claude with and without Limn

Same file. Same prompt.

Without Limn
Review auth.md and flag any risks
Claude
The authentication service looks reasonable. The 24-hour token expiry is a common pattern — it balances security with user experience well.
Does not know alice flagged 24h expiry as a compliance issue 3 days ago.
vs
With Limn MCP
Review auth.md and flag any risks
Claude
I can see alice flagged the 24h token expiry as a compliance risk 3 days ago, and legal confirmed it should be 1h. Here's a patch:
- All tokens expire after 24 hours + All tokens expire after 1 hour

How it works

1

Web viewer

Paste any GitHub or GitLab URL. Markdown renders with threads inline. Select text to start a comment — no install needed.

2

VS Code

Install the extension. Open any .md file. Threads load in the gutter. Right-click a selection → Add Limn comment.

3

Claude Code

Add the MCP server to .claude/mcp.json. Every file Claude reads includes your team's open threads as context.

4

CLI

npx @limn/cli show docs/arch.md — view threads in the terminal, export JSON, find stale discussions.

The conversation belongs next to the text.

Not scattered across Slack, closed PRs, and Confluence pages.

$ npx @limn/cli show <your-file.md>