VS Command Center
An Activity Bar panel for the commands you run all the time — Salesforce CLI (sf / sfdx), Python automation, shell scripts, and one-off command lines — with output validation so a bad step stops the rest.
Open a folder, then open Command Center in the Activity Bar.
Features
- + to add a command, batch, or suite
- Each item has play, pencil (manage), and trash (delete, with confirmation)
- Batch — ordered commands. Play runs them in sequence
- Suite — ordered batches. Play runs every batch in order; each batch runs its commands. The first failed validation stops the suite
- Drag a batch onto a suite to nest it; drag it back to the root to ungroup
- Drag and drop, or Move Up / Move Down, to reorder
- Manage Command is a dialog with name, batch, type, validation regex, and a code editor
- Built-in types: Python, Command Line, Node.js, PowerShell, Free Command
- Add more languages in settings (
vsCommandCenter.languages)
- Command output appears in the Command Center output channel
Command types
| Type |
What you write |
How it runs |
| Python |
A .py script |
${python} ${file} (uses vsCommandCenter.pythonPath or the Python extension interpreter) |
| Command Line |
A shell script |
bash/sh when available; on Windows, Git Bash or a temporary .cmd |
| Node.js |
A .js script |
node ${file} |
| PowerShell |
A .ps1 script |
powershell -File |
| Free Command |
The full command line |
Run as-is through the platform shell, e.g. python -c "print(1+1)" or sf org list |
To add another language, edit Command Center: Languages in settings. Example Ruby:
{
"id": "ruby",
"label": "Ruby",
"kind": "file",
"fileExtension": ".rb",
"editorLanguage": "ruby",
"argv": ["ruby", "${file}"]
}
kind is file (save and execute a script) or free (editor text is the command line). Argv tokens: ${file}, ${workspaceFolder}, ${python}.
Validation
- Leave the regex empty to accept any output (exit code still applies if “Require exit code 0” is on)
- Use a raw pattern (
Connected) or a literal (/ok/i)
- The pattern is tested against combined stdout and stderr
- Failure marks the command and stops a batch or suite at that command
- A new batch/suite run clears previous pass/fail icons first
Where commands are stored
Scripts live as real files in the workspace, not as strings stuffed into one JSON blob.
On first use the extension creates .vscc (or another name if that folder already exists and is not ours):
.vscc/
order.json # top-level mix of suites, batches, and ungrouped commands
__root__/batch.json # ungrouped commands
<batch-id>/batch.json # command order + validation
<batch-id>/<command-id>.py
<suite-id>/suite.json # batch order
The chosen folder name is stored as vsCommandCenter.dataFolder in .vscode/settings.json. Commit the data folder (except state.json) so the team shares the same command library. Older group.json files are still read and rewritten as batch.json.
Settings
| Setting |
Purpose |
vsCommandCenter.dataFolder |
Workspace-relative data folder (auto-filled) |
vsCommandCenter.pythonPath |
Python executable override |
vsCommandCenter.timeoutMs |
Per-command timeout (default 5 minutes) |
vsCommandCenter.languages |
Runtime list shown in the type dropdown |
Requirements
- Visual Studio Code 1.85 or later
- A local workspace folder (not an untrusted or virtual workspace)
- Interpreters on
PATH for the runtimes you use (python, node, sf, …)
License
MIT. Source: github.com/esancaro/vsCommandCenter.