Root CLI Subcommands
The jaw binary exposes 21 subcommands for server lifecycle, setup, orchestration, automation, and service management. These run directly from the terminal -- separate from the in-chat slash commands described in other command pages.
Global flags: Every subcommand accepts --help / -h for its own help text. Use --home <path> before any subcommand to target a different data directory (default: ~/.cli-jaw). Machine-readable JSON output is available on most commands via --json.
jaw <command> [args] [--flags]
jaw --home <path> <command>
jaw --version
jaw --help
Table of Contents
Server & Dashboard
Start the CLI-JAW server in the foreground. The server must be running before chat, dispatch, browser, and most other commands can operate.
jaw serve [--port <N>] [--no-open] [--lan] [--remote]
| Option | Default | Description |
--port <N> | 3457 | Server port (also reads PORT env) |
--no-open | - | Do not auto-open browser on start |
--host <addr> | 0.0.0.0 | Bind address |
--lan | false | Enable LAN access mode |
--remote | false | Enable remote access mode (direct) |
--trust-proxy | false | Trust proxy headers (for reverse proxies) |
--trust-forwarded | false | Trust X-Forwarded-For header |
Examples
# Start with defaults (port 3457, auto-opens browser)
jaw serve
# Custom port, no browser
jaw serve --port 3458 --no-open
# LAN mode for local network access
jaw serve --lan --port 3460
# Use a separate data directory
jaw --home ~/.cli-jaw-work serve --port 3458
~해줘 Tip: "서버 시작해줘" -- the agent cannot start jaw serve for you (it requires a foreground process). Run it manually or use jaw service install for background auto-start.
Multi-instance manager. Start the dashboard server, list/start/stop instances, manage persistent services, and perform L2 cross-instance memory federation searches.
jaw dashboard <command> [options] [--json]
| Subcommand | Description |
serve [--port] [--from] [--count] [--no-open] | Start dashboard server (default port 24576, scans from 3457) |
status | Dashboard health check |
ls | List all discovered instances |
start <port> [--home] | Start an instance on the given port |
stop <port> | Gracefully stop an instance |
restart <port> | Restart an instance |
perm <port> [--home] | Register instance as persistent service |
unperm <port> | Unregister persistent service |
service [install|status|unset] | Dashboard auto-start management |
memory <search|read|instances> | L2 cross-instance memory federation (read-only) |
| Option | Default | Description |
--port <N> | 24576 | Dashboard port (also reads DASHBOARD_PORT env) |
--from <N> | 3457 | Start scanning instances from this port |
--count <N> | 50 | Number of ports to scan |
--no-open | - | Do not auto-open browser |
--json | - | Machine-readable JSON output |
--home <path> | - | Data directory for start/perm subcommands |
Examples
# Start the dashboard
jaw dashboard serve
# List online instances as JSON
jaw dashboard ls --json | jq '.[] | select(.status == "online")'
# Start a new instance on port 3458
jaw dashboard start 3458 --home ~/.jaw-work
# Stop an instance
jaw dashboard stop 3457
# Cross-instance memory search
jaw dashboard memory search "JWT authentication"
# List all memory instances
jaw dashboard memory instances
# Register for persistent auto-start
jaw dashboard perm 3458 --home ~/.jaw-work
~해줘 Tip: "대시보드 상태 확인해줘" -- the agent can run jaw dashboard status --json for you and report which instances are online.
Check if the jaw server is running by pinging the API. Optionally check the dashboard server too.
jaw status [--port <N>] [--json] [--dashboard]
| Option | Default | Description |
--port <N> | 3457 | Target server port |
--json | false | Machine-readable JSON output |
--dashboard | false | Also check dashboard server (port 24576) |
Exit code 0 = server running, 1 = server not running or error.
Examples
# Quick health check
jaw status
# JSON output for scripting
jaw status --json
# → {"status":"running","port":"3457","cli":"claude"}
# Check both server and dashboard
jaw status --dashboard
# Check a specific port
jaw status --port 3458
~해줘 Tip: "서버 상태 확인해줘" -- the agent runs jaw status --json to determine if the server is healthy and reports the CLI, port, and active heartbeat jobs.
Setup & Diagnostics
Interactive setup wizard for first-time configuration. Creates ~/.cli-jaw/settings.json, configures the default CLI backend, messaging channels, and skills directory.
jaw init [options]
| Option | Description |
--non-interactive | Skip prompts, use defaults |
--safe | Ask before optional installs |
--dry-run | Show what would be done without changes |
--force | Overwrite existing settings |
--working-dir <path> | Set working directory |
--cli <name> | Default CLI backend (claude, codex, gemini, etc.) |
--channel <ch> | Active channel (telegram or discord) |
--telegram-token <t> | Telegram bot token |
--allowed-chat-ids <ids> | Comma-separated Telegram chat IDs |
--discord-token <t> | Discord bot token |
--discord-guild-id <id> | Discord guild (server) ID |
--discord-channel-ids <ids> | Comma-separated Discord channel IDs |
--skills-dir <path> | Custom skills directory |
Examples
# Interactive wizard (recommended for first run)
jaw init
# Non-interactive with defaults
jaw init --non-interactive --cli claude
# Re-initialize with force
jaw init --force --cli gemini --channel telegram
# Dry run to see what would be created
jaw init --dry-run
~해줘 Tip: "초기 설정 해줘" -- run jaw init interactively; the wizard asks questions and writes your settings. For CI/CD, use --non-interactive.
Diagnose installation and configuration health. Checks Node.js version, CLI binary resolution, settings file validity, MCP server connectivity, employee CLI availability, and port availability.
jaw doctor [--json] [--fix] [--tcc] [--prime]
| Option | Description |
--json | Machine-readable diagnostic output |
--fix | Attempt automatic fixes for detected issues |
--tcc | Check macOS TCC (Transparency, Consent, Control) permissions |
--prime | Prime installation (pre-warm caches) |
--repair-shared-paths | Repair contaminated shared MCP paths |
Examples
# Run diagnostics
jaw doctor
# Machine-readable output
jaw doctor --json
# Auto-fix detected issues
jaw doctor --fix
# Check macOS accessibility permissions
jaw doctor --tcc
~해줘 Tip: "설치 상태 진단해줘" -- the agent can run jaw doctor --json and interpret the results, flagging any failing checks with recommended fixes.
Factory reset: performs MCP sync, skill reset, employee reset, and session clear. Prompts for confirmation unless --yes is passed. Requires a running server.
jaw reset [--yes] [--port <N>]
| Option | Default | Description |
--yes, -y | false | Skip confirmation prompt |
--port <N> | 3457 | Target server port |
Examples
# Reset with confirmation prompt
jaw reset
# Skip confirmation (scripting)
jaw reset --yes
# Reset a specific instance
jaw reset --port 3458 --yes
Warning: This resets MCP servers, skills (back to 25 defaults), employees, and the current session. Memory files are preserved.
~해줘 Tip: "전부 초기화해줘" -- the agent can trigger jaw reset --yes via the server API when authorized.
Orchestration
Interactive terminal REPL. Connects to the running server via WebSocket for real-time conversation. Supports a rich TUI mode with persistent footer, a raw JSON protocol mode for UI integration, and a minimal plain readline mode.
jaw chat [--port <N>] [--raw] [--simple]
| Option | Default | Description |
--port <N> | 3457 | Server port to connect to |
--raw | false | JSON protocol mode (for programmatic UI integration) |
--simple | false | Plain readline mode (minimal, no TUI) |
Examples
# Default rich TUI
jaw chat
# Simple mode (works in dumb terminals)
jaw chat --simple
# Connect to a different instance
jaw chat --port 3458
# Raw JSON mode for piping
jaw chat --raw
~해줘 Tip: "채팅 시작해줘" -- jaw chat is a foreground terminal process. Inside it, use slash commands like /status, /model, /skill.
Send a task to an employee agent. The employee runs asynchronously via the server API and returns results via stdout. Pipe-compatible for scripting workflows. Requires JAW_BOSS_TOKEN (inherited from the server process).
jaw dispatch --agent <name> --task <text> [--json] [--port <N>]
| Option | Description |
--agent <name> | Employee name (case-sensitive, must match settings.json employees) |
--task <text> | Task instruction to send |
--json | JSON output |
--port <N> | Target server port |
Examples
# Dispatch a frontend task
jaw dispatch --agent "Frontend" --task "Fix CSS bug in the header component"
# Dispatch a backend task
jaw dispatch --agent "Backend" --task "Add rate limiting to /api/chat endpoint"
# JSON output for piping
jaw dispatch --agent "Data" --task "Optimize the slow query in reports" --json
Note: Employee sessions cannot dispatch other employees (nested dispatch is blocked). Only the boss session has dispatch authority.
~해줘 Tip: "프론트엔드 직원한테 헤더 버그 고치라고 해줘" -- the agent dispatches via the API: the target employee runs in its own CLI instance and returns results.
Employee management utilities. Currently supports resetting employees to the default 5 profiles (Frontend, Backend, Data, Docs, QA).
jaw employee <subcommand> [--port <N>]
| Subcommand | Description |
reset | Reset employees to default 5 profiles |
Examples
# Reset all employees to defaults
jaw employee reset
# Reset on a specific instance
jaw employee reset --port 3458
~해줘 Tip: "직원 초기화해줘" -- the agent calls /employee reset in-chat or runs jaw employee reset via the server API.
PABCD state machine transitions. Drives the workflow through Interview, Planning, Audit, Build, Check, and Done phases. Calls the running server's API so WebSocket broadcasts reach all connected clients in real-time.
jaw orchestrate <phase> [--force] [--json] [--port <N>]
| Phase | Description |
I | Enter Interview (from IDLE) |
P | Enter Planning (from IDLE or I) |
A | Enter Plan Audit (from P) |
B | Enter Build (from A) |
C | Enter Check (from B) |
D | Enter Done (from C, returns to IDLE) |
status | Show current phase, scope, audit status |
reset | Return to IDLE from any state |
Valid transitions: IDLE → I → P → A → B → C → D → IDLE. Interview is optional: IDLE → P is also valid.
Examples
# Start planning phase
jaw orchestrate P
# Force transition (skip validation)
jaw orchestrate B --force
# Check current state
jaw orchestrate status
# Reset to IDLE
jaw orchestrate reset
# JSON output
jaw orchestrate status --json
~해줘 Tip: "PABCD 상태 확인해줘" or "빌드 단계로 넘어가줘" -- the agent uses the in-chat /orchestrate command or calls the API to transition phases.
Persistent goal lifecycle management. Set objectives, track progress with checkpoints, and manage goal state (pause, resume, cancel, complete). Goals survive across sessions and server restarts.
jaw goal <subcommand> [args...] [--port <N>]
| Subcommand | Description |
set <objective> | Set a new goal |
status | Show active goal (default when no subcommand) |
update <summary> | Add a progress checkpoint |
done [note] | Mark goal complete |
cancel [reason] | Cancel goal |
pause | Pause active goal |
resume | Resume paused goal |
clear | Clear active goal |
reset | Reset entire goal store |
history [limit] | Show goal history (default: 10) |
Examples
# Set a new goal
jaw goal set "Implement keyboard shortcuts for the editor"
# Check current goal
jaw goal status
# Add a progress checkpoint
jaw goal update "K0: shortcut registry done, K1: in progress"
# Mark complete
jaw goal done "All phases complete, PR merged"
# View past goals
jaw goal history 5
# Pause and resume
jaw goal pause
jaw goal resume
# Cancel with reason
jaw goal cancel "Deprioritized in favor of auth refactor"
~해줘 Tip: "키보드 단축키 구현 목표 설정해줘" -- the agent calls the goal API to set and track the objective. Use "목표 완료해줘" to mark it done.
Automation & Tools
Persistent memory store CLI. Search, read, save, and list memory files. Memory is stored as markdown files in ~/.cli-jaw/memory/ and indexed for semantic search.
jaw memory <subcommand> [args...]
| Subcommand | Description |
search <query> | Semantic search across all memory files |
read <file> [--lines N] | Read a specific memory file |
save <file> <content> | Write content to a memory file |
list | List all memory files with sizes and dates |
Examples
# Search memory
jaw memory search "JWT authentication patterns"
# Read a specific file
jaw memory read structured/profile.md
# Save a new memory entry
jaw memory save structured/profile.md "- User prefers concise Korean summaries"
# Save an episode log
jaw memory save structured/episodes/live/2026-05-29.md "## 14:30\n- Completed CLI docs page"
# List all files
jaw memory list
~해줘 Tip: "JWT 관련 메모리 찾아줘" -- the agent searches memory via the API. "프로필에 한국어 선호 추가해줘" saves to structured/profile.md.
Chrome browser control via CDP (Chrome DevTools Protocol). Open pages, take screenshots, click elements, type text, manage tabs, and perform web AI-powered browsing. Requires the server to be running.
jaw browser <subcommand> [args...]
| Subcommand | Description |
status | Show browser connection status and active tabs |
tabs | List open browser tabs |
open <url> | Open a URL in the browser |
screenshot [--clip] | Take a screenshot of the current page |
snapshot | Get accessibility tree snapshot (ref-based) |
click <ref> | Click an element by ref ID |
type <ref> <text> | Type text into an element |
fetch <url> | Adaptive fetch (browser or HTTP, auto-selected) |
web-ai <subcommand> | Web AI commands (intelligent page parsing) |
close | Close browser session |
reset | Reset browser state and cache |
Examples
# Check browser status
jaw browser status
# Open a page and take a screenshot
jaw browser open https://example.com
jaw browser screenshot
# Get page snapshot for element refs
jaw browser snapshot
# Click and type using refs
jaw browser click ref:42
jaw browser type ref:15 "search query"
# Adaptive fetch
jaw browser fetch https://example.com/api/data
~해줘 Tip: "브라우저로 구글 열어줘" or "스크린샷 찍어줘" -- the agent uses the browser skill to control Chrome via CDP.
Skill management: list installed skills, install from reference/Codex/GitHub, remove skills, and view skill details. Skills are injected into the agent's system prompt.
jaw skill [subcommand] [name...]
| Subcommand | Description |
(none) / list | List all installed (active) skills |
install <name> [name...] | Install skill from reference dir, Codex, or GitHub |
remove <name> | Remove (deactivate) a skill |
info <name> | Show SKILL.md content and metadata |
reset | Reset all skills to the 25 defaults |
Examples
# List installed skills
jaw skill
# Install a skill
jaw skill install cloudflare
jaw skill install docker kubernetes terraform
# Remove a skill
jaw skill remove cloudflare
# View skill details
jaw skill info dev-frontend
# Reset to defaults
jaw skill reset
~해줘 Tip: "cloudflare 스킬 설치해줘" or "스킬 목록 보여줘" -- the agent manages skills via /skill in-chat or the CLI command.
MCP (Model Context Protocol) server management. Install npm/PyPI MCP packages, sync configuration to all 6 CLI backends, list registered servers, or reset to defaults.
jaw mcp [subcommand] [package]
| Subcommand | Description |
(none) / list | List registered MCP servers |
install <pkg> | Install npm/PyPI package, add to mcp.json, sync |
sync | Sync mcp.json to all 6 CLI backend configs |
reset [--force] | Reset mcp.json to defaults and re-sync |
Package ecosystem is auto-detected: @scope/name is npm; mcp-server-* is PyPI. Use --pypi or --npm to override.
Examples
# List all MCP servers
jaw mcp
# Install an npm MCP package
jaw mcp install @anthropic/mcp-server-fetch
# Install a PyPI MCP package
jaw mcp install mcp-server-git
# Sync configuration to all CLIs
jaw mcp sync
# Reset to default MCP servers
jaw mcp reset --force
~해줘 Tip: "MCP 서버 목록 보여줘" or "fetch MCP 서버 설치해줘" -- the agent manages MCP servers via /mcp in-chat.
Dashboard connector CLI -- a unified entry point for the kanban board, notes, reminders, and audit log. Provides direct CLI access to dashboard features without the web UI.
jaw connector <surface> <subcommand> [options]
| Surface | Subcommands | Description |
board | add, update, list | Kanban board tasks (backlog/ready/active/review/done) |
notes | write, list | Dashboard markdown notes |
reminders | add, list, done | Priority-based reminders |
audit | (none) | Connector audit log |
| Option | Description |
--json | JSON output |
--title <text> | Task/reminder title |
--summary <text> | Task summary |
--lane <name> | Kanban lane (backlog, ready, active, review, done) |
--path <path> | Note file path |
--body <text> | Note content |
--priority <p> | Reminder priority (low, normal, high) |
--due <date> | Due date for reminders |
Examples
# Add a kanban task
jaw connector board add --title "Implement auth flow" --lane backlog
# Move task to done
jaw connector board update task-id-123 --lane done
# List board tasks
jaw connector board list --json
# Write a note
jaw connector notes write --path "meeting/standup.md" --body "# Standup Notes\n- Auth PR merged"
# List notes
jaw connector notes list
# Add a reminder
jaw connector reminders add --title "Review PR #42" --priority high --due 2026-06-01
~해줘 Tip: "보드에 인증 구현 태스크 추가해줘" or "노트에 회의록 저장해줘" -- the agent uses the connector API to manage dashboard surfaces.
Priority-based reminders with Eisenhower-style categorization. Shortcut for jaw connector reminders.
jaw reminders <subcommand> [options]
| Subcommand | Description |
list / ls | List all reminders (default) |
add <title> | Add a new reminder |
done <id> | Mark a reminder as done |
| Option | Description |
--title <text> | Reminder title (alternative to positional arg) |
--notes <text> | Additional notes |
--priority <p> | Priority: low, normal, high (default: normal) |
--due <date> | Due date |
--remind <date> | Reminder notification time |
--json | JSON output |
Examples
# List reminders
jaw reminders list
# Add a reminder
jaw reminders add "Review PR #42" --priority high --due 2026-06-01
# Add with notes
jaw reminders add --title "Deploy staging" --notes "After QA sign-off" --priority normal
# Mark done
jaw reminders done reminder-id-abc
# JSON output
jaw reminders list --json
~해줘 Tip: "내일까지 PR 리뷰하라고 리마인더 추가해줘" -- the agent creates a reminder with the appropriate due date and priority.
Manage project workspace directories. Set which directories the agent should consider as active project roots. Changes are applied via the server API and persist across sessions.
jaw project <subcommand> [paths...]
| Subcommand | Description |
set <path>[, <path>...] | Set active project directories (comma-separated) |
reset | Clear all project directories |
clear | Alias for reset |
list | Show current project directories (default) |
Examples
# Set project directories
jaw project set ~/Dev/frontend, ~/Dev/backend
# Set a single absolute path
jaw project set /Users/jun/projects/my-app
# List current directories
jaw project list
# Clear all
jaw project reset
~해줘 Tip: "프로젝트 디렉토리 설정해줘" or "프로젝트 목록 보여줘" -- the agent uses /project in-chat to manage workspace directories.
Service Management
Cross-platform auto-start management. Detects the OS and installs the server as a background daemon (launchd on macOS, systemd on Linux, Docker entrypoint in containers). One-step install + start.
jaw service [subcommand] [--port <N>] [--backend <type>]
| Subcommand | Description |
| (none) | Auto-detect OS, install + start (one-step) |
install | Install as system service |
status | Check service status |
unset | Remove the service |
logs | View service logs |
| Option | Default | Description |
--port <N> | 3457 | Server port to register |
--backend <type> | (auto) | Force backend: launchd, systemd, or docker |
Examples
# One-step install + start (auto-detects OS)
jaw service
# Custom port
jaw service --port 3458
# Check service status
jaw service status
# View logs
jaw service logs
# Remove service
jaw service unset
# Force a specific backend
jaw service --backend systemd --port 3457
~해줘 Tip: "서비스로 등록해줘" or "백그라운드에서 실행되게 해줘" -- the agent runs jaw service to install a persistent daemon.
Create an independent agent instance by cloning the current configuration. Copies config and skills, creates a fresh database, and regenerates AGENTS.md. Useful for running multiple isolated agents.
jaw clone <target-dir> [--from <source>] [--with-memory] [--link-ref]
| Option | Description |
<target-dir> | Destination directory for the new instance (required) |
--from <source> | Source directory to clone from (default: ~/.cli-jaw) |
--with-memory | Copy memory files from source |
--link-ref | Symlink reference skills instead of copying |
Examples
# Clone to a new directory
jaw clone ~/.cli-jaw-work
# Clone with memory
jaw clone ~/.cli-jaw-research --with-memory
# Clone from a specific source
jaw clone ~/.cli-jaw-staging --from ~/.cli-jaw-prod
# Symlink reference skills to save space
jaw clone ~/.cli-jaw-dev --link-ref
After cloning: Start the new instance with jaw --home ~/.cli-jaw-work serve --port 3458 or register it via jaw dashboard perm 3458 --home ~/.cli-jaw-work.
~해줘 Tip: "인스턴스 하나 복제해줘" -- the agent runs jaw clone to create an independent copy, then optionally starts it on a new port.
macOS-specific LaunchAgent management (deprecated -- use jaw service instead). Manages plist files for auto-start on login. Retained for backward compatibility.
jaw launchd [subcommand] [--port <N>]
| Subcommand | Description |
| (none) | Check plist, create if missing, start (one-step) |
status | Show current LaunchAgent status |
unset | Remove plist and unload agent |
cleanup | Remove legacy plist files |
| Option | Default | Description |
--port <N> | 3457 | Server port to register |
Deprecated: jaw launchd is superseded by jaw service, which auto-detects launchd on macOS and also supports systemd (Linux) and Docker. Use jaw service for new installations.
Examples
# One-step install + start
jaw launchd
# Custom port
jaw launchd --port 3458
# Check status
jaw launchd status
# Remove
jaw launchd unset
# Cleanup legacy plists
jaw launchd cleanup
~해줘 Tip: "launchd 상태 확인해줘" -- use jaw service status instead for the cross-platform version.
Quick Reference
| Command | Category | Server Required | Description |
jaw serve | Server | - | Start server (foreground) |
jaw dashboard | Server | - | Multi-instance manager |
jaw status | Server | No | Health check |
jaw init | Setup | No | Interactive setup wizard |
jaw doctor | Setup | No | Installation diagnostics |
jaw reset | Setup | Yes | Factory reset |
jaw chat | Orchestration | Yes | Terminal REPL |
jaw dispatch | Orchestration | Yes | Send task to employee |
jaw employee | Orchestration | Yes | Employee management |
jaw orchestrate | Orchestration | Yes | PABCD state machine |
jaw goal | Orchestration | Yes | Persistent goal lifecycle |
jaw memory | Automation | Yes | Persistent memory store |
jaw browser | Automation | Yes | Chrome browser control |
jaw skill | Automation | No | Skill management |
jaw mcp | Automation | No | MCP server management |
jaw connector | Automation | Partial | Dashboard connector (board/notes/reminders) |
jaw reminders | Automation | No | Priority-based reminders |
jaw project | Automation | Yes | Workspace directories |
jaw service | Service | No | Cross-platform auto-start |
jaw clone | Service | No | Clone instance |
jaw launchd | Service | No | macOS LaunchAgent (deprecated) |
Environment Variables
| Variable | Default | Description |
CLI_JAW_HOME | ~/.cli-jaw | Override data directory (same as --home) |
PORT | 3457 | Default server port |
DASHBOARD_PORT | 24576 | Dashboard server port |
JAW_BOSS_TOKEN | - | Auth token for employee dispatch (inherited from server) |
JAW_EMPLOYEE_MODE | - | Set to 1 in employee sessions (prevents nested dispatch) |