# declick

> A CLI compiler that turns APIs, MCP servers, databases, and web pages into named shell verbs with a consistent output envelope for AI agents.

declick is a command-line compiler built by Practical Systems that converts APIs, MCP servers, SQLite databases, and other sources into named shell verbs an AI agent can call directly. It runs on Node 24 with zero runtime dependencies and ships ten built-in engines covering OpenAPI, GraphQL, MCP, SQLite, Postman, HAR, CLI, web, desktop, and compose chains.

## What It Is

declick addresses a specific problem with MCP-based agent tooling: every tool's schema rides in the context window on every turn. declick compiles a source once into a set of named verbs the model loads one at a time, and every verb returns the same structured envelope — `{ok, data, meta}` on success, `{ok, error, exit}` on failure — with five consistent exit codes across all ten engines. The project's own benchmark, run against nine real stdio MCP servers with 258 tools, measured the raw tool listing at 236,818 bytes versus a compiled `declick describe` output of 58,309 bytes, a 4.1x reduction.

## How the Output Contract Works

Every adapter and every declick management command honors the same output shape regardless of which engine produced it:

- **Success**: `{ok: true, data, meta: {count, truncated}}`
- **Failure**: `{ok: false, error, exit}` plus `data` when the engine has a payload
- **Five exit codes**: 0 ok, 1 error, 2 not found, 3 blocked, 4 auth needed
- **`--fields`**: projects named fields with dotted paths; a miss names available keys
- **`--where k=v`**: filters lists on the local machine before `--fields` and `--limit` run, with eight operators including regex and numeric comparisons
- **`--dry-run`**: every mutating verb previews the exact request without sending it; secrets appear as env key names only
- **`--each file`**: runs a verb once per item in an NDJSON file and returns one envelope with `meta.failed`
- **`--cache <s>`**: answers a read-only verb from a stored response younger than the given seconds

The `declick lint` command enforces a 2,000-character ceiling on `declick describe` output at build time, which the project describes as roughly 500 tokens. A build that exceeds the ceiling fails and prints the verbs available for narrowing.

## Ten Engines, All Compiled In

declick ships ten engines with no plugins to install:

- **openapi**: OpenAPI 3 and Swagger 2, JSON or YAML, from a file or URL fetched once at compile time
- **mcp**: stdio servers (spawned per call or kept warm by `declick daemon`) and streamable HTTP servers
- **sqlite**: tables and views become list, get, insert, update, delete, and a parameterized query verb
- **compose**: chains verbs from existing adapters into one verb with one envelope and one audit line
- **graphql**: introspects an endpoint or schema file; bearer from `<NAME>_TOKEN` on 401
- **postman**: Postman v2.1 collections and Insomnia v4 exports
- **har**: browser network captures; `--host` picks the API host when the capture has several
- **cli**: compiled from another binary's own `--help` output; the binary must be on PATH
- **web**: needs Chrome or Edge; returns page elements instead of screenshots; a miss returns candidates
- **desktop**: Windows only via deskclaw UI Automation; replays element paths against a fresh window tree, never screen coordinates

## Governance and Security Model

declick has two tiers of write control. Tier one requires no configuration: API keys are scoped to the origin the adapter was built against, and a request to a different host is exit 4 naming the scoped origin. Launcher names that already resolve on PATH are refused at compile time.

Tier two is opt-in via DashClaw, described by the project as "the approval and policy layer for unattended agents from the same author." Setting `DASHCLAW_API_KEY` and `DASHCLAW_URL` causes every real mutating call to post a structured action record to the guard endpoint with a 3-second timeout. Once the key is set, strict mode is the default: an unreachable or timing-out guard is exit 3. A local `~/.declick/policy.json` file provides a floor with no network dependency — allow, warn, or block by adapter and verb glob, first match wins.

Every invocation appends one line to `~/.declick/audit.jsonl`. `declick audit --sum` totals calls, bytes, and failures per adapter.

## Setup and Team Sharing

`declick setup` wires declick into agents found on the machine: it puts `~/.declick/bin` on PATH, adopts existing MCP servers as adapters, adds a rules block to `CLAUDE.md` or `AGENTS.md`, and installs a Claude Code PreToolUse hook. `declick setup --revert` restores every touched file byte-for-byte from a snapshot taken before setup ran; a standalone `revert.mjs` in the snapshot directory works even after the package is removed.

Team sharing uses a store — a shared directory, git checkout, or read-only HTTPS base. `declick store push` writes a bundle and index entry; `declick store pull` installs what changed on other machines. Bundles carry auth key names, never values. A git-backed store commits and pushes automatically.

## Update: Version 0.7.2

The homepage and all code examples on the declick site reflect version 0.7.2 running on Node 24.15.0. The GitHub repository shows a latest release of v0.6.0 published on 2026-09-04, with the last push on 2026-09-08. The homepage explicitly states that every block on the page is output from declick 0.7.2, indicating active development beyond the tagged GitHub release. Notable in recent versions: the `declick daemon` command for keeping stdio MCP servers warm (reducing a measured 4.8-second spawn to a 59ms reuse), `declick audit --sum` for aggregate cost reporting, `--each file` for batch verb execution, and `--cache` for read-only response caching. The desktop engine requires deskclaw 0.3.0 or newer for attributed snapshot lines. A macOS and Linux desktop backend is listed as not yet shipped.

## Features
- Compiles OpenAPI, Swagger, GraphQL, MCP, SQLite, Postman, HAR, CLI, web, and desktop sources into named shell verbs
- Consistent output envelope across all ten engines: {ok, data, meta} on success, {ok, false, error, exit} on failure
- Five standardized exit codes: 0 ok, 1 error, 2 not found, 3 blocked, 4 auth needed
- declick lint enforces a 2,000-character (≈500 token) ceiling on describe output at build time
- -dry-run on every mutating verb previews the exact request without sending it; secrets shown as env key names only
- -fields projects named fields with dotted paths; a miss names available keys
- -where k=v filters lists locally before --fields and --limit run, with eight operators
- -each file runs a verb once per NDJSON item and returns one envelope with meta.failed
- -cache <s> answers read-only verbs from stored responses
- declick daemon keeps stdio MCP servers warm between calls
- declick setup wires declick into Claude Code, Codex, Hermes, and OpenClaw agents
- declick setup --revert restores every touched file byte-for-byte from a pre-setup snapshot
- Team store: push/pull adapter bundles via shared directory, git checkout, or HTTPS base
- API key scoping: keys are bound to the origin the adapter was built against
- Local policy.json for allow/warn/block rules with no network dependency
- Optional DashClaw governance guard for mutating verbs with approval workflows
- Audit log at ~/.declick/audit.jsonl; declick audit --sum totals by adapter
- Desktop engine replays element paths against fresh window tree snapshots, never screen coordinates
- declick web tree returns page elements instead of screenshots; a miss returns candidates
- compose engine chains verbs from existing adapters into one verb with one envelope
- Zero runtime dependencies, Node 24 required
- declick ui serves a local management page on 127.0.0.1 only

## Integrations
Claude Code, Codex, Hermes, OpenClaw, Anthropic SDK, OpenAI SDK, Anthropic Managed Agents, DashClaw, deskclaw, Chrome, Microsoft Edge, OpenAPI 3, Swagger 2, GraphQL, SQLite, Postman, Insomnia, HAR, MCP (Model Context Protocol), npm, Stripe (checkout)

## Platforms
WINDOWS, MACOS, LINUX, WEB, API, CLI

## Pricing
Freemium — Free tier available with paid upgrades

## Version
0.7.2

## Links
- Website: https://declick.dev
- Documentation: https://declick.dev/guides
- Repository: https://github.com/ucsandman/declick
- EveryDev.ai: https://www.everydev.ai/tools/declick
