Clawdbot macOS 应用

Clawdbot macOS 配套应用提供菜单栏集成、权限管理和原生 macOS 功能,为您的 AI 助手服务。

Clawdbot macOS 配套应用概述

Clawdbot macOS 应用是 Clawdbot 的菜单栏配套应用。它管理权限,本地管理/连接网关(launchd 或手动),并将 macOS 功能作为节点暴露给代理。

功能

  • 在菜单栏显示原生通知和状态
  • 管理 TCC 提示(通知、辅助功能、屏幕录制、麦克风、语音识别、自动化/AppleScript)
  • 运行或连接到网关(本地或远程)
  • 暴露 macOS 专属工具(Canvas、相机、屏幕录制、system.run)
  • 管理本地节点主机服务
  • 按需通过 npm/pnpm 安装全局 CLI(clawdbot

本地 vs 远程模式

模式描述
本地(默认)应用连接到运行中的本地网关;如需要则启用 launchd 服务
远程应用通过 SSH/Tailscale 连接到网关;启动本地节点主机服务

应用不会将网关作为子进程启动。

Launchd 控制

应用管理每用户的 LaunchAgent,标签为 bot.molt.gateway(使用 --profile 时为 bot.molt.<profile>)。

# 重启网关
launchctl kickstart -k gui/$UID/bot.molt.gateway

# 停止网关
launchctl bootout gui/$UID/bot.molt.gateway

如果 LaunchAgent 未安装,从应用启用或运行:

clawdbot gateway install

节点功能(macOS)

macOS 应用作为节点呈现,具有以下功能:

类别命令
Canvascanvas.presentcanvas.navigatecanvas.evalcanvas.snapshot
相机camera.snapcamera.clip
屏幕screen.record
系统system.runsystem.notify

节点报告权限映射,以便代理决定允许什么。

执行批准(system.run)

system.run 由 macOS 应用中的执行批准控制(设置 → 执行批准)。

配置存储在:

~/.clawdbot/exec-approvals.json

配置示例:

{
  "version": 1,
  "defaults": {
    "security": "deny",
    "ask": "on-miss"
  },
  "agents": {
    "main": {
      "security": "allowlist",
      "ask": "on-miss",
      "allowlist": [{"pattern": "/opt/homebrew/bin/rg"}]
    }
  }
}

注意:

  • 白名单条目是解析后二进制路径的 glob 模式
  • 在提示中选择"始终允许"会将该命令添加到白名单

深度链接

应用注册 clawdbot:// URL 方案用于本地操作。

clawdbot://agent

触发网关代理请求:

open 'clawdbot://agent?message=Hello%20from%20deep%20link'

查询参数:

参数描述
message必需 - 要发送的消息
sessionKey可选 - 会话标识符
thinking可选 - 启用思考模式
deliver / to / channel可选 - 投递目标
timeoutSeconds可选 - 请求超时
key可选 - 无人值守模式密钥

安全性: 没有 key 时,应用会提示确认。

引导流程

  1. 安装并启动 Clawdbot.app
  2. 完成权限检查清单(TCC 提示)
  3. 确保本地模式激活且网关正在运行
  4. 如需终端访问,安装 CLI

构建和开发工作流

cd apps/macos && swift build
swift run Clawdbot  # 或使用 Xcode

# 打包应用
scripts/package-mac-app.sh

调试网关连接

使用调试 CLI 测试网关 WebSocket 握手:

cd apps/macos
swift run clawdbot-mac connect --json
swift run clawdbot-mac discover --timeout 3000 --json

连接选项:

选项描述
--url <ws://host:port>覆盖配置
--mode <local|remote>从配置解析
--probe强制新的健康探测
--timeout <ms>请求超时(默认:15000)
--json结构化输出

远程连接(SSH 隧道)

远程网关访问:

# 控制隧道(网关 WebSocket 端口)
ssh -N -L 18789:127.0.0.1:18789 user@host

下一步