Zenable CLI - conformance checking, IDE management, and hook handling for agentic IDEs.The zenable CLI is the native Go binary that replaces the older Python-based zenable-mcp package.
Note: You can use unified commands like install cursor or install claude-code, or use subcommands like install mcp cursor and install hook claude-code. The unified commands are simpler and install all features.
Preview what would be done without actually performing the installation
-p, --project
Install in the project directory instead of globally
--include TEXT
Include only directories matching these glob patterns (e.g., '**/microservice-*')
--exclude TEXT
Exclude directories matching these glob patterns
--all
Install for all supported IDEs, even if not currently installed
-h, --help
Show help message
By default, zenable install installs globally so the integration is available across all your projects.
Want project-level installation? Run zenable install --project from inside a git repository to install only for that project. When using --project outside a git repository, the installer will present an interactive TUI to select which repositories to install into.
# Install globally for all detected IDEs (recommended)zenable install# Install for a specific IDE using unified command (recommended)zenable install cursorzenable install claude-code# Install in the current project onlyzenable install --project# Preview what would be done without installingzenable install --dry-run# Advanced: Install only MCP (without hooks) for all detected IDEszenable install mcp# Advanced: Install only MCP for a specific IDEzenable install mcp cursor# Advanced: Install only hookszenable install hookzenable install hook claude-codezenable install hook cursor
Check the provided files against your conformance tests.
zenable check [OPTIONS] [PATTERNS]...
Automatically detects files from IDE context when no patterns are provided.
Supports glob patterns like **/*.py to check all Python files recursively.
Accepts piped input via stdin from git status --short or plain file lists.
Files are processed in batches of 5 for optimal performance.
The check command supports configuration via environment variables:
Environment Variable
Description
Default
ZENABLE_CHECK_BASE_BRANCH
Default base branch to compare against when using --branch
main
Example
# Set default base branch to developexport ZENABLE_CHECK_BASE_BRANCH=develop# Now --branch uses develop instead of mainzenable check --branch# CLI option still overrides env varzenable check --branch --base-branch feature/base
# Check a single filezenable check example.py# Check all Python files recursivelyzenable check '**/*.py'# Check multiple patternszenable check 'src/**/*.js' 'tests/**/*.js'# Pipe git status to check modified/untracked filesgit status --short | zenable check# Pipe a file list from any commandfind src -name '*.py' | zenable check# Exclude test files from checkingzenable check '**/*.py' --exclude '**/test_*.py'# Specify base directory for pattern matchingzenable check '*.py' --base-path ./src# Check all files changed on current branch compared to mainzenable check --branch# Check all files changed on current branch compared to developzenable check --branch --base-branch develop# Check only Python src files changed on current branchzenable check --branch '**/*.py' --exclude '**/test_*.py'# Dry run to see which files would be checkedzenable check '**/*.py' --dry-run# Output results in SARIF format to a file (e.g. for CI integration)zenable check '**/*.py' --format sarif=results.sarif# Output results in JSON format to a filezenable check '**/*.py' --format json=results.json# Output text to terminal and write SARIF + JSON to fileszenable check '**/*.py' --format text,sarif=results.sarif,json=results.json# Output HTML report to a filezenable check '**/*.py' --format html=report.html# Output multiple formats to stdoutzenable check '**/*.py' --format sarif,json# Skip AI review and only run semgrep guardrailszenable check '**/*.py' --skip-ai-review
This command is specifically designed for IDE integrations like Claude Code and Cursor.
It reads hook input from stdin, processes the files, and returns appropriate
exit codes and formatted responses for the IDE to handle.To manually run a scan, use the check command instead.
Reverted files are not reviewed. When an agent modifies a file and then reverts it back to match the base branch (e.g., via git checkout), the hook will report “No files to process” because there is no net change compared to the base branch. This is expected behavior — Zenable reviews the diff, not individual edits, so if the final state matches what’s already on the base branch, there’s nothing new to review.
Opens a browser to complete the OAuth authentication flow. Credentials are cached locally for future commands. If already authenticated, skips re-authentication.
# All Python files recursively'**/*.py'# Multiple extensions'**/*.{js,ts,jsx,tsx}'# Specific directory'src/**/*.py'# All files in current directory'*'# All files recursively'**/*'# Specific depth'*/*.py' # One level deep'*/*/*.py' # Two levels deep
# Maximum verbosityzenable -vv install# Run a check with verbose outputzenable -v check '**/*.py'# View debug logszenable logs --lines 100# Run diagnosticszenable doctor