通知
imux 支持桌面通知,让 AI agent 和脚本在需要关注时提醒你。
生命周期
- 已接收:通知出现在面板中,触发桌面提醒(如果未被抑制)
- 未读:工作区标签页上显示未读标记
- 已读:查看该工作区时清除
- 已清除:从面板中移除
抑制
以下情况桌面提醒会被抑制:
- imux 窗口处于聚焦状态
- 发送通知的工作区正处于活跃状态
- 通知面板已打开
通知面板
按 ⌘⇧I 打开通知面板。点击通知跳转到对应工作区。按 ⌘⇧U 直接跳转到最近有未读通知的工作区。
自定义命令
每次调度通知时运行一个 shell 命令。在 Settings > App > Notification Command 中设置。命令通过 /bin/sh -c 运行,可使用以下环境变量:
| 变量 | 描述 |
|---|---|
ICC_NOTIFICATION_TITLE | 通知标题(工作区名称或应用名称) |
ICC_NOTIFICATION_SUBTITLE | 通知副标题 |
ICC_NOTIFICATION_BODY | 通知正文内容 |
Examples
# Text-to-speech
say "$ICC_NOTIFICATION_TITLE"
# Custom sound file
afplay /path/to/sound.aiff
# Log to file
echo "$ICC_NOTIFICATION_TITLE: $ICC_NOTIFICATION_BODY" >> ~/notifications.log该命令独立于系统声音选择器运行。将选择器设为「None」可仅使用自定义命令,或同时保留两者以获得系统声音加自定义操作。
发送通知
CLI
icc notify --title "Task Complete" --body "Your build finished"
icc notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"OSC 777(简单)
RXVT 协议使用固定格式,包含标题和正文:
printf '\e]777;notify;My Title;Message body here\a'Shell function
notify_osc777() {
local title="$1"
local body="$2"
printf '\e]777;notify;%s;%s\a' "$title" "$body"
}
notify_osc777 "Build Complete" "All tests passed"OSC 99(丰富)
Kitty 协议支持副标题和通知 ID:
# Format: ESC ] 99 ; <params> ; <payload> ESC \
# Simple notification
printf '\e]99;i=1;e=1;d=0:Hello World\e\\'
# With title, subtitle, and body
printf '\e]99;i=1;e=1;d=0;p=title:Build Complete\e\\'
printf '\e]99;i=1;e=1;d=0;p=subtitle:Project X\e\\'
printf '\e]99;i=1;e=1;d=1;p=body:All tests passed\e\\'| 功能 | OSC 99 | OSC 777 |
|---|---|---|
| 标题 + 正文 | 是 | 是 |
| 副标题 | 是 | 否 |
| 通知 ID | 是 | 否 |
| 复杂度 | 较高 | 较低 |
简单通知用 OSC 777。需要副标题或通知 ID 时用 OSC 99。最简单的集成方式是用 CLI(icc notify)。
Claude Code hooks
imux 通过 Claude Code 的 hooks 集成,在任务完成时通知你。
1. 创建 hook 脚本
~/.claude/hooks/icc-notify.sh
#!/bin/bash
# Skip if not in icc
[ -S /tmp/icc.sock ] || exit 0
EVENT=$(cat)
EVENT_TYPE=$(echo "$EVENT" | jq -r '.hook_event_name // "unknown"')
TOOL=$(echo "$EVENT" | jq -r '.tool_name // ""')
case "$EVENT_TYPE" in
"Stop")
icc notify --title "Claude Code" --body "Session complete"
;;
"PostToolUse")
[ "$TOOL" = "Task" ] && icc notify --title "Claude Code" --body "Agent finished"
;;
esacchmod +x ~/.claude/hooks/icc-notify.sh2. 配置 Claude Code
~/.claude/settings.json
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/icc-notify.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Task",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/icc-notify.sh"
}
]
}
]
}
}重启 Claude Code 以应用 hooks。
集成示例
长时间命令后发送通知
~/.zshrc
# Add to your shell config
notify-after() {
"$@"
local exit_code=$?
if [ $exit_code -eq 0 ]; then
icc notify --title "✓ Command Complete" --body "$1"
else
icc notify --title "✗ Command Failed" --body "$1 (exit $exit_code)"
fi
return $exit_code
}
# Usage: notify-after npm run buildPython
python
import sys
def notify(title: str, body: str):
"""Send OSC 777 notification."""
sys.stdout.write(f'\x1b]777;notify;{title};{body}\x07')
sys.stdout.flush()
notify("Script Complete", "Processing finished")Node.js
node
function notify(title, body) {
process.stdout.write(`\x1b]777;notify;${title};${body}\x07`);
}
notify('Build Done', 'webpack finished');tmux 透传
如果在 imux 内使用 tmux,启用透传:
.tmux.conf
set -g allow-passthrough onprintf '\ePtmux;\e\e]777;notify;Title;Body\a\e\\'