Blog · November 12, 2026 · 8 min read · by Vilva Athiban P B

Claude Code 2.1.319: denyInsteadOfPrompting, MCP Background Tasks and What Changes for Unattended Runs and Notifications

Claude Code 2.1.319 (6 November 2026) is a quiet release if you sit at the terminal and a loud one if you do not. Three entries change what happens when nobody is there to answer: a setting that denies a permission prompt instead of waiting on it, MCP tool calls that move to the background on their own, and a /loop that now stops when a turn ends. Here is what the changelog, read on 11 November 2026, actually says, where each switch lives, and what the changes do to the two notifications an unattended run depends on: “needs permission” and “done”.

permissions.denyInsteadOfPrompting, in the changelog’s words

The entry is one sentence: “Added permissions.denyInsteadOfPrompting setting: a tool call that would wait on a permission prompt is denied and the turn continues, in terminal sessions, subagents and teammates”. That is the whole official description so far. As of 11 November the settings reference does not list the key yet, so everything below beyond that sentence is a reading of it, not documentation. Test it in a throwaway session before you rely on it overnight.

“The turn continues” is the part that matters. Until now a tool call that hit a permission prompt stalled the whole turn: Claude waited, the prompt sat on screen, and a subagent or teammate that hit one blocked its parent too. With the setting on, the call is refused, Claude is told so, and the turn keeps going with the tools it is still allowed to use. For a run you are not watching, that turns an indefinite wait into a finished turn with a gap in it. The scope named is terminal sessions, subagents and teammates; the entry does not mention claude -p, which has its own rules covered in our headless mode guide.

Where to put it

The settings docs list the files in precedence order, highest first: managed settings, the --settings command-line value, .claude/settings.local.json (project local), .claude/settings.json (shared project) and ~/.claude/settings.json (user). Lists such as permissions.allow merge across files, and Claude Code reloads settings files when they change. For a setting that only makes sense while you are away, the local project file or a one-session --settings flag is the least surprising home; a shared project file would quietly deny prompts for a colleague who is sitting right there.

// .claude/settings.local.json (or ~/.claude/settings.json for every project)
{
  "permissions": {
    "denyInsteadOfPrompting": true,
    "allow": [
      "Read",
      "Edit",
      "Bash(npm test:*)",
      "Bash(npm run lint:*)",
      "Bash(git status:*)",
      "Bash(git diff:*)"
    ],
    "deny": [
      "Bash(git push:*)",
      "Bash(rm -rf:*)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}
# One session only, nothing written to disk
claude --settings '{"permissions": {"denyInsteadOfPrompting": true}}'

The allow and deny lists are not decoration. With the setting on, every tool call is either allowed and run, denied by a rule, or denied because it would have prompted. The third bucket is the one you cannot steer, so the job of the first two is to make it small: allow what the task will genuinely need, deny what you never want tried, and let the setting catch only the surprises.

The trade-off: denied is not the same as done

A prompt was never just a pause. It was Claude asking for the one action it thought the task needed. Refuse it and one of three things happens: Claude finds another way (sometimes worse, such as rewriting a file by hand because the script it wanted was blocked), Claude stops and reports what it could not do, or Claude declares the task finished with the blocked step missing. None of those is wrong, but all of them differ from what you would have chosen at the prompt. So treat the setting as a contract: you accept a partial or detoured result in exchange for a turn that ends on its own, and you read the summary when it does. If what you want is a smarter gatekeeper rather than a blunt no, that is what auto mode is for, and 2.1.319 changes that too (below).

MCP tasks move to the background

Two entries cover this. “Added support for MCP tasks in the terminal: when an MCP server runs a tool call as a task, Claude Code moves it to the background right away and tells Claude the result when it finishes”, and “Changed MCP tasks to work in the terminal without feature-flag fetching (Bedrock, Vertex, Foundry, LLM gateways, DISABLE_TELEMETRY)”. A long-running MCP call therefore no longer holds the turn hostage: Claude can keep working and gets the result when it lands. If you would rather keep the old blocking behaviour, CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND makes Claude Code wait inside the tool call, and CLAUDE_CODE_DISABLE_MCP_TASKS=1 turns MCP tasks off entirely. How this interacts with the existing MCP timeouts is covered in our MCP timeout post.

Feature flags, telemetry and auto mode

CLAUDE_CODE_DISABLE_FEATURE_FLAGS is new: it “stops feature-flag fetching without turning off telemetry, every flag then uses its built-in default”. A third-party summary adds that idle compaction reportedly stops as well because it depends on fetched flags; the official entry does not say that, so treat it as unconfirmed.

The auto-mode change is the one to read twice if you run behind a gateway. “Changed auto mode with telemetry or feature flags off, including behind LLM gateways: calls the server can’t check are asked about or denied, with no fallback to the built-in classifier. Set CLAUDE_CODE_AUTO_MODE_SERVER=0 to keep using it (Bedrock, Vertex and Foundry are unchanged)”. Behind an LLM gateway, CLAUDE_CODE_AUTO_MODE_SERVER=1 turns the server-side check on even with CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS set, and if managed settings set the latter they must set the =1 too. A project’s settings files or a plugin can also no longer switch the server-side check back on once you have switched it off outside the project. Put together with denyInsteadOfPrompting: an auto-mode session with flags off will now ask or deny on calls it cannot check, and the new setting decides which of those two it is.

Smaller changes that matter overnight

  • /loop stops when the turn does. “Changed self-paced /loop to end when a turn finishes without rescheduling, instead of scheduling a fallback wakeup; set CLAUDE_CODE_LOOP_KEEPALIVE=1 to keep the old behavior”. If your loop relied on the fallback to keep ticking, it now needs to reschedule itself explicitly. See our /loop post.
  • PostToolUse hooks survive an interrupt. They now run, with up to 10 seconds to finish, on tool calls that complete after a new message interrupts the turn. If a hook is how your notification fires, it is no longer silently skipped when you type mid-tool.
  • /tasks remembers finished subagents. A new “Earlier in this session” row lists subagents that have finished, so you can reopen one and message it after it leaves the live list. Useful the morning after.
  • Login expiry is visible before it bites. 2.1.317 and 2.1.318 (3 November) expose it as loginExpiresAt in claude auth status and credential_expires_at in claude -p JSON output, with a stderr warning 10 days before expiry. 2.1.319 adds a warning when your claude.ai login ends and Claude Code continues on another sign-in that bills your Console organization. Check the expiry before a multi-day run, not after.
# Environment switches mentioned in this post (see our env-vars guide for the rest)
export CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND=1   # wait for MCP tasks inside the tool call
export CLAUDE_CODE_DISABLE_MCP_TASKS=1             # turn MCP tasks off entirely
export CLAUDE_CODE_DISABLE_FEATURE_FLAGS=1         # built-in flag defaults, telemetry stays on
export CLAUDE_CODE_AUTO_MODE_SERVER=0              # keep the built-in classifier when flags/telemetry are off
export CLAUDE_CODE_LOOP_KEEPALIVE=1                # keep the pre-2.1.319 /loop fallback wakeup

The changelog names the variables; for CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND and CLAUDE_CODE_DISABLE_FEATURE_FLAGS it does not spell out the value, so =1 above follows the convention of the others. The full list lives in our environment variables guide.

What this does to your notifications

An unattended Claude Code run has always had two moments worth a ping: it needs you, or it is finished. With denyInsteadOfPrompting on, the first moment mostly stops existing in that session. Nothing waits, so there is nothing to be notified about in time to save. The second moment now carries more weight, because the summary at the end is the only place you learn what got denied and what Claude did instead. That is the honest version of how AI Done Now fits: it notifies you on your Mac when Claude Code finishes or needs permission, and in a deny-instead-of-prompt session the “done” alert is the one doing the work. Our waiting-for-input post covers the older case, where the prompt is still the bottleneck.

FAQ

Is permissions.denyInsteadOfPrompting documented anywhere else?

Not as of 11 November 2026. The settings reference does not list it; the 2.1.319 changelog bullet is the only official source.

Does it apply to claude -p?

The entry names terminal sessions, subagents and teammates. Headless runs are not mentioned, and they already have their own permission behaviour, so do not assume anything until you have tested it.

Can I combine it with auto mode?

The changelog does not say. Auto mode with telemetry or flags off now asks or denies on calls the server cannot check; a setting that turns “ask” into “deny” would plausibly apply there, but that is inference, not documentation.

Keep reading

Desk Exercises for Programmers: 15 Moves to Do While Your AI Agent Codes

7 min read

Exercise While Coding: Turn Claude Code Wait Time Into Micro-Workouts

7 min read

Claude Code Notch Notifications on Mac: See When Claude Is Done Without Watching the Terminal

7 min read

Claude Code Tips and Tricks: 12 Ways to Use Claude Code Effectively

8 min read

Claude Code Multiple Sessions: How to Run Agents in Parallel Without Losing Track

6 min read

A Claude Code Workflow That Doesn't Involve Watching the Terminal

5 min read

Claude Code Hooks: A Practical Guide to Automating Your Agent Workflow

7 min read

Claude Code Auto Mode: Fewer Permission Prompts Without Living Dangerously

7 min read

Claude Code Subagents: How to Delegate Work to Specialized Agents

7 min read

Claude Code Context Management: Treat the Context Window Like a Budget

6 min read

Per-Subagent Model Selection: Route the Grunt Work Down, Keep the Judgment Up Top

7 min read

Skills and Plugins: How to Teach Claude Code Your Way of Working

7 min read

Claude Code Background Tasks: Run Long Commands Without Blocking Your Session

6 min read

Codex CLI Notifications: How to Get a Ding When Codex Is Done or Needs Input

7 min read

Cursor Notification When Done: Every Way to Get Notified When Cursor Finishes

6 min read

Claude Code Notifications: How to Get Notified When Claude Code Finishes or Needs Your Input

6 min read

Want to Be Notified When Claude Responds? How Claude Notifications Work on Web, Desktop, and Mobile

5 min read

Claude Code Notification Scripts: Copy-Paste Recipes for Every Platform

6 min read

Get a Ding the Moment Codex Needs Your Response

6 min read

Get Notified the Moment Claude Code Is Waiting for Your Input

6 min read

“Notifications Are Turned Off for Claude” — Here Is the Fix

6 min read

Codex Sound When Done: Make Codex CLI Play a Sound When It Finishes

6 min read

terminal-notifier + Claude Code: Native macOS Alerts When Your Agent Finishes

6 min read

Gemini CLI Notifications: How to Get a Sound or Alert When Gemini Finishes

6 min read

Get Claude Code Notifications on Your Phone

6 min read

Claude Code Remote Control, Explained

7 min read

preferredNotifChannel: Claude Code's Built-In Notification Setting

6 min read

Claude Code Notifications in tmux and Over SSH

7 min read

Claude Code Effort Levels: Why Your Setting Keeps Getting Ignored

8 min read

Codex vs Claude Code Notifications: How Each One Tells You It Is Done

8 min read

Claude Code Notifications Not Working: A Diagnostic Checklist

10 min read

Claude Code Notifications Inside Your Editor's Terminal

7 min read

CLAUDE_CODE_DISABLE_BACKGROUND_TASKS Explained

7 min read

CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP Explained

8 min read

Cursor Alerts Explained: Every Alert Cursor Raises, and How to Control Them

7 min read

Claude Code Environment Variables: The Groups That Actually Matter

10 min read

Claude Code Notifications on WSL and Windows

9 min read

Claude Code Checkpoints and /rewind

8 min read

Claude Remote Control: How It Works, Turning It Off, and Auto Mode

7 min read

Claude Code /loop: Poll a Deploy, Babysit a PR, and Get Told When It's Done

8 min read

Setting Up NotchFit With OpenAI Codex CLI: Hooks, $notchfit-plan, and the Daily Flow

7 min read

Claude Mods Explained: What the New Plugin Layer Can Do, and How to Turn On 'You Should Know'

9 min read

NotchFit vs Mac Break Reminder Apps: A Clock or a Signal From Your Coding Agent?

8 min read

Claude Code Headless Mode: Running claude -p in Scripts and CI, and the Three Signals That It Finished

10 min read

Building a Movement Habit at a Desk: Use the Agent Run as the Cue, One Set as the Unit, and Streaks Carefully

8 min read

Claude Code MCP Servers Explained: Adding Servers, Choosing a Scope, Handling Secrets, and Why Long Tool Calls Go to the Background

10 min read

/notchfit:plan Explained: How Claude Code or Codex Writes a Weekly Workout Plan the Notch Can Actually Run

8 min read

Claude Code Spinner Verbs Explained: What “Pondering” and “Brewing” Mean, How to Change Them, and Why You Should Stop Watching the Spinner

7 min read

Why NotchFit's Done and Permission Alerts Wait Until Your Set Ends, When That Costs You, and How to Turn the Workout Off

7 min read

How to Resume a Claude Code Session: --continue vs --resume, Naming Sessions, the Session Picker, Branching, and What Comes Back

9 min read

NotchFit on a Mac Without a Notch: How Pill Mode Works on Mac mini, iMac, Mac Studio and a MacBook With the Lid Closed

6 min read

How to Run a Claude Code Session in the Background: /background, claude --bg, Agent View, and Getting Back to It

9 min read

What a Notch App Can See: NotchFit's Local-First Design, What the Claude Code and Codex Hooks Send, and What Stays on Your Mac

7 min read

Why Codex CLI Asks for Permission Every Time, and How to Tune the Sandbox and Approval Policy Without Going Full Access

8 min read

What to Do While Claude Code or Codex Works: A Simple Protocol for the Two-to-Twenty-Minute Gap in Every Agent Run

7 min read

Is It Possible to Get a Notification When Claude Code or Codex Hits a Reset? Yes for Claude Code: the quota_auto_resume Hooks, Explained

8 min read

What a MacBook Notch App Can Actually Do: The Five Kinds of Notch Utility, Their Trade-offs, and Where NotchFit Fits

7 min read

How to Make MCP Servers Not Take Up as Much Context in Claude Code: Tool Search, alwaysLoad, Scopes and Output Caps

8 min read

The notchfit Command Line: Drive Your Workout, Read Status as JSON, Validate Plans and Test the Notch Without Leaving the Terminal

7 min read

How to Audit MCP Tool Calls Made by Claude Code: A Five-Minute Hook Audit Log, OpenTelemetry Tool Events, and the Transcript for Investigations

9 min read

Exercise Snacks: What the Research Actually Says About One-Minute Vigorous Breaks, What It Does Not, and How NotchFit's Agent-Run Sets Compare

8 min read

How Long Until a Claude Code MCP Tool Call Times Out? The Four Timers (Startup, Two-Minute Backgrounding, Idle, Wall-Clock), Their Defaults, and Which One to Change

8 min read

Sitting Too Long as a Developer: The Posture Problems Coding Agents Made Worse, What the Research Says About Breaking Up Sitting, and How NotchFit Turns an Agent Run Into the Break

8 min read

Claude Code .mcp.json Explained: Where Project-Scoped MCP Servers Are Read From, What Happens in Subfolders and Monorepos, and Why a Committed Server Shows Pending Approval

8 min read

Standing Desk Exercises for Developers: Why Standing Still Is Not the Goal, Eight Movements That Fit a Thirty-Second Agent Run, and How NotchFit Cues Them From the Notch

8 min read

The claude mcp Command Reference: add Syntax by Transport, What --scope local, project and user Actually Mean, add-json and add-from-claude-desktop, list, get, remove, login and serve

9 min read

Your First Week With NotchFit: Install and Simulate, Run Real Tasks, Write a Smaller Plan Than You Want, Tune the Alerts, Survive the First Skipped Day, and Decide What Stays

8 min read

How to Stop a Running Claude Code Task: Esc vs Ctrl+C, Background Tasks, Subagents, and Disconnecting Remote Control

8 min read

Pomodoro vs Agent-Driven Breaks: Timing Movement to Claude Code and Codex Runs Instead of a Timer

7 min read

Claude Desktop MCP Configuration: claude_desktop_config.json, Logs, Extensions, and the Difference From Claude Code

9 min read

The 20-20-20 Rule for Developers: Eye Strain, the Evidence, and Agent Runs as the Cue

8 min read

Claude Agent SDK + MCP Servers: mcpServers, allowedTools, Status Checks and Auth

9 min read

Discreet Desk Exercises for an Open-Plan Office While Claude Code Runs

7 min read

claude remote-control Server Mode: Run Claude Code as a Session Server

9 min read

Wrist and Forearm Stretches for Developers: A 60-Second Routine for Every Claude Code Run

7 min read

Claude Remote Control vs Claude Code on the Web: Which to Use and How They Differ

9 min read

Neck and Shoulder Stretches for Developers: A 90-Second Routine Between Agent Runs

7 min read

What Happens When You Step Away From a Claude Code Session: Prompt Cache Expiry, Idle Compaction, and When to Come Back

8 min read

Hip Flexor and Lower Back Stretches for Developers: A Two-Minute Standing Routine Between Agent Runs

7 min read

Claude Code's Monitor Tool: Watch Logs, CI Runs and PRs (Even a WebSocket) and Let Claude React While You Keep Working

7 min read

Hunched Over the Keyboard? Upper-Back (Thoracic) Stretches for Developers: A Two-Minute Seated Routine Between Agent Runs

6 min read

Claude Code Ultrareview: The 15–25 Minute Cloud Review, What to Do While It Runs, and How the Findings Come Back

8 min read

Why Your Legs Go Dead After a Long Claude Code Session: A Two-Minute Standing Calf, Glute and Hamstring Routine Between Agent Runs

7 min read

claude --teleport: Pull a Cloud Session Into Your Terminal, Start One With --cloud, Send Follow-Ups From the CLI, and the Requirements That Trip People Up

8 min read

Rounded Shoulders From Typing? A Two-Minute Chest Opener, Chair Twist and Wall Press Desk Routine for Developers Between Agent Runs

7 min read

Claude Code ultrathink Explained: It Now Runs the Turn at xhigh Effort, How It Differs From /effort, What It Costs in Time, and What to Do While It Runs

7 min read

Best Break Reminder Apps for Mac in 2026: Time Out, Stretchly, BreakTimer, LookAway and NotchFit Compared

7 min read

Drink Water and Stand Up Cues for Developers: Use Claude Code Agent Runs as Hydration and Standing Reminders

7 min read

Claude Code 2.1.323: Code Mode, Progress Heartbeat, Auto-Mode Fallback and 1M Context — What Changed for Unattended Runs

9 min read

Notch Media Controls on a Mac: What the MacBook Notch Can and Cannot Do, Dynamic Island-Style Apps vs NotchFit

7 min read