Global flags
Gateway lifecycle
start
Start the gateway and all enabled channel adapters.
stop
Stop a gateway previously started with --background.
open
Open the web UI in the default browser (starts the gateway first if not already running).
tray
Start the gateway in the background and open the web UI β the typical one-command way to launch NeuralCleave.
chat
Interactive chat session directly in the terminal, no channel adapter required.
status
Show agent config, enabled channels, and memory stats at a glance.
Config
config show
Print the resolved config (merged defaults + config.toml + env overrides).
config init
Write a starter config.toml to ~/.neuralcleave/.
config edit
Open config.toml in $EDITOR.
Backup & restore
State (config, memory database, privacy audit log, skills) lives entirely under~/.neuralcleave/ β these commands tar/verify/restore that one directory.
--force is passed, and archive extraction rejects path traversal / unsafe members.
Usage & cost tracking
usage
Show accumulated LLM token usage and estimated cost per model. Proxies through a running gatewayβs GET /api/v1/usage (the same pattern approvals/hub install use) so it reflects the gatewayβs actual counters, not this CLI invocationβs own β falling back to this processβs own, necessarily-empty local registry only if no gateway is reachable.
/api/v1/metrics into a real time-series store for long-term history.
Providers
models list
List every supported provider and whether credentials are configured (no network calls).
models status
Same as list, plus (with --live) an actual HTTP reachability probe β only for providers with a documented, stable check (OpenAI-compatible GET /v1/models for OpenAI/Mistral/xAI/Moonshot/OpenRouter/Groq/Together/Fireworks/DeepSeek, Ollamaβs GET /api/tags). Every other provider reports βnot supportedβ rather than a guess.
--live makes real network calls β itβs not run automatically.
Exec approvals
Set[security] require_shell_approval = true in config.toml (or toggle it live via POST /api/v1/approvals/policy) to gate the shell/browser tools behind a persistent allowlist + security policy β see Configuration.
pending/approve/deny first try the REST API of a gateway running at the configured [gateway] bind/port β the same live queue the channel-forwarded chat reply and web UI use. If no gateway is reachable there (nothing running, or a different bind/port), they fall back to this CLI processβs own in-memory queue instead, printing a note when that happens β that fallback can never see a separately running gatewayβs pending requests, since ApprovalQueue has no persistence or IPC of its own. allowlist add/list/remove donβt need any of this β the allowlist is SQLite-backed and genuinely shared across processes either way.
Security/ask modes (deny|allowlist|full and off|on-miss|always) and require_shell_approval are all set via GET/POST /api/v1/approvals/policy β see API Reference β Approvals. Pending approvals are also forwarded as a plain-text message in the channel that triggered them β reply approve <id-prefix> or deny <id-prefix> directly in chat.
Skills
Skills are Python modules the agent can write for itself at~/.neuralcleave/skills/<name>/skill.py.
Agent-authored skills go through review
When the agent itself writes a skill (via thewrite_skill tool), it no longer loads immediately β itβs queued as a pending proposal for a human to decide:
neuralcleave skills write (above) is the separate, trusted, immediate-load path β used for e.g. code you wrote yourself or installed from the skills gallery, not for reviewing agent output.
Hub
neuralcleave hub installs skill packages from a URL, scans them with PackageScanner, and registers them the same way skills write does.
install/remove try a running gatewayβs REST API first β thatβs the only way an install becomes callable by a live agent, since this CLI process has no connection to a separately running gatewayβs tool registry. If no gateway is reachable at the configured [gateway] bind/port, they fall back to writing/loading into this processβs own local hub state instead (a note is printed either way telling you which happened).
--force only overrides the Hubβs own scanner β it does not bypass the underlying skill writerβs independent blocked-import check (subprocess, ctypes, etc.), which has no override anywhere in NeuralCleave.
There is no remote/curated package catalog today β
hub search only searches packages youβve already installed. Hub currently means βfetch a URL, scan it, install it,β not a marketplace with discovery.Plugins
Plugins arepip-installed packages that declare a NeuralCleave.plugins entry point.
Channels
Memory
Voice
Migration
config.toml.
Cloud deployment
Autostart
Tools
Orchestrator
list/add/remove/route/status try a running gatewayβs REST API first (reusing its live, shared orchestrator instance) and fall back to a local, throwaway one only if no gateway is reachable β a note is printed either way.
Against a running gateway, route generates a real response via the selected nodeβs model_override (ModelRouter.generate() directly β no memory retrieval, reflection, or tool calls, so itβs a lighter-weight one-shot generation rather than a full conversational turn). Against the local fallback orchestrator (no gateway reachable), routing only selects a node and prints a placeholder, since a bare CLI invocation has no provider credentials to build a real router from.
