The agent execution substrate for the world's software.
Docs · Sites catalog · llms.txt
Search by intent, execute governed commands across web, apps, local tools, and system capabilities, then return evidence-rich AgentEnvelopes that agents can inspect and repair.
238 sites · 1458 commands · 101 pipeline steps · 7920 tests
Desktop / Media / DevOps / Cloud
npm install -g @zenalexa/unicli
unicli search "hacker news frontpage"
unicli hackernews top -f jsonUni-CLI sits under agent applications and turns software surfaces into commands that agents can discover, execute, record, and repair.
| Surface | What you get |
|---|---|
| Websites and APIs | Declarative adapters for public, cookie, header, and browser-intercept workflows |
| Browser automation | CDP steps for navigate, click, type, intercept, snapshot, extract, wait, and related browser work |
| Desktop and macOS | System commands, app adapters, real-time Shortcuts/App Intent discovery, screenshots, clipboard, calendar, brightness, and local tools |
| External CLIs | 58 registered pass-through bridges with install/status discovery |
| Agent backends | Route matrix for native CLI, JSON stream, MCP, ACP, HTTP API, OpenAI-compatible, and bridge routes |
| Operation policy | open, confirm, and locked profiles with effect/risk scopes, local deny rules, --yes, and persisted approval memory |
| Evidence | Run traces with environment snapshots, probe/replay/compare scores, structured gate results, browser session leases with tab/auth posture, render-aware evidence, movement checks, and stale-ref details |
| Output | v2 AgentEnvelope in Markdown, JSON, YAML, CSV, or compact format |
| Repair | Structured errors with adapter_path, failing step, retryability, suggestions, and alternatives |
Use search first, then run the smallest matching command.
unicli search "connect slack messages" --limit 5
unicli slack search "deploy incident" -f json
unicli macos app-actions --app WhatsApp -f json
unicli macos automation-smoke -f json
unicli repair slack searchOutput defaults to structured Markdown for non-TTY and agent-user-agent runs. Force a machine format when you need one:
UNICLI_OUTPUT=json unicli reddit hot --limit 10
unicli hackernews top --limit 5 -f yaml
unicli --record --permission-profile confirm twitter search "coding agents" -f json
unicli runs list -f json
unicli runs show <run_id> -f json
unicli runs probe <run_id> -f json
unicli runs replay <run_id> --permission-profile confirm --yes --min-score 1 --min-context-score 1 --min-overall-score 1 -f json
unicli runs compare <run_id> <replay_run_id> -f json
unicli runs compare <run_id> <replay_run_id> --min-score 1 --min-context-score 1 --min-overall-score 1 -f json
unicli --permission-profile locked --yes --remember-approval word set-font "Inter"
unicli approvals list -f json
unicli approvals revoke <approval_key> -f json
unicli browser evidence --render-aware --expect-domain example.com -f jsonProtocol entry points:
npx @zenalexa/unicli mcp serve
npx @zenalexa/unicli mcp serve --transport streamable --port 19826
unicli acp
unicli agents recommend codex
unicli agents matrixACP is supported for editors and bridge tooling. The primary runtime path stays native CLI, JSON stream, or MCP when those routes are available.
unicli compute controls installed apps through native accessibility, Electron CDP, and visual fallback transports.
unicli compute apps
unicli compute snapshot --app Calculator --format compact
unicli compute find --role button --name 5 --first
unicli compute find --role input --text 8 --first
unicli compute click @e7
unicli doctor compute --json
npx @zenalexa/unicli mcp serve --profile computer-useStart with Compute, Electron App Control, and Compute Troubleshooting.
The catalog is intentionally broad. Every command is discoverable, typed, and repairable.
The grid below is generated from active manifest sites. Badge counts exclude quarantined commands.
See the live catalog:
unicli list
unicli list --site macos
unicli ext list
unicli ext list --tag agentBrowse the same generated catalog on the docs site: https://olo-dot-io.github.io/Uni-CLI/reference/sites
Every normal command returns a v2 envelope. mcp serve and acp are protocol servers and keep their raw stdio protocol.
ok: true
schema_version: "2"
command: "twitter.search"
meta:
duration_ms: 412
count: 20
surface: web
data:
- { id: "...", text: "...", author: "..." }
error: nullErrors are meant to be acted on:
ok: false
schema_version: "2"
command: "twitter.search"
meta:
duration_ms: 91
data: null
error:
code: auth_required
message: "401 Unauthorized"
adapter_path: "src/adapters/twitter/search.yaml"
step: 1
suggestion: "Run: unicli auth setup twitter"
retryable: false
alternatives: ["twitter.timeline", "twitter.profile"]Exit codes: 0 ok, 66 empty, 69 unavailable, 75 temporary failure, 77 auth, 78 config.
Adapters are small YAML files by default. A failed command gives an agent enough context to patch the broken part without waiting for a package release.
1. Run the command.
2. Read the error envelope.
3. Open error.adapter_path.
4. Patch the failing step.
5. Save the override in ~/.unicli/adapters/<site>/<command>.yaml.
6. Verify with unicli repair <site> <command>.
Local overrides survive npm updates.
site: example
name: search
description: "Search example.com"
transport: http
strategy: public
capabilities: [fetch, select, map, limit]
minimum_capability: http.fetch
trust: public
confidentiality: public
quarantine: false
pipeline:
- fetch:
url: "https://api.example.com/search?q=${{ args.query }}"
- select: data.results
- map:
title: "${{ item.title }}"
url: "${{ item.url }}"
- limit: "${{ args.limit }}"
args:
- { name: query, type: string, required: true, positional: true }
- { name: limit, type: int, default: 20 }
columns: [title, url]Docs:
- Auth-required sites use local cookie files under
~/.unicli/cookies/<site>.json. - Browser adapters require a reachable Chrome/CDP session.
- Permission profiles are user-selected runtime policy. The default is
open; stricterconfirmandlockedprofiles require--yesorUNICLI_APPROVE=1for blocked operations. Add--remember-approvalwith--yesto store the same command capability and resource scope under~/.unicli/approvals.jsonl. Resource scope covers stable metadata such as domain, account surface, app, process family, and path argument slots. Useunicli approvals list,revoke, andclearto inspect or remove remembered scopes. The file stores scope metadata; runtime args stay out of approval memory. - Local deny rules live at
~/.unicli/permission-rules.json, or atUNICLI_PERMISSION_RULES_PATH. They match site, command, effect, capability dimensions, and resource metadata, then block before--yesand remembered approvals. Runtime guards also check fetched domains, browser navigation targets, download and output paths, and subprocess executables before the request, write, or process spawn happens. - Run recording is opt-in. Use
--recordorUNICLI_RECORD_RUN=1when you need append-only evidence under~/.unicli/runs. - CUA routes require a configured real backend. Declared-but-unavailable providers fail closed with structured errors.
- User adapters and repairs live in
~/.unicli/adapters/; committed adapters remain the package baseline. - If a site blocks automation or changes a private API, Uni-CLI returns a clear failure envelope.
npm install
npm run typecheck
npm run lint
npm run verifyv0.219.0 — Vostok · Gagarin
