RepoGates for VS Code: what runs on open
Open a folder and see what would run on open. It reads the folder's
settings; it does not stop the editor.
When a folder opens (and whenever you run RepoGates: Show what runs on
open), the extension reads a short list of the folder's own files and lists
every command they would start without anyone asking: a task, a dev
container's set-up, an AI agent's hook or MCP server, a terminal profile,
direnv. A count appears in a message; the panel lists each command, the file
it comes from, when it would run, and the folder files it starts.
It is a list, not a verdict, and not a control: nothing it shows is stopped,
and a short list does not mean the folder is fine.
Two ways to use it
|
Without an account |
With a RepoGates account |
| What you see |
The list of everything the folder would run on open, from the folder's own files |
The same list, plus RepoGates' verdict on the folder's GitHub or gitlab.com repository |
| Where it runs |
On your machine only |
The list on your machine; the verdict from api.repogates.com |
| What leaves your machine |
Nothing; works offline |
The repository's owner/repo, with your token. Never a file or its contents |
| How to turn it on |
Nothing to do: it is on from install |
Turn on repogates.askService in your user settings and run RepoGates: Set API token |
| Cost |
Free |
Within your account's plan: a free account gets the free trial's 10 repositories in its first 14 days, a paid plan has no repository limit |
Without a token the panel says the service was not asked; the list is the
same either way.
What it reads
Only these files, in each workspace folder, and only up to 1 MB each:
| File |
What is listed |
Grade |
.vscode/tasks.json, *.code-workspace (root) |
tasks with runOptions.runOn: "folderOpen", and the tasks they depend on |
HIGH |
.devcontainer.json, .devcontainer/devcontainer.json, .devcontainer/<name>/devcontainer.json |
initializeCommand (runs on your machine) |
CRIT |
|
onCreateCommand, updateContentCommand, postCreateCommand, postStartCommand, postAttachCommand (inside the container) |
HIGH |
|
a Dockerfile build |
MED |
.claude/settings.json, .claude/settings.local.json, .mcp.json, .cursor/mcp.json, .gemini/settings.json, .vscode/mcp.json |
a hook that runs a file from this folder on SessionStart; an MCP server that runs a script from a hidden folder; any command that fetches something and hands it to an interpreter |
CRIT |
|
a hook that runs a file from this folder on any other event |
HIGH |
|
any other SessionStart hook |
MED |
|
any other hook or MCP server, and a remote server's address |
INFO |
.vscode/settings.json, *.code-workspace settings |
terminal.integrated.profiles.{osx,linux,windows} (a path inside the folder is HIGH, elsewhere MED); python.defaultInterpreterPath, python.pythonPath, git.path (inside the folder HIGH, elsewhere INFO) |
as stated |
.envrc |
that it exists, and its first lines |
MED |
The grades follow the RepoGates service's own checks on the same files (C10
for dev containers, C13 for .vscode, C20 for agent configurations), with a
simpler reading of a command line than the service's. They are the panel's
grades, not a RepoGates verdict.
The list of settings keys is deliberately short. Other settings can make an
extension run a program (a linter's path, a formatter's binary); they are not
read.
A file that is present and not read is listed as not read, with the
reason, never as "nothing found": a file over 1 MB, a file reached through a
symbolic link (links are never followed, in the file or in a folder on the
way to it), a file that is not valid JSON with comments.
What it never does
- It never runs, imports or evaluates anything from the folder, and never
starts git, a shell, a package manager or any other program.
- It never sends a file, a path or any content anywhere. With the service
call off (the default) it makes no network request at all.
- It does not stop a task, a dev container, an agent or the editor, and it
changes no setting.
Workspace Trust
The panel says whether the window is trusted. VS Code runs folder-open tasks
and applies the folder's settings only once the folder is trusted (and, for
tasks, when automatic tasks are allowed by task.allowAutomaticTasks); a dev
container's commands run when the folder is opened in the container. The
extension itself runs in Restricted Mode too, because that is when the list is
useful: before you decide to trust.
AI agents (Claude Code, Cursor, Gemini CLI) and direnv do not ask VS Code:
they read their own files when they start in the folder.
The RepoGates service (optional, off by default)
Turn on repogates.askService in your user settings and run
RepoGates: Set API token (a personal token, rgp1.…, from your RepoGates
account page; stored in VS Code's secret storage). When the folder's git
remote is on github.com or gitlab.com, the panel then asks
https://api.repogates.com/v1/score/{owner}/{repo} (or /v1/gl/score/…)
and shows the verdict and its dimensions as the service sent them.
- Only the remote's
owner/repo (or the gitlab.com project path) is sent,
with your token. Never a file or its contents.
- The remote is read from
.git/config as text; git is not run. For a
worktree or submodule (.git is a file), the git directory it names is
followed only when it is inside the folder or inside a .git directory
above the folder; a network or device path (\\server\share, //host/…)
or another drive is refused before anything is opened. A worktree kept
elsewhere shows no remote and is not asked about.
- The address is fixed. There is no setting for it, and the setting that
turns the call on is a user setting only (
"scope": "application"): a
project's workspace settings can neither turn it on nor point it elsewhere.
- A refusal or a failure is shown as "not assessed" with the reason.
- RepoGates: Remove API token deletes the stored token.
Build
No npm and no build step. python3 tools/build_vsix.py packs vscode/ into
vscode/dist/repogates-<version>.vsix (gitignored), reproducibly. Tests:
node --test vscode/tests/*.test.mjs and
pytest tools/test_build_vsix.py.
MIT licence (LICENSE).