Docgrity for VS Code

Find where your repository's docs disagree with themselves — and raise a GitHub issue to get it fixed.
Install: search “Docgrity” in the Extensions view, or code --install-extension ujjavala.docgrity
The repo-docs sibling of the Docgrity Confluence app.
Scoped deliberately: markdown files only (**/*.md — READMEs, ADRs, runbooks, guides).
This repo contains all three repo-docs surfaces:
| Surface |
Where |
Acts? |
| VS Code extension (this root) |
interactive scans in the editor |
raises issues, human-approved one at a time |
| GitHub Action (action/) |
CI: schedule + PRs |
opt-in deduped issues, job summary, HTML report |
| Local CLI (action/bin/docgrity.js) |
your terminal |
read-only report dashboard, no actions |
See action/README.md for Action and CLI usage
(uses: ujjavala/docgrity-vscode/action@main).
What it does
- Scan —
Docgrity: Scan repository docs collects your markdown files, picks
candidate pairs locally with TF-IDF (no network), then asks the LLM to assess:
- Contradictions — conflicting factual claims across two docs
- Duplicates — substantially overlapping docs that should be merged
- Open questions — unresolved TBD/TODO/"who owns this?" buried in docs
- Review — findings appear in the Docgrity view with evidence excerpts; each
excerpt is a click away from the exact spot in the file, and shows as a
diagnostic squiggle. Every finding records the model + prompt version.
- Act — right-click a finding → Raise GitHub issue. Docgrity drafts the
issue (title, evidence, suggested next step, potential owner from git history),
shows you the draft, and only creates it after you approve. The issue is labelled
docgrity and docgrity:<type>.
Zero cost, zero keys
- All LLM calls go through your own GitHub Copilot subscription via the VS Code
Language Model API. No API keys, no servers, no telemetry.
- Issue creation uses VS Code's built-in GitHub sign-in.
- Candidate selection is local TF-IDF — the LLM only sees the top pairs.
Modes: report-only vs report + issues
docgrity.mode |
Behaviour |
report-and-issue (default) |
Scan, review findings, and raise GitHub issues — each previewed and human-approved. |
report-only |
Scan and review only. The Raise GitHub issue action is hidden and blocked — the extension is guaranteed to never post anywhere. Good for client repos, compliance-sensitive environments, or just reading. |
Set it in Settings → search “docgrity mode”, or in .vscode/settings.json:
{ "docgrity.mode": "report-only" }
Per-workspace settings win over user settings, so you can default to report-only
globally and enable issues only in repos you own.
Choosing which checks run
Each check is a separate toggle — run any combination:
| Setting |
Default |
What it does |
docgrity.checks.duplicates |
true |
Pairwise duplicate detection |
docgrity.checks.contradictions |
true |
Pairwise contradiction detection |
docgrity.checks.openQuestions |
true |
Per-doc unresolved-question detection |
These combine freely with any model (docgrity.model.*) and either mode
(docgrity.mode). Disabling checks also speeds up scans: pair selection is
skipped entirely when both pairwise checks are off.
- When both pairwise checks are enabled they run as a single combined LLM
call per pair (the model reads each pair once, not twice).
- Docs with no open-question signals (no TODO/TBD/
???/unanswered questions)
are pre-filtered out before any LLM call.
- Assessments run with bounded concurrency (4 at a time).
- For large repos, tune
docgrity.maxFiles, docgrity.maxPairs, and
docgrity.include to narrow the corpus.
Choosing your model (Copilot, Claude, GPT, local llama…)
Run Docgrity: Select AI model from the command palette — it lists every model
VS Code exposes and saves your choice. Or set it manually:
| Setting |
Meaning |
Default |
docgrity.model.vendor |
vscode.lm vendor id (copilot covers Copilot + BYOK models; empty = any) |
copilot |
docgrity.model.family |
preferred model family, e.g. gpt-4o, claude-sonnet-4.5, llama3.1 (empty = first available) |
"" |
Options, in order of simplicity:
- Copilot (default) — sign in to GitHub Copilot; nothing to configure. Copilot
models come via the
vscode.lm API and are unaffected by GitHub's retirement of
the separate GitHub Models service.
- Claude / GPT / Gemini via Copilot — any model enabled in Copilot's model picker
is available; set
docgrity.model.family (e.g. claude-sonnet-4.5) or use
Select AI model.
- Local Ollama — install Ollama,
ollama pull llama3.1,
then in Copilot Chat → Manage models → add the Ollama model. It registers under
the copilot vendor; pick it with Select AI model. Fully local — no doc content
leaves your machine.
- Remote Ollama over a Cloudflare Tunnel — if your model runs on another box
(home server, GPU rig):
# on the machine running Ollama
cloudflared tunnel --url http://localhost:11434
Point Copilot's Manage models → Ollama endpoint at the generated
https://….trycloudflare.com URL. Note: quick tunnels get a new URL on every
restart — re-update the endpoint each time, or create a named tunnel with your
own domain for a stable URL (cloudflared tunnel create …). Protect a named tunnel
with Cloudflare Access — an open LLM endpoint is abusable.
Small local models fail Docgrity's strict-JSON validation more often than hosted
ones; failed responses are rejected safely (never mis-recorded) — expect fewer
findings rather than wrong ones. 8B+ instruct models work best.
Outside the editor (the CLI and GitHub Action) Copilot is not
available — there is no Copilot API for terminals or CI. Use ollama (keyless) or
bring your own anthropic / openai / gemini key instead.
No-agent mode (no AI at all)
Set docgrity.engine to no-agent (CLI/Action: provider: none) to scan with
pure algorithms — no model, no Copilot, no keys, fully offline:
- Duplicates — verbatim shared-block detection + TF-IDF similarity (catches
copy-paste duplication; paraphrased duplication needs AI).
- Open questions — explicit markers (
TODO, TBD, FIXME, ???, "open
question"…) with deterministic high confidence.
- Contradictions — ❌ require AI intelligence (semantic understanding of
conflicting claims). They are skipped in no-agent mode — you're told, never
given heuristic guesses.
Evidence stays verbatim, owners still come from git history, and raised issues
use a deterministic template. Confidence is shown on every surface — Problems
view squiggles, the findings tree, reports, CLI output, and issue bodies — so
you can always judge how sure a finding is.
Design principles (shared with the Forge app)
- Typed JSON outputs only — model responses are validated in code, never trusted prose.
- Every finding requires verbatim evidence, verified against the source file
(hallucinated quotes are dropped).
- Ownership is always potential (last git author), never asserted.
- Nothing is posted anywhere without explicit human approval.
- Doc content is untrusted input — it cannot override agent instructions.
Requirements
- VS Code 1.95+, an active GitHub Copilot subscription, a workspace with a GitHub
origin remote (for issue creation).
Development
npm install
npm run compile
# F5 in VS Code to launch the Extension Development Host
Settings
| Setting |
Default |
Purpose |
docgrity.include |
**/*.md |
Docs glob (markdown only by design) |
docgrity.exclude |
**/{node_modules,…}/** |
Excluded paths |
docgrity.maxFiles / docgrity.maxPairs |
200 / 25 |
Scan caps |
docgrity.thresholds.* |
0.75 / 0.7 / 0.6 |
Confidence gates per finding type |