mirror of
https://github.com/N1-AI/claude-hidden-toolkit.git
synced 2026-06-23 11:39:56 +02:00
Add tool-catalog: 24 hidden tools from desktop app binary analysis
Documents 24 tools found in Claude.app binary (app.asar/index.js) that are not listed in the deferred tools system-reminder. Organized into 7 categories: - Widget Tools (2): inline SVG/HTML rendering via @ant/imagine-server - Preview Tools (13): dev server and browser preview in code tasks - Computer Use (1, 13 actions): desktop automation via screenshot-then-act - Terminal & Roots (2): IDE-plugin-only terminal reader and MCP roots - Office Add-in (5): Excel/Word/PowerPoint integration via Claude add-in - Conversation (1): internal compaction service, not user-callable - Feature Flags & Codenames: flags, codenames, Swift APIs, config keys Each tool includes verification status (CONFIRMED/NOT FOUND/UNTESTED), parameter schemas, and session-type availability matrix. Tone cleanup: removed speculative language per CLAUDE.md style guide. States facts from binary analysis, marks unverified claims explicitly.
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
# Hidden / Unlisted Tools
|
||||||
|
|
||||||
|
Tools found in the Claude.app binary that are not listed in the deferred tools system-reminder. These tools are gated by platform, feature flags, or session type. Many are visible to users in the UI but are not exposed to the AI assistant via `tool_search` or MCP tool registration.
|
||||||
|
|
||||||
|
**Discovery method:** Extracted `app.asar`, searched `index.js` for tool registration patterns not in the deferred tools list.
|
||||||
|
|
||||||
|
**Last updated:** 2026-03-19
|
||||||
|
|
||||||
|
**Verified across:** Dispatch, Cowork task, code task, Claude Code CLI, Claude Desktop main chat, claude.ai web chat
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Matrix
|
||||||
|
|
||||||
|
| Category | Count | Desktop chat | Web chat | Dispatch | Cowork | Code task | CLI |
|
||||||
|
|----------|-------|--------------|----------|----------|--------|-----------|-----|
|
||||||
|
| Widget Tools | 2 | CONFIRMED | CONFIRMED | NOT FOUND | NOT FOUND | NOT FOUND | NOT FOUND |
|
||||||
|
| Preview Tools | 13 | — | — | — | — | CONFIRMED | — |
|
||||||
|
| Computer Use | 1 (13 actions) | — | — | via Chrome MCP | — | — | — |
|
||||||
|
| Terminal/Roots | 2 | NOT FOUND | NOT FOUND | NOT FOUND | NOT FOUND | NOT FOUND | NOT FOUND |
|
||||||
|
| Office Add-in | 5 | untested | — | — | — | — | — |
|
||||||
|
| Conversation | 1 | internal only | internal | internal | internal | internal | internal |
|
||||||
|
|
||||||
|
**Total: 24 tools.** 14 verified working, 5 untested (require Office), 5 not callable in any tested context.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool Categories
|
||||||
|
|
||||||
|
1. **[Widget Tools](widget-tools.md)** (2) — Inline SVG/HTML rendering.
|
||||||
|
CONFIRMED in Claude Desktop main chat and claude.ai web chat.
|
||||||
|
Not exposed via `tool_search` in any agentic context (Cowork, Dispatch, code task, CLI).
|
||||||
|
Injected by `@ant/imagine-server` at the Electron renderer layer.
|
||||||
|
|
||||||
|
2. **[Preview Tools](preview-tools.md)** (13) — Dev server and browser preview.
|
||||||
|
CONFIRMED in code tasks only, under `mcp__Claude_Preview__*` namespace.
|
||||||
|
|
||||||
|
3. **[Computer Use Tools](computer-use-tools.md)** (1, 13 actions) — Desktop automation.
|
||||||
|
Verified via Chrome MCP (`mcp__Claude_in_Chrome__computer`) in Dispatch sessions.
|
||||||
|
|
||||||
|
4. **[Terminal & Roots Tools](terminal-and-roots.md)** (2) — Terminal reader and MCP roots inspector.
|
||||||
|
NOT FOUND in any tested context. Likely IDE-plugin-only (VS Code extension, JetBrains plugin).
|
||||||
|
|
||||||
|
5. **[Office Add-in Tools](office-addin-tools.md)** (5) — Excel/Word/PowerPoint integration.
|
||||||
|
UNTESTED — requires Microsoft Office with the Claude add-in connected.
|
||||||
|
|
||||||
|
6. **[Conversation Tools](conversation-tools.md)** (1) — Context compaction.
|
||||||
|
Internal only. Not user-callable. Correct behavior.
|
||||||
|
|
||||||
|
7. **[Feature Flags & Codenames](feature-flags-and-codenames.md)** — Feature flags, internal codenames, Swift APIs, and config keys found in the binary.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
See `screenshots/` directory:
|
||||||
|
|
||||||
|
| File | Contents |
|
||||||
|
|------|---------|
|
||||||
|
| widget-demo-desktop-live.png | Live Claude Desktop — widget tools active (2026-03-19) |
|
||||||
|
| widget-screenshot.png | First widget render from Cowork session |
|
||||||
|
| screenshot-1773960*.jpg | Session tool-call verification captures |
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Computer Use Tools (`mcp__computer-use__*`)
|
||||||
|
|
||||||
|
**Status:** The `computer` tool exists under `mcp__Claude_in_Chrome__computer` in Dispatch sessions (verified via ToolSearch and Chrome tab context). The standalone `mcp__computer-use__*` namespace was not found in deferred tools — it requires an explicit computer-use MCP connection. The Chrome-based `computer` tool includes all 13 actions documented below.
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. `mcp__Claude_in_Chrome__computer` screenshot action tested and working in Dispatch.
|
||||||
|
|
||||||
|
Full desktop automation via screenshot-then-act loop. Registered as a dynamic MCP server — tools appear as `mcp__computer-use__*` in the deferred tools list only when the computer-use MCP is connected.
|
||||||
|
|
||||||
|
**Priority order (from system prompt):**
|
||||||
|
1. Dedicated MCP for the app (Slack, Gmail, etc.) — fastest, most precise
|
||||||
|
2. Chrome MCP (`mcp__Claude in Chrome__*`) — DOM-aware, faster than pixels
|
||||||
|
3. Computer use — only when neither above fits (native desktop apps, cross-app workflows)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## computer
|
||||||
|
|
||||||
|
The single tool that handles all desktop interactions through an `action` parameter.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Description |
|
||||||
|
|-------|------|----------|-------------|
|
||||||
|
| `action` | string (enum) | **yes** | One of 13 actions (see below) |
|
||||||
|
| `coordinate` | [number, number] | varies | (x, y) pixel coordinates from top-left. Required for click/scroll actions. For `left_click_drag`, this is the **end** position. |
|
||||||
|
| `text` | string | varies | Text to type (for `type`) or key(s) to press (for `key`). For `key`: space-separated, supports modifier combos like "cmd+a" or "ctrl+a". |
|
||||||
|
| `duration` | number | for `wait` | Seconds to wait. Max 5 seconds. |
|
||||||
|
| `scroll_direction` | string (enum) | for `scroll` | "up", "down", "left", "right" |
|
||||||
|
| `scroll_amount` | number | no | Scroll wheel ticks (1-10). Default: 3. |
|
||||||
|
| `start_coordinate` | [number, number] | for `left_click_drag` | Starting position for drag. |
|
||||||
|
| `region` | [number, number, number, number] | for `zoom` | (x0, y0, x1, y1) rectangle to capture. |
|
||||||
|
| `repeat` | number | no | Times to repeat key sequence (1-100). Default: 1. Only for `key` action. |
|
||||||
|
| `ref` | string | for `scroll_to` | Element reference ID from `read_page` or `find` tools (e.g., "ref_1"). Can substitute for `coordinate` in click actions. |
|
||||||
|
| `modifiers` | string | no | Modifier keys for clicks: "ctrl", "shift", "alt", "cmd"/"meta", "win"/"windows". Combine with "+" (e.g., "ctrl+shift"). |
|
||||||
|
| `tabId` | number | **yes** | Tab ID — must be in current group. Use `tabs_context_mcp` first. |
|
||||||
|
| `save_to_disk` | boolean | no | For screenshot/zoom: save image to disk so it can be attached to a message. Returns saved path. |
|
||||||
|
|
||||||
|
### Actions
|
||||||
|
|
||||||
|
| Action | Description | Required Params |
|
||||||
|
|--------|-------------|-----------------|
|
||||||
|
| `left_click` | Left mouse click | coordinate or ref, tabId |
|
||||||
|
| `right_click` | Right mouse click (context menus) | coordinate or ref, tabId |
|
||||||
|
| `double_click` | Double left click | coordinate or ref, tabId |
|
||||||
|
| `triple_click` | Triple left click | coordinate or ref, tabId |
|
||||||
|
| `type` | Type text string | text, tabId |
|
||||||
|
| `screenshot` | Take screenshot of the screen | tabId |
|
||||||
|
| `wait` | Wait N seconds | duration, tabId |
|
||||||
|
| `scroll` | Scroll at coordinates | coordinate, scroll_direction, tabId |
|
||||||
|
| `key` | Press keyboard key(s) | text, tabId |
|
||||||
|
| `left_click_drag` | Drag from start to end | start_coordinate, coordinate, tabId |
|
||||||
|
| `zoom` | Capture region for close inspection | region, tabId |
|
||||||
|
| `scroll_to` | Scroll element into view by ref ID | ref, tabId |
|
||||||
|
| `hover` | Move cursor without clicking (tooltips, dropdowns, hover states) | coordinate or ref, tabId |
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- Every action requires `tabId` — call `tabs_context_mcp` first
|
||||||
|
- Key combos use platform modifier: "cmd" on Mac, "ctrl" on Windows/Linux
|
||||||
|
- `save_to_disk` returns a file path — only use when sharing the screenshot with the user
|
||||||
|
- Click positioning tip from system prompt: "cursor tip in the center of the element, don't click edges"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Access Flow: request_access
|
||||||
|
|
||||||
|
Before any computer-use action, `request_access` must be called with the list of applications needed. This is a permission handler invoked as `computer:request_access` — it functions like a tool call but goes through the permission system.
|
||||||
|
|
||||||
|
### Input
|
||||||
|
|
||||||
|
| Param | Type | Description |
|
||||||
|
|-------|------|-------------|
|
||||||
|
| `apps` | array | List of applications to request access to |
|
||||||
|
|
||||||
|
### Tiered App Access
|
||||||
|
|
||||||
|
| App Category | Tier | What's Allowed |
|
||||||
|
|-------------|------|----------------|
|
||||||
|
| **Browsers** (Safari, Chrome, Firefox, Edge, Arc, etc.) | `read` | Visible in screenshots, but clicks and typing blocked. Use Chrome MCP instead. |
|
||||||
|
| **Terminals & IDEs** (Terminal, iTerm, VS Code, JetBrains, etc.) | `click` | Visible and left-clickable, but typing/key presses/right-click restricted. |
|
||||||
|
| **All other apps** | `full` | Full access — screenshots, clicks, typing, all interactions. |
|
||||||
|
|
||||||
|
### Returns
|
||||||
|
|
||||||
|
| Field | Type | Description |
|
||||||
|
|-------|------|-------------|
|
||||||
|
| `granted` | array | Apps that were approved with their bundleId and tier |
|
||||||
|
| `denied` | array | Apps that were denied with bundleId and reason ("user_denied") |
|
||||||
|
| `flags` | object | Permission flags |
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- User approves each application explicitly via a dialog
|
||||||
|
- May need to call again mid-task if another app is needed
|
||||||
|
- Browser tier (`read`) is a hard restriction — use Chrome MCP for browser interaction
|
||||||
|
- Terminal tier (`click`) blocks typing — use bash tools for terminal interaction
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Teach Mode: request_teach_access + teach_step
|
||||||
|
|
||||||
|
An interactive walkthrough system for showing users how to do something on their screen. This is the system behind the `chicago` codename (see [feature-flags-and-codenames.md](feature-flags-and-codenames.md)).
|
||||||
|
|
||||||
|
**Trigger:** When a user wants to be "walked through" or "shown how" to do something, the model offers a choice between (1) interactive walkthrough and (2) text explanation.
|
||||||
|
|
||||||
|
### Flow
|
||||||
|
1. Call `request_teach_access` — activates teach mode for the session
|
||||||
|
2. Call `teach_step` repeatedly — each step shows the user what to do
|
||||||
|
3. The user follows along; teach mode tracks their progress
|
||||||
|
4. Session ends when user exits or all steps complete
|
||||||
|
|
||||||
|
### Internal state
|
||||||
|
- `teachModeActive` (boolean) — whether teach mode is running
|
||||||
|
- `teachModeEnteredAt` (timestamp) — when teach mode started
|
||||||
|
- `cuLockAcquiredAt` (timestamp) — when computer use lock was acquired
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- These are not standard tool registrations — they're handled by the teach mode subsystem
|
||||||
|
- `teach_step` returns a Promise that resolves when the user takes action (`{action: "exit"}` etc.)
|
||||||
|
- Only one pending teach step at a time — a new one auto-resolves the previous as "exit"
|
||||||
|
- The `isChicagoEnabled` feature flag forces teach mode enabled regardless of GrowthBook config
|
||||||
|
- `chicagoAutoUnhide` (default: true) and `chicagoUserDeniedBundleIds` (default: []) control teach mode UX
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Computer Use Lock System
|
||||||
|
|
||||||
|
Computer use has a session-level lock to prevent multiple CU sessions from conflicting:
|
||||||
|
|
||||||
|
- Only one session can hold the CU lock at a time
|
||||||
|
- Lock tracks duration held and whether teach mode was active
|
||||||
|
- Release triggers include: session end, explicit release, teach mode exit
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# Conversation Tools (1 tool)
|
||||||
|
|
||||||
|
**Status:** Internal only — not callable by users or the assistant. This tool is constructed dynamically by the compaction service and sent to the Anthropic API as part of a separate API call. It is never registered as an MCP tool or deferred tool. This is correct behavior — it is not intended to be user-callable.
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. Not callable from Dispatch, Cowork tasks, code tasks, or Claude Code CLI.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## summarize_conversation
|
||||||
|
|
||||||
|
Used by the compaction service to create structured summaries when a conversation exceeds context limits.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Description |
|
||||||
|
|-------|------|----------|-------------|
|
||||||
|
| `summary` | string | **yes** | The conversation summary text |
|
||||||
|
| `entities` | array of strings | no | Key entities mentioned in the conversation |
|
||||||
|
| `next_action` | string | no | Description of the next action to take |
|
||||||
|
|
||||||
|
### How it works
|
||||||
|
|
||||||
|
This tool is not called by the user or the assistant directly. It is used internally:
|
||||||
|
|
||||||
|
1. The compaction service detects when messages exceed a threshold
|
||||||
|
2. It calls the Anthropic API with the conversation history
|
||||||
|
3. The API uses this tool to return a structured summary
|
||||||
|
4. The summary replaces the old messages, preserving context
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
The tool's descriptions are configured server-side via a config object with fields:
|
||||||
|
- `toolDescription` — the tool's own description
|
||||||
|
- `summaryDescription` / `summary_description`
|
||||||
|
- `entitiesDescription` / `entities_description`
|
||||||
|
- `nextActionDescription` / `next_action_description`
|
||||||
|
- `userPromptTemplate` / `user_prompt_template`
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- Uses `anthropic-beta` header when calling the API
|
||||||
|
- Requires an active API token (from OAuth flow)
|
||||||
|
- The tool definition is constructed dynamically from server config, not hardcoded
|
||||||
|
- There is an internal counter `WV` (starts at 0) that may track compaction count
|
||||||
|
- Will silently return null if: messages are empty/too few, no API token, or config is missing
|
||||||
|
- Uses `maxRetries: 2` for the API call
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
# Feature Flags & Internal Codenames
|
||||||
|
|
||||||
|
Feature flags, internal codenames, Swift native APIs, configuration keys, and other internals found in the Claude.app binary.
|
||||||
|
|
||||||
|
**Source:** Static analysis of `index.js` extracted from `app.asar`
|
||||||
|
**Last updated:** 2026-03-19
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Feature Flags](#feature-flags)
|
||||||
|
2. [Internal Codenames](#internal-codenames)
|
||||||
|
3. [Swift Native APIs](#swift-native-apis)
|
||||||
|
4. [Configuration Keys](#configuration-keys)
|
||||||
|
5. [The Clod Avatar](#the-clod-avatar)
|
||||||
|
6. [Apple App References](#apple-app-references)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feature Flags
|
||||||
|
|
||||||
|
Boolean switches (default `false`) that gate unreleased or experimental functionality.
|
||||||
|
|
||||||
|
### Extensions & Developer Tools
|
||||||
|
|
||||||
|
| Flag | Default | Description |
|
||||||
|
|------|---------|-------------|
|
||||||
|
| `isDxtEnabled` | `false` | Load browser extensions in app. DXT = Desktop Extension, Anthropic's extension format for the desktop client. |
|
||||||
|
| `isDxtDirectoryEnabled` | `false` | Enables a browsable extensions directory UI. Separate from `isDxtEnabled`, suggesting a phased rollout (sideloading first, then directory). |
|
||||||
|
| `isLocalDevMcpEnabled` | `false` | Allows local development MCP servers to connect to the app. For developers building custom integrations. |
|
||||||
|
| `isUvSystemPythonEnabled` | `false` | Use the system-installed Python for UV runtime extensions instead of a managed installation. |
|
||||||
|
|
||||||
|
### Prototypes & Experiments
|
||||||
|
|
||||||
|
| Flag | Default | Description |
|
||||||
|
|------|---------|-------------|
|
||||||
|
| `isSparkleHedgehogEnabled` | `false` | Activates the sparkleHedgehog prototype. See [codenames](#sparklehedgehog) below. |
|
||||||
|
| `isMidnightOwlEnabled` | `false` | Activates the midnightOwl prototype. Has a corresponding `setEnabled()` Swift native API method, indicating macOS system-level integration beyond the web layer. |
|
||||||
|
| `isPhoenixRisingAgainEnabled` | `false` | Debug override for a new auto-updater system. The "Again" suffix indicates this replaces a previous updater. |
|
||||||
|
| `isChicagoEnabled` | `false` | Forces `chicago_config.enabled` and `teachModeEnabled` to `true` regardless of GrowthBook remote config. Requires restart. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Internal Codenames
|
||||||
|
|
||||||
|
Anthropic uses an adjective+animal naming convention for internal prototypes (with one geographic exception). Each codename has its own configuration keys in the app's settings store.
|
||||||
|
|
||||||
|
### sparkleHedgehog
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `sparkleHedgehogAppearance` | `"default"` | string |
|
||||||
|
| `sparkleHedgehogScale` | `1` | number |
|
||||||
|
|
||||||
|
Has an `appearance` setting (implying multiple appearances) and a `scale` factor. The keys are consistent with a UI appearance/theme system or a visual element with configurable size and style.
|
||||||
|
|
||||||
|
### plushRaccoon
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `plushRaccoonEnabled` | — | bool |
|
||||||
|
| `plushRaccoonOption1` | `"off"` | string |
|
||||||
|
| `plushRaccoonOption2` | `"off"` | string |
|
||||||
|
| `plushRaccoonOption3` | `"off"` | string |
|
||||||
|
|
||||||
|
Three independently togglable sub-options, all defaulting to `"off"` as strings (not booleans), suggesting they may have more states than just on/off. Purpose not determined from binary analysis alone.
|
||||||
|
|
||||||
|
### quietPenguin
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `quietPenguinEnabled` | — | bool |
|
||||||
|
|
||||||
|
Single on/off toggle. Name suggests notification suppression or a do-not-disturb mode.
|
||||||
|
|
||||||
|
### louderPenguin
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `louderPenguinEnabled` | — | bool |
|
||||||
|
|
||||||
|
Counterpart to quietPenguin. Same structure. Name suggests enhanced notifications or more aggressive alerting. These two form a notification spectrum: quiet ← normal → louder.
|
||||||
|
|
||||||
|
### chillingSloth
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `chillingSlothLocation` | `"default"` | string |
|
||||||
|
|
||||||
|
A `location` setting with a `"default"` value. Consistent with an idle-state behavior or ambient UI element that can appear in different positions (toolbar, menu bar, floating overlay, system tray, etc.).
|
||||||
|
|
||||||
|
### midnightOwl
|
||||||
|
|
||||||
|
| Key | Type |
|
||||||
|
|-----|------|
|
||||||
|
| Feature flag: `isMidnightOwlEnabled` | bool |
|
||||||
|
| Swift API: `midnightOwl.setEnabled()` | method |
|
||||||
|
|
||||||
|
Has both a feature flag and a Swift native API `setEnabled()` method through `@ant/claude-swift`, meaning it hooks into macOS at the system level. The "midnight" prefix and native integration are consistent with scheduled background tasks or time-based automation. The existence of `coworkScheduledTasksEnabled` and `ccdScheduledTasksEnabled` config keys (both `false`) suggests scheduled task infrastructure exists in the app.
|
||||||
|
|
||||||
|
### floatingAtoll
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `floatingAtollActive` | — | bool |
|
||||||
|
| *(dimensions)* | 320 × 54 px | hardcoded |
|
||||||
|
| *(offset)* | 12 px | hardcoded |
|
||||||
|
|
||||||
|
A floating UI element with hardcoded pixel dimensions: 320px wide, 54px tall, with a 12px offset. This is the quick-access floating bar — visible to users in Cowork sessions. The naming parallels Apple's Dynamic Island ("atoll" = ring-shaped island). At 320×54px it fits a slim toolbar or single-line input. Corresponds to the `quickAccess` Swift native API.
|
||||||
|
|
||||||
|
### chicago
|
||||||
|
|
||||||
|
| Key | Default | Type |
|
||||||
|
|-----|---------|------|
|
||||||
|
| `chicagoEnabled` | — | bool |
|
||||||
|
| `chicagoAutoUnhide` | — | bool |
|
||||||
|
| `chicagoUserDeniedBundleIds` | — | string[] |
|
||||||
|
| Feature flag: `isChicagoEnabled` | `false` | bool (overrides GrowthBook) |
|
||||||
|
| Related: `teachModeEnabled` | — | bool |
|
||||||
|
|
||||||
|
The most well-documented codename and the only one that breaks the animal naming convention. This is the interactive teach mode / guided walkthrough system (see [computer-use-tools.md](computer-use-tools.md#teach-mode-request_teach_access--teach_step) for the teach mode tools). `chicagoUserDeniedBundleIds` tracks which macOS applications the user has declined to grant Claude access to during walkthroughs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Swift Native APIs (`@ant/claude-swift`)
|
||||||
|
|
||||||
|
The `@ant/claude-swift` module is a native addon bridging Claude's Electron UI with macOS system capabilities.
|
||||||
|
|
||||||
|
| API Namespace | Purpose |
|
||||||
|
|---------------|---------|
|
||||||
|
| `quickAccess` | Floating quick-access panel. System-level window management for the always-available Claude input (floatingAtoll). |
|
||||||
|
| `notifications` | macOS native notification delivery via Notification Center. |
|
||||||
|
| `desktop` | Desktop environment integration — window positioning, display detection. |
|
||||||
|
| `api` | Direct API communication layer for authenticated requests to Anthropic's backend. |
|
||||||
|
| `midnightOwl` | Native hook for the midnightOwl prototype. Exposes `setEnabled()`. |
|
||||||
|
| `vm` | Virtual machine management — `isRunning`, `isGuestConnected`. Handles lifecycle for Cowork's Linux VMs. |
|
||||||
|
| `hotkey` | Global keyboard shortcut registration. Works even when the app isn't focused. |
|
||||||
|
| `permissionFixer` | macOS permission remediation. Guides users through granting accessibility, screen recording, or automation permissions. |
|
||||||
|
| `computerUse` | Computer use capability bindings — screen reading, mouse/keyboard control, GUI automation. Separate SPM product, `computer_use.node`, nest builds only. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration Keys
|
||||||
|
|
||||||
|
Additional configuration keys found in the app's settings store.
|
||||||
|
|
||||||
|
### Security & Permissions
|
||||||
|
|
||||||
|
| Key | Default | Notes |
|
||||||
|
|-----|---------|-------|
|
||||||
|
| `secureVmFeaturesEnabled` | `true` | VM sandboxing — Claude's compute runs in isolation |
|
||||||
|
| `bypassPermissionsModeEnabled` | `false` | Skip permission checks. Dev-only. |
|
||||||
|
| `autoPermissionsModeEnabled` | `false` | Auto-grant permissions without user confirmation. Dev-only. |
|
||||||
|
| `allowAllBrowserActions` | `false` | Unrestricted browser automation |
|
||||||
|
| `dispatchTrustedCodeWorkspaces` | `[]` | Folders where code execution is trusted without confirmation |
|
||||||
|
| `localAgentModeTrustedFolders` | `[]` | Folders trusted for local agent operations |
|
||||||
|
|
||||||
|
### Launch & Session
|
||||||
|
|
||||||
|
| Key | Default | Notes |
|
||||||
|
|-----|---------|-------|
|
||||||
|
| `launchEnabled` | `true` | Whether the app is allowed to launch |
|
||||||
|
| `launchPreviewPersistSession` | `false` | Persist preview sessions across app restarts |
|
||||||
|
|
||||||
|
### Capabilities
|
||||||
|
|
||||||
|
| Key | Default | Notes |
|
||||||
|
|-----|---------|-------|
|
||||||
|
| `coworkWebSearchEnabled` | `true` | Web search in Cowork mode |
|
||||||
|
| `coworkScheduledTasksEnabled` | `false` | Scheduled/recurring tasks in Cowork |
|
||||||
|
| `ccdScheduledTasksEnabled` | `false` | Scheduled tasks in Claude Code Desktop |
|
||||||
|
| `keepAwakeEnabled` | `false` | Prevent system sleep while Claude is working |
|
||||||
|
| `dockBounceEnabled` | `false` | Bounce Claude's dock icon for attention |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The Clod Avatar
|
||||||
|
|
||||||
|
`default.clod` is a zip archive found in the app binary containing assets for an alternative AI persona:
|
||||||
|
|
||||||
|
| File | Contents |
|
||||||
|
|------|---------|
|
||||||
|
| `personality.txt` | Persona definition ("You are Clod, a minimalist AI assistant...") |
|
||||||
|
| `cursor.png` | Custom mouse cursor graphic |
|
||||||
|
| `idling_0.png`, `idling_1.png`, `idling_2.png` | Idle animation frames |
|
||||||
|
| `working_0.png`, `working_1.png`, `working_2.png`, `working_3.png` | Working animation frames |
|
||||||
|
| `celebrating_0.png`, `celebrating_1.png` | Success animation frames |
|
||||||
|
| `error_0.png` | Error state |
|
||||||
|
|
||||||
|
"Clod" is a play on "Claude." The `.clod` format is a self-contained avatar package: personality definition plus sprite sheets for different states (idle, working, celebrating, error). The working animation has multiple frames for a looping animation during processing.
|
||||||
|
|
||||||
|
This may connect to sparkleHedgehog — the `appearance` and `scale` settings could control which `.clod` avatar is active and how large it renders. The `.clod` format being a zip archive means custom avatar packs could be created and distributed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Apple App References
|
||||||
|
|
||||||
|
String references found in `index.js` suggesting planned or gated native integrations:
|
||||||
|
|
||||||
|
Calendar, Reminders, Notes, Contacts, Photos, Health, Maps, Safari, Shortcuts, Music, Freeform, Focus
|
||||||
|
|
||||||
|
No tool registration patterns (`name` + `inputSchema`) were found for any of these in the current binary. These are string references only — they may represent planned integrations, configuration labels, or permission identifiers rather than functional tool implementations.
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
# Office Add-in Tools (5 tools)
|
||||||
|
|
||||||
|
**Status:** UNTESTED — requires Microsoft Office (Excel/Word/PowerPoint) with the Claude add-in connected. `tool_search` returns nothing for "office", "workbook", or "addin" in any session type, indicating these tools are only registered when the Office add-in WebSocket bridge is active.
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. Could not test (no Office installed). Schemas documented from binary extraction only.
|
||||||
|
|
||||||
|
Tools for direct Excel/Word/PowerPoint integration via the Claude add-in panel. Requires the Office add-in to be installed and connected to Claude Desktop.
|
||||||
|
|
||||||
|
**Manifest URL:** `https://pivot.claude.ai/manifest.xml`
|
||||||
|
**Add-in UUID:** `29673e3c-d826-4f00-92ee-162334a52b1a`
|
||||||
|
**Module ID:** `office-addin`
|
||||||
|
**OAuth scope (when enabled):** `user:inference user:office`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## open_office_file
|
||||||
|
|
||||||
|
Opens an Office file in the default application and automatically opens the Claude add-in panel.
|
||||||
|
|
||||||
|
On macOS, the add-in is opened using the Accessibility API (requires Accessibility permissions). On Windows, the add-in auto-opens via manifest configuration.
|
||||||
|
|
||||||
|
After opening, use `office_addin_run` or `office_addin_get_context` to interact with the file.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Description |
|
||||||
|
|-------|------|----------|-------------|
|
||||||
|
| `path` | string | **yes** | Absolute path to the Office file to open |
|
||||||
|
|
||||||
|
### Supported file types
|
||||||
|
- `.xlsx` → Microsoft Excel
|
||||||
|
- `.docx` → Microsoft Word
|
||||||
|
- `.pptx` → Microsoft PowerPoint
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- macOS requires Accessibility permissions for the add-in panel auto-open
|
||||||
|
- The app-to-application mapping is hardcoded
|
||||||
|
- Throws `Unknown Office extension` for any other file type
|
||||||
|
- The tool description mentions `office_addin_task` as an alternative to `office_addin_run` — this name appears in the description text but has no separate tool registration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## close_office_file
|
||||||
|
|
||||||
|
Closes an Office file that is currently open.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Default | Description |
|
||||||
|
|-------|------|----------|---------|-------------|
|
||||||
|
| `path` | string | **yes** | — | Absolute path to the Office file to close |
|
||||||
|
| `save_changes` | boolean | no | `true` | If true, saves changes before closing. If false, discards changes. |
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- Only works with `.xlsx`, `.docx`, `.pptx`
|
||||||
|
- The file must actually be open in the corresponding Office application
|
||||||
|
- Default is to save
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## office_addin_run
|
||||||
|
|
||||||
|
Execute Office.js code directly in Excel. Changes appear instantly in the document.
|
||||||
|
|
||||||
|
The code runs inside `Excel.run()` with `context` available.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Description |
|
||||||
|
|-------|------|----------|-------------|
|
||||||
|
| `code` | string | **yes** | Office.js code to execute. Has `context` object available. Must call `await context.sync()` to apply changes. |
|
||||||
|
| `display_message` | string | no | Brief user-friendly action label shown in the add-in UI (e.g., "Calculate sum", "Create chart") |
|
||||||
|
| `workbook` | string | no | Target workbook ID (addinId). If not specified, uses the currently selected workbook. Use `list_connected_workbooks` to see available workbooks. |
|
||||||
|
|
||||||
|
### Code examples from description
|
||||||
|
|
||||||
|
Write to cell:
|
||||||
|
```javascript
|
||||||
|
context.workbook.worksheets.getActiveWorksheet().getRange("A1").values = [["Hello"]];
|
||||||
|
await context.sync();
|
||||||
|
```
|
||||||
|
|
||||||
|
Read data:
|
||||||
|
```javascript
|
||||||
|
const range = context.workbook.worksheets.getActiveWorksheet().getRange("A1:B10");
|
||||||
|
range.load("values");
|
||||||
|
await context.sync();
|
||||||
|
range.values; // Returns the data
|
||||||
|
```
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- **Must call `await context.sync()`** after making changes
|
||||||
|
- User must have the Excel add-in open and connected to Claude Desktop
|
||||||
|
- Currently only described for Excel, even though `open_office_file` supports Word and PowerPoint
|
||||||
|
- The `display_message` shows in the add-in UI as a status indicator
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## office_addin_get_context
|
||||||
|
|
||||||
|
Fetch current spreadsheet context: selection, sheets, recent changes, and add-in conversation history.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Default | Description |
|
||||||
|
|-------|------|----------|---------|-------------|
|
||||||
|
| `include_changes` | boolean | no | `true` | Include user change events (edits, inserts, deletes, etc.) |
|
||||||
|
| `include_conversation` | boolean | no | `true` | Include the add-in conversation history |
|
||||||
|
| `include_selection` | boolean | no | `true` | Include current cursor/selection and its values |
|
||||||
|
| `include_sheets` | boolean | no | `true` | Include sheet metadata (names, dimensions, frozen rows/cols) |
|
||||||
|
| `max_changes` | number | no | `100` | Maximum number of change events to return |
|
||||||
|
| `max_messages` | number | no | `50` | Maximum number of conversation messages to return |
|
||||||
|
| `workbook` | string | no | — | Target workbook ID (addinId). If not specified, uses currently selected workbook. |
|
||||||
|
|
||||||
|
### Returns
|
||||||
|
- Current selection address and values
|
||||||
|
- All sheet names and metadata
|
||||||
|
- Recent user edits, inserts, deletes
|
||||||
|
- Prior conversation with the add-in Claude
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- The "add-in conversation" is a separate conversation the user may have had with the Claude embedded in Excel — this provides context on what was discussed
|
||||||
|
- All includes default to `true` — pass `false` to reduce response size
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## list_connected_workbooks
|
||||||
|
|
||||||
|
List all Excel workbooks currently connected via the Claude add-in.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
### Returns
|
||||||
|
|
||||||
|
Connected workbooks with their IDs, document names, and connection details. Use the returned workbook IDs to target specific workbooks in `office_addin_run` and `office_addin_get_context`.
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- Returns `addinId` values used as the `workbook` parameter in other tools
|
||||||
|
- Multiple workbooks can be connected simultaneously
|
||||||
|
- Connection is via WebSocket (`wss://localhost:8766` or configured `OFFICE_ADDIN_BRIDGE_URL`)
|
||||||
|
- If no workbooks are connected, the other tools default to "currently selected" which may fail
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
The Office add-in system uses:
|
||||||
|
1. **WebSocket bridge** — connects Claude Desktop to the Excel add-in running inside Office
|
||||||
|
2. **OAuth authentication** — uses the user's Claude token with `user:office` scope
|
||||||
|
3. **Office.js API** — code runs in Excel's JavaScript runtime via `Excel.run()`
|
||||||
|
4. **Accessibility API** (macOS) — used to auto-open the add-in panel when opening files
|
||||||
|
5. **Profile API** — fetches user's account UUID from `{apiHost}/api/oauth/profile`
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
# Preview Tools
|
||||||
|
|
||||||
|
**Status:** CONFIRMED in Claude Desktop **code task sessions** (via `start_code_task` from Dispatch). Registered under `mcp__Claude_Preview__` namespace. Not available in Cowork task sessions, Dispatch orchestrator, or Claude Code CLI.
|
||||||
|
|
||||||
|
**Total:** 13 tools
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. `preview_start` successfully launched a Vite dev server (port 9322). `preview_list` returned `[]` when no servers running, then showed the running server. `preview_screenshot`, `preview_snapshot`, `preview_eval`, `preview_console_logs` all returned valid responses. Screenshot showed blank page due to misconfigured `launch.json` (not a tool issue).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_start
|
||||||
|
|
||||||
|
Start a dev server by name from `.claude/launch.json`. Reuses the server if already running.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| name | string | yes | Server name from .claude/launch.json |
|
||||||
|
|
||||||
|
**Notes:** Tool description says "ALWAYS use this instead of Bash for running servers." Requires a `.claude/launch.json` config file in the project.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_stop
|
||||||
|
|
||||||
|
Stop a server started with `preview_start`.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID to stop |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_list
|
||||||
|
|
||||||
|
List servers started with `preview_start`. Returns `serverId` values for use with other `preview_*` tools.
|
||||||
|
|
||||||
|
No parameters.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_logs
|
||||||
|
|
||||||
|
Get server stdout/stderr output.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| level | enum | no | "all" (default) or "error" (lines containing error/exception/failed/fatal) |
|
||||||
|
| lines | number | no | Max lines to return (default 50) |
|
||||||
|
| search | string | no | Filter for specific text |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_console_logs
|
||||||
|
|
||||||
|
Get browser console output (log, info, warn, error, debug).
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| level | enum | no | "all" (default), "error" (errors only), "warn" (warnings + errors) |
|
||||||
|
| lines | number | no | Max lines to return (default 50, max 200) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_screenshot
|
||||||
|
|
||||||
|
Take a screenshot of the page. Returns compressed JPEG.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
|
||||||
|
**Notes:** Tool description warns: "DO NOT rely on it for verifying colors, font sizes, or precise styles — use `preview_inspect` with specific CSS properties instead."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_snapshot
|
||||||
|
|
||||||
|
Get an accessibility tree snapshot of the page. Returns text content, roles, and element UIDs.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
|
||||||
|
**Notes:** "PREFERRED over screenshot for verifying text, element presence, and page structure." UIDs can be used with `preview_click` / `preview_fill`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_inspect
|
||||||
|
|
||||||
|
Inspect a DOM element by CSS selector. Returns text content, className, tagName, id, computed styles, and bounding box.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| selector | string | yes | CSS selector (e.g. '.button', '#header') |
|
||||||
|
| styles | string[] | no | CSS properties to return (e.g. ['padding', 'color']). Defaults to common properties. |
|
||||||
|
|
||||||
|
**Notes:** "BEST tool for verifying visual properties like colors, fonts, spacing, and dimensions — more accurate than screenshots."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_click
|
||||||
|
|
||||||
|
Click an element by CSS selector.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| selector | string | yes | CSS selector (e.g. 'button.primary', '#submit', '[data-testid="btn"]') |
|
||||||
|
| doubleClick | boolean | no | Perform a double-click |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_fill
|
||||||
|
|
||||||
|
Fill an input, textarea, or select element with a value.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| selector | string | yes | CSS selector for the input element |
|
||||||
|
| value | string | yes | Value to fill. For select elements, matches by value or text. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_eval
|
||||||
|
|
||||||
|
Execute JavaScript in the preview page. For debugging and inspection only.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| expression | string | yes | JavaScript expression to evaluate in page context. Return value is sent back. |
|
||||||
|
|
||||||
|
**Notes:** "Do NOT use this to implement UI changes the user requests — edit the source code instead. Any DOM modifications via eval are temporary and lost on reload. Wrap multi-step logic in an IIFE."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_network
|
||||||
|
|
||||||
|
List network requests or inspect a specific response body.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| filter | enum | no | "all" (default) or "failed" (4xx/5xx and network errors). Ignored when `requestId` provided. |
|
||||||
|
| requestId | string | no | If provided, returns full response body for that request. |
|
||||||
|
|
||||||
|
**Notes:** Without `requestId`, lists all requests with URL, method, status, and `requestId`. With `requestId`, returns the full response body.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## preview_resize
|
||||||
|
|
||||||
|
Resize the preview viewport for responsive layout testing.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| serverId | string | yes | Server ID |
|
||||||
|
| preset | enum | no | "mobile" (375x812), "tablet" (768x1024), "desktop" (1280x800). Overrides width/height. |
|
||||||
|
| width | number | no | Viewport width in pixels |
|
||||||
|
| height | number | no | Viewport height in pixels |
|
||||||
|
| colorScheme | string | no | Color scheme emulation for dark mode testing |
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Terminal & Roots Tools
|
||||||
|
|
||||||
|
**Status:** NOT FOUND in any tested session type. `tool_search` returns nothing for "read_terminal", "get_roots", "roots", or "terminal" in Dispatch, Cowork tasks, code tasks, or Claude Code CLI. These are likely injected only in IDE integration contexts (VS Code extension, JetBrains plugin).
|
||||||
|
|
||||||
|
**Total:** 2 tools
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. Tested in Dispatch orchestrator, Cowork task session, code task session, and Claude Code CLI — not found in any.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## read_terminal
|
||||||
|
|
||||||
|
Read the contents of the user's integrated terminal panel.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| lines | number | no | How many trailing lines to return. Default 200, max 1000. |
|
||||||
|
| wait_for_output_ms | number | no | Block up to this many ms for new output to arrive before reading. |
|
||||||
|
|
||||||
|
**Returns:** The last ~200 lines with ANSI codes stripped.
|
||||||
|
|
||||||
|
**When to use (from tool description):** "Use when the user references test output, errors, or 'this' in a way that implies terminal content."
|
||||||
|
|
||||||
|
**`wait_for_output_ms` behavior:** Blocks up to the specified duration for new output to arrive before reading. Designed for test watchers (Jest, Vitest, etc.) — edit a file, then `read_terminal` with a wait to get the watcher's response. If no new output arrives, returns the current buffer with a note.
|
||||||
|
|
||||||
|
**Notes:**
|
||||||
|
- ANSI codes are stripped from output
|
||||||
|
- Only reads the integrated terminal panel — not arbitrary shell sessions
|
||||||
|
- Max 1000 lines; for longer outputs you only get the tail
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## get_roots
|
||||||
|
|
||||||
|
Returns the file roots advertised to MCP servers in this session.
|
||||||
|
|
||||||
|
No parameters.
|
||||||
|
|
||||||
|
**Returns:** List of root URIs with optional names:
|
||||||
|
```
|
||||||
|
Available file roots (N):
|
||||||
|
• file:///path/to/root (name)
|
||||||
|
• file:///path/to/another
|
||||||
|
```
|
||||||
|
|
||||||
|
**Notes:**
|
||||||
|
- Returns "No roots available. No folders have been selected for this session." if no folders are mounted
|
||||||
|
- Diagnostic/introspection tool — useful for debugging MCP server access issues
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
# Widget Tools
|
||||||
|
|
||||||
|
**Status:** CONFIRMED in Claude Desktop main chat and claude.ai web chat. Not exposed via `tool_search` in any agentic context — these are Electron renderer-only tools injected into the chat UI layer by `@ant/imagine-server`, not registered through the MCP tool system.
|
||||||
|
|
||||||
|
**Total:** 2 tools
|
||||||
|
|
||||||
|
**Verified:** 2026-03-19. Tested in Dispatch orchestrator, Cowork task session, code task session, Claude Code CLI (not found), and claude.ai web chat (confirmed working).
|
||||||
|
|
||||||
|

|
||||||
|
*Screenshot: Interactive architecture diagram rendered inline via `show_widget`. Captured 2026-03-19 in claude.ai web chat.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## read_me
|
||||||
|
|
||||||
|
Returns required context for `show_widget` (CSS variables, colors, typography, layout rules, examples). Must be called before the first `show_widget` call.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| modules | string[] | no | Which module(s) to load. Options: "diagram", "mockup", "interactive", "data_viz", "art", "chart" |
|
||||||
|
|
||||||
|
**Notes:** The tool description instructs the model: "Call before your first show_widget call. Do NOT mention or narrate this call to the user — it is an internal setup step. Call it silently and proceed directly to the visualization."
|
||||||
|
|
||||||
|
**Returns:** CSS variables, color palettes, typography rules, layout rules, and examples for the requested modules. The `diagram` module alone returns ~300 lines of design system docs including SVG setup rules, color palette tables, font calibration, and full worked examples.
|
||||||
|
|
||||||
|
**Behavior notes:**
|
||||||
|
- Must be called before any `show_widget` call — `show_widget` depends on the context this provides
|
||||||
|
- Can be called again later to load a different module set
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## show_widget (registered as "visualize widget")
|
||||||
|
|
||||||
|
Renders SVG or HTML content progressively as it streams, displayed inline in the chat.
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
|-----------|------|----------|-------------|
|
||||||
|
| title | string | yes | Snake_case identifier for the widget. Used as download filename. |
|
||||||
|
| loading_messages | string[] | yes | 1-4 loading messages shown while rendering. ~5 words each. Match user's language. Use 1 for simple, more for complex. |
|
||||||
|
| widget_code | string | yes | Raw SVG or HTML fragment to render. |
|
||||||
|
|
||||||
|
**Behavior:**
|
||||||
|
- Auto-detects content type: starts with `<svg` → SVG mode (wrapped in a card), otherwise HTML mode
|
||||||
|
- A global `sendPrompt(text)` function is available in the rendered content — sends a message to chat as if the user typed it, enabling interactive chat-loop widgets
|
||||||
|
- The registered tool name is "visualize widget" but the handler matches on "show_widget"
|
||||||
|
- Returns: "Content rendered and shown to the user. Please do not duplicate the shown content in text because it's already visually represented."
|
||||||
|
- Content is streamed as `mimeType: "text/html;profile=mcp-app"`
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
- No `DOCTYPE`, `<html>`, `<head>`, or `<body>` tags in HTML mode — content fragments only
|
||||||
|
- External resources restricted to `cdnjs.cloudflare.com`, `esm.sh`, `cdn.jsdelivr.net`, `unpkg.com` (CSP-enforced)
|
||||||
|
- `localStorage` / `sessionStorage` not available — all state must live in React/JS memory
|
||||||
|
- For serious topics (illness, death, grief, war, etc.) loading messages should be subdued
|
||||||
|
|
||||||
|
**Use cases:** Flowcharts, architecture diagrams, dashboards, forms, calculators, data tables, games, illustrations, or any visual content that benefits from inline rendering.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rendering Modes
|
||||||
|
|
||||||
|
Two rendering modes are referenced in the system prompt documentation:
|
||||||
|
|
||||||
|
### `imagine_html`
|
||||||
|
For interactive content: sliders, buttons, live state displays, charts. The system prompt instructs keeping prose explanations in the normal response text, not embedded in HTML. No card wrapper — whitespace is the container.
|
||||||
|
|
||||||
|
### `imagine_svg`
|
||||||
|
For diagrams. The widget automatically wraps SVG output in a card. The system prompt includes guidance on choosing diagram type based on intent (reference diagram vs. conceptual illustration).
|
||||||
|
|
||||||
|
These are NOT separate tools — they are conceptual rendering modes within `show_widget`. Content type is detected automatically based on whether the content starts with `<svg`.
|
||||||
|
|
||||||
|
### SVG Text Gap System
|
||||||
|
An internal SVG post-processing system (`imagine-text-gaps-*`) creates masks to prevent text overlap in SVG diagrams. It auto-detects intersecting text elements and applies SVG masks. This is handled automatically with no user/model input needed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Design System (from read_me)
|
||||||
|
|
||||||
|
The design system loaded by `read_me` enforces the following rules:
|
||||||
|
|
||||||
|
- **680px viewBox width** — load-bearing, do not change
|
||||||
|
- **Two font sizes only:** 14px (`class="t"` or `"th"`) and 12px (`class="ts"`)
|
||||||
|
- **Pre-built classes:** `t`, `ts`, `th` (text), `box` (neutral rect), `node` (clickable group), `arr` (arrow), `c-{ramp}` (9 color ramps: purple, teal, coral, pink, gray, blue, green, amber, red)
|
||||||
|
- **CSS variables** for all colors — mandatory dark mode support
|
||||||
|
- **No gradients, shadows, or blur** (one linearGradient allowed in illustrative diagrams only)
|
||||||
|
- **Arrow marker defs** must be included in every SVG
|
||||||
|
- **Diagram types:** flowchart, structural, illustrative — chosen by intent, not subject matter
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
The widget system is backed by `@ant/imagine-server` (listed as a dependency in `package.json`). This is the service that handles widget rendering and content delivery.
|
||||||
Reference in New Issue
Block a user