面向 Claude Code / Codex / OpenCode / Gemini 的多通道AI CLI 任务完成提醒,支持耗时阈值、桌面端与命令行、通用 Webhook(飞书/钉钉/企微)、Telegram、邮件、桌面/声音提示,配备自动监听日志,AI摘要等功能
面向 Claude Code / Codex / OpenCode / Gemini 的多通道AI CLI 任务完成提醒,支持耗时阈值、桌面端与命令行、通用 Webhook(飞书/钉钉/企微)、Telegram、邮件、桌面/声音提示,配备自动监听日志,AI摘要等功能
gptplus.uno
gptplus.uno offers ChatGPT Plus / Pro purchase and upgrade guides, plan-selection advice, FAQs and self-service troubleshooting, with WeChat Pay and Alipay payment options. Thank you for supporting this open-source project.
An intelligent task completion notification tool for Claude Code / Codex / OpenCode / Gemini / ZCode, supporting multiple notification channels and flexible configuration options. Get notified automatically through various methods when AI assistants complete long-running tasks, so you don't have to wait in front of your computer.
Supported Notification Methods:
Webhook (Feishu/DingTalk/WeCom) • Telegram Bot • Email (SMTP)
️ Desktop Notifications • Sound/TTS Alerts • ⌚ Smart Band / Watch Alerts (via existing notification channels)
Important: For the best experience, it's recommended to grant AI assistants full file read/write permissions when using Claude Code / Codex / OpenCode / Gemini. ZCode is not affected: it completes through its native Stop hook and has no Watch path, so it does not need these permissions.
Benefits:
Stop, ZCode's Stop, Gemini CLI's AfterAgent, and OpenCode's session.status idle / session.idle / session.error events provide more timely and accurate completion signals than watch-based log polling. In the current integration, Codex still uses Watch as the main completion path.ai-cli-complete-notify--portable-win-x64.zip from ReleasesD:\Tools\).env.example to .env and fill in your notification configuration according to the requirements insideai-cli-complete-notify__aarch64.dmgai-cli-complete-notify__x86_64.dmgai-cli-complete-notify.app into Applications.~/.ai-cli-complete-notify/.env. On first launch it creates .env.example there when configuration is missing.Requires macOS 13.5 or later (the bundled Node.js runtime's minimum). Check About This Mac to identify your chip or processor. These are separate architecture-specific packages, not Universal binaries. Both include Node.js; installing the DMG does not require Node.js/npm or Rust/Cargo.
The following steps are only needed for Linux, development, or users who prefer to build from source. Source/dev mode requires Node.js/npm and Rust/Cargo. Tauri calls cargo when running npm run dev; if cargo --version fails, install Rust from the official Rust installation page first.
# Clone repository
git clone https://github.com/ZekerTop/ai-cli-complete-notify.git
cd ai-cli-complete-notify
# Verify Rust/Cargo is available
cargo --version
# Install dependencies
npm install
# Configure environment variables (source/dev mode)
cp .env.example .env
# Edit .env file and fill in your notification configuration
# Run desktop application
npm run dev
Optional: build a double-clickable macOS app from source:
# Build .app
npm run dist:mac:app
# Build .dmg for distribution
npm run dist:mac:dmg
After selecting "Hide to tray", the application hides its window and keeps running. On Windows, the icon may be in the taskbar's ^ collapsed area; on macOS, use the menu bar icon to reopen the window. With silent start enabled, the app launches hidden in the tray without a balloon.
On macOS, enable Advanced → Hide from Dock (show only in macOS menu bar) to hide the Dock icon. This setting is off by default and is saved as ui.hideDockIcon; it is separate from silent start and close behavior. Click the menu bar icon, or choose Show from its menu, to reopen the window. If you use Ice or another menu bar manager and cannot find the icon, check its hidden sections and available menu bar space, then refresh the manager's layout.
WSL note: CLI reminders work for webhook/Telegram/email, and sound can also work in WSL through Windows PowerShell. Desktop notifications and tray are Windows-only. Log monitoring works only when the AI CLI runs inside WSL (logs under
~/.claude,~/.codex,~/.gemini). For WSL/CLI config, use.envfor AI summary and Feishu card;.envoverridessettings.json.
Note: For CLI usage from source (Node), run npm install first.
On Windows portable builds:
ai-cli-complete-notify.exe is the desktop GUI.ai-reminder.exe is the packaged CLI/sidecar and should be used for terminal commands.# Source / Node
node ai-reminder.js help
# Windows portable EXE
ai-reminder.exe help
# 0) Windows PowerShell: verify WSL is installed
wsl -l -v
# 1) Enter your distro (Ubuntu example)
wsl -d Ubuntu
# 2) Install Node.js / npm inside WSL (Ubuntu example)
sudo apt update
sudo apt install -y nodejs npm
node -v
npm -v
# 3) Enter project and install deps (adjust path to your machine)
cd "/mnt/d/path/to/ai-cli-complete-notify"
npm install
cp .env.example .env
# 4) Start log watch mode (recommended for long-running use)
node ai-reminder.js watch --sources all --gemini-quiet-ms 3000 --claude-quiet-ms 60000
# 5) Wrap an AI command with automatic timing
node ai-reminder.js run --source codex -- codex
# 6) Keep watcher running in background (nohup option)
nohup node ai-reminder.js watch --sources all > ~/ai-cli-notify.watch.log 2>&1 &
tail -f ~/ai-cli-notify.watch.log
# 7) Optional: keep it in tmux (more stable)
sudo apt install -y tmux
tmux new -s ai-notify
# Run watch command inside tmux, then press Ctrl+b, d to detach
tmux attach -t ai-notify
# 8) Useful WSL Windows path helpers
explorer.exe .
wslpath -w ~/.codex
Notes:
.env for webhook and summary-related settings; global channel switches already saved in the desktop app still follow settings.json.# Send notification immediately (ignore threshold)
node ai-reminder.js notify --source claude --task "Task completed"
…
Notes:
Stop hook event.AfterAgent hook event.session.status idle / session.idle / session.error.sources.zcode.enabled). Installation registers UserPromptSubmit and Stop process hooks in the user-level ~/.zcode/cli/config.json and enables hooks.enabled. Existing settings and other hooks are preserved; uninstall removes only this tool’s handlers.UserPromptSubmit starts the timer and Stop checks theNo open issues yet, or sync has not completed.