feat(permissions): enable auto mode classifier in Verboo Code - #53
Merged
Conversation
Auto mode (the classifier-backed Shift+Tab permission mode) was
unreachable in this build for two reasons: the GrowthBook kill switch
resolves to 'disabled' whenever the config is absent, and
modelSupportsAutoMode() only allowlisted Anthropic model ids, which never
exist in the Verboo catalog.
- growthbook: default tengu_auto_mode_config to { enabled: 'enabled' } in
both the build stub and the source module, so the mode appears in the
carousel. First entry still shows the opt-in dialog.
- betas: modelSupportsAutoMode() returns true in Verboo mode; the router
is Anthropic-compatible and the provider is reported as firstParty.
- build: stop stubbing the auto-mode classifier prompt .txt files to an
empty string. They keep their real content, and Verboo-authored prompts
are added under yolo-classifier-prompts/ (upstream prompts are not
mirrored in this repo). Without this the classifier ran with no policy.
- branding: the opt-in dialog and the auto-mode system notice use Verboo
Code wording, the Verboo purple, and the Verboo docs link.
The classifier model is the main-loop model (tengu_auto_mode_config.model
is unset). If a model cannot emit the classify_result tool call, the
classifier fails closed (blocks), which is the safe default.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
disabledwhen the config is absent, andmodelSupportsAutoMode()only allowlisted Anthropic model ids that never exist in the Verboo catalog. On top of that, the classifier prompts were stubbed to empty strings at build time, so the classifier had no policy to follow.Impact
default → acceptEdits → plan → auto. First entry still shows the opt-in dialog (consent preserved). Actions matching the deny policy (external code, irreversible destruction, persistence, security weakening, credential access, exfiltration, privilege escalation, prompt injection, obfuscation) are blocked; safe actions run without prompting.''. New Verboo-authored prompt files live undersrc/utils/permissions/yolo-classifier-prompts/.Testing
bun run buildbun run smokebun test src/utils/permissions/ src/tools/BashTool/modeValidation.test.ts src/utils/fastMode.test.ts src/utils/effort.codex.test.ts src/utils/file.test.ts— 19 pass, 0 failManual verification on the built
dist/cli.mjs: gatetengu_auto_mode_config = { enabled: 'enabled' }present,modelSupportsAutoModereturns true in Verboo mode, classifier prompts are non-empty, and the carousel chain isdefault → acceptEdits → plan → auto.Notes
firstParty). Source-mode carousel logic + built bundle.tengu_auto_mode_config.modelis unset). If a model cannot emit theclassify_resulttool call, the classifier fails closed (blocks) — safe default, but worth validating across catalog models.BypassPermissionsModeDialogstill shows[CC]and an Anthropic docs link (out of scope).TRANSCRIPT_CLASSIFIERenabled hits an import cycle inclassifierDecision.ts; verified it reproduces on a cleanorigin/main.