Skip to content

VS Code extension ​

The extension watches the workspace, runs the same gates as the CLI, and puts the results where you already look: a sidebar tree, the Problems pane, a status-bar item, and an Overview dashboard.

It shells out to the same lgit binary and writes to the same SQLite store, so a finding you ignore in the editor stays ignored in CI.

Install ​

Every GitHub release carries the extension as l0-git-<version>.vsix, with the lgit binary for macOS, Linux and Windows bundled inside. Download it, then:

sh
code --install-extension l0-git-<version>.vsix

Or, in VS Code: Extensions view → … menu → Install from VSIX….

Not on the Marketplace yet

The extension is not published to the Visual Studio Marketplace or Open VSX, so searching for it in the Extensions view finds nothing. Install the .vsix.

Finding the binary ​

The extension resolves lgit in this order, and stops at the first hit:

  1. l0-git.binaryPath, if set.
  2. The binary bundled inside the extension: bin/<goos>-<goarch>/lgit.
  3. The dev layout: ../server/lgit, next to the extension folder.
  4. /usr/local/bin, /opt/homebrew/bin, ~/.local/bin, ~/go/bin.
  5. Whatever lgit resolves to on PATH.

If none of them match, the sidebar offers a one-click action to open the setting or the output channel: it does not fail silently.

Where findings show up ​

SurfaceWhat it gives you
Activity-bar viewTree of findings, with grouping, sorting and filtering
Problems paneEvery open finding as a vscode.Diagnostic, keyed by (file, line) with code = gate_id
Status barl0-git: clean, or a per-severity count with a tooltip breakdown and the age of the last check
Overview dashboardHow old the numbers are, severity bars, top gates, top files, tag chips, 7-day trend

What is visible by default ​

The sidebar shows error and warning only. Info findings: TODO markers, a missing CONTRIBUTING.md, network literals: are hidden until you turn them on with the severity filter. They are the audit layer, not the work queue.

Toasts fire for errors only, and cap at three plus a summary. Warnings and info never interrupt.

override_accepted findings are suppressed from the tree at every severity. They still land in the store and show up in the dashboard and in lgit list -gate=override_accepted.

View controls ​

CommandWhat it does
l0-git.runChecksRun all gates against the workspace
l0-git.searchSubstring filter across title, message, file and gate
l0-git.setGroupByGroup by severity / gate / file / tag / status / none
l0-git.setSortBySort by updated / created / severity / gate / file
l0-git.setStatusFilterStatus filter: open / ignored / resolved / all
l0-git.toggleSeverityMulti-select which severities are shown
l0-git.showOverviewOpen the dashboard webview
l0-git.clearFiltersReset every view filter

The active state, 12 findings · group: severity · status: ignored, is shown in the view's description line, and persists across sessions.

Quick fixes ​

Most presence-style gates ship a stub generator. Click the lightbulb on an l0-git diagnostic in the Problems pane and pick Generate stub for <gate_id>. The extension writes a scaffold and re-runs the gate, so the finding clears immediately.

GateStub written
readme_presentREADME.md skeleton
license_presentPrompts for MIT / Apache-2.0 / BSD-3-Clause / GPL-3.0 / MPL-2.0 / Unlicense and a holder, writes LICENSE
contributing_presentCONTRIBUTING.md outline
security_presentSECURITY.md reporting policy
changelog_presentKeep-a-Changelog-style CHANGELOG.md
gitignore_present.gitignore with common OS / dependency / DB patterns
pr_template_present.github/PULL_REQUEST_TEMPLATE.md
issue_template_present.github/ISSUE_TEMPLATE/bug_report.md
ci_workflow_presentMinimal .github/workflows/ci.yml
branch_protection_declared.github/settings.yml Probot Settings scaffold

The extension watches roughly thirty file patterns that the gates use as input, so adding one of these files re-runs the affected gates without you triggering anything.

Remediation recipes ​

Every finding row has two inline actions beyond ignore and delete:

CommandWhat it does
l0-git.showRemediationOpens the lgit fix <id> output: summary, exact commands, file edits, caveats, verification step
l0-git.copyClaudePromptCopies a structured prompt to the clipboard for Claude Code to act on

Recipes are deterministic for eight gates: vendored_dir_tracked, ide_artifact_tracked, gitignore_coverage, unexpected_executable_bit, env_example_uncommented, merge_conflict_markers, large_blob_in_history and secrets_scan_history. For those you get exact commands, safe to copy-paste. For the rest the recipe is empty and the prompt frames the ask for an agent instead: rotate this credential first, pick a specific image tag, and so on.

The extension never runs the fix

lgit fix only prints. Applying is your call, or Claude Code's under its own permission model.

Settings ​

SettingDefaultDescription
l0-git.binaryPath""Absolute path to lgit. Empty uses the discovery order above. User settings only.
l0-git.dbPath""Override the SQLite path (sets LGIT_DB). Empty uses ~/.l0-git/findings.db. User settings only.
l0-git.notifyOnNewtrueToast on each new error. Warnings and info never toast.
l0-git.staleAfterDays7Findings only change when a project is re-checked. Past this many days since the last full check, the Overview and the status-bar tooltip flag the numbers as stale. Minimum 1.
l0-git.runOnStartuptrueRun gate checks when the workspace opens.
l0-git.autoStartMCPfalseSpawn the MCP stdio server on activation. Usually unnecessary: see Claude Code / MCP.
l0-git.showBlamefalseAnnotate rows with git blame: commit, author, relative time. One git call per affected file.

How old are the numbers ​

Findings change only when a project is re-checked, so every count is as old as its last full check. The Overview shows it under the project name: "checked 3 days ago", "never checked", or "directory not found" (an unmounted volume looks the same as a deleted folder, so it does not say "deleted"), as a warning once it passes l0-git.staleAfterDays. When the shared store holds projects whose directory is gone, a second line points at lgit prune. The status-bar tooltip carries the same age. A binary older than 0.3.0 does not report it, and then nothing is shown: an unknown age is never presented as "never checked".

Blame annotation ​

With l0-git.showBlame on, each finding row gets <short-sha> · <author> · <relative-time> from git blame --line-porcelain. One blame call per affected file, fired in parallel. Off by default because the cost is real on very large repositories.

Workspace trust ​

The extension stays off in Restricted Mode. The gates run git inside the repository, git reads that repository's own configuration, and some git settings name programs to run. Trusting the workspace comes first, the same rule VS Code's built-in Git support follows.

l0-git.binaryPath and l0-git.dbPath are machine-scoped: VS Code ignores them in a workspace's .vscode/settings.json. A repository you open cannot choose which executable the extension launches, or where it writes.

Released under the MIT License. · Privacy & legal