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
- 显示位置
- 面板、输入框上方、状态栏
这个插件能做什么?
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.在 Claude Code 中一行安装
/plugin install flightdeck --marketplace scasella/claude-flightdeck粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add scasella/claude-flightdeck claude plugin install flightdeck@claude-flightdeck然后在所有已打开的会话中运行 /reload-plugins。
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
在提示词上方为每个运行中的子代理显示一行实时状态:用时、工具数和当前动作,另有 /radar 面板。
- 输入框上方
- 面板
- 弹出通知
- 拦截工具调用
- 读取你的提示词
- 修改界面
- 添加命令/工具
已在 v2.1.291 实测
精选Context Bar
在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。
- 输入框上方
- 修改界面
- 添加命令/工具
- 存储数据
已在 v2.1.291 实测
精选