watchdog — check what your AI agent wrote, with a reason for every flag

Your agent writes the code. Watchdog reads it.

Agents invent packages, call functions that don't exist and skip your team's rules. Watchdog checks every change on save and tells you exactly why it flagged a line, most of the time without any AI at all.

Coming soon to VS Code

Launching soon on the VS Code Marketplace and Open VSX (for Cursor and Windsurf) · Free tier, no account

import { verifySig } from 'stripe-webhook-utils'
▲ Fact check · package not on npm
import { db } from '../lib/db'
export async function DELETE(req) {
◆ AUTH-01 · route has no session check
const id = req.params.id;
await db.orders.removeById(id);
}
Trust score · 3 flags Passed checks ÷ all checks, weighted
  • Critical: Package does not exist FACT · NO AI
    stripe-webhook-utils isn't on npm. Use stripe's webhooks.constructEvent().
  • Critical: Method does not exist FACT · NO AI
    db.orders has deleteById, not removeById.
  • Serious: Route has no session check AUTH-01 · COPILOT
    Your rule: every API route that changes data checks the session first.

Example extension UI. Every flag shows its source and its reason.

§1 FACT CHECKS

Invented packages don't get past save.

Does the package exist in node_modules, and on npm or PyPI? Does the function exist, with those arguments? Watchdog answers from your installed packages and their type definitions, and, if you turn it on, the npm and PyPI registries. No model, no guessing.

// fact check on save · no AI
import:   stripe-webhook-utils
  ├─ node_modules   not found
  ├─ npm registry   404
  └─ did you mean   stripe
call:     db.orders.removeById(id)
  └─ types          not found
     did you mean   deleteById
verdict:  2 critical · 0 bytes sent to AI
# exact · compiled to a pattern check, no AI
- id: IMPORT-02
match: import from "apps/**" inside "packages/**"
message: Packages must not import from apps
severity: serious
EXACT · NO AI Runs on every save in milliseconds. Free: 5 rules.
§2 TEAM RULES

Your rules, in one file the agent can't skip.

Import boundaries and banned packages run as exact pattern checks. Rules only a reader can judge, like "every API route checks the session", are written in plain English and judged by your own Copilot. Every flag names the rule ID.

Lives in .watchdog-rules next to your code, reviewed in pull requests like everything else.

§3 MCP AUDIT

Know what every MCP server can reach.

Watchdog reads every MCP config on your machine, for VS Code, Cursor and Claude, and shows what each server can touch. It flags tokens in plain text, unpinned packages and tool descriptions that change behind your back.

github: 2 flags
github npx -y @modelcontextprotocol/server-github
  • Files:yes
  • Network:yes
  • Shell:no
  • Secrets:yes
Critical: Token in plain text

GITHUB_TOKEN is written into mcp.json. Move it to the system keychain; Watchdog can do it for you.

Serious: Package not pinned

npx -y installs the latest version on every start. Pin a version you have reviewed.

Capabilities are inferred from the command and tool list.
§4 TRUST SCORE

One number, and how we got it.

Passed checks divided by all checks, weighted by severity. The breakdown is always one click away, and every suppressed flag needs a reason and goes in the audit log.

// api/orders.ts · how is this scored?
checks run        14
  ▲ critical × 8  2 failed   −16
  ◆ serious  × 4  1 failed   −4
  ● minor    × 2  0 failed
weighted          52 / 72
trust:            72%
suppressed: 0 · audit log: on
§5 PRIVACY

Your code never leaves your machine.

Fact checks and exact rules run locally. When a plain-English rule needs AI, the status bar shows which provider and how many bytes, while it happens.

$ watchdog --privacy ● local-first
code_sent_to_us
0 bytes No backend receives code. Ever.
fact_checks
local Installed packages and their type definitions. The npm/PyPI check is opt-in and sends package names only.
ai_provider
yours Copilot through VS Code's language model API, or your own key. Called directly, not through us.
ai_payload
≤ 4 KB Only the changed snippet and the matching rule. Shown live in the status bar.
api_keys
SecretStorage Never in settings, workspace files or logs.
telemetry
off Off by default. If you turn it on: anonymous counts only, EU-hosted.
§6 PRICING

Fact checks are free. Forever.

AI runs on your own Copilot or key, so you pay for features, not tokens. Prices exclude VAT.

Free

€0

  • Fact checks: imports and calls
  • 5 exact rules
  • MCP inventory and flags
  • Suppression with reason
Coming soon
14-DAY TRIAL

Pro

€8/month

  • Everything in Free
  • Unlimited rules
  • Plain-English AI rules
  • Rule wizard
  • Audit log, JSON and Markdown export
  • MCP sandbox suggestions
Coming soon
COMING SOON

Team

€15/seat/month

  • Everything in Pro
  • CLI and GitHub Action (SARIF)
  • Shared rule packs
  • MCP policy export and audit record
  • Minimum 3 seats

Bundle with MonoVue, which shows what a change breaks across your monorepo.

COMING SOON €29/seat/month

Questions

Fact checks and exact rules run on your machine. Plain-English rules send only the changed snippet and the matching rule, at most 4 KB, to the AI you choose: Copilot through VS Code or your own key. Never to us.

Any. Watchdog checks the code in your working tree, so it works with Copilot agent mode, Claude Code, Cursor, Windsurf, or code you pasted in yourself.

Suppress it with a reason. It counts as passed, and the reason goes in the audit log so your team can see why.

Yes. Agent Watchdog launches on Open VSX as well as the VS Code Marketplace.

Let the agent write. Check before you merge.

Coming soon to VS Code
agentwatchdog.app