MCP Agents — the projects table, beneath what ships today

The pane above the divider is the shipped one, structure unchanged. The table is added underneath: the connection is set up once, the projects list is what you come back to check.

20 Aug 2026 · drawn at the shipped 660pt · every string below is either a shipped key or a marked change — the mockup is the spec

MCP Agents
General
Appearance
LLM Provider
Transcription
Accounts
MCP Agents

Agents only see open projects

Anonymise
Remove participant names
Claude Desktop
Claude Code
ChatGPT & Codex
Generic MCP

Adds Bristlenose as a Claude Desktop extension. Confirm the install, then Allow access to data from other apps.

🐟
Bristlenose
Extension 0.26.0 (92aac14)
Projects Open to agents: 2 projects · 4 sessions
Access Project Sessions Last asked
Active
🏉foo
3 Just now
🐟IKEA with uxfriendsminimised
1 12 min ago
🎓New Project 2 Access turned off
4 Never
Available when opened
🌪folder-of-horrors
42 Never

Last asked covers this session only — no history is kept.

The empty state

The pane lists only projects that have Agent Access on — so a researcher who has never turned it on sees nothing, and this is the one moment the audit surface has to point at the management surface.

Projects
No projects are shared with agents
Select a project, then choose Project ▸ Turn On Agent Access.

Strings — shipped, changed, new

KeyShipped todayProposedCost
STRINGS THIS SECTION NEEDS
mcpAgents.groupActiveActiveNew · 21
mcpAgents.groupAvailableAvailable when openedNew · 21
mcpAgents.colAccessAccess — headed so it does not read as cloud import's batch-selection column; short so the column stays narrow. The full verb lives in the tooltip.New · 21
menu.project.turnOffAgentAccessTurn Off Agent Accessreused — tooltip + a11y label on the checkbox, so the column can stay narrow ("Access") while the control still speaks the sidebar's verbNone
mcpAgents.colSessionsSessionsNew · 21
mcpAgents.colLastAskedLast askedNew · 21
mcpAgents.lastAskedNeverNever — an em-dash announces as nothingNew · 21
mcpAgents.receiptOffAccess turned off — session receipt, gone next open; short to match the column headerNew · 21
mcpAgents.windowMinimisedminimised — explains an Active row with no visible windowDEFERRED 21 Aug 2026 — not seeded, not built
`WindowRoster` deliberately holds no window state (its own doc comment declines to become "an approximation of AppKit's mainWindow"), so this needs new per-window observers plumbed into it. And minimised is only one of four reasons an Active row has no visible window — behind Settings, another Space, and a window tab are the others — so singling it out is arbitrary unless it is the common one. The group header already carries the fact that decides exposure. Additive whenever it is wanted.
mcpAgents.emptyTitleNo projects are shared with agentsNew · 21
mcpAgents.emptyHintSelect a project, then choose Project ▸ Turn On Agent Access. — names the menu-bar path, not a gesture: the HIG calls it Control-click or secondary click, never right-click, and requires every context-menu command to exist in the menu bar anywayNew · 21
mcpAgents.sessionScopeNoteLast asked is remembered only while a project is open. — the times live in memory per serve, so a project asked about yesterday reads Never after a relaunch. Reworded 22 Aug 2026: this used to end “— no history is kept”, which is a product-wide negative claim and is false. Every MCP tool call is logged to the project’s bristlenose.log, and has been since 30 Jul. The clause is cut rather than replaced with a pointer — this line labels a column, it is not the privacy notice. That is SECURITY.md § Agent access record; reasoning in design-mcp-server.md §7a.New · 21
mcpAgents.rollupOpen to agents: {{p}} projects · {{s}} sessions — renamed from “Readable now” on 22 Aug 2026. That noun promised reachability while the count is a permission (window open + Agent Access on), so it was true only while the sidecar happened to be healthy. “Open to agents” is immune to serve state and echoes the header sentence above the table. Decision and the rule bounding the predicate: design-mcp-extension.md §5a-ter.New · 21 · plurals
STRINGS THE MODEL MAKES FALSE
mcpAgents.header Agents read one project at a time — the one you turned on most recently Agents only see open projects — shortened again on 21 Aug 2026 and set as body copy: the Agent Access half is the register's tick column, and a heading was competing with the register's own Reword · 21
shipped string is now false
mcpAgents.badgeTooltip Agent Access is on for this project. Agents read one project at a time. second sentence must go — it is false under plural scope, and this is the sidebar tooltip Reword · 21
mcpAgents.nowShowing Agents are reading: {{project}} retired — the table replaces the single-project line Retire · 21
REWRITES OF STRINGS THE MODEL DOES NOT TOUCH — each needs its own reason
menu.quotes.anonymiseAnonymise unchanged — shared with Export, one word for one concept
menu.quotes.anonymiseHint Remove participant names Agents see speaker codes Fork · 21
the Quotes menu and Export share this key
mcpAgents.claudeDesktopHint Adds Bristlenose to Claude Desktop as an extension. Claude Desktop will ask you to confirm. Adds Bristlenose as a Claude Desktop extension. Confirm the install, then Allow access to data from other apps.
absorbs the prompt note — two dialogs, in order, one string
Reword · 21
mcpAgents.claudeDesktopPromptNote 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. retired — folded into the hint above Retire · 21

Resolved: the sidebar's context menu uses a verb swap ("Turn On / Turn Off Agent Access") and this table uses a checkbox — that is not two grammars for one act, it is being native to each context. macOS context menus carry verbs; AppKit table views carry checkboxes. The shipped verb still supplies the checkbox's tooltip and accessibility label, so the two surfaces name the same act in each surface's own idiom.