# Commands

Every action in Tensormorph - including ones with no default keyboard shortcut - is backed by a command with a stable identifier. Commands are what a [keybinding](/docs/reference/keyboard-shortcuts) invokes, what a plugin registers new entries for, and what the command palette (`Ctrl+P`, `>` prefix) searches over.

This page documents the *shape* of a command entry and a representative set drawn from elsewhere in this documentation; it is not a complete, generated command list.

## Anatomy of a command

Every command has:

-   **Identifier** - a stable, dotted string (`workbench.openPalette`, `diff.toggle`) used in keybindings and plugin registrations. Identifiers never change once shipped, even if the user-facing title does.
-   **Title** - the human-readable label shown in the palette and the Keyboard Shortcuts editor.
-   **Default keybinding** *(optional)* - see [Keyboard Shortcuts](/docs/reference/keyboard-shortcuts) for the confirmed defaults; most commands have none and are invoked from the palette.
-   **`when` availability** *(optional)* - the same context-expression mechanism used for keybinding scoping; a command can be registered but inapplicable (and hidden from the palette) in the current context.

## Representative commands

| Identifier                                          | Title                        | Scope                              |
| --------------------------------------------------- | ---------------------------- | ---------------------------------- |
| `workbench.openPalette`                             | Show command palette         | Global                             |
| `view.frameSelection`                               | Frame selection              | Any 3D/2D view                     |
| `view.frameModel`                                   | Frame whole model            | Any 3D/2D view                     |
| `view.isolateSelection`                             | Isolate selection            | Any 3D/2D view                     |
| `view.hideSelection`                                | Hide selection               | Any 3D/2D view                     |
| `view.switch3d` / `view.switch2d` / `view.switch1d` | Switch view                  | Global                             |
| `diff.toggle`                                       | Toggle diff overlay          | View with a loaded comparison pair |
| `problems.nextAnomaly`                              | Jump to next flagged anomaly | Global                             |
| `tql.runQuery`                                      | Run TQL query from Console   | Console                            |

## Commands from plugins

A plugin can contribute new commands the same way its built-in ones are defined - see [Extension API](/docs/developer-platform/extension-api) - and a plugin-contributed command is indistinguishable from a built-in one in the palette or the Keyboard Shortcuts editor; both are just entries in the same command registry.

## Related resources

-   [Keyboard Shortcuts](/docs/reference/keyboard-shortcuts) - binding a key to any command identifier.
-   [Extension API](/docs/developer-platform/extension-api) - registering new commands from a plugin.
