Skip to content

All Settings

All settings are under the devManager.* namespace.

Edit via:

  • Ctrl+, → search @ext:vaulttec-dev.snakeflow-dev-manager
  • Or edit .vscode/settings.json directly (workspace-level, per-project)

Note: the Quality Hub registers 90+ providers and exposes hundreds of per-provider settings (devManager.quality.<providerId>.*). The tables below show representative examples per category. The complete, always-up-to-date list lives in the extension’s package.json contributes.configuration section — open Settings UI and search devManager.quality. to browse every key with descriptions inline.


Project

SettingTypeDefaultDescription
devManager.project.namestringautoProject identifier
devManager.project.dirstringautoAbsolute path to project root
devManager.project.packageManagerenum"auto"auto | npm | pnpm | yarn | bun
devManager.project.serversarray[]Dev server configurations
devManager.project.composePathstring""Docker Compose file path (empty = auto-detect)
devManager.project.containerActionsarrayautoContainer action menu

Git & GitHub

SettingTypeDefaultDescription
devManager.git.defaultBranchstring"main"Default branch name fallback
devManager.git.protectedBranchesstring[]["main","master","develop","staging","production"]Branches requiring confirmation to delete
devManager.github.defaultMilestonestring""Default milestone for new issues
devManager.prToChat.promptstring""Custom prompt when sending PR to Chat
devManager.issueToChat.promptstring""Custom prompt when sending Issue to Chat

SnakeFlow Cloud

SettingTypeDefaultDescription
devManager.cloud.apiUrlstringhttps://snakeflow.pages.devBase URL of the cloud sync service (HTTPS). Change only if you use a self-hosted endpoint.

See Cloud settings sync → for commands and privacy notes.


Team Tracker

SettingTypeDefaultDescription
devManager.team.enabledbooleanfalseWhen true, records active minutes per UTC day and sends them to the team API after login.
devManager.team.idleWindowMinutesnumber5Declared idle window (1–15). Changing it restarts Team Tracker. While you belong to at least one workspace, the collector actually uses the minimum of each workspace’s server-side idle_window_minutes (admin setting on the team API). With zero memberships, the built-in default is 5 minutes until you join a workspace.
devManager.team.useActivityWatchbooleantrueUse local ActivityWatch for OS-wide mouse/keyboard signals.
devManager.team.requireActivityWatchbooleantrueHard gate: no minutes counted unless ActivityWatch is reachable.
devManager.team.activityWatchUrlstringhttp://localhost:5600Base URL of the local aw-server REST API.
devManager.team.requireTrackingbooleanfalseWhen true, shows a warning if tracking is off and the developer has not started a session.
devManager.team.idleSleepWindowstring""Local-time HH:MM-HH:MM interval in which the collector forces IDLE regardless of other signals. Empty = disabled. See Team Tracker — Sleep window.

Per-workspace app allowlist (regexes against ActivityWatch window app / title) is not a devManager.* setting — workspace admins configure it on the server (Cloud Team tab or SnakeFlow: Team Tracker — Edit App Allowlist). See Team Tracker → for dual-factor activity rules, the sleep window, the status-bar toggle, ActivityWatch, internal/external rules, and the activity log.


Docker & CI

SettingTypeDefaultDescription
devManager.docker.composeCommandstring"docker compose"Compose CLI (docker compose / docker-compose / podman compose)
devManager.ci.workflowsPathstring".github/workflows"Path to GitHub Actions workflows

AI (Gemini + Dictation)

SettingTypeDefaultDescription
devManager.gemini.apiKeystring""Google Gemini API key for AI title generation and voice dictation
devManager.gemini.modelstring"gemini-2.5-flash"Gemini model name
devManager.gemini.dictationLanguageenum"auto"Spoken language for voice dictation transcription. auto = Gemini detects automatically. Other values: uk, en, de, fr, es, pl, it, pt, nl, cs, ja, zh, ko

See Voice Dictation → for full details.


Quality Hub — General

SettingTypeDefaultDescription
devManager.quality.customChecksarray[]Custom project-level quality checks
devManager.quality.skipDirsstring[][]Extra directory names (not globs) merged into built-in exclusions for walking checks
devManager.quality.skipFilesstring[][]Relative paths from project root (forward slashes), optional *.vsix / **/*.vsix, or **/file.ext patterns — excludes files from many built-ins and Semgrep aggregation
devManager.quality.timeoutnumber30Max runtime per check in minutes
devManager.quality.maxBuffernumber50Max stdout buffer in MB
devManager.quality.chatReportenum"onFail"auto | onFail | manual | never — when to open AI chat with the quality report after a run
devManager.quality.chatPromptstring""Optional text prepended when sending the report to Chat

Quality Hub — Cloud Providers

Every cloud integration uses devManager.quality.<id>.enabled (most default to off; CodeQL defaults to on). Required keys differ per service — there is no single token field for all.

Authoritative per-provider list: Cloud Providers → (settings tables, prerequisites, and behavior).

IDs registered in settings (subset ships as documented cloud checks): sonarcloud, snyk, codecov, coveralls, codeclimate, codacy, deepsource, coderabbit, qodo, greptile, cubic, codeant, qlty, codeql, aikido, socket, … — search devManager.quality. in Settings for the full list.

Examples (see cloud docs for full keys):

"devManager.quality.sonarcloud.enabled": true,
"devManager.quality.sonarcloud.token": "",
"devManager.quality.sonarcloud.projectKey": "",
"devManager.quality.sonarcloud.serverUrl": "https://sonarcloud.io",
"devManager.quality.snyk.token": "",
"devManager.quality.snyk.orgId": "",
"devManager.quality.coderabbit.enabled": true,
"devManager.quality.coderabbit.apiKey": ""

Quality Hub — Built-in Checks

Replace <check> with the check name. All checks share these common settings:

SettingTypeDefault
devManager.quality.builtin.<check>.enabledbooleantrue

Check-specific thresholds:

"devManager.quality.builtin.lineCount.warnLines": 300,
"devManager.quality.builtin.lineCount.failLines": 500,
"devManager.quality.builtin.functionLength.warnLines": 40,
"devManager.quality.builtin.functionLength.failLines": 80,
"devManager.quality.builtin.complexity.warnScore": 10,
"devManager.quality.builtin.complexity.failScore": 20,
"devManager.quality.builtin.fileSize.warnKb": 50,
"devManager.quality.builtin.fileSize.failKb": 200,
"devManager.quality.builtin.importDepth.warnDepth": 4,
"devManager.quality.builtin.importDepth.failDepth": 6,
"devManager.quality.builtin.dependencyCount.warnAt": 50,
"devManager.quality.builtin.dependencyCount.failAt": 100,
"devManager.quality.builtin.parameterCount.warnAt": 4,
"devManager.quality.builtin.parameterCount.failAt": 7,
"devManager.quality.builtin.jscpd.threshold": 5,
"devManager.quality.builtin.jscpd.minLines": 5,
"devManager.quality.builtin.trivy.failOnSeverity": "HIGH",
"devManager.quality.builtin.trivy.warnOnSeverity": "MEDIUM",
"devManager.quality.builtin.trivy.path": "trivy",
"devManager.quality.builtin.golangciLint.warnAt": 5,
"devManager.quality.builtin.golangciLint.failAt": 20,
"devManager.quality.builtin.golangciLint.path": "golangci-lint",
"devManager.quality.builtin.bandit.path": "bandit",
"devManager.quality.builtin.bearer.path": "bearer",
"devManager.quality.builtin.returnTypes.warnAt": 10,
"devManager.quality.builtin.returnTypes.failAt": 50,
"devManager.quality.builtin.noManualMigrations.enabled": true,
"devManager.quality.builtin.noManualMigrations.severity": "error",
"devManager.quality.builtin.noManualMigrations.adapters": ["drizzle", "prisma", "atlas"],
"devManager.quality.builtin.noManualMigrations.checkRemoved": true,
"devManager.quality.builtin.noManualMigrations.gitLookback": 50,
"devManager.quality.builtin.prismaMigrateStatus.realtime": true,
"devManager.quality.builtin.squawk.dataRisk": "warn",
"devManager.quality.builtin.squawk.requireDownMigration": false,
"devManager.quality.builtin.migrationsCiGate.enabled": true,
"devManager.quality.semgrep.config": "auto"

All available built-in check names:

lineCount · functionLength · complexity · fileSize · longLines · importDepth · directoryDepth · dependencyCount · todoCount · commentedCode · duplicateFiles · testRatio · mixedIndent · encoding · secretLeaks · debugLeaks · gitignoreCheck · magicNumbers · parameterCount · barrelFiles · couplingMetrics · crossLayerImports · componentInventory · heavyImports · anyCoverage · jsdocCoverage · lcovCoverage · actionsAudit · emptyTests · jscpd · knip · dependencyCruiser · pkgAudit · outdatedDeps · licenseCheck · hadolint · shellcheck · golangciLint · bearer · stryker · trivy · bandit · semgrep · act · envConsistency · lockfileSync · nodeVersionConsistency · readmeCheck · changelogCheck · codeownersCheck · tscCheck · asyncAwaitMisuse · errorHandling · returnTypes · reactHookRules · a11yCheck · yamllint · spectral · checkov · sqlfluff · markdownlint · attw · publint · lockfileLint · npmProvenance · syncpack · manypkg · scorecard · typeCoverage · commitlint · noFocusedTests · noManualMigrations · migrationsCiGate · stylelint · prettierCheck · sizeLimit · lighthouseCi · oasdiff · graphqlInspector · bufBreaking · dockle · grype · dive · hardenRunnerAudit · sbom · sentrySourcemaps · trojanSource · rlsCheck · pgtapPresence · sqruff · vale · alex · lychee · promptfoo · dotenvLinter

Quality profiledevManager.quality.profile (strict | balanced | vibe, default strict) controls which checks run by default. strict = Google/Meta bar (everything on, warn → fail). balanced = same enablement, warns stay warns. vibe = only STRONG cloud + CLI tooling on by default. Per-provider enabled settings always win. See devManager.quality.warnAsFail for the warn-promotion overlay.

Realtime Quality

Optional in-editor re-runs for providers that define realtime hooks (ESLint, Biome, on-save formatters, migration hygiene, etc.).

SettingTypeDefaultDescription
devManager.realtime.enabledbooleantrueMaster switch — when false, no realtime subscriptions run.
devManager.realtime.onType.enabledbooleantrueRe-run on keystrokes (where a provider subscribes to onType).
devManager.realtime.onSave.enabledbooleantrueRe-run on save.
devManager.realtime.precommit.modeenum"warn"off | warn | block — how to react when staged files have SnakeFlow error-level diagnostics. block is enforced when you run SnakeFlow: Pre-commit Gate (devManager.realtime.precommitGate) or wire that command into a git hook.
devManager.realtime.precommit.migrationsModeenum"warn"off | warn | block-strict — extra policy for staged migration paths (prisma/migrations/, drizzle/, etc.). block-strict treats any SnakeFlow diagnostic on those files (including warnings) as blocking for the pre-commit gate. When set to block-strict, SnakeFlow may warn once if core.hooksPath points away from .git/hooks (hooks might not run).

No Manual Migrations, Prisma Migrate Status (watch), and similar checks can publish editor diagnostics when migration or schema files change, as long as the check and realtime are enabled. See No Manual Migrations →.

Pre-commit Gate: Orphan Migrations

devManager.realtime.precommit.scanners.orphanMigrations (default true) blocks commits that stage a .sql file inside a Drizzle migrations/ directory whose tag is not present in meta/_journal.json. Catches hand-written migrations bypassing drizzle-kit generate. Runs both in the VS Code Source Control gate and the auto-installed .git/hooks/pre-commit shim.

Pre-commit Gate: Send failures to chat

devManager.realtime.precommit.sendFailToChat (default true) — when the gate blocks a commit (either from the VS Code Source Control panel or from the terminal via the auto-installed .git/hooks/pre-commit), SnakeFlow automatically opens the current AI chat panel and pastes the list of blocking issues. The AI can then suggest a fix inline.

The raw report is stored in .snakeflow/last-precommit-fail.json (gitignored). Disable this setting to stop the automatic chat dispatch while keeping all other gate behaviour intact.

Pre-commit Gate: Staged-only scanning

The gate scans the post-commit state of the working tree — exactly what would land in HEAD after the pending commit. Before any scanner runs, SnakeFlow hides every unstaged change (tracked diffs and untracked files) by snapshotting them as a binary patch, then restores them after fn returns. This mirrors what lint-staged does and prevents the most common pre-commit blind spot:

You fix a bug locally and stage an unrelated change with git add -p. The fix stays unstaged. vitest / knip / tsc see the fix in the working tree and pass — but the broken file ships to HEAD.

With staged-only scanning, command-style custom checks see the same files git is about to commit. The fast-path skips this entirely when there are no unstaged changes (95% of commits → zero overhead). Mid-merge / rebase / cherry-pick states are detected and left untouched. If the auto-restore ever fails (rare — concurrent disk writes, etc.) the unstaged delta is saved to .snakeflow/precommit-restore-<ts>.patch with the exact git apply command to recover it.

Pre-commit Gate: Custom Checks

devManager.realtime.precommit.customChecks lets the team add ad-hoc checks executed alongside the built-ins. Two kinds:

  • kind: "pattern" — JavaScript regex applied to staged diff additions (scope: "diff", default) or full file content (scope: "file"). Filtered by filePattern glob (default **).
  • kind: "command" — shell command executed at repo root. Non-zero exit code = failure. Per-check timeout via devManager.realtime.precommit.customCheckTimeoutMs (default 30000 ms). Runs against the staged-only working tree (see above).

Each check defines id (stable identifier), optional label, and severity ("error" blocks the commit, "warn" is informational). Settings live in .vscode/settings.json so the entire team picks them up via git pull.

"devManager.realtime.precommit.customChecks": [
{ "id": "no-todo", "label": "No TODO/FIXME", "kind": "pattern", "pattern": "TODO|FIXME", "filePattern": "src/**/*.{ts,tsx}", "scope": "diff", "severity": "error" },
{ "id": "run-tests", "label": "Unit tests", "kind": "command", "command": "npm test --silent", "severity": "error" }
]

Per-check scope: Hub / Realtime / Pre-commit

Every quality provider has three independent toggles. You can mix them freely — for example, keep a check visible in Quality Hub but disable its live squiggles, or gate commits on a subset of checks only.

ToggleSetting key patternDefaultEffect
Hub (Quality Hub run)devManager.quality.builtin.<id>.enabledtrue (builtin), false (cloud)Includes or excludes the check from Ctrl+Alt+F batch runs
Realtime (live diagnostics)devManager.quality.builtin.<id>.realtimetrueEnables on-type / on-save squiggles in the editor
Pre-commit (git gate)devManager.quality.builtin.<id>.precommitfalseBlocks the commit when this check finds errors on staged files

The same three keys exist for cloud providers under devManager.quality.<id>.*.

Example: tight pre-commit policy

Enable ESLint and Prettier to block commits, but keep live squiggles only for ESLint to avoid noise from Prettier on every keystroke:

.vscode/settings.json
{
"devManager.quality.builtin.eslint.precommit": true,
"devManager.quality.builtin.prettierCheck.precommit": true,
"devManager.quality.builtin.prettierCheck.realtime": false
}

How pre-commit scope works

When devManager.realtime.precommit.mode is block (default), SnakeFlow collects all VS Code diagnostics emitted by enabled realtime providers on the staged files. Only providers whose .precommit toggle is true contribute to the error count. The seven legacy scanners (secrets, envFiles, focusedTests, dangerousPatterns, lockfileDrift, schemaDrift, orphanMigrations) are controlled by their own devManager.realtime.precommit.scanners.* keys and always contribute regardless of the per-provider .precommit flag.


Workflows

AI-powered workflow automation that runs multi-step checks, visual regression, and coverage gating.

SettingTypeDefaultDescription
devManager.workflows.anthropicApiKeystring""Anthropic API key for AI workflow steps
devManager.workflows.claudeModelstring"sonnet"Claude model used in AI steps (fetched live from API)
devManager.workflows.timeoutMinutesnumber60Max minutes per workflow run (0 = unlimited)
devManager.workflows.minCoveragenumber80Minimum test coverage % required to pass
devManager.workflows.maxCostUsdnumber5Max AI spend in USD per run before abort
devManager.workflows.visualTolerancenumber0.1Pixel-diff % allowed before visual regression is flagged
devManager.workflows.runsPerWorkflownumber1How many times each workflow runs per trigger
devManager.workflows.watchdogSecondsnumber90Seconds of silence before a step is considered hung
devManager.workflows.maxChangedFilesnumber50Max files a workflow may change before aborting
devManager.workflows.parallelRolesbooleanfalseRun multi-role steps in parallel
devManager.workflows.isolateDatabasebooleantrueUse isolated DB copy per run
devManager.workflows.viewports.mobilebooleantrueInclude mobile viewport in visual/Lighthouse checks
devManager.workflows.viewports.tabletbooleanfalseInclude tablet viewport
devManager.workflows.viewports.desktopbooleantrueInclude desktop viewport
devManager.workflows.lighthouseMinobject{performance:70,seo:80}Minimum Lighthouse scores (0–100)
devManager.workflows.useApiKeybooleanfalseAuthenticate workflow requests with API key
devManager.workflows.testAccountsarray[]Test accounts for workflows to sign in as
devManager.workflows.customarray[]Custom workflow definitions

Wake Lock

Prevents the machine from sleeping during editor activity and optionally during Quality Hub runs. This is independent of Team Tracker → minute counting — see Wake Lock feature guide →.

SettingTypeDefaultDescription
devManager.wakeLock.enabledbooleantrueMaster switch. When false, both the status-bar activity tracker and Quality Hub auto-acquire are no-ops.
devManager.wakeLock.autoActivatebooleantrueWhile enabled, automatically acquire a wake lock for the duration of each Quality Hub full run (acquire('Quality Hub')), independent of the status-bar toggle.
devManager.wakeLock.keepDisplayAwakebooleantrueKeep the display on, not just prevent system sleep (ES_DISPLAY_REQUIRED on Windows; display blanking may still apply on some Linux setups).
devManager.wakeLock.idleThresholdSecondsnumber120With the status-bar toggle ON, seconds without any activity signal before the activity lock is released (long-running tasks alone do not pin the lock).
devManager.wakeLock.readyTimeoutMsnumber0Milliseconds to wait for the OS helper to report ready (0 = platform default).
devManager.wakeLock.startRetriesnumber2Retries if the helper fails to start.
devManager.wakeLock.maxHoldHoursnumber4If refCount stays above zero continuously for this many hours, log a warning and optionally show a notification (0 disables). Does not force-release.
devManager.wakeLock.persistLogbooleanfalseAppend Wake Lock output lines to <workspace>/.vscode/snakeflow-wakelock.log or <workspace>/.cursor/snakeflow-wakelock.log (1 MB rotation). Requires an open workspace folder.

Commands: SnakeFlow: Wake Lock — Toggle / SnakeFlow: Wake Lock — Diagnose (see Command palette →).


Agent Context

AI coding agent context management and automated documentation updates.

SettingTypeDefaultDescription
devManager.agentContext.structureSync.enabledbooleantrueAuto-generate project-structure snapshot for AI context
devManager.agentContext.structureSync.autoSyncbooleantrueRe-sync snapshot when files change
devManager.docUpdater.commitCountnumber20Recent commits analysed when auto-updating docs
devManager.docUpdater.filesarray[]Documentation files to keep up to date (path + prompt)
devManager.github.defaultMilestonestring""Default GitHub milestone for AI-created issues and PRs
devManager.prToChat.promptstring""Prompt prepended when sending PR diff to AI chat
devManager.issueToChat.promptstring""Prompt prepended when sending GitHub issue to AI chat

See also