approval_list
List recent MCP-managed approval decisions recorded by the gateway (approvalStrategy: mcp_managed).
Drive Claude Code, Codex, Gemini/Antigravity, Grok, Devin, Cursor Agent and Mistral from one client — as durable jobs, with cross-model validation receipts.
LABSCO SUMMARY
Two problems get solved together. The first is durability: a long provider run becomes a job you can poll, cancel and collect after a restart, instead of something a dropped connection destroys. The second is corroboration — the same question put to several CLIs independently, judged, and ending in a hashed receipt of what was asked and what came back. The design deliberately leaves credentials and sessions where they already live, inside each provider's own CLI, and scopes anything remote to a workspace you registered on purpose.
A single-user control plane for local coding-agent CLIs. It runs each provider's own CLI, keeping its native sessions and local credentials in place, exposes them as synchronous or durable asynchronous jobs that survive a disconnect, and adds cross-model validation with hashed receipts.
Published as llm-cli-gateway, installed globally or launched over stdio with npx. It drives the provider CLIs rather than their APIs, so each provider you intend to use must be installed and logged in locally — cli_versions reports which are present and authenticated. Credentials stay inside those CLIs; the gateway does not hold them. HTTP transport with bearer-token auth is available for a remote client, where every request must resolve to a registered workspace alias before a provider runs, and unrestricted local filesystem access belongs to the stdio path only.
One command — npm install -g llm-cli-gateway
USE CASES
Start the provider request as a durable job, poll its status, and collect the output later — a restart in between does not lose it.
Two or more CLIs answer the same question without seeing each other, a judge model synthesises the results, and the receipt records what happened.
A red-team pass looks for failure modes, and a consensus check says whether the providers actually agree with the claim underneath it.
The Git artifact is captured immutably and fenced as untrusted input, then a provider reviews it and a second opinion checks that review.
Register the repository as a workspace alias; remote HTTP calls have to name one before any provider executes.
Installed versions and login status, the models each provider exposes, and the capabilities discovered for each one.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
approval_listList recent MCP-managed approval decisions recorded by the gateway (approvalStrategy: mcp_managed).
ask_modelAsk one provider CLI a question through the simplified validation surface (starts a validation job).
claude_requestRun a Claude Code CLI request synchronously (when async jobs are enabled, auto-defers to a pollable job past the sync deadline; otherwise runs to completion). Requires exactly one of prompt or promptParts.
claude_request_asyncStart a Claude Code CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
cli_upgradePlan (dryRun, default true) or execute an upgrade for one provider CLI using its native update mechanism.
cli_versionsReport installed provider CLI versions, availability, and login status for all registered CLI providers (claude|codex|gemini|grok|mistral|devin|cursor) or one.
codex_fork_sessionFork an existing Codex session into a new branch (codex fork <ID|--last>) without mutating the original. This prompt remains argv-bound and rejects oversized UTF-8 input as non-retryable input_too_large.
codex_requestRun an OpenAI Codex CLI request synchronously (when async jobs are enabled, auto-defers to a pollable job past the sync deadline; otherwise runs to completion). Requires exactly one of prompt or promptParts.
codex_request_asyncStart an OpenAI Codex CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
compare_answersSummarize agreement/differences between caller-provided answers LOCALLY — does not call any provider.
config_ack_staleAcknowledge the current stale Personal Agent Config release for at most 24 hours.
config_initInitialize or clone the local Personal Agent Config baseline. This never activates a release by itself.
config_publishPush the clean local Personal Agent Config baseline to its configured Git upstream without force-pushing.
config_recover_kit_attemptFence and release one exact unadmitted durable Kit attempt after the previous gateway process has been stopped. Copy the execution and attempt identity from local session_get output. This action is local-only and cannot recover an existing durable job.
config_rollbackAtomically activate an already verified retained Personal Agent Config release.
config_statusShow Personal Agent Config state without exposing baseline paths or local machine binding values.
config_syncSynchronize, verify, compile, and atomically activate a Personal Agent Config release. It never pushes.
consensus_checkAsk provider CLIs whether they agree or disagree with a claim (starts validation jobs).
cursor_requestRun a Cursor Agent request synchronously (auto-defers to a pollable job past the sync deadline when async jobs are enabled; otherwise runs to completion). Default cli uses headless print mode (cursor-agent --print); gated acp uses native cursor-agent acp and accepts prompt, model, a gateway ACP session, and a registered workspace alias.
cursor_request_asyncStart a Cursor Agent CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
devin_requestRun a Cognition Devin CLI request synchronously (auto-defers to a pollable job past the sync deadline when async jobs are enabled; otherwise runs to completion). Headless print mode (devin -p).
devin_request_asyncStart a Cognition Devin CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
explain_effective_configExplain the selected Personal Agent Config release and context provenance without returning local paths or instruction text.
gemini_requestRun a Google Antigravity CLI (agy) request through the Gemini-compatible gateway tool synchronously (when async jobs are enabled, auto-defers to a pollable job past the sync deadline; otherwise runs to completion). Requires exactly one of prompt or promptParts.
gemini_request_asyncStart a Google Antigravity CLI (agy) request as a durable background job through the Gemini-compatible gateway tool. Poll with llm_job_status, collect with llm_job_result.
grok_requestRun an xAI Grok CLI request synchronously (when async jobs are enabled, auto-defers to a pollable job past the sync deadline; otherwise runs to completion). Requires exactly one of prompt or promptParts.
grok_request_asyncStart an xAI Grok CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
job_resultCollect a VALIDATION job's normalized provider output — distinct from llm_job_result, which returns raw provider request job output.
job_statusCheck a VALIDATION job's status (jobs started by validate_with_models/ask_model/etc.) — distinct from llm_job_status, which tracks provider request jobs.
list_available_modelsList models and capabilities for every available provider CLI (takes no arguments; complements per-provider list_models).
list_modelsList models, aliases, and defaults for one provider (claude|codex|gemini|grok|mistral|devin|cursor, or an enabled API provider name), or omit cli to list all providers. API providers are returned under an apiProviders array.
llm_job_cancelCancel a running gateway async or deferred-sync job by jobId.
llm_job_resultRetrieve captured stdout/stderr for a gateway async or deferred-sync job by jobId. Use rawOutput:true with independent stream offsets for resumable pages.
llm_job_statusCheck lifecycle status and bounded privacy-safe normalized progress for a gateway async or deferred-sync job by jobId.
llm_job_watchWait briefly for privacy-safe normalized progress on an owned async job. When the MCP request carries a progress token, notifications are emitted only while this watch request remains active.
llm_process_healthReport gateway process health: async-job manager state plus the resolved persistence configuration and paths.
llm_request_resultRead back any persisted request (sync or async) from the flight recorder by correlationId, including prompt and response.
mistral_requestRun a Mistral Vibe CLI request synchronously (when async jobs are enabled, auto-defers to a pollable job past the sync deadline; otherwise runs to completion). Requires exactly one of prompt or promptParts. Defaults to --agent accept-edits (auto-accepts file edits; dangerous ops such as shell stay gated).
mistral_request_asyncStart a Mistral Vibe CLI request as a durable background job. Poll with llm_job_status, collect with llm_job_result.
provider_admin_listList provider CLI admin operations (auth status, model list, mcp list, plugin list, doctor, etc.) available on the installed CLIs, projected from runtime discovery. Read-only.
provider_admin_mutateExecute a MUTATING provider CLI admin operation (mcp add/remove, login/logout, plugin install/remove, session delete/archive, ...). Disabled unless [admin] allow_mutating_cli_admin_ops=true; routed through approval and audited.
provider_admin_runExecute a READ-ONLY provider CLI admin operation (from provider_admin_list) and return redacted output. Rejects mutating operations.
provider_subcommand_contractReturn the detailed read-only contract for exactly one declared provider CLI subcommand.
provider_subcommand_driftProbe declared provider subcommand --help surfaces and return compact drift rows without raw help output.
provider_subcommands_listReturn a compact, filterable read-only catalog of declared provider CLI subcommands without flags or raw help.
provider_tool_capabilitiesReport provider tool/feature capabilities and discovered local skill/tool integrations for claude|codex|gemini|grok|mistral|devin|cursor|grok_api, or an enabled API provider name.
red_team_reviewChallenge a plan, answer, or document for risks and failure modes via provider CLIs (starts validation jobs).
review_changesCapture one complete, immutable Git evidence artifact, fence it as untrusted data, and start independent read-only provider reviews. Includes committed, staged, unstaged, and untracked changes without truncation.
second_opinionAsk one provider CLI to review an answer (starts a validation job; poll job_status, collect job_result).
session_clear_allDelete all gateway session records, optionally scoped to one provider.
session_createCreate a gateway session record for a provider. NOTE: this is gateway bookkeeping (a plain UUID), not a provider-native session; Codex resume needs a real Codex UUID.
session_deleteDelete a gateway session record by ID (also removes any gateway-owned worktree attached to it).
session_getGet one gateway session record by session ID, including recent request history when available.
session_listList gateway session records and the active session per provider, optionally filtered by provider.
session_set_activeSet or clear the active session for a provider; the active session is used when a request omits sessionId.
synthesize_validationRun an explicit judge model over validation results. General validation uses caller-supplied terminal results; review_changes rebuilds its question and results from the owned durable run.
upstream_contractsReturn the gateway's declared provider CLI contracts; with probeInstalled true, diff against installed --help surfaces to detect flag drift.
validate_with_modelsAsk two or more provider CLIs to independently validate a question. Starts validation jobs — poll with job_status, collect with job_result (not llm_job_*).
validation_receiptRetrieve the canonically hashed immutable receipt of a terminal cross-LLM validation run by validationId. Returns minted | pending | expired_unminted (no receipt exists and none can be minted) | verification_failed (a stored receipt does not verify against its run) | not_found (own-or-not-found).
workspace_createCreate a remote HTTP/OAuth workspace alias by creating a new local folder or git repo under a configured allowed root. Not for stdio/local provider path access. Requires LLM_GATEWAY_WORKSPACE_ADMIN=1 and OAuth scope workspace:admin.
workspace_getInspect a registered remote HTTP/OAuth workspace alias. Does not list files. Not needed for stdio/local provider calls; do not use workspace_* tools to fix local path access.
workspace_listList registered workspace aliases for remote HTTP/OAuth provider calls. Does not browse files. Stdio/local callers should not use workspace_* tools to fix provider path access; pass local workingDir/addDir/includeDirs directly.
workspace_register_existing_repoRegister an existing local Git repo as a remote HTTP/OAuth workspace alias. Not for stdio/local provider path access. Requires LLM_GATEWAY_WORKSPACE_ADMIN=1 and OAuth scope workspace:admin.
BEFORE YOU INSTALL
63 tools when we connected.
CONTEXT COST
Rated by the size of the 63 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install -g llm-cli-gateway{
"mcpServers": {
"llm-gateway": {
"command": "npx",
"args": [
"-y",
"llm-cli-gateway"
]
}
}
}git clone https://github.com/verivus-oss/llm-cli-gateway.git
cd llm-cli-gateway
npm install
npm run buildThen add the built entry point to your client:
{
"mcpServers": {
"llm-cli-gateway": {
"command": "node",
"args": [
"<YOUR_PATH_TO_LLM_CLI_GATEWAY>/dist/index.js"
]
}
}
}