
Security News
When Autonomous Agents Escape: Why Socket Signed the Cyber Defense Open Letter
Socket joins more than 100 technology, cybersecurity, and financial organizations calling for a global surge in cyber defense.
docguard-cli
Advanced tools
The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation.
English ยท Portuguรชs (BR) ยท Espaรฑol
The enforcement layer for Spec-Driven Development. Validate. Score. Enforce. Ship documentation that AI agents can actually use.
โจ See what DocGuard catches in 30 seconds โ no install, no setup:
npx docguard-cli demoRuns against a baked-in sample project with intentional drift and shows you the findings + a clear path to fixing them.

DocGuard enforces Canonical-Driven Development (CDD) โ a methodology where documentation is the source of truth, not an afterthought. AI writes the docs, DocGuard validates them.
| Traditional Development | Canonical-Driven Development |
|---|---|
| Code first, docs maybe | Docs first, code conforms |
| Docs rot silently | Drift is tracked and enforced |
| Docs are optional | Docs are required and validated |
| One AI agent, one context | Any agent, shared context via canonical docs |
DocGuard is an official GitHub Spec Kit community extension. It validates the artifacts that Spec Kit creates, ensuring your specs stay high-quality throughout the development lifecycle.
๐ Philosophy ยท ๐ CDD Standard ยท โ๏ธ Comparisons ยท ๐ฌ Validation ยท ๐บ๏ธ Roadmap
graph TD
CLI["CLI Entry<br/>docguard.mjs"] --> Commands["Commands (20)"]
Commands --> guard["guard"]
Commands --> generate["generate"]
Commands --> score["score"]
Commands --> diagnose["diagnose"]
Commands --> setup["setup wizard"]
Commands --> other["diff ยท init ยท fix ยท trace ยท impact ยท sync<br/>explain ยท memory ยท upgrade ยท agents ยท hooks ยท badge ยท ci ยท watch"]
guard --> Validators["Validators (27)"]
generate --> Scanners["Scanners (4)<br/>routes ยท schemas ยท doc-tools ยท speckit"]
score --> Scoring["Weighted Scoring<br/>8 categories"]
diagnose --> Validators
diagnose --> AIPrompts["AI-Ready<br/>Fix Prompts"]
Validators --> Output["Output"]
Scanners --> Output
Scoring --> Output
Output --> Terminal["Terminal"]
Output --> JSON["JSON"]
Output --> Badge["Badge"]
style CLI fill:#2d5016,color:#fff
style Validators fill:#1a3a5c,color:#fff
style Scanners fill:#1a3a5c,color:#fff
style Output fill:#5c3a1a,color:#fff
Distribution: Node.js core (npm) ยท Python wrapper (PyPI) ยท GitHub Action (
action.yml) ยท Spec Kit Extension (ZIP)
Documentation that drifts from code is worse than no documentation โ it confidently misleads humans and AI agents alike. DocGuard treats your canonical docs as an enforced contract: deterministic validators diff what the docs claim against what the code does, on every commit, with no LLM required. The full thesis (and the research behind it) lives in PHILOSOPHY.md; recent feature highlights moved below.
The field data backs the enforcement-over-instructions bet: an ETH Zurich study across 138 repos / 5,694 agent PRs found the most popular style of agent-instruction file hurts agent performance, and practitioners keep converging on the same lesson โ written rules are routinely ignored; programmatic checks are what agents (and humans) actually respect. That is exactly the layer DocGuard provides: not another instructions file, but the validator suite that makes the instructions and docs verifiably true.
Package naming: this repo is
raccioly/docguard; the published package isdocguard-clion both npm and PyPI; the installed command isdocguard. Same project โ the-clisuffix is just the registry name. The package runs no install scripts, sonpm i -g docguard-cli --ignore-scriptsis equivalent.
# No install needed โ run directly
npx docguard-cli diagnose
# Or install globally
npm i -g docguard-cli
docguard diagnose
pip install docguard-cli
docguard diagnose
Note: The Python package is a thin wrapper that delegates to
npx. Node.js 18+ is required on the system.
repos:
- repo: https://github.com/raccioly/docguard
rev: v0.29.0
hooks: [{ id: docguard-guard }] # docguard-guard-full for pre-push
claude mcp add docguard -- npx -y docguard-cli mcp; 5 read-only tools (guard, score, explain, verify-claims, diagnose). Registry manifest ships in-repo (server.json, Smithery-ready).templates/ci/gitlab-component.yml (guard/score/ci job with a SARIF artifact).brew install raccioly/tap/docguard (formula in packaging/homebrew/).# 1. Initialize docs for your project
npx docguard-cli init
# 2. Or reverse-engineer docs from existing code
npx docguard-cli generate
# 3. AI diagnoses issues and generates fix prompts
npx docguard-cli diagnose
# 4. Validate โ use as CI gate
npx docguard-cli guard
# 5. Check maturity score
npx docguard-cli score
diagnose โ AI reads prompts โ AI fixes docs โ guard verifies
โ โ
โโโโโโโโโโโโโโโโโโ issues found? โโโโโโโโโโโโโโโโโโโโโโโโ
diagnose is the primary command. It runs all validators, maps every failure to an AI-actionable fix prompt, and outputs a remediation plan. Your AI agent runs it, fixes the docs, and runs guard to verify.
DocGuard splits drift into two kinds and is explicit about which is which:
| Kind | Example | How it's fixed |
|---|---|---|
| Mechanical (deterministic) | An endpoint documented in API-REFERENCE.md that the OpenAPI spec confirms is gone | docguard fix --write deletes the row + detail block itself โ no AI |
| Agent (needs judgment) | Rewriting an X-Ray prose section as CloudWatch; writing a new endpoint's request/response | Routed to an AI agent via diagnose / fix --doc prompts |
docguard fix --write only touches docs marked <!-- docguard:generated true --> (override with --force), is idempotent, and prints exactly what changed. It never rewrites prose โ that stays with the agent.
guard โโโถ fix --write (mechanical, auto) โโโถ guard โโโถ diagnose (agent prompts for the rest)
docguard hooks --type pre-commit --auto-fix installs a hook that applies mechanical fixes, re-stages the docs, then runs guard; anything left is surfaced as agent prompts.docguard diagnose --auto scaffolds missing docs and applies mechanical fixes, then emits prompts for the content rewrites that remain.guard/diagnose --format json include a mechanicalFixes array and tag each issue mechanical vs agent, so an agent can apply or delegate precisely.DocGuard is a community extension for GitHub's Spec Kit framework. While Spec Kit focuses on creating specifications (via AI slash commands like /speckit.specify and /speckit.plan), DocGuard focuses on validating their quality.
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
โ Spec Kit โ โ DocGuard โ
โ โ โ โ
โ /speckit.specifyโ โโโโโโโ โ docguard guard โ
โ Creates specs โ โ Validates specs โ
โ (AI-driven) โ โ (automated) โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
| Phase | Tool | What happens |
|---|---|---|
| 1. Initialize | specify init | Creates .specify/ directory and templates |
| 2. Write specs | /speckit.specify | AI creates spec.md with FR-IDs, user stories |
| 3. Validate | docguard guard | Checks spec quality (mandatory sections, FR/SC IDs) |
| 4. Plan | /speckit.plan | AI creates plan.md with technical context |
| 5. Validate | docguard guard | Checks plan quality (sections, structure) |
| 6. Tasks | /speckit.tasks | AI creates tasks.md with phased breakdown |
| 7. Validate | docguard guard | Checks task quality (phases, T-IDs) |
| 8. Implement | /speckit.implement | AI writes code |
| 9. Enforce | docguard guard | Final quality gate โ CI/CD |
.specify/memory/constitution.md or project rootspecify extension add docguard
This installs DocGuard's slash commands (/docguard.init, /docguard.guard, /docguard.review, /docguard.fix, /docguard.update) into your AI agent's command palette.
DocGuard ships 20 commands (the "Daily 5" + 15 situational tools, including the zero-install demo, the mcp server, and the ci pipeline gate). Six additional one-shot scaffolders are accessed via docguard init --with <name>. Seven v0.19 commands continue to work as deprecation aliases through v0.20.x โ see MIGRATION-v0.20.md.
The Daily 5 โ what you'll reach for 95% of the time:
| Command | What It Does |
|---|---|
init | Bootstrap a project (--wizard for interactive ยท --with <name> for scaffolders) |
guard | Validate against canonical docs โ 27 validators |
diff | Show gaps between docs and code (--since <ref> for impact mode) |
sync | Refresh code-truth doc sections โ keeps memory always up to date |
score | CDD maturity score (0-100; --diff for delta between refs) |
Tools (situational, but day-to-day useful):
| Command | Purpose |
|---|---|
demo | Zero-install showcase โ runs guard against a baked-in drifting fixture (npx docguard-cli demo) |
diagnose | AI orchestrator โ guard โ emit fix prompts in one command |
fix | Generate AI fix instructions for specific docs (--doc <name> --format prompt) |
fix --write | Apply deterministic fixes (no AI โ version bumps, counts, anchors, sections) |
fix --history | Audit log of every mechanical fix applied (from .docguard/fixed.json) |
generate | Reverse-engineer docs from existing codebase (--plan for AI scan) โ includes auto-generated Mermaid ER diagrams from your detected schemas (Prisma/Drizzle/TypeORM/Sequelize/Django/Rails) in DATA-MODEL.md |
agent | One-shot agent task graph โ ordered, pre-filled code-truth, per-task verify (--format json) |
explain <warning|CODE> | Paste any warning โ or a finding code like SEC001 โ to get the validator's docstring, fix path, and how to suppress |
verify --semantic | Extract documented numbers/limits/enums (retention days, rate limits, GSI/role counts, status enums) as a task list for an agent to check against code โ the semantic-drift class regex/AST can't see |
verify --instructions | Audit AGENTS.md/CLAUDE.md themselves for drift: duplicate rules, never-vs-always contradictions, stale file pointers, unknown commands โ plus clustered rule pairs as agent judgment tasks |
feedback | Report likely false positives back to DocGuard โ local-first record + a 1-click prefilled, redacted GitHub issue (zero typing) |
mcp | MCP server โ exposes guard/score/explain/verify/report/diagnose as native tools for Claude, Cursor, and any MCP client. Stdio: claude mcp add docguard -- npx docguard-cli mcp. Team-shared HTTP: docguard mcp --transport http --port 8585 (loopback by default; non-loopback binds require --api-key) |
report | Compliance-evidence bundle for audits โ guard verdict + CDD score + ALCOA+ attributes + fix history, stamped with git commit and a tamper-evident sha256 integrity hash (--format json, --out <file>). Evidence, not a gate: always exits 0 |
ci | Pipeline gate: guard + score in one command โ never scaffolds or touches source; its only write is its own .docguard/history.jsonl (opt out: --no-history). --threshold <n> fails below a score, --fail-on-warning for strict mode, --format json for parsers |
score --trend | Score trajectory from recorded ci runs โ sparkline, delta, and the last 10 runs with commit stamps |
memory | Per-domain accuracy headline (endpoints / entities / env / tech) |
memory --diff | Drill into which specific claims don't match code |
memory --pack | Write .docguard/context-pack.md โ compact, code-truth-stamped session-start context for AI agents |
score --diff | Drill into which checks pulled each category down |
trace / trace --reverse <file> | Requirements traceability โ forward AND reverse |
trace --features | Per-feature spec-adherence scores (requirement coverage, task completion, task evidence, artifacts) โ worst-first with fix hints |
upgrade [--apply] [--pr] | Check + migrate .docguard.json schema; --pr opens a PR |
watch | Live mode: re-run guard on file changes |
init --with <name> scaffolders โ picked at init time:
| Scaffolder | What It Generates |
|---|---|
agents | AGENTS.md, CLAUDE.md, .cursor/rules/, .github/copilot-instructions.md |
hooks | Git pre-commit / pre-push hooks |
ci | GitHub Actions / pipeline YAML |
badge | Shields.io score badges for README |
llms | llms.txt (AI-friendly summary) |
publish | External doc-site config (Mintlify) โ experimental |
Run them solo (docguard init --with hooks) or stacked (docguard init --with agents,hooks,badge,ci).
Deprecation aliases โ setup ยท agents ยท hooks ยท ci ยท badge ยท llms ยท publish ยท impact keep working in v0.20.x with a yellow stderr warning. audit โ guard is permanent (no warning). See MIGRATION-v0.20.md.
| Flag | Description | Commands |
|---|---|---|
--dir <path> | Project directory (default: .) | All |
--verbose | Show detailed output | All |
--quiet / -q | Suppress banner โ for hooks, CI loops, scripts | All |
--format json | Machine-readable output (clean JSON, no ANSI bleed) | guard, score, diff, trace, diagnose, memory, impact, explain |
--format sarif | SARIF 2.1.0 output โ findings as rules/results for GitHub Code Scanning and SARIF dashboards | guard |
--format junit | JUnit XML output โ one testcase per validator, for GitLab CI (artifacts:reports:junit), Jenkins, Azure DevOps, CircleCI | guard |
--update-baseline | Adopt DocGuard on a legacy repo without a red day one: freeze today's findings into a committed .docguard.baseline.json; guard/ci then gate only NEW drift. Suppression is always visible ("N pre-existing finding(s) suppressed"), and --no-baseline shows the full picture | guard |
--full | Generate llms-full.txt (full doc bodies inlined) instead of the llms.txt link index | llms |
--pack | Write .docguard/context-pack.md โ agent session-start context | memory |
--sync | Regenerate the agent-file family (CLAUDE.md, Copilot, Cursor, โฆ) from AGENTS.md; hash-marked, never touches hand-written files without --force | agents |
--check | CI gate for the synced agent-file family โ exit 2 when a variant is stale | agents |
--force | Overwrite existing files (creates .bak backups) | generate, agents, init |
--force-redo | Bypass ping-pong suppression in .docguard/fixed.json | fix --write |
--profile <name> | Starter / standard / enterprise | init |
--no-spec-kit | Skip auto-init of .specify/ / .agent/ scaffolding | init |
--changed-only [--since <ref>] | Pre-commit lite mode (5 fast validators on changed files only) | guard |
--timings | Per-validator wall-time profile (slowest first) | guard |
--show-failing | Show warnings/errors even when status is PASS | guard |
--pin | Record running CLI version into .docguard.json (reproducibility) | guard |
--diff | Per-category drill-down | score, memory |
--check-only | Exit 1 if behind (for CI) | upgrade |
--apply | Actually run the migration | upgrade |
--pr | Open a PR with the migration | upgrade |
--reverse <file> | Reverse traceability (code โ docs) | trace |
--no-indirect | Skip the reverse-import-graph analysis (docs about modules that import a changed file) | impact, diff --since |
--prs | Open-PR doc-conflict analysis โ two PRs impacting the same canonical doc = merge-order risk (needs the gh CLI) | impact |
--transport http --port --host --api-key --path | Serve MCP over Streamable HTTP instead of stdio (team-shared server; loopback-only unless an api-key is set) | mcp |
--history | Show fix audit log | fix |
$ npx docguard-cli generate
๐ฎ DocGuard Generate โ my-project
Scanning codebase to generate canonical documentation...
Detected Stack:
language: TypeScript ^5.0
framework: Next.js ^14.0
database: PostgreSQL
orm: Drizzle 0.33
testing: Vitest
hosting: AWS Amplify
โ
ARCHITECTURE.md (4 components, 6 tech)
โ
DATA-MODEL.md (12 entities detected)
โ
ENVIRONMENT.md (18 env vars detected)
โ
TEST-SPEC.md (45 tests, 8/10 services mapped)
โ
SECURITY.md (auth: NextAuth.js)
โ
REQUIREMENTS.md (spec-kit aligned)
โ
AGENTS.md
โ
CHANGELOG.md
โ
DRIFT-LOG.md
Generated: 9 Skipped: 0
DocGuard runs 27 automated validators on every guard check. Every one is language-aware as of v0.16 โ patterns for Python (test_*.py), Rust (tests/*.rs), Go (*_test.go), Java (*Test.java), Ruby (*_spec.rb), PHP, and JS/TS all match.
| # | Validator | What It Checks | Default |
|---|---|---|---|
| 1 | Structure | Required CDD files exist | โ On |
| 2 | Doc Sections | Canonical docs have required sections (or N/A markers) | โ On |
| 3 | Docs-Sync | Routes/services referenced in docs + OpenAPI cross-check | โ On |
| 4 | Drift-Comments | // DRIFT: comments logged in DRIFT-LOG.md (skips test files by default) | โ On |
| 5 | Changelog | CHANGELOG.md has [Unreleased] section | โ On |
| 6 | Test-Spec | Tests exist per TEST-SPEC.md rules | โ On |
| 7 | Environment | Env vars documented, .env.example exists | โ On |
| 8 | Security | No hardcoded secrets in source code | โ On |
| 9 | Architecture | Imports follow layer boundaries (honors config.ignore) | โ On |
| 10 | Freshness | Docs not stale relative to code changes (rename-aware via git log --follow) | โ On |
| 11 | Traceability | Requirement IDs (FR, SC, NFR, US, AC, T) trace to tests | โ On |
| 12 | Docs-Diff | Code artifacts match documented entities | โ On |
| 13 | API-Surface | API-REFERENCE.md endpoints match real routes (OpenAPI cross-check) | โ On |
| 14 | Metadata-Sync | Version refs consistent across docs | โ On |
| 15 | Docs-Coverage | Code features referenced in documentation | โ On |
| 16 | Doc-Quality | Writing quality (readability, passive voice, atomicity, IEEE 830) | โ On |
| 17 | TODO-Tracking | Untracked TODOs/FIXMEs and skipped tests (skips test files by default) | โ On |
| 18 | Schema-Sync | Database models documented in DATA-MODEL.md | โ On |
| 19 | Spec-Kit | Spec quality validation (FR-IDs, mandatory sections, phased tasks) | โ On |
| 20 | Cross-Reference | Internal markdown links + anchors resolve (with "did you mean?" hints); Obsidian wikilinks validated when the repo uses them as file links (.obsidian present or a target resolves) | โ On |
| 21 | Generated-Staleness | source=code sections match scanner output; status: draft doc age | โ On |
| 22 | Canonical-Sync | DocGuard's own README count claims match code-truth (DocGuard repo only โ N/A elsewhere) | โ On |
| 23 | Metrics-Consistency | Hardcoded numbers match actual counts | โ On |
| 24 | Surface-Sync | Item-level enumerable drift โ names in doc tables/lists (commands, checks, etc.) match code-truth (opt-in via surfaceSync.surfaces; N/A unless configured) | โ On |
| 25 | Diff-Suspicion | Change-driven: a doc/agent-instruction file that references code changed since the ref AND shares removed domain symbols is flagged for review (arXiv 2010.01625, F1 74.7) | โ On |
| 26 | Reference-Existence | Two-revision check: a backticked code symbol present when the doc was last updated but gone at HEAD is flagged as outdated (arXiv 2212.01479) | โ On |
| 27 | API-Doc-Smells | Bloated (โฅ300 words) / Lazy (โค6 prose words) API documentation units, keyed on signature-headed sections (F1 0.90/0.95) | โ On |
Per-validator controls (in .docguard.json):
{
"validators": {
"test-spec": false, // disable (kebab-case OR camelCase both accepted)
"freshness": true
},
"severity": {
"todoTracking": "high", // warnings fail CI
"freshness": "low" // warnings ignored for exit code
}
}
DocGuard ships 18 professional templates with metadata, badges, and revision history:
| Template | Type | Purpose |
|---|---|---|
| ARCHITECTURE.md | Canonical | System design, components, layer boundaries |
| DATA-MODEL.md | Canonical | Schemas, entities, relationships |
| SECURITY.md | Canonical | Auth, permissions, secrets management |
| TEST-SPEC.md | Canonical | Test strategy, coverage requirements |
| ENVIRONMENT.md | Canonical | Environment variables, deployment config |
| REQUIREMENTS.md | Canonical | Spec-kit aligned FR/SC IDs, user stories |
| DEPLOYMENT.md | Canonical | Infrastructure, CI/CD, DNS |
| ADR.md | Canonical | Architecture Decision Records |
| ROADMAP.md | Canonical | Project phases, feature tracking |
| KNOWN-GOTCHAS.md | Implementation | Symptom โ gotcha โ fix entries |
| TROUBLESHOOTING.md | Implementation | Error diagnosis guides |
| RUNBOOKS.md | Implementation | Operational procedures |
| VENDOR-BUGS.md | Implementation | Third-party issue tracker |
| CURRENT-STATE.md | Implementation | Deployment status, tech debt |
| AGENTS.md | Agent | AI agent behavior rules |
| CHANGELOG.md | Tracking | Change log |
| DRIFT-LOG.md | Tracking | Deviation tracking |
| llms.txt | Generated | AI-friendly project summary (llmstxt.org) |
claude mcp add docguard -- npx docguard-cli mcpdocguard-v<version>.mcpb from the latest release and drag it into Settings โ Extensions โ you'll be asked which project folder to analyze. No npm, no JSON editing.io.github.raccioly/docguard).DocGuard works with every major AI coding agent. All canonical docs are plain markdown โ no vendor lock-in.
| Agent | Compatibility | Auto-Generate Config |
|---|---|---|
| Google Antigravity | โ | docguard agents --agent antigravity |
| Claude Code | โ | docguard agents --agent claude |
| GitHub Copilot | โ | docguard agents --agent copilot |
| Cursor | โ | docguard agents --agent cursor |
| Windsurf | โ | docguard agents --agent windsurf |
| Cline | โ | docguard agents --agent cline |
| Google Gemini CLI | โ | docguard agents --agent gemini |
| Kiro (AWS) | โ | โ |
docguard hooks --claude # install (remove: docguard hooks --claude --remove)
Registers a PostToolUse hook in the project's .claude/settings.json. After the
agent edits a canonical doc it is nudged to run docguard guard --changed-only;
after it edits a code file the docs reference, it is nudged toward docguard impact.
Merge-safe (only DocGuard's own entry is ever added/removed), throttled to one nudge
per file per 30 minutes, and the hook runtime can never break a session (errors are
silent by contract). Explicit opt-in โ init never installs it for you.
DocGuard provides AI agent slash commands for integrated workflows. Installed automatically via docguard init or specify extension add docguard:
| Command | What It Does |
|---|---|
/docguard.init | Initialize Canonical-Driven Development in a new or existing project |
/docguard.guard | Run quality validation โ check all 27 validators |
/docguard.review | Analyze doc quality and suggest improvements |
/docguard.fix | Generate targeted fix prompts for specific issues |
/docguard.update | Update canonical docs after code changes โ detect drift and sync documentation |
These commands are installed into your AI agent's command directory:
.github/commands/ โ GitHub Copilot
.cursor/rules/ โ Cursor
.gemini/commands/ โ Google Gemini
.claude/commands/ โ Claude Code
.agents/workflows/ โ Antigravity
Beyond slash commands, DocGuard provides 4 enterprise-grade AI skills โ deep behavior protocols that tell AI agents not just what to run, but how to think, validate, and iterate. Skills are modeled after Spec Kit's skill architecture.
| Skill | Lines | What It Does |
|---|---|---|
docguard-guard | 155 | 6-step quality gate with severity triage (CRITICALโLOW), structured reporting, remediation |
docguard-fix | 195 | 7-step research workflow with per-document codebase research and 3-iteration validation loops |
docguard-review | 170 | Read-only semantic cross-document analysis with 6 analysis passes and quality scoring |
docguard-score | 165 | CDD maturity assessment with ROI-based improvement roadmap and grade progression |
DocGuard integrates into the spec-kit workflow as an automated quality gate:
| Hook | When | Behavior |
|---|---|---|
after_implement | After /speckit.implement | Mandatory โ always runs DocGuard guard |
before_tasks | Before /speckit.tasks | Optional โ reviews doc consistency |
after_tasks | After /speckit.tasks | Optional โ shows CDD maturity score |
For advanced users and CI/CD pipelines, DocGuard includes bash scripts with --json output:
| Script | Purpose |
|---|---|
docguard-check-docs.sh | Discover project docs, return JSON inventory with metadata |
docguard-suggest-fix.sh | Run guard, parse results, output prioritized fixes |
docguard-init-doc.sh | Initialize canonical doc with metadata header |
Three real-world projects to see DocGuard in action:
| Example | Scenario | What You'll See |
|---|---|---|
| 01-express-api | Node.js API with zero docs | Cold-start: generate โ instant coverage |
| 02-python-flask | Python app with drifted docs | Drift detection: catch when docs lie |
| 03-spec-kit-project | Full CDD + Spec Kit | Gold standard: what maturity looks like |
See examples/README.md for step-by-step instructions.
npm test # 33 tests across 18 describe blocks
Covers all 15 CLI commands, project type detection, compliance profiles, JSON output format, and help completeness.
| Node.js | OS | Status |
|---|---|---|
| 18 | ubuntu-latest | โ |
| 20 | ubuntu-latest | โ |
| 22 | ubuntu-latest | โ |
DocGuard runs its own guard, score, diff, diagnose, and badge commands against itself in CI โ ensuring the tool passes its own checks.
Everything runs local or in your CI โ no SaaS, no data leaving your infra. The pieces that matter at company scale:
| Need | DocGuard answer |
|---|---|
| Adopt on a legacy repo without a red pipeline on day one | guard --update-baseline freezes existing findings into a committed .docguard.baseline.json; only NEW drift gates from then on (suppression always visible) |
| Audit trail for compliance reviews | docguard report โ commit-stamped evidence bundle (guard verdict, findings by code, CDD score, ALCOA+ data-integrity attributes, fix history) with a tamper-evident sha256 integrity hash |
| Every CI system, not just GitHub | guard --format sarif (GitHub Code Scanning) ยท --format junit (GitLab, Jenkins, Azure DevOps, CircleCI) ยท --format json (anything else) |
| Trajectory, not snapshots | docguard ci records every run to .docguard/history.jsonl; score --trend shows the sparkline + delta |
| AI agents on the team | MCP server (stdio or team-shared HTTP) exposes guard/score/explain/verify/report/diagnose as read-only tools; agents --sync keeps the whole agent-file family drift-proof |
| Data-integrity framing auditors know | ALCOA+ scoring (FDA 21 CFR Part 11 / EMA Annex 11 vocabulary) built into score and report |
Full recipes: see
docs-canonical/CI-RECIPES.mdfor guard, auto-fix (commits mechanical fixes back to PRs), nightly sync, score-on-PR, and pre-commit configs.
name: DocGuard Guard
on: [pull_request, push]
permissions: { pull-requests: write } # for the sticky PR comment (optional)
jobs:
docguard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: raccioly/docguard@v0.12.0
with:
command: guard
On pull requests, guard mode also gives inline PR feedback (both default on):
| Input | Default | Description |
|---|---|---|
annotations | true | Inline ::error/::warning annotations on the PR diff, one per guard finding (capped at 50; a final notice reports how many were elided) |
pr-comment | true | Sticky PR comment with the guard verdict, top findings (by code), and which canonical docs the PR's changed files impact (diff --since origin/<base>). Needs permissions: pull-requests: write; degrades to a log warning without it |
Both run even when guard fails โ that's when the feedback matters. Prefer native
code-scanning integration? docguard guard --format sarif uploads straight to
GitHub Code Scanning via github/codeql-action/upload-sarif.
name: DocGuard Auto-Fix
on: { pull_request: { types: [opened, synchronize, reopened] } }
permissions: { contents: write, pull-requests: write }
jobs:
autofix:
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == github.repository
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- uses: raccioly/docguard@v0.12.0
with: { command: fix, auto-commit: 'true', comment-on-pr: 'true' }
npx docguard-cli hooks --type pre-commit
Two ready-to-use templates ship with the Spec Kit extension and as standalone files:
extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml โ mandatory CI gateextensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml โ PR auto-fixHighlights of the current line (v0.29 โ v0.33):
guard --update-baseline freezes a legacy repo's existing findings
into a committed .docguard.baseline.json; guard/ci then gate only NEW drift, with suppression
always visible. Adopt today, burn down at your own pace.docguard report โ commit-stamped compliance-evidence bundle (guard verdict, findings by
code, CDD score, ALCOA+ attributes, fix history) with a tamper-evident sha256 integrity hash.
Also exposed as the docguard_report MCP tool.score --trend โ docguard ci records every run to
.docguard/history.jsonl; the trend view shows the sparkline and delta over time.--format json, --format sarif (GitHub Code
Scanning), and --format junit (GitLab, Jenkins, Azure DevOps, CircleCI).claude mcp add docguard -- npx docguard-cli mcp.agents --sync treats AGENTS.md as canonical and regenerates
CLAUDE.md / .cursor/rules / Copilot / Gemini variants with drift-proof source-hash markers.verify --semantic and verify --instructions โ extract documented numbers/limits/enums
as agent verification tasks; audit the agent-instruction files themselves for contradictions
and stale pointers.docguard agent โ one-shot ordered task graph with pre-filled code-truth, collapsing ~10
agent round-trips into one call.See CHANGELOG.md for the full history.
your-project/
โโโ .specify/ # Spec Kit (if using specify init)
โ โโโ specs/
โ โ โโโ 001-feature/
โ โ โโโ spec.md # Requirements (FR-IDs, user stories)
โ โ โโโ plan.md # Implementation plan
โ โ โโโ tasks.md # Task breakdown
โ โโโ memory/
โ โ โโโ constitution.md # Project principles
โ โโโ templates/
โ
โโโ docs-canonical/ # CDD canonical docs (the "blueprint")
โ โโโ ARCHITECTURE.md # System design, components
โ โโโ DATA-MODEL.md # Database schemas
โ โโโ SECURITY.md # Auth, permissions, secrets
โ โโโ TEST-SPEC.md # Required tests, coverage
โ โโโ ENVIRONMENT.md # Environment variables
โ โโโ REQUIREMENTS.md # Spec-kit aligned FR/SC IDs
โ
โโโ docs-implementation/ # Current state (optional)
โ โโโ KNOWN-GOTCHAS.md
โ โโโ TROUBLESHOOTING.md
โ โโโ RUNBOOKS.md
โ โโโ CURRENT-STATE.md
โ
โโโ AGENTS.md # AI agent behavior rules
โโโ CHANGELOG.md # Change tracking
โโโ DRIFT-LOG.md # Documented deviations
โโโ llms.txt # AI-friendly summary
โโโ .docguard.json # DocGuard configuration
Create .docguard.json in your project root (auto-generated by docguard init):
{
"projectName": "my-project",
"version": "0.4",
"profile": "standard",
"projectType": "webapp",
"validators": {
"structure": true,
"docsSync": true,
"drift": true,
"changelog": true,
"testSpec": true,
"security": true,
"environment": true,
"docQuality": true,
"specKit": true
}
}
See Configuration Guide for all options.
DocGuard's quality evaluation and documentation generation patterns are informed by peer-reviewed research from the University of Arizona and the Joint Interoperability Test Command (JITC), U.S. Department of Defense:
Lead researcher: Martin Manuel Lopez ยท ORCID 0009-0002-7652-2385
See CONTRIBUTING.md for full citations.
DocGuard is local-first: no telemetry, no analytics, no phone-home โ the full (short) policy is in PRIVACY.md. npm releases are published with provenance attestation, so you can verify each tarball was built by GitHub Actions from this repository.
MIT โ Free to use, modify, and distribute.
Made with โค๏ธ by Ricardo Accioly
FAQs
The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation.
The npm package docguard-cli receives a total of 255 weekly downloads. As such, docguard-cli popularity was classified as not popular.
We found that docguard-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.

Security News
Socket joins more than 100 technology, cybersecurity, and financial organizations calling for a global surge in cyber defense.

Product
Enterprise security teams can now detect malware, credential theft, suspicious network activity, and risky updates across Microsoft Edge extensions.

Research
/Security News
Socket researchers found 18 Chrome extensions and one Edge extension delivering a wallet drainer, credential theft, and other malicious payloads.