
Security News
The Code You Didn't Write Is Still Yours to Defend
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.
aidocs
Advanced tools
AI-powered documentation generator for web applications. Install docs commands into your Claude Code project.
AI-powered documentation generator for web applications.
aidocs generates comprehensive documentation by combining three sources of truth:
This produces documentation that's accurate to both the code AND the actual user experience.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 📸 Screenshots │ + │ 📄 Code Analysis │ + │ 🖱️ UI Testing │
│ (what users │ │ (validation, │ │ (conditional │
│ see) │ │ routes, models) │ │ fields, flows)│
└────────┬────────┘ └────────┬─────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼────────────────────────┘
▼
┌────────────────────────┐
│ 📚 Smart Documentation │
│ that stays in sync │
└────────────────────────┘
# 1. Install the CLI
brew install binarcode/aidocs/aidocs
# 2. Add to your project
cd your-project
aidocs init .
# 3. Generate docs (in Claude Code)
/docs:generate https://myapp.com/dashboard
Alternative installation:
# Homebrew (macOS/Linux)
brew install binarcode/aidocs/aidocs
# uv (recommended for Python users)
uv tool install aidocs
# pipx
pipx install aidocs
# From GitHub (latest)
uv tool install aidocs --from git+https://github.com/binarcode/aidocs-cli.git
Updating:
brew upgrade aidocs # Homebrew
aidocs update # PyPI (uv/pipx/pip)
aidocs update --github # GitHub (latest)
aidocs init . --force # Reinstall commands in project
┌──────────────────────────────────────────────────────────────────────────────┐
│ SETUP (once) │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ $ aidocs init . Install commands into project │
│ │ │
│ ▼ │
│ /docs:init Configure: name, auth, style, output │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ OPTION A: Document a Single Page │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ /docs:generate https://myapp.com/users ← Give it any URL! │
│ │ │
│ ├──→ Takes screenshots with Playwright │
│ ├──→ Analyzes codebase for that route │
│ ├──→ Documents UI elements and interactions │
│ └──→ Creates docs/users/index.md │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ OPTION B: Document a Code Flow │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ /docs:flow "sync users from discord" ← Describe the flow in words! │
│ │ │
│ ├──→ Searches codebase for relevant files │
│ ├──→ Traces execution path and builds call graph │
│ ├──→ Generates mermaid sequence diagram │
│ ├──→ Captures UI screenshots (if Playwright + route detected) │
│ └──→ Creates docs/flows/sync-users-from-discord.md │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ OPTION C: Document Entire Project │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ /docs:discover Scan codebase, find all modules │
│ │ │
│ ▼ │
│ /docs:plan Create ordered documentation plan │
│ │ → Outputs docs/plan.yml │
│ ▼ │
│ /docs:execute Run through plan, generate all docs │
│ → Resume with --continue if interrupted │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ KEEP DOCS IN SYNC │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ # After implementing a feature: │
│ /docs:update --base main Detect changes, update affected docs │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ ENABLE SEMANTIC SEARCH (optional) │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ # After docs are generated, setup RAG for AI-powered search: │
│ /docs:rag ← One command does it all! │
│ │ │
│ ├──→ Chunks your docs into searchable pieces │
│ ├──→ Creates database migration (pgvector) │
│ ├──→ Generates OpenAI embeddings │
│ └──→ Outputs sync.sql ready to import │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
# Simple: Generate docs for one page
/docs:generate https://myapp.com/dashboard
# Flow: Document a feature (user-focused by default)
/docs:flow "how to create employees"
/docs:flow "import payments" --technical # Developer docs
# Batch: Document entire project
/docs:discover && /docs:plan && /docs:execute
# Maintain: Update after code changes
/docs:update --base main
# RAG: Setup semantic search for your docs
/docs:rag
aidocs init [PROJECT_NAME]Initialize the docs module in a project.
aidocs init . # Current directory
aidocs init my-project # New directory
aidocs init . --force # Overwrite existing
aidocs init . --ai cursor # Use with Cursor
Options:
| Option | Description |
|---|---|
--ai | AI assistant: claude, cursor, copilot (default: claude) |
--force, -f | Overwrite existing files |
--no-git | Skip git initialization |
aidocs checkCheck for required tools and dependencies.
aidocs check
aidocs versionShow version information.
aidocs updateUpdate aidocs to the latest version.
aidocs update # Update from PyPI
aidocs update --github # Update from GitHub (latest)
Options:
| Option | Description |
|---|---|
--github | Install latest from GitHub instead of PyPI |
Automatically detects and uses the appropriate package manager (uv, pipx, or pip).
aidocs ragPrepare documentation for RAG: chunk files and generate embeddings in one command.
aidocs rag # Chunk and generate embeddings
aidocs rag docs/users # Specific directory
aidocs rag --dry # Preview only
aidocs rag --force # Re-process everything
aidocs rag --skip-vectors # Only chunk, no embeddings
Options:
| Option | Description |
|---|---|
--force, -f | Re-chunk and re-sync all files |
--dry | Preview without making changes |
--table, -t | Target table name (default: doc_embeddings) |
--skip-vectors | Only chunk files, skip embedding generation |
What it does:
## headings (creates .chunks.json files)OPENAI_API_KEY)docs/.chunks/sync.sql for database importWorkflow:
# Prepare docs for MCP server
aidocs rag docs/
# Start MCP server
aidocs mcp docs/
Note: If OPENAI_API_KEY is not set, chunking completes but embeddings are skipped. The MCP server works with just chunks (keyword search).
Environment: Reads OPENAI_API_KEY from .env file in current directory or global environment.
aidocs rag-chunksChunk markdown files for vector database import.
aidocs rag-chunks # Chunk all files in docs/
aidocs rag-chunks docs/users # Chunk specific directory
aidocs rag-chunks --force # Re-chunk all files
aidocs rag-chunks --dry # Preview only
Options:
| Option | Description |
|---|---|
--force, -f | Re-chunk all files (ignore cache) |
--dry | Preview without writing files |
What it does:
.md files## headings into chunks.chunks.json files alongside each .mddocs/.chunks/manifest.json for change trackingOutput structure:
docs/
├── users/
│ ├── lifecycle.md
│ └── lifecycle.chunks.json # Chunks for this file
├── campaigns/
│ ├── lifecycle.md
│ └── lifecycle.chunks.json
└── .chunks/
└── manifest.json # Tracking file
Next step: Run aidocs rag-vectors to generate embeddings
aidocs export-pdfExport markdown documentation to PDF with auto-generated table of contents.
aidocs export-pdf docs/projects/index.md # Export to docs/exports/
aidocs export-pdf docs/flows/sync-users.md -o manual.pdf # Custom output path
Options:
| Option | Description |
|---|---|
--output, -o | Output PDF path (default: docs/exports/{name}.pdf) |
What it does:
Output:
╭──────────── Success ────────────╮
│ PDF exported successfully! │
│ │
│ Title: Projects Overview │
│ TOC entries: 8 │
│ Size: 245.3 KB │
│ │
│ Output: docs/exports/index.pdf │
╰─────────────────────────────────╯
Requirements:
aidocs rag-vectorsGenerate embeddings and SQL for vector database import.
aidocs rag-vectors # Generate embeddings and SQL
aidocs rag-vectors --dry # Preview what would be synced
aidocs rag-vectors --force # Re-sync all files
aidocs rag-vectors --table my_docs # Custom table name
Options:
| Option | Description |
|---|---|
--force, -f | Re-sync all files (ignore last sync) |
--dry | Preview without generating embeddings |
--table, -t | Target table name (default: doc_embeddings) |
Requires: OPENAI_API_KEY (from .env file or environment variable)
What it does:
docs/.chunks/docs/.chunks/sync.sql with INSERT statementsOutput: docs/.chunks/sync.sql
BEGIN;
INSERT INTO doc_embeddings (file_path, content, chunk_index, title, metadata, embedding)
VALUES ('docs/users/lifecycle.md', '...', 0, 'Overview', '{...}'::jsonb, '[0.001, ...]'::vector);
-- ... more inserts
COMMIT;
Import to database:
psql $DATABASE_URL -f docs/.chunks/sync.sql
aidocs uiLaunch a web-based documentation editor with a visual markdown editor, file tree, live preview, and GitHub PR integration.

aidocs ui # First run: interactive setup, then serve
aidocs ui # Next runs: just serve (config saved)
aidocs ui --reconfigure # Re-run setup prompts
aidocs ui --port 3000 # Custom port
aidocs ui --no-open # Don't auto-open browser
First run prompts:
GitHub token: ****
GitHub owner (org or user): myorg
GitHub repository name: myrepo
Base branch [main]: stage
Docs path (e.g. website/docs): website/docs
Media path for image uploads: website/public/docs-media
Configuration is saved to aidocs-config.yml under the ui: key. Subsequent runs skip prompts entirely.
Options:
| Option | Description |
|---|---|
--port, -p | Port to serve on (default: 8377) |
--host | Host to bind to (default: 127.0.0.1) |
--open/--no-open | Open browser automatically (default: --open) |
--reconfigure | Re-run setup prompts even if config exists |
Features:
Installation:
# Install with UI extras
uv tool install 'aidocs[ui]'
# Or for development
uv pip install -e '.[ui]'
Environment variables (alternative to config file):
| Variable | Description |
|---|---|
DOCS_EDITOR_GITHUB_TOKEN | GitHub personal access token |
DOCS_EDITOR_GITHUB_OWNER | GitHub repository owner |
DOCS_EDITOR_GITHUB_REPO | GitHub repository name |
DOCS_EDITOR_GITHUB_BRANCH | Base branch for PRs |
DOCS_EDITOR_DOCS_PATH | Path to docs directory |
DOCS_EDITOR_MEDIA_PATH | Path for media uploads |
aidocs serveServe documentation with live reload using MkDocs Material theme.

aidocs serve # Serve docs/ on port 8000
aidocs serve --port 3000 # Custom port
aidocs serve docs/users # Serve specific subdirectory
aidocs serve --build # Build static site only
aidocs serve --build -o ./site # Build to custom output
aidocs serve --no-open # Don't auto-open browser
Options:
| Option | Description |
|---|---|
--port, -p | Port to serve on (default: 8000) |
--host | Host to bind to (default: 127.0.0.1) |
--open/--no-open | Open browser automatically (default: --open) |
--build, -b | Build static site only, no server |
--output, -o | Output directory for built site |
Features:
aidocs mcpStart a local MCP server to expose documentation via tools. Allows Claude Code and other MCP clients to search and read your docs.
aidocs mcp # Serve docs/ directory
aidocs mcp docs/users # Serve specific subdirectory
MCP Tools exposed:
| Tool | Description |
|---|---|
list_docs | List all documentation files with chunk counts |
search_docs | Search through documentation by keyword |
read_doc | Read full content of a file or specific chunk |
get_doc_structure | Get heading hierarchy for navigation |
Configuration (.mcp.json):
{
"mcpServers": {
"aidocs": {
"command": "aidocs",
"args": ["mcp", "docs/"]
}
}
}
Features:
.chunks.json files if available (faster)Example search result:
{
"file_path": "users/lifecycle.md",
"chunk_index": 2,
"title": "Creating Users",
"hierarchy": ["Users", "Creating Users"],
"content_preview": "To create a new user, navigate to...",
"score": 12
}
Usage Examples in Claude Code:
Once configured, Claude Code can use these tools automatically. You can prompt:
# Search documentation
"Search our docs for authentication setup"
"Find documentation about API rate limits"
# Read specific docs
"Read the user lifecycle documentation"
"Show me the API reference section"
# Explore structure
"What documentation do we have?"
"List all docs about payments"
Best Practices:
aidocs rag docs/ before starting MCP server for faster searches## headings, clear titles improve searchaidocs rag --force after major doc changes.mcp.json to your repo so the team shares the same setupTroubleshooting:
| Issue | Solution |
|---|---|
| MCP not connecting | Restart Claude Code or run /mcp to reload servers |
| Empty search results | Ensure docs directory has .md files |
| Slow searches | Run aidocs rag to pre-chunk files |
aidocs watchWatch documentation directory for changes and automatically re-chunk files and regenerate embeddings.
aidocs watch # Watch docs/ with auto-embeddings
aidocs watch --with-vectors # Generate also embeddings
aidocs watch --debounce 5 # Wait 5 seconds before processing
aidocs watch docs/users # Watch specific subdirectory
Options:
| Option | Description |
|---|---|
--with-vectors | Include embedding generation |
--debounce, -d | Seconds to wait after last change (default: 10) |
--table, -t | Target table name for embeddings (default: doc_embeddings) |
What it does:
.md file changesOPENAI_API_KEY is set (use --with-vectors to enable)Real-time display:
╭─────────────────────────────────────────╮
│ Watching docs/ │
│ │
│ Last update: 14:32:05 │
│ Files: 12 | Chunks: 45 | Embeddings: 45 │
│ │
│ Embeddings: enabled │
│ │
│ Recent: │
│ ✓ users/index.md (3 chunks) │
│ ✓ api/auth.md (5 chunks) │
│ │
│ Press Ctrl+C to stop │
╰─────────────────────────────────────────╯
Use cases:
aidocs serve for a complete dev workflowExample workflow:
# Terminal 1: Watch for changes
aidocs watch
# Terminal 2: Serve documentation
aidocs serve
# Edit docs in your editor - changes auto-sync!
aidocs coverageAnalyze documentation coverage for your codebase. Scans for routes, components, and models, then checks which items are mentioned in your documentation.
aidocs coverage # Show coverage summary
aidocs coverage --format json # Machine-readable output
aidocs coverage --format csv # CSV export
aidocs coverage --ci # Exit code 1 if below 80%
aidocs coverage --threshold 70 # Custom threshold
aidocs coverage -c ./src # Specify codebase path
aidocs coverage --all # Show all items
Options:
| Option | Description |
|---|---|
--codebase, -c | Path to codebase root (default: parent of docs dir) |
--format, -f | Output format: summary, json, or csv |
--threshold, -t | Minimum coverage percentage (exit 1 if below) |
--ci | CI mode: exit 1 if coverage below 80% |
--save/--no-save | Save report to .chunks/coverage.json (default: save) |
--all, -a | Show all items (documented and undocumented) |
Example output:
╭───────────────────────────────────────────────╮
│ Documentation Coverage Report │
│ ───────────────────────────────────────────── │
│ │
│ Routes: 12/15 ( 80%) █████████░░░ │
│ Components: 8/20 ( 40%) ████░░░░░░░░ │
│ Models: 5/5 (100%) ████████████ │
│ │
│ Overall: 25/40 (63%) ███████░░░░░ │
╰───────────────────────────────────────────────╯
Missing documentation:
Routes:
✗ POST /api/webhooks/stripe
src/app/api/webhooks/stripe/route.ts:1
Components:
✗ PaymentForm
src/components/PaymentForm.tsx:1
Supported frameworks:
CI/CD integration:
# GitHub Actions example
- name: Check documentation coverage
run: aidocs coverage --ci
After running aidocs init, these commands are available in Claude Code:
| Command | Description | Requires Playwright |
|---|---|---|
/docs:init | Configure project settings, credentials, output style | No |
/docs:generate <url> | Generate docs for a single page with screenshots | Yes |
/docs:analyze <route> | Analyze codebase for a route (no browser) | No |
/docs:batch | Generate docs for multiple pages | Yes |
/docs:update | Update docs based on git diff | Optional |
/docs:discover | Scan codebase, discover all modules | No |
/docs:plan | Create ordered documentation plan | No |
/docs:execute | Execute plan, generate all docs | Yes |
/docs:explore <module> | Interactive UI exploration with Playwright | Yes |
/docs:flow "<description>" | Document a feature with screenshots (use --technical for dev docs) | Optional |
/docs:rag-vectors | Generate embeddings and SQL for vector DB import | No |
/docs:rag-init | Generate database migration for vector embeddings | No |
/docs:rag | Setup RAG: chunks → migration → embeddings (all-in-one) | No |
/docs:export-pdf | Export markdown documentation to PDF with TOC | Yes (Playwright) |
/docs:initInteractive setup wizard that:
/docs:generate <url>Generate documentation for a single page:
/docs:generate https://myapp.com/campaigns
/docs:generate /campaigns # Uses base URL from config
/docs:generate /settings --auth user:pass # With authentication
Features:
/docs:updateUpdate existing documentation based on code changes:
/docs:update # Compare against main
/docs:update --base staging # Compare against staging branch
/docs:update --dry-run # Preview changes without applying
/docs:update --screenshots # Also refresh screenshots
What it does:
Perfect for: Running before creating a PR to ensure docs stay in sync with code.
/docs:analyze <route>Analyze codebase without browser automation:
/docs:analyze /campaigns
/docs:analyze /api/users
/docs:batchGenerate documentation for multiple pages:
/docs:batch urls.txt # From file
/docs:batch --discover --base-url https://myapp.com # Auto-discover routes
/docs:discoverScan your codebase to discover all modules and their structure:
/docs:discover # Discover all modules
/docs:discover --dry # Preview without saving
/docs:discover campaigns # Analyze only one module
What it analyzes:
Creates docs/.knowledge/ with:
docs/.knowledge/
├── _meta/
│ ├── project.json # Project-level info
│ └── modules-index.json # List of discovered modules
├── modules/
│ ├── campaigns/
│ │ ├── entity.json # Fields, types, relationships
│ │ ├── routes.json # API endpoints
│ │ ├── components.json # UI components
│ │ └── validation.json # Validation rules
│ └── users/
│ └── ...
└── relationships/ # Cross-module relationships
Next step: Run /docs:plan to create documentation plan
/docs:planCreate an ordered documentation plan based on discovered modules:
/docs:plan # Create plan interactively
/docs:plan --auto # Auto-generate plan (no prompts)
/docs:plan --show # Show existing plan
What it does:
docs/.knowledge/docs/plan.yml with the planOutput: docs/plan.yml
modules:
- name: users
priority: 1
reason: "Core module - other modules depend on it"
document:
lifecycle: true
include_errors: true
status: pending
- name: campaigns
priority: 2
document:
lifecycle: true
flows:
- "duplicate campaign"
status: pending
cross_module_flows:
- name: "user registration to first campaign"
modules: [users, campaigns]
status: pending
Next step: Run /docs:execute to generate documentation
/docs:executeExecute the documentation plan and generate all docs:
/docs:execute # Execute full plan
/docs:execute --module campaigns # Execute only one module
/docs:execute --continue # Continue from where it stopped
/docs:execute --dry # Preview what would be generated
What it does:
docs/plan.ymldocs/{module}/Output structure:
docs/
├── index.md # Auto-generated with links
├── users/
│ ├── index.md # Module overview
│ ├── lifecycle.md # CRUD documentation
│ ├── user-registration-to-campaign.md # Cross-module flow (first module)
│ └── images/
└── campaigns/
├── index.md
├── lifecycle.md
├── duplicate-campaign.md # Custom flow
└── images/
Resume support: If execution stops, run /docs:execute --continue to resume
/docs:explore <module>Interactively explore a module's UI with Playwright:
/docs:explore campaigns # Explore all campaign pages
/docs:explore users --page /users/create # Specific page
/docs:explore orders --depth deep # Thorough exploration
What it discovers:
/docs:flow "<description>"Document a feature with screenshots and step-by-step instructions. By default, creates user-focused documentation. Use --technical for developer documentation.
/docs:flow "how to create employees" # User guide with screenshots
/docs:flow "import payments from csv" # User guide with screenshots
/docs:flow "payment processing" --technical # Developer docs with code
/docs:flow "stripe webhooks" --technical # Developer docs with code
/docs:flow "user registration" --no-screenshots # Skip screenshots
Arguments:
--technical - Generate developer-focused documentation with code snippets--no-screenshots - Skip UI screenshot captureOutput modes:
| Mode | Audience | Output |
|---|---|---|
| Default | End users | Screenshots, plain English, step-by-step guide |
--technical | Developers | Code snippets, file paths, mermaid diagrams |
Output: docs/flows/{kebab-case-title}.md
Example: User-focused (default)
# How to Import Payments
Import payment records from a CSV file.
## Before You Start
- Prepare a CSV with columns: date, amount, description
- Maximum 10,000 rows per import
## Steps
### Step 1: Go to Payroll
Navigate to **Payroll** from the sidebar.

### Step 2: Click Import
Click the **Import Payments** button.

### Step 3: Upload Your File
Select your CSV file and click **Start Import**.
## What Happens Next
- Import runs in background
- You'll receive an email when complete
Example: Technical (--technical)
# Import Payments Flow
## Architecture
sequenceDiagram: User → Controller → Job → Database
## Entry Points
| Trigger | Route |
|---------|-------|
| UI | POST /payroll/import |
| CLI | php artisan payments:import |
## Execution Flow
**File:** `app/Http/Controllers/PayrollController.php:45`
public function import(Request $request) { ... }
**File:** `app/Jobs/ImportPaymentsJob.php:28`
public function handle() { ... }
Screenshots require:
urls.base configured in docs/config.yml/docs:rag-vectorsGenerate embeddings and SQL for syncing documentation to a PostgreSQL vector database.
/docs:rag-vectors # Generate sync SQL (smart)
/docs:rag-vectors --dry # Preview what would be synced
/docs:rag-vectors --force # Re-sync all files
Prerequisites:
aidocs rag-chunks first to create chunk filesOPENAI_API_KEY environment variableWhat it does:
docs/.chunks/manifest.jsondocs/.chunks/sync.sql with INSERT statementsSmart sync:
Output:
📊 Sync Summary:
Unchanged: 12 files (skipped)
Changed: 2 files (8 chunks)
New: 1 file (3 chunks)
📄 Generated: docs/.chunks/sync.sql
Run with:
psql $DATABASE_URL -f docs/.chunks/sync.sql
/docs:rag-initGenerate a database migration for storing documentation embeddings with pgvector.
/docs:rag-init # Default: 1536 dimensions
/docs:rag-init --dimensions 3072 # For text-embedding-3-large
/docs:rag-init --table my_docs # Custom table name
What it does:
Supported Frameworks:
| Framework | Detection | Output |
|---|---|---|
| Laravel | composer.json | PHP migration with $table->vector() |
| Prisma | schema.prisma | Prisma schema addition |
| TypeORM | package.json | TypeScript migration class |
| Drizzle | drizzle-orm | Schema + SQL migration |
| Django | manage.py | Django migration with pgvector |
| Fallback | None detected | Raw PostgreSQL SQL |
Table Structure:
doc_embeddings
├── id UUID PRIMARY KEY
├── file_path VARCHAR(500) # Path to .md file
├── content TEXT # Document content
├── chunk_index INTEGER # For large docs split into chunks
├── title VARCHAR(255) # Document title
├── metadata JSONB # Tags, module, category, etc.
├── embedding VECTOR(1536) # OpenAI embedding
├── created_at TIMESTAMP
└── updated_at TIMESTAMP
Indexes:
file_path - B-tree index for path lookupsembedding - HNSW index for fast vector similarity searchRequirements:
Example workflow:
# 1. Generate migration
/docs:rag-init
# 2. Run migration
php artisan migrate # Laravel
npx prisma migrate dev # Prisma
python manage.py migrate # Django
# 3. Chunk your docs
aidocs rag-chunks
# 4. Generate embeddings and sync
aidocs rag-vectors
/docs:ragThe easy way - Setup RAG (Retrieval Augmented Generation) for your documentation in one command:
/docs:rag # Full setup
/docs:rag --skip-migration # Skip migration (table already exists)
/docs:rag --force # Re-chunk and re-sync everything
/docs:rag --dry # Preview what would happen
What it does automatically:
aidocs rag-chunks)/docs:rag-init)aidocs rag-vectors)Output:
✅ RAG Setup Complete!
📊 Summary:
Documentation files: 8
Chunks created: 24
Embeddings generated: 24
📄 Files created:
✓ docs/.chunks/manifest.json
✓ database/migrations/..._create_doc_embeddings_table.php
✓ docs/.chunks/sync.sql
🚀 Final step:
psql $DATABASE_URL -f docs/.chunks/sync.sql
Requirements:
OPENAI_API_KEY environment variable/docs:export-pdfExport markdown documentation to PDF with auto-generated table of contents using Playwright MCP.
/docs:export-pdf docs/pages/dashboard.md # Export single file
/docs:export-pdf docs/flows/sync-users.md --output manual.pdf # Custom filename
What it does:
docs/exports/ directoryOutput: docs/exports/{filename}.pdf
Features:
Example:
📄 Exporting: docs/pages/dashboard.md
📑 Table of Contents:
• Dashboard Overview
• Key Metrics
• Navigation
• Components
• Configuration
🖨️ Rendering PDF...
Format: A4
Pages: 5
✅ PDF exported!
📁 docs/exports/dashboard.pdf (245 KB)
Requirements:
The intelligent commands build a docs/.knowledge/ folder:
docs/.knowledge/
├── _meta/ # Project info
├── modules/
│ ├── campaigns/
│ │ ├── entity.json # Entity definition
│ │ ├── routes.json # API routes
│ │ ├── validation.json # Validation rules
│ │ ├── flows/ # User flows
│ │ └── ui-states/ # Conditional UI
│ └── users/
│ └── ...
├── relationships/ # Cross-module relationships
└── cross-module-flows/ # Flows spanning modules
This knowledge powers smarter documentation generation.
/docs:flow "sync users from discord" → Analyzes code, generates docs with diagrams
/docs:flow "import payments from csv" → Includes UI screenshots if route detected
/docs:discover → Scans codebase, finds all modules
↓
/docs:plan → Creates ordered documentation plan
↓
/docs:execute → Generates all docs with screenshots
# Option A: Document a specific flow
/docs:flow "sync users from discord" # Backend integration
/docs:flow "import payments from csv" # Import with UI screenshots
/docs:flow "how stripe webhooks work" # Webhook handling
# Option B: Document entire project
/docs:discover # Find all modules
/docs:plan # Create plan (docs/plan.yml)
/docs:execute # Generate all documentation
# Resume if interrupted
/docs:execute --continue
# After code changes
/docs:update --base main
| Capability | How It Works |
|---|---|
| Conditional UI | Clicks checkboxes/toggles, observes what fields appear |
| Validation Discovery | Submits empty/invalid forms, captures error messages |
| Cross-Page Tracking | Creates data, verifies it appears in lists/dashboards |
| Entity Lifecycle | Documents full create → view → edit → delete flow |
| Modular Analysis | One module at a time, scales to large projects |
| Code + UI Correlation | Matches frontend components to backend validation |
After running /docs:init, a docs/config.yml is created:
project:
name: "My App"
type: saas
style:
tone: friendly # friendly | professional | technical | minimal
urls:
base: "https://myapp.com"
auth:
method: file # file | env | manual
output:
directory: ./docs
| Method | Description |
|---|---|
file | Credentials stored in docs/.auth (gitignored) |
env | Read from DOCS_AUTH_USER and DOCS_AUTH_PASS |
manual | Pass --auth user:pass each time |
Generated documentation includes:
Add to your ~/.claude.json or project .mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@anthropic/mcp-playwright"]
}
}
}
git clone https://github.com/binarcode/aidocs-cli.git
cd aidocs-cli
uv venv && uv pip install -e '.[ui,test]'
aidocs check
Running tests:
pytest tests/ -v
MIT
FAQs
AI-powered documentation generator for web applications. Install docs commands into your Claude Code project.
We found that aidocs 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.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.