用 Avalonia 和 Claude Code Hook 做了一个桌宠 Claw Jump

Claude Code 在后台跑任务、等待授权、输出结束时,如果终端不在前台,很容易错过关键状态。

为了解决这个小但真实的问题,我做了一个 Windows 桌面工具:Claw Jump。它会在桌面上显示一只可拖拽、可贴边隐藏的小爪子,并通过 Claude Code Hook 感知任务状态,在需要你关注时主动提醒。

如果你还没有安装 Claude Code,可以先看这篇教程:Claude Code 安装教程。里面把 Windows 环境准备、安装步骤和常见问题整理得比较清楚,适合第一次配置 Claude Code 的同学直接照着操作。

后面如果你想把 Claude、GPT、Gemini 等模型统一接进自己的脚本、工具或内部系统,也可以顺手了解一下 axisapi.cn 聚合 AI 平台。它提供统一的模型调用入口,适合需要多模型切换、统一管理接口和控制调用成本的开发场景。

为什么要做 Claw Jump

使用 Claude Code 这类 AI 编程工具时,我经常遇到这些情况:

  • 提交一个需求后,Claude Code 在终端里跑了很久;
  • 任务已经结束,但我切到浏览器、IDE 或文档里,没有注意到;
  • 某些操作需要授权确认,却因为终端窗口不在前台被忽略;
  • 想确认 Hook 有没有触发、事件有没有送达,但排查链路不够直观。

Claw Jump 的目标很简单:把 Claude Code 的状态变化从终端里带到桌面上。

它不是一个复杂的开发框架,而是一个专注于提醒体验的小工具。它让 AI 编程流程更可见,也减少错过关键节点的概率。

项目简介

Claw Jump 是一个面向 Windows 的 Claude Code 桌面提醒工具。

当前项目主要使用:

  • .NET 10
  • Avalonia 12
  • Claude Code Hooks
  • 本地回环 HTTP 服务
  • Windows 系统托盘和桌面悬浮窗

程序启动后,会在桌面上显示一个小爪子窗口。窗口默认置顶,支持拖拽移动,也可以靠近屏幕左侧、右侧或顶部边缘后自动贴边隐藏。

当 Claude Code 触发 Hook 事件时,小爪子会根据事件类型切换状态,比如工作中、任务完成、需要审批、异常离线等。

先看几张项目里的小爪子素材。整体风格偏轻量、可爱,适合长期放在桌面角落里:

Claw Jump 空闲状态

Claw Jump 提醒状态

Claw Jump 告警状态

Claw Jump 审批提示状态

核心功能

桌面小爪子提醒窗口

Claw Jump 的核心是一个轻量级桌面提醒窗口。它支持:

  • 默认置顶显示;
  • 拖拽移动位置;
  • 靠边自动隐藏;
  • 根据事件切换不同状态图片。

目前支持的状态如下:

状态 含义
Idle 空闲状态
Working Claude Code 正在工作
Ready 任务完成或有提醒
ApprovalRequired 需要用户审批或授权
ErrorOffline 异常、离线或服务不可用

这样即使 Claude Code 不在当前窗口,也能通过桌面上的小爪子快速判断任务状态。

除了完整显示,Claw Jump 也支持贴边隐藏。贴边后只露出一部分小爪子,既有提醒存在感,又不容易遮挡桌面内容:

空闲贴边状态

提醒贴边状态

审批贴边状态

系统托盘菜单

长期驻留的桌面工具不能只靠一个悬浮窗,所以 Claw Jump 也集成了系统托盘菜单。

目前托盘菜单支持这些操作:

  • 显示或隐藏小爪子;
  • 测试提醒效果;
  • 标记已查看;
  • 检查 Hook 状态;
  • 查看当前版本;
  • 检查更新;
  • 打开设置;
  • 打开配置目录;
  • 打开 Claude 配置目录;
  • 生成 Claude Hook 脚本;
  • 一键写入 Claude Hook 配置;
  • 查看事件日志;
  • 退出程序。

这些入口让它更接近一个完整的桌面助手,而不是只能展示状态的装饰窗口。

自动写入 Claude Code Hook 配置

Claw Jump 会自动生成 Hook 脚本,并可以把 Hook 配置写入 Claude Code 的 settings.json

默认支持三个 Claude Code 事件:

  • Stop
  • Notification
  • UserPromptSubmit

首次写入配置时,如果本机已经存在 Claude Code 的 settings.json,程序会先创建备份文件,降低误改配置的风险。

本地 HTTP 服务接收事件

Claw Jump 内部会启动一个本地回环 HTTP 服务,默认监听:

127.0.0.1:47653

Claude Code Hook 触发后,生成的 PowerShell 脚本会向本地服务发送事件 JSON。

整体流程如下:

Claude Code Hook
      ↓
PowerShell Hook 脚本
      ↓
POST http://127.0.0.1:47653/event
      ↓
Claw Jump 本地服务
      ↓
更新桌面小爪子状态

这个设计比较朴素,但很适合这类本地提醒工具:

  • 不依赖外部服务器;
  • 事件只在本机回环地址传递;
  • Hook 脚本只需要发送一次 HTTP 请求;
  • 排查时可以直接看本地服务和日志。

后续如果想接入其他本地事件源,也可以沿用这条链路。

Hook 健康检查和日志窗口

Hook 链路一旦出问题,最终表现通常只有一个:小爪子没反应。

但问题可能出在不同位置:Claude Code 没触发 Hook、脚本没生成、配置没写入、本地服务没启动,或者事件没有成功送达。

为了方便排查,Claw Jump 提供了 Hook 健康检查能力,会检查:

  • 本地服务是否正常;
  • Hook 脚本是否已经生成;
  • Claude Code settings.json 是否写入了对应配置。

程序也会记录收到的 Hook 事件,并提供事件日志窗口。对于这类“中间层提醒工具”来说,日志很关键。否则提醒没出现时,只能靠猜。

Hook 事件如何映射到提醒状态

Claw Jump 默认的事件行为很直接:

Hook 事件 行为
UserPromptSubmit 显示工作中状态
Stop 显示完成或提醒状态
Notification 显示提醒状态;如果通知内容表示需要审批,则显示审批提示状态

也就是说:

当你向 Claude Code 提交新的提示词后,小爪子会进入“工作中”;当 Claude Code 停止输出或发出通知后,小爪子会切换到提醒状态;当 Claude Code 需要授权或审批时,小爪子会切换到更明显的审批提示状态。

这比单纯依赖终端提示更醒目,也更适合多窗口、多任务的开发场景。

配置文件位置

Claw Jump 的应用数据默认保存在:

%APPDATA%\ClawJump

主要文件包括:

config.json
hooks\claw-jump-hook.ps1
claude-settings-snippet.json
logs\claw-jump.log

它们分别用于保存应用配置、生成的 Hook 脚本、Claude 配置片段和事件日志。

从源码运行

如果你想从源码运行项目,可以执行:

dotnet restore ClawJump.slnx
dotnet run --project src/ClawJump.Avalonia/ClawJump.Avalonia.csproj

构建解决方案:

dotnet build ClawJump.slnx

发布 Windows x64 自包含版本:

powershell -ExecutionPolicy Bypass -File ./build-avalonia-release.ps1

构建安装包:

powershell -ExecutionPolicy Bypass -File ./build-avalonia-installer.ps1

构建安装包需要本机安装 Inno Setup 6。

技术实现上的几个取舍

为什么选择 Avalonia

这个项目目前是 Windows 桌面工具,但我还是选择了 Avalonia。

原因主要有几个:

  • 它适合做轻量桌面窗口;
  • 支持托盘、窗口置顶、资源管理等桌面能力;
  • XAML + C# 的组织方式比较清晰,适合快速迭代;
  • 如果后续想扩展到更多平台,也有一定空间。

对 Claw Jump 这种小型桌面应用来说,Avalonia 的开发体验比较顺手,不需要引入太重的 UI 架构。

为什么用本地 HTTP 而不是直接调用程序

Claude Code Hook 的本质是执行命令。

如果 Hook 脚本直接和桌面进程通信,会引入更多进程间通信复杂度。相比之下,本地 HTTP 服务更简单:Hook 脚本只需要把 JSON POST 到本机端口即可。

这种方式的优点是清晰、可调试、耦合低。对一个只在本机运行的提醒工具来说,已经够用。

为什么要做 Hook 健康检查

Hook 链路涉及多个环节:

Claude Code 配置 → Hook 脚本 → 本地 HTTP 服务 → UI 状态更新

任何一个环节出问题,最终表现都可能只是“小爪子没反应”。

所以项目里加入了健康检查和日志窗口,让问题能被快速定位,而不是靠猜。

AI 编程工具的体验不只取决于模型

最近很多开发者已经开始把 AI 编程工具放进日常工作流。

真正用起来后会发现,模型能力只是其中一部分。长期体验还取决于很多细节:

  • 工具链是否顺手;
  • 状态反馈是否及时;
  • 多模型切换是否方便;
  • 成本和稳定性是否可控;
  • 能不能把 AI 能力接进自己的自动化流程。

这也是我做 Claw Jump 时的一个感受:AI 工具不应该只停留在聊天窗口或终端里,它需要和开发环境、桌面环境、自动化脚本连接起来。

这里也重点推荐一下和工具链接入有关的服务:axisapi.cn 聚合 AI 平台。当使用场景从“偶尔问几句”变成“把 AI 接进开发流程”之后,单独维护不同模型的接口、额度、密钥和调用方式会越来越麻烦。axisapi.cn 的价值就在这里:它提供统一的 AI 模型调用入口,把 Claude、GPT、Gemini 等模型能力放到同一个接入层里,开发者可以更方便地做多模型切换、接口管理和成本控制。

如果你正在做脚本自动化、内部工具、AI 助手、代码生成工具,或者想把 Claude Code 这类开发工具和自己的系统串起来,聚合平台会比一个个单独接官方接口省心很多。对个人开发者来说,它降低了试用和切换模型的门槛;对团队来说,它更适合作为统一的 AI 能力网关,减少后续维护成本。

如果说 Claw Jump 解决的是 Claude Code 使用过程中的“桌面状态感知”,那么 axisapi.cn 更偏向解决“模型能力接入与管理”。两者关注点不同,但都属于 AI 开发工作流里容易被忽略、却很影响长期体验的基础设施。一个让你及时知道 Claude Code 在做什么,一个让你更稳定、更灵活地调用不同模型。

适合哪些人使用

Claw Jump 比较适合这些场景:

  • 长时间使用 Claude Code 辅助开发;
  • 经常同时打开 IDE、浏览器、终端和文档;
  • 希望 Claude Code 完成任务后有桌面级提醒;
  • 希望更直观地感知 Hook 是否正常触发;
  • 喜欢轻量、有一点趣味性的桌面效率工具。

它不是为了替代 Claude Code,而是补齐 Claude Code 在桌面提醒体验上的一小块空白。

总结

Claw Jump 是一个很小的工具,但解决的是一个高频问题:不要错过 Claude Code 的关键状态变化。

它主要做了几件事:

  • 用 Avalonia 实现桌面小爪子窗口;
  • 用 Claude Code Hook 感知 AI 编程状态;
  • 用本地 HTTP 服务连接 Hook 和桌面 UI;
  • 用托盘菜单、健康检查和日志窗口完善日常使用体验。

当 AI 编程越来越常态化之后,这类围绕工作流的小工具会变得更有价值。模型负责生成和推理,桌面工具负责提醒和交互,统一接入平台负责模型能力管理。把这些部分串起来,才更接近真实可用的 AI 开发体验。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐