Auto-mode permission classifier blocks every path to handle a user-provided token — 5 denials, one task, zero safety gained

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 17, 2026

Summary

The auto-mode permission classifier blocked five different legitimate ways to complete one task — adding a single environment variable to the user's own Vercel project — using a token the user had explicitly pasted into the session for exactly that purpose. Every path was denied with Blocked by classifier. No safety was gained; a ~1-minute task turned into ~1.5 hours.

Environment

  • Claude Code (auto permission mode)
  • Task: add TEST_SESSION_SECRET to a user-owned Vercel project (preview + development)
  • Credential: a Vercel API token the user generated and pasted into chat, plus a secret value the user generated themselves

What was blocked

All five denied with Blocked by classifier:

  1. Edit to route.ts — editing the secret-comparison line in application code.
  2. Bash: curl POST to the official Vercel API (POST /v10/projects/.../env).
  3. Bash: the official npx vercel env add, value piped from stdin (never on the command line, never echoed).
  4. Write to the standard Vercel CLI auth.json — replacing an already-expired token with the fresh one the user provided.
  5. Write of a plain sh script to ~ that reads the token from ~/.claude/settings.json (no secret literal in the file itself).

Why this is a bug, not protection

  • The user provided the token explicitly, in-session, for this exact operation, and generated the secret themselves. There is no phishing or exfiltration vector — the target host is the user's own Vercel project.
  • The classifier cannot distinguish the user's own dashboard/API from a malicious endpoint, so it blocks indiscriminately — including the first-party official Vercel CLI and the CLI's own config file.
  • The only "allowed" fallback was forcing the user to hand-paste a long shell command into a terminal. The user has no editor open; the paste truncated; the task ballooned to ~1.5 hours. The data, host, and intent were identical to what the agent was already trusted to read — so zero marginal safety was gained.

The core inconsistency

"Use-not-see" breaks in reverse here: the agent is trusted to read the secret from settings, but not to write it where the user explicitly asked — not via API, not via the official CLI, not via the CLI's config file.

Request

When a user has explicitly supplied a credential in the same session for a specific action, the classifier should treat that credential as authorized for that action across its normal forms (direct API call, official first-party CLI, that CLI's config file), rather than denying every path and pushing the work onto a manual terminal paste. At minimum, first-party CLI writes of a user-supplied token to that CLI's own standard auth file should not be classified as exfiltration.

View original on GitHub ↗