Agent access on macOS 27: the Files & Folders step

Draft for review. On macOS 27, macOS no longer shows a dialog when Claude or ChatGPT reads Bristlenose's handshake file. It denies the read, and the grant lives in System Settings. This mockup covers the Settings pane, the page the button opens, and what the researcher sees in chat.

29 Sep 2026 · drawn at the shipped 660pt · spec: docs/design-mcp-files-and-folders.md · dashed outline = new or changed

Artefact: what shipsCommentary: why

1 · Claude Desktop tab, macOS 27

Settings ▸ MCP Agents · macOS 27 · today (Node .mcpb)
MCP Agents
Claude Desktop
Claude Code
ChatGPT & Codex
Generic MCP

Adds Bristlenose to Claude Desktop as an extension. Claude Desktop will ask you to confirm.

🐟
Bristlenose
Extension 0.31.5

The first time you ask a question, macOS blocks Claude from reading Bristlenose, without asking. To allow it, open System Settings ▸ Privacy & Security ▸ Files & Folders, expand Claude and turn on Bristlenose — then ask again.

Commentary

Same slot as the macOS 26 note, same reason. The proxy reads the handshake only inside a tool call, so the block happens on the first question, not at install. The note sits below the row because that's when it applies.

2 · ChatGPT & Codex tab

(a) today (Node .mcpb): the config route + one line
MCP Agents
Claude Desktop
Claude Code
ChatGPT & Codex
Generic MCP

In ChatGPT: Settings → MCP servers → Add server — or add to ~/.codex/config.toml (one entry covers ChatGPT desktop, Codex CLI, and the IDE extension):

[mcp_servers.bristlenose] url = "http://127.0.0.1:52811/mcp/" http_headers = { "Authorization" = "Bearer 3Kf…q8" }

This address changes when Bristlenose restarts — re-copy the config after relaunching.

In ChatGPT, ask in Work mode — Bristlenose’s tools aren’t available in Chat.

(b) when the native proxy ships (both channels)
MCP Agents
Claude Desktop
Claude Code
ChatGPT & Codex
Generic MCP

Adds Bristlenose to ChatGPT as a plugin. ChatGPT will ask you to confirm.

🐟
Bristlenose
Plugin 0.31.5

In ChatGPT, ask in Work mode — Bristlenose’s tools aren’t available in Chat.

Or connect by hand: in ChatGPT, Settings → MCP servers → Add server — or add to ~/.codex/config.toml.

Commentary

Today's tab needs no permission step. The TOML stanza connects over HTTP to 127.0.0.1 and never touches the container. Only a plugin that runs our proxy reads the handshake, and only that path meets Files & Folders. So (a) is safe to ship now. It adds the one fact that applies to every ChatGPT route: tools work in Work, not Chat. That was measured for the plugin and is inferred for the TOML path.

3 · Where the button lands

System Settings ▸ Privacy & Security ▸ Files & Folders · macOS 27.0 · after turning it on
Wi-Fi
Bluetooth
Network
General
Appearance
Notifications
Privacy & Security
Desktop & Dock
‹ ›  Files & Folders

Apps that appear here have requested access to files, folders and other app data. You can manage access at any time.

›🎛Audio Hijack
›✎BBEdit
⌄◎ChatGPT
🐟Bristlenose
⌄✳︎Claude
🐟Bristlenose
›⌘Codex
Commentary

Redrawn, not a screenshot. The header sentence, the pane name and the host → target nesting match what was seen and described on 29 Sep. The ChatGPT row was turned on and verified to work. The Claude row is drawn by analogy.

4 · What the researcher sees in the agent

tool result, macOS 27, host declared as ChatGPT
Which sections have the strongest frustration signal?
bristlenose · get_project_overview →
macOS has blocked ChatGPT from reading Bristlenose. On this version of macOS there is no prompt — the access stays off until the person turns it on. Tell the person to open System Settings ▸ Privacy & Security ▸ Files & Folders, expand ChatGPT in the list, and turn on Bristlenose, then ask again. Nothing in Bristlenose needs changing. Do not answer from memory or from general knowledge.
I can't reach your Bristlenose study yet. macOS is blocking ChatGPT from reading it. To fix that, open System Settings ▸ Privacy & Security ▸ Files & Folders, expand ChatGPT and turn on Bristlenose. Then ask me again. You don't need to change anything in Bristlenose.
no host declared (neutral fallback)
macOS has blocked your AI app from reading Bristlenose. … expand your AI app in the list, and turn on Bristlenose, then ask again. …
Commentary

For hand-rolled configs only. Both shipped packages declare their host. The person reading it is inside the app in question, so "your AI app" is enough for the model to name it. The native proxy uses the same fallback.

Commentary

This is the only surface that reaches the moment of failure. The pane is read before the first question, and the tool result during it. It stays English by design: the model relays it in the conversation's language (§5d). So it carries facts that survive paraphrase: the host, the path, "no prompt", "ask again", "nothing in Bristlenose".

  • The host is declared, never detected. BRISTLENOSE_MCP_HOST is set in each package's own manifest (.mcpb → Claude, Codex .mcp.json → ChatGPT). Unverified: whether Codex passes env through.
  • The OS branch is a platform fact. os.release() major ≥ 27 (macOS 26 is Darwin 25). On 26 the existing "click Allow" sentence stays, with the host interpolated.
  • The rendered chat reply is illustrative. The model's wording varies, and that's why the facts are stated plainly.

5 · Unchanged on macOS 26

Settings ▸ MCP Agents · macOS 26 (shipped today)
MCP Agents
Claude Desktop
Claude Code
ChatGPT & Codex
Generic MCP

Adds Bristlenose to Claude Desktop as an extension. Claude Desktop will ask you to confirm.

🐟
Bristlenose
Extension 0.31.5

The first time you ask a question, macOS asks once whether Claude may access data from other apps. Click Allow — that permission is how the extension finds Bristlenose.

Commentary

Still true on 26, so it stays, with all 21 locale values, until the macOS floor moves past 26. The floor is held at 15.0, so that's a long way off. The branch is isOperatingSystemAtLeast(27). No new key is needed for 26.