Send terminal commands with variables from two dedicated panels in VS Code.
- Commands panel (shown above Variables) with nested folders using the
grouppath - Variables panel with inline editing for
text,select,checkbox,date, anddatetime - Search in both the Variables and Commands views
- Grouping is driven directly by each item's
groupfield — no separate folder setting is needed - Run commands by clicking a command item
- Inline actions to run, edit, remove, and organize items
- Variable substitution inside commands such as
ping ${host} - Friendly error when a variable is missing
- Per-command
icon/iconColor, plus a global default icon color - Optional Enter key sending controlled per command
- Refresh buttons for Commands and Variables
- All data is stored in VS Code settings JSON, at either user or workspace scope
Shows commands panel, grouping, and nested groups (use /).
Run a command by clicking it and see it sent to the terminal.
Create and edit variables used in ${var} substitution.
Shows the friendly error when a variable is missing.
Refresh Commands and Variables views.
- Open the Command TT activity bar icon.
- Add variables in the Variables panel (managed via command palette or UI).
- Add commands in the Commands panel.
- Click a command to run it in the terminal.
- Click a command item to run it.
- Use
/in group names to create nested subgroups (example:Ops/Deploy/Staging). - Commands can reference variables using
${variableName}syntax. - Inline actions: hover over a command to see edit and delete buttons.
- The command editor includes icon and color selectors with common choices. Select Custom to use any VS Code codicon or theme color id.
Variables are reusable values that you define once and use in multiple commands.
- Edit variable names and values directly in the Variables panel.
- The
${and}tokens are fixed in the UI, so you only type the variable name. - Use the folder buttons in the Variables panel or the
groupfield to organize nested folders. - There is no separate
commandTT.variableFolderssetting; folders come from each variable'sgrouppath. - Use the pencil icon for advanced editing when you need to change the type, options, or group.
{
"name": "host",
"value": "192.168.1.1",
"type": "text"
}Use in commands: ping ${host} or ssh user@${host}
text: free text inputselect: dropdown built fromoptionscheckbox: two options used as off/on valuesdate: native date pickerdatetime: native date-time picker
Example select variable:
{
"name": "action",
"value": "start",
"type": "select",
"options": ["start", "stop", "restart"],
"group": "Ops/Deploy"
}Commands always use the current values already set in the Variables panel.
{
"title": "Deploy Service",
"command": "docker ${action} ${service}",
"group": "Ops/Deploy"
}If action is start and service is web, the command runs as:
docker start webcommandTT.variables: Array of variable definitions.commandTT.commands: Array of command definitions.
You can add or edit many commands and variables directly in settings.json at either user or workspace scope. The extension automatically adds a unique id to entries that do not have one and replaces duplicated IDs after a settings change. When copying an entry, remove its id or omit it; Command TT will generate a new one.
Commands may share the same title. Variable name values must remain unique because ${name} is the reference used by commands. Groups with the same path are shown as one folder.
commandTT.sortOrder: Display order for variables and commands ("settings"or"alphabetical"). Default:"settings".commandTT.commandIconColor: Theme color id for command icons (default:terminal.ansiCyan).
{
"name": "variableName",
"value": "defaultValue",
"type": "text",
"options": ["optional", "list", "of", "values"],
"group": "Optional/Group/Path"
}Fields:
id(managed automatically): Stable internal identifier used to edit, remove, and move the correct variable. Omit it when adding entries manually.name(required): Variable identifier used as${name}in commands.value(required): Current/default value stored for the variable.type(optional): One oftext,select,checkbox,date, ordatetime.options(optional): Used byselectandcheckboxvariables.group(optional): Folder path using/for hierarchy.
Folders and subfolders are derived from
group. There is no separate folders array in settings.
{
"title": "Command Display Name",
"command": "actual command text with ${variables}",
"group": "Optional/Group/Path",
"description": "Optional description",
"icon": "codicon-name",
"iconColor": "theme.color",
"sendNewLine": true
}Fields:
id(managed automatically): Stable internal identifier used to edit, remove, and move the correct command. Omit it when adding entries manually.title(required): Display name in the Commands panel.command(required): Actual command text; supports${variableName}substitution.group(optional): Grouping path using/for hierarchy (e.g.,Ops/Network/Monitoring).description(optional): Shown in the command tooltip.icon(optional): VS Code codicon name (e.g.,terminal,rocket,cloud).iconColor(optional): Override global icon color with a theme color id.sendNewLine(optional): Send Enter key after the command (default:true).
Add to your VS Code user settings.json:
Keep your data in
commandTT.variablesandcommandTT.commands. Usegroupinside each item to create folders and subfolders.
"commandTT.variables": [
{
"name": "env",
"value": "dev",
"type": "select",
"options": ["dev", "staging", "prod"],
"group": "Docker"
},
{
"name": "service",
"value": "web",
"type": "select",
"options": ["web", "api", "db"],
"group": "Docker"
},
{
"name": "dryRun",
"value": "false",
"type": "checkbox",
"options": ["false", "true"],
"group": "Docker"
},
{
"name": "host",
"value": "localhost",
"type": "text",
"group": "Network"
}
],
"commandTT.commands": [
{
"title": "Docker Compose",
"command": "docker compose -f docker-compose.${env}.yml up ${service}",
"group": "Docker",
"icon": "terminal",
"iconColor": "terminal.ansiBlue"
},
{
"title": "SSH Connect",
"command": "ssh ${host}",
"group": "Network",
"icon": "cloud"
}
]