Commands
Each command accepts
--json. Enable and disable need Gateway access.
Extensions
What a disabled extension does
tasks:status is a core view. It stays available while tasks is disabled. Disabling an extension keeps its data, such as tasks or the proxycli collector.
A nested empty object in a tool argument stays an object through a direct tools/call and through execute_tools. MCP describes that shape.
Extension state in the CLI
The CLI asks the Gateway for the switches at most once per process: when it lists commands or shows help, when it runsextension:list, and when it runs an extension command. The request has a 2-second deadline, which includes its one retry after a connection failure. The CLI stores no copy.
When the CLI cannot read the switches, the state is unknown, not disabled. This happens when no Gateway profile is active, the Gateway CA is not trusted, or the Gateway does not answer in time.
extension:listshowsUNKNOWNand the cause, such asgateway.profile_missing,gateway.ca_untrusted, orgateway.unreachable.listandhelphide the extension commands.- An extension command fails with
extension.state_unknownand sends no request.
gateway:* commands need no extension state, so you can add, select, trust, or remove a profile and try again.
orbit extension:list
List every extension with its Gateway state.extensions array. Each entry has extension and enabled, which is null when the state is unknown. An unknown entry also has state, with the error code, message, and request_id.
orbit extension:enable
Enable one extension for every client.
JSON returns
name and enabled. Enabling an enabled extension succeeds and changes nothing. Enabling only flips the switch. An extension that needs fleet resources has its own setup command, such as proxycli:setup.
orbit extension:disable
Disable one extension for every client.
JSON returns
name and enabled. Disabling a disabled extension succeeds and changes nothing. Disabling proxycli does not stop its collector. Run proxycli:teardown for that.
Errors
Why it works this way
Each extension has one switch, and the Gateway owns it. A switch on each operator’s machine could not hide Gateway routes, MCP tools, or web pages, so two operators could see different products. A cached copy in the CLI would become a second source of truth, so the CLI asks the Gateway in each process. The switch only shows or hides. Setting up proxycli needs a Node, a cache connection, an upstream URL, and a key, so that stays in the extension’s own setup command. Every extension then keeps the same small switch contract, and one extension has one switch name. API routes stay registered while an extension is off and refuse withextension.disabled. Removing routes at runtime would make the OpenAPI document, the SDK, and the generated MCP tools change with runtime state. MCP filters tools before listing, search, and execution, so no path can find or run a disabled tool.
An unknown state is not a disabled state. Treating an unreachable Gateway as “disabled” would hide commands for a reason that has nothing to do with the switch, and the operator would look in the wrong place.
Related
tasksdescribes task operations.proxyclidescribes collector setup, teardown, and quota commands.- Using the CLI describes Gateway selection.