Files
agent-dashboard/README.md
T
laily 021fc3a828 feat: fix Cursor hook delivery and improve notify workflow
Route hook notifications through /dev/tty and client_tty so OSC reaches
Ghostty when Cursor captures stdout. Add afterAgentResponse hook, hook
logging, debounce, split test modes, and use directory name for titles.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 12:46:50 +08:00

102 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# agent-notify
在 tmux(含 SSH 远程)中运行 Cursor CLI 与 Claude Code 时,通过 Agent hook 触发 Ghostty 桌面通知(OSC 777)。
**支持:** Cursor CLI`cursor-agent`)、Claude Code
**不支持:** Cursor IDE
## 前置条件
- [Ghostty](https://ghostty.org/) 终端(支持 OSC 777
- tmux 3.2+(若在 tmux 内使用)
在每一层 tmux 的 `~/.tmux.conf` 中添加:
```tmux
set -g allow-passthrough on
```
## 安装
```bash
make install
# 或
go install ./cmd/agent-notify
```
## 配置 Hook
```bash
agent-notify install --all
agent-notify doctor
# 两种测试路径(与 hook 发送方式一致)
agent-notify test cursor # 始终会在 stderr 打印发送结果
agent-notify test cursor -v # 同上(-v 保留兼容)
agent-notify test cursor --try-all # 逐个尝试所有投递方式(调试用)
```
配置文件:`~/.config/agent-notify/config.toml`
```toml
[events]
stop = true # Agent 完成回复,等待输入
idle = false # Claude 空闲 60s+Notification hook
tool = false # shell/工具执行结束
[notify]
protocol = "osc777"
title_template = "{agent} — {context}" # context = 工作目录名
body_stop = "等待输入"
```
## 命令
```bash
agent-notify send --event stop
agent-notify hook cursor stop # Cursor CLI stop hook
agent-notify hook claude stop # Claude Stop hook(输出 terminalSequence JSON
agent-notify test cursor [-v]
agent-notify test claude [--apply]
agent-notify doctor
agent-notify install --all [--force]
```
## Hook 配置位置
| Agent | 配置文件 | Hook 事件 |
|-------|---------|-----------|
| Cursor CLI | `~/.cursor/hooks.json` | `stop`, `afterShellExecution`tool 开启时) |
| Claude Code | `~/.claude/settings.json` | `Stop`, `Notification`idle 开启时) |
## 手动测试矩阵
```bash
# 1. 无 tmuxGhostty 直接)
agent-notify test cursor
# 2. 本地 tmux
tmux new-session -d 'agent-notify test cursor -v'
# 3. 远程 tmuxSSH 到远程后在 tmux 内)
agent-notify test cursor -v
# 应看到 delivery=passthrough-stdout
# 4. Claude 路径
agent-notify test claude --apply
```
## 工作原理
1. Agent hook 调用 `agent-notify hook ...`
2. CLI 生成 OSC 777 序列:`\033]777;notify;标题;正文\007`
3. 在 tmux 内优先写入 `client_tty`,否则用 DCS passthrough 透传
4. Claude Code 通过 hook JSON 的 `terminalSequence` 字段输出 OSChook 进程无 TTY
## 开发
```bash
make test
make build
```