Quick Installation
- macOS / Linux
- Windows
Overview
Zenable CLI - conformance checking, IDE management, and hook handling for agentic IDEs. Thezenable CLI is the native Go binary for conformance checking, IDE management, and hook handling.
Global Options
These options are available for all commands:Commands
install
Install the Zenable integrations.
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.
Options
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.Subcommands
install mcp
Install Zenable MCP server configuration.
Uses OAuth for secure authentication.
Supported IDE commands:
all- Install MCP for all detected IDEs (default)amp- Install MCP for Ampantigravity- Install MCP for Antigravityantigravity-cli- Install MCP for Antigravity CLI (successor to Gemini CLI)auggie(alias:augment) - Install MCP for Auggieclaude-code(alias:claude) - Install MCP for Claude Codecodex- Install MCP for Codexcopilot-cli- Install MCP for GitHub Copilot CLIcursor- Install MCP for Cursor IDE and cursor-agent CLIdevin-desktop(alias:devin) - Install MCP for Devin Desktopkiro- Install MCP for Kirovscode- Install MCP for Visual Studio Code
install hook
Install hooks for various tools.
all- Install hooks for all supported toolsclaude-code(alias:claude) - Install Claude Code hookscursor- Install Cursor hooksdevin-desktop(alias:devin) - Install Devin Desktop (Cascade) hooks
Options
Examples
uninstall
Remove Zenable integrations from your system.
Options
check
Check the provided files against your conformance tests.
**/*.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 for optimal performance. Standard files (up to
30,000 characters each) are grouped into batches; larger “jumbo” files are
reviewed one per request. Files above the jumbo ceiling (300,000 characters)
are skipped and listed in the review summary.
Arguments
PATTERNS: Glob patterns for files to check (e.g.,'**/*.py','src/**/*.js')- If no patterns are provided, auto-detects the last edited file, subject to filtering. Use
--verbosefor filtering details
- If no patterns are provided, auto-detects the last edited file, subject to filtering. Use
Stdin
When input is piped tozenable check, it reads file paths from stdin. This supports:
git status --shortoutput — status prefixes are automatically stripped, deleted files are skipped, and renames use the new path- Plain file lists — one file path per line
Path matching and requirement scopes
Path patterns are relative to the git repo root; outside a git repo they are compared to the absolute path of the file (and a warning is printed). See Scoping requirements.Options
Configuration
Thecheck command supports configuration via environment variables:
Example
Examples
hook
Handle calls from the hooks of Agentic IDEs.
check command instead.
Options
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.triage
Fetch and address unresolved review comments on a pull request or merge request.
<instructions> block telling the agent how to process each thread (commit per thread, push, then reply). Use --reply to post a response to a single thread, or --report-only to emit a read-only research-report prompt that produces no commits, pushes, or replies.
Modes
Options
Examples
Resolve state only applies to line-level review comments. Issue comments (PR-level conversation) and review summaries (the body of a submitted review) have no resolve/unresolve concept, so
--include-resolved is a no-op for them.finding feedback
Record an agent’s triage verdict on a conformance finding emitted by the IDE hook. Agents call this automatically during the triage pass; you rarely need it by hand.
The bare
zenable feedback alias is deprecated and will be removed after 2026-07-01. Update any hook instructions or scripts to use zenable finding feedback.Options
Examples
self feedback
Send free-form feedback about Zenable to the Zenable team. Requires authentication.
Options
Examples
login
Authenticate with Zenable via OAuth.
logout
Clear local OAuth credentials.
Options
auth can-i
Check whether the authenticated user has a specific permission — or whether an MCP tool would be allowed to run. Prints yes or no and sets a matching exit code, so it’s scriptable.
yes only when all of its gates pass (e.g. update_marketplace_requirement needs both requirements:write and marketplace:publish); otherwise it’s no, and the per-gate breakdown on stderr names the gate that blocked it.
Options
Exit codes
sync
Sync guardrails from Zenable to local disk.
logs
View zenable logs.
Options
Examples
doctor
Diagnose and troubleshoot installation and client issues.
✓— passed both upstream syntax and Zenable schema checks✗— failed Zenable schema validation?— partially or not yet validated; runzenable guardrail validate <engine> <file>for more details
guardrail
Inspect and validate custom guardrail rules. The first positional argument selects the engine (opengrep or semgrep) — the server never infers it from the rule body. Subsequent arguments are file paths or glob patterns.
guardrail validate
Validate one or more custom guardrail rule files. Runs the engine’s native validate command (catches YAML / pattern syntax errors) and the Zenable schema check (catches the field-level rules that protect the findings API). Validation results are cached locally by SHA-256 of the rule body, so re-running is free for unchanged files.
Arguments
<engine>— required; one ofopengreporsemgrep. Explicit by design; the server never infers it from the rule body.<file-or-glob>...— one or more file paths or glob patterns. Globs expand relative to the current working directory. Excludes and config-driven skip-filenames do NOT apply: this command validates exactly what you point it at.
Options
--format <format>—text(default) orjson
Examples
Exit Codes
0— all files passed (or were partial-pass)1— at least one file failed validation2— bad arguments (unknown engine, no files matched)
version
Show the zenable version.
Configuration Files
MCP Server Configuration
The tool creates MCP server configuration in IDE-specific locations, appropriate for that individual IDE. For instance:Hook Configuration (Claude Code)
Hooks are configured in Claude Code settings (.claude/settings.json):
Hook Configuration (Cursor)
Hooks are configured in Cursor hooks file (.cursor/hooks.json):