跳到正文
claudemods

Flightdeck:终端里的 Claude Code 代理仪表盘

Claude Code 会话的实时面板:模型与上下文、每次权限检查、子代理卡片和上一轮回执。

权限

  • 拦截工具调用能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
  • 读取你的提示词可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
  • 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
  • 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
实测版本
v2.1.303
最近实测
需要
Claude Code ≥ 2.1.287
显示位置
面板、输入框上方、状态栏

在 Claude Code 中安装:

/plugin install flightdeck --marketplace scasella/claude-flightdeck
全部安装方式 ↓

这个插件能做什么?

Flightdeck 是 Stephen Casella(scasella)制作的社区插件,是一个 Claude Code 代理仪表盘:用一个面板显示你的会话和它的代理此刻在做什么。它汇集了模型名称和推理强度、上下文仪表、会话花费、套餐报告的速率限制窗口、每一次权限检查、子代理卡片,以及上一轮的回执。

面板包括:main(模型、强度、模式、请求数、上下文、花费、上一次请求的速度)、architect(顾问型代理或服务端工具的咨询,通过正则表达式匹配)、gate(每次权限检查一格:已允许、由分类器或你决定、待处理或已拒绝)、agents(超过三个代理时卡片变为泳道)、loops(不属于任何卡片的模型循环)、receipt(本轮的时长、代理数、编辑数、错误数和花费)以及简短的日志。没有内容可显示的面板不占空间。作者的 README 说每个数字都来自真实的会话事件;architect 的“时刻”是推断出来的,并且被标注为推断。

演示

录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code。终端窄于 144 列,所以用 /flightdeck 打开面板。输入框上方出现一个带边框的摘要,显示 idle 和 $0.00。接着让 Claude 读取 README.md 并用一句话描述项目。这一轮运行时,面板切换为 working,并出现一行 gate:1 allowed · 0 classifier · 0 denied。这一轮结束后,面板显示上下文仪表(4%)、花费,以及一行回执:last turn 47s · 0 agents · 0 edits · 0 errors。

安装

使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。运行 /reload-plugins,然后运行 /flightdeck。作者提示安装程序可能会说配置选项尚未设置;默认值即可使用。

$ install flightdeck

需要 Claude Code ≥ 2.1.287

从作者自己的 marketplace 安装: scasella/claude-flightdeck

  1. 1.在 Claude Code 中一行安装

    /plugin install flightdeck --marketplace scasella/claude-flightdeck

    粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。

  2. 2.从终端安装

    claude plugin marketplace add scasella/claude-flightdeck
    claude plugin install flightdeck@claude-flightdeck

    然后在所有已打开的会话中运行 /reload-plugins。

  3. 3.免安装试用

    git clone https://github.com/scasella/claude-flightdeck
    claude --plugin-dir ./claude-flightdeck

    仅在当前会话中加载该插件,不会写入你的设置。

工作原理

所有内容都保存在 $.state 原子中,每个钩子更新它们并把事件继续传下去。一次权限检查是这样记录的,来自 hooks/register.tsx:

on('tool.check', async ($, e, next) => {
  const verdict = await next(e)
  if (e.tool_use_id) {
    const check: Check = {
      id: e.tool_use_id,
      tool: e.tool,
      bucket: bucketOf(e.tool),
      verdict: verdict.decision === 'allow' ? 'rule' : verdict.decision,
      detail: shorten(describeInput(e.tool, e.input), 90),
      // ...
    }
    await update($, gate, g => recordCheck(normalizeGate(g), check))
  }
  return verdict
})

裁决结果原样返回。面板本身绘制在 Pane 渲染位置上。布局取决于它所在的位置:内嵌在输入框上方时是最多 8 行的摘要,停靠在转录内容旁边时是一列,宽度达到 110 列时是两列。两个小型客户端模块 rail.tsx 和 elapsed.tsx 在界面自己的帧时钟上绘制动画连接线和运行时钟,因此面板不需要重绘。归约函数和格式化函数是 hooks/core.ts 中的纯函数。

自定义

选项在 /config 中:panels(显示哪些面板及顺序)、layout(auto、compact、wide 或 mini)、maxCards(1 到 6)、motion(while-active 或 off)、palette(theme 或 pastel)、architectPattern、architectLabel、gateLabel、matchDescriptions、moments、openOnStart 和 statusLine。/flightdeck 命令支持 open、close、reset 和 layout auto|compact|wide|mini。用 ctrl+x tab 聚焦面板;按 1 到 6 展开卡片,按 f、s、o 打开 gate 的文件、shell 和其他行。

权限与安全

在运行任何东西之前,我们读过了插件可以执行的每一个文件:plugin.json、marketplace.json、hooks/hooks.json、hooks/register.tsx、hooks/core.ts、hooks/rail.tsx、hooks/elapsed.tsx、类型声明以及测试。没有 package.json、安装脚本、二进制文件或打包后的代码。我们搜索了网络、进程、eval、动态导入和隐藏 Unicode,没有发现任何内容。

  • 网络、进程、文件、环境变量: 都没有。插件不发出请求、不运行命令、不读写文件,不读取环境变量,也不调用模型。
  • 它观察什么: 每次工具调用的名称和输入、每个权限裁决、子代理的启动、token 用量和最终回答,以及每条提示的前 70 个字符(用于日志)。它只在会话状态中保留简短摘要,凭据由正则表达式过滤器做掩码。该过滤器只是尽力而为,所以请把面板当作会显示你的命令。
  • 拦截型钩子: tool.check、tool.call、agent.spawn、agent.offer、session.append、session.compact 和 classic.UserPromptSubmit 都是直通的:它们等待 next(e) 并返回其结果。claude plugin validate 提示它们没有 .catch;在组织托管 Claude Code 的环境中,classic 和 compact 钩子也不会运行。
  • 遥测、守护进程、其他写入: 都没有;会话结束后不留下任何内容。
  • 许可证: MIT,带有 LICENSE 文件。

claude plugin validate 没有报告任何错误或警告。作者的 28 个测试在 Claude Code 2.1.303 上全部通过。

拦截工具调用
能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
读取你的提示词
可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
修改界面
在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
添加命令/工具
注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。

兼容性与故障排除

已在 macOS 上使用 Claude Code 2.1.303 检查(validate 和测试);作者的 README 要求 2.1.287 或更高版本。如果面板没有出现:

  • 运行 /reload-plugins,然后运行 /flightdeck。窄于 144 列时面板不会自动打开。
  • 在转录内容中查找以 flightdeck: 开头的暗色行;它会说明哪个钩子失败,或面板被拒绝的原因。
  • 如果颜色不对,把 palette 设为 pastel。如果更新后计数显得过时,运行 /flightdeck reset。
  • 在 VS Code 和移动端,连接线和时钟是静态的。

常见问题

Flightdeck 会把数据发到我的电脑之外吗?
不会。我们在代码中没有发现网络请求、进程启动或文件读写。它只调用 Claude Code 自己的接口来获取时钟、用量、状态和面板。它的状态保存在会话状态中,会话结束即消失。
它会阻止或修改我的工具调用吗?
不会。它挂接了 tool.check、tool.call、agent.spawn 等钩子,但每个钩子都会等待下一个处理器并原样返回结果,不会拒绝、改写或延迟任何内容。
它会保存我的命令,包括密钥吗?
每次权限检查它在会话状态中只保留一行摘要(工具名加路径、命令或模式,截断到 90 个字符),并先对 bearer 令牌、API 密钥、密码等常见凭据形式做掩码。摘要只显示在面板里,不会跨会话保存。
启动 Claude Code 时面板没有打开,为什么?
openOnStart 只会在宽度至少 144 列的终端里自动打开面板。终端更窄时,请运行 /flightdeck。内嵌在输入框上方时,它显示 8 行摘要。
它和 Agent Radar 有什么区别?
Agent Radar 在输入框上方为每个运行中的子代理画一行实时信息。Flightdeck 是一个更宽的单面板仪表盘,包含模型、上下文仪表、花费、权限检查条、会变成泳道的子代理卡片,以及上一轮回执。
Agent Radar 在 Claude Code 中运行精选

Agent Radar

在提示词上方为每个运行中的子代理显示一行实时状态:用时、工具数和当前动作,另有 /radar 面板。

  • 输入框上方
  • 面板
  • 弹出通知
  • 拦截工具调用
  • 读取你的提示词
  • 修改界面
  • 添加命令/工具

已在 v2.1.291 实测

Context Bar 在 Claude Code 中运行精选

Context Bar

在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。

  • 输入框上方
  • 修改界面
  • 添加命令/工具
  • 存储数据

已在 v2.1.291 实测

上下文仪表 在 Claude Code 中运行精选

上下文仪表

在状态栏显示上下文窗口占用、5 小时与 7 天套餐用量和会话花费,并在接近上限时发出提醒。

  • 状态栏
  • 弹出通知
  • 修改界面

已在 v2.1.310 实测

更多 面板与仪表盘、计时、待办与站会。