Install
$ agentstack add mcp-lidge-jun-cli-jaw Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
β Flagged1 finding(s); flagged for manual review. Β· v0.1.0 How review works β
- β’ Prompt-injection patterns
- β’ Secret / credential exfiltration
- β’ Dangerous shell & filesystem operations
- β’ Untrusted network calls
- β’ Known-malicious package signatures
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- β Network access Used
- β Filesystem access No
- β Shell / process execution No
- β Environment & secrets No
- β Dynamic code execution No
From automated source analysis of v0.1.0. βUsedβ means the capability is present in the source β more access means more to trust, not that itβs unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work βAbout
CLI-JAW
Your personal AI agent. 2 lines to install. 13 AI runtime surfaces in one dashboard.
[](https://npmjs.com/package/cli-jaw) [](https://github.com/lidge-jun/cli-jaw/releases) [](https://typescriptlang.org) [](https://nodejs.org) [](LICENSE) [](#-docker)
English / [νκ΅μ΄](README.ko.md) / [δΈζ](README.zh-CN.md) / [ζ₯ζ¬θͺ](README.ja.md)
Install
Safe install β for existing users who want minimal changes
# macOS / Linux
JAW_SAFE=1 npm install -g cli-jaw # skips optional tool/runtime setup
jaw init # interactive setup later when you're ready
Windows users should use the WSL install path below. Native PowerShell is not the supported CLI-JAW install target.
# macOS / Linux / WSL with Node.js 22+ already installed
npm install -g cli-jaw
jaw dashboard
That's it. Open http://localhost:24576 for the manager dashboard. Per-instance agent Web UIs still run from http://localhost:3457 when you start jaw serve. Requires Node.js 22.4+.
> First time? The default npm install initializes CLI-JAW and attempts native Claude setup. Other AI CLIs are optional; install them all during npm setup with CLI_JAW_INSTALL_CLI_TOOLS=1 npm install -g cli-jaw on macOS/Linux. On Windows, use the WSL install path below.
Optional JWC Runtime
JWC is optional and external-only. The default npm install and Electron desktop sidecar do not bundle jawcode, @jawcode-dev, @oven, bun, or a jwc payload. To use JWC, install the runtime into CLI-JAW's external prefix and opt in with the printed SDK path:
jaw jwc install
export JWC_SDK_PATH="/absolute/path/printed/by/jaw-jwc-install/sdk.js"
jaw jwc doctor
To remove the optional external JWC dependencies later:
jaw jwc clean
macOS one-click β don't have Node.js? This installs everything
curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/install.sh | bash
source "${ZDOTDIR:-$HOME}/.zshrc" 2>/dev/null || true
bash "$(npm root -g)/cli-jaw/scripts/verify-fresh-install.sh"
Windows (WSL β Windows Subsystem for Linux) β one-click from scratch
# 1. Install WSL (PowerShell as Admin)
wsl --install
Restart, open Ubuntu, then:
# 2. Install CLI-JAW + all dependencies
curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/install-wsl.sh | bash
source ~/.bashrc
jaw dashboard
bash "$(npm root -g)/cli-jaw/scripts/verify-fresh-install.sh"
From Windows PowerShell into WSL, run commands through a login shell so the WSL profile PATH is loaded:
wsl.exe -d Ubuntu -- bash -lc "jaw dashboard"
Fresh-machine evidence β maintainer release check
Run this on a clean VM before publishing installer changes. It writes environment snapshots, installer logs, the exact collector/installer/verifier scripts that ran, their SHA-256 hashes, verifier logs, and new-shell PATH probes into ~/cli-jaw-fresh-install-evidence-*.
# macOS Terminal
COLLECTOR=/tmp/cli-jaw-collect-fresh-install-evidence.sh
curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/collect-fresh-install-evidence.sh -o "$COLLECTOR"
bash "$COLLECTOR" --target macos
# Ubuntu inside WSL
COLLECTOR=/tmp/cli-jaw-collect-fresh-install-evidence.sh
curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/collect-fresh-install-evidence.sh -o "$COLLECTOR"
bash "$COLLECTOR" --target wsl
From Windows PowerShell, enter the supported WSL path:
wsl.exe -d Ubuntu -- bash -lc 'COLLECTOR=/tmp/cli-jaw-collect-fresh-install-evidence.sh; curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/collect-fresh-install-evidence.sh -o "$COLLECTOR"; bash "$COLLECTOR" --target wsl'
If the collector says powershell.exe is not available inside WSL, run this from Windows PowerShell before auditing:
wsl.exe -d Ubuntu -- bash -lc 'EVIDENCE_DIR="$(ls -dt ~/cli-jaw-fresh-install-evidence-* | head -1)"; { echo "command=wsl.exe -d Ubuntu -- bash -lc jaw --version"; jaw --version; } | tee "$EVIDENCE_DIR/33-powershell-to-wsl-probe.log"'
For an unmerged branch or local VM checkout, pass the local installer and verifier explicitly:
bash scripts/collect-fresh-install-evidence.sh --target macos --install-script scripts/install.sh --verifier-script scripts/verify-fresh-install.sh
bash scripts/collect-fresh-install-evidence.sh --target wsl --install-script scripts/install-wsl.sh --verifier-script scripts/verify-fresh-install.sh
Audit each collected directory before treating it as target evidence:
EVIDENCE_DIR="$(ls -dt ~/cli-jaw-fresh-install-evidence-* | head -1)"
AUDITOR="$(npm root -g)/cli-jaw/scripts/audit-fresh-install-evidence.mjs"
node "$AUDITOR" "$EVIDENCE_DIR" --target macos
node "$AUDITOR" "$EVIDENCE_DIR" --target wsl
# For a local checkout, audit with the checkout's auditor:
node scripts/audit-fresh-install-evidence.mjs "$EVIDENCE_DIR" --target macos
node scripts/audit-fresh-install-evidence.mjs "$EVIDENCE_DIR" --target wsl
Before publishing installer changes, run the matrix gate with both strict evidence directories:
GATE="$(npm root -g)/cli-jaw/scripts/verify-release-evidence.mjs"
node "$GATE" --macos /path/to/macos-evidence --wsl /path/to/wsl-evidence
# For a local checkout:
node scripts/verify-release-evidence.mjs --macos /path/to/macos-evidence --wsl /path/to/wsl-evidence
The matrix gate rejects evidence collected with stale collector, installer, or verifier scripts; archived evidence scripts must match the current package or checkout that runs the gate.
When scripts/release.sh, scripts/release-preview.sh, or npm publish detects installer-sensitive changes since the previous tag, it runs this same matrix gate before any git push or npm publish. Set the evidence directories before starting a release:
CLI_JAW_MACOS_EVIDENCE_DIR=/path/to/macos-evidence \
CLI_JAW_WSL_EVIDENCE_DIR=/path/to/wsl-evidence \
bash scripts/release.sh patch
Docker
docker compose up -d # β http://localhost:3457
What is CLI-JAW?
CLI-JAW is an open-source platform that unifies the AI coding CLIs you already use β Pi, Claude, Claude E, AI-E, Antigravity, Codex, Codex App, Cursor, Gemini, Grok, Kiro, OpenCode, and Copilot β into one assistant with one memory and one dashboard.
Your main CLI (the βBossβ) calls the others as βemployees.β You stop copy-pasting between apps and start giving orders from a single place.
- No API keys needed β routes through subscriptions you already pay for
- No per-token billing β flat monthly cost, same as what you already have
- Runs locally β your code never leaves your machine
Authenticate
You only need one. Pick whichever subscription you already have:
# Free options (no credit card needed)
copilot login # GitHub Copilot (free tier available)
opencode # OpenCode β free models available
kiro # AWS Kiro (free tier with AWS account)
# Paid (monthly subscription you already pay for)
claude auth login # Anthropic Claude Pro or higher
codex login # OpenAI ChatGPT Pro or higher
cursor-agent login # Cursor
gemini # Google Gemini Advanced
grok login --oauth # xAI Grok / Grok Heavy
Check everything at once: jaw doctor
Example jaw doctor output
π¦ CLI-JAW Doctor β 13 checks
β
Node.js v22.15.0
β
Claude CLI installed
β
Codex CLI installed
β
Cursor CLI installed
β οΈ Gemini CLI not found (optional)
β
OpenCode CLI installed
β
Copilot CLI installed
β
Database jaw.db OK
β
Skills 29 active, 238 reference
β
MCP (plugins) 3 servers configured
β
Memory structured/ exists
β
Server port 3457 available
The Dashboard
The dashboard is your command center. jaw dashboard starts the manager at http://localhost:24576; individual agent Web UIs are served by jaw serve from http://localhost:3457 and nearby managed ports. Live Web/TUI updates use the SSE-first GET /api/events channel, with legacy WebSocket fallback only for older servers where SSE never opens.
Instance Manager
See every running AI instance β start, stop, restart with one click. Preview live Web UIs directly in the dashboard.
Manager preview embeds the selected instance's regular Web UI. On long-running homes with large chat databases, a fresh Chrome tab can briefly allocate more memory while the preview loads its recent message window, renders markdown and structured cards, and lets Chrome's garbage collector settle. If memory drops back after a few minutes, treat it as a cold-load peak rather than a manager server leak; the jaw dashboard manager process should stay much smaller than the embedded browser renderer and the individual jaw serve worker processes.
Kanban Board
Drag instance cards into lanes (Backlog β Ready β In Progress β Review β Done). Track what each AI session is working on.
Priority Matrix
Eisenhower matrix for your tasks and reminders. Prioritize what matters.
Notes
A mini-Obsidian inside the dashboard. Folders, visual (WYSIWYG) + raw + split editing, KaTeX (math rendering), Mermaid (diagram-as-code), syntax-highlighted code blocks.
Agent Status
Monitor each AI engine's health and usage at a glance.
Desktop App
Prefer a native window to a browser tab? CLI-JAW ships an Electron desktop shell that boots the manager dashboard and supervises the underlying jaw dashboard serve process for you. Packaged desktop builds include a Node.js sidecar server, so the app can prefer its bundled jaw shim before falling back to a global terminal install.
For end users, download the desktop artifact from GitHub Releases:
- macOS: download the DMG, drag CLI-JAW into Applications, then launch it. Current builds are unsigned / un-notarized, so first launch may require right-click β Open in Finder.
- Windows: download the NSIS installer. It includes the same sidecar server and adds the packaged
jawshim to PATH. - Linux: download the AppImage, make it executable, and run it.
After first launch, accept the Install CLI command prompt to create the terminal jaw command from the bundled sidecar. If you skip the prompt, use the tray menu item Install CLI to Terminal later. This path does not require a global npm install for the packaged app or terminal shim.
Developer build:
# one-time, from the repo root
npm install && npm --prefix electron install
npm run electron:dev # develop with hot reload
npm run electron:dist:mac # build macOS arm64 .dmg + .zip with bundled sidecar
The packaged app lands in electron/dist/. The GitHub Actions desktop release workflow builds macOS arm64 DMG/ZIP, Windows x64 NSIS/ZIP, and Linux AppImage artifacts on release publish or manual dispatch. Native modules such as better-sqlite3 stay in the manager/sidecar server β the Electron main process never imports them.
How the Employee System Works
This is the core idea: your main CLI calls other CLIs as workers.
You talk to one AI (the "Boss"). When it needs specialized work, it dispatches tasks to employees β each running their own CLI with their own model:
You: "Fix the frontend styling and update the API endpoint"
Boss (Claude) thinks...
βββ Dispatches to Frontend employee (OpenCode) β "Fix the CSS grid layout in dashboard.tsx"
βββ Dispatches to Backend employee (Codex) β "Update /api/users to return pagination metadata"
βββ Synthesizes both results for you
# Under the hood, it's one command:
jaw dispatch --agent "Frontend" --task "Fix the CSS grid layout in dashboard.tsx"
jaw dispatch --agent "Backend" --task "Run read-only verification" --watch
jaw dispatch --virtual "security" --task "Review this branch for auth and secret leaks" --watch
jaw worker status Backend
Employees are other AI CLIs configured in your settings. Each has its own session, its own model, its own context. For one-off specialist checks, the Boss can also dispatch an ephemeral virtual employee with --virtual; it uses the same dispatch machinery but is not saved to the employee database. The Boss reviews their output before presenting it to you.
Employees vs. Sub-agents
These are different things:
| | Employees | Sub-agents | |---|---|---| | What | Other AI CLIs (Codex, OpenCode, etc.) configured as workers | Built-in parallel task tool within a single CLI | | When | Multi-specialist work across different codebases or domains | Internal research, file reads, parallel analysis | | How | jaw dispatch --agent "Name" --task "..." | Automatic β the CLI spawns them internally |
Use employees for "Frontend does CSS, Backend does API." Use sub-agents for "read these 5 files in parallel before deciding."
AI Runtime Surfaces
No per-token API billing. Route through subscriptions you already pay for.
| CLI | Default Model | Auth | Cost | |---|---|---|---| | Pi | grok-composer-2.5-fast | Settings profile API key, local proxy, or PI_CODING_AGENT_BIN | First-class pi --mode rpc runtime for local/API endpoints through an isolated PI_CODING_AGENT_DIR | | Claude | claude-opus-4-8 | claude auth login | Claude Pro subscription or higher | | Claude E | claude-opus-4-8 | underlying claude auth login | Claude Pro subscription or higher; preferred for June subscription allowance | | AI-E | provider-selected | selected provider auth | Multi-provider runtime wrapper | | Antigravity | AGY-selected | checked by agy at run time | Experimental AGY print-mode runtime (agy -p); optional --model is capability-probed (observed in AGY 1.0.12); resume via --conversation; no separate effort flag | | Codex | gpt-5.5 | codex login | ChatGPT Pro subscription or higher | | Codex App | gpt-5.5 | codex login | ChatGPT Pro subscription or higher | | Cursor | composer-2.5 | cursor-agent login or CURSOR_API_KEY | Cursor subscription; quota is auth/status-only | | Gemini | gemini-3-flash-preview | gemini | Gemini Advanced subscription | | Grok | grok-build | grok login --oauth | Grok subscription; quota is auth/status-only | | Kiro | registry-selected | kiro | AWS Kiro free tier; kiro-cli chat --no-interactive runtime | | OpenCode | opencode-go/kimi-k2.6 | opencode | Free models available | | Copilot | claude-sonnet-4.6 | copilot login | Free tier available |
GPT 5.5 and Claude Opus 4.8 are enabled from Pro-tier subscriptions and higher. Starting in June, select claude-e when you want CLI-JAW to use the Claude allowance bundled with the subscription plan.
The quota/status panel keeps the same runtime keyset as the registry. Wrapper runtimes (ai-e, claude-e, codex-app) delegate to their underlying provider, while Pi/AGY/Cursor/Grok/OpenCode are shown as auth/status-only when their CLIs do not expose quota windows.
Fallback chain: if one engine is rate-limited, the next picks up. Configure with /fallback [cli1 cli2...].
OpenCode wildcard: connect any model endpoint β OpenRouter, local LLMs (Large Language Models), any OpenAI-compatible API.
> Switch engines live: /cli codex. Switch models: /model gpt-5.5. Works from Web, Terminal, Telegram, or Discord.
PABCD Orchestration (Plan β Audit β Build β Check β Done)
For complex tasks, CLI-JAW uses a structured 5-phase workflow. You approve every transition β nothing ships without your OK.
P (Plan) β A (Audit) β B (Build) β C (Check) β D (Done) β IDLE
β β β auto auto
| Phase | What happens | |---|---| | P β Plan | Boss writes a diff-level plan. Stops for your review | | A β Audit | Read-only worker verifies the plan is feasible (impo
β¦
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source β we do not rehost the code.
- Author: lidge-jun
- Source: lidge-jun/cli-jaw
- License: MIT
- Homepage: https://lidge-jun.github.io/cli-jaw/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.