【Everything Claude Code】用 PowerShell + BurntToast 为 WSL 里的 Claude Code 补上桌面通知
1. WSL 里跑 Claude Code任务跑完了我却不知道如果你和我一样主力开发环境是 WSL2 Windows TerminalClaude Code 装在 Ubuntu 侧那你大概率遇到过这个场景让 Claude Code 跑一个稍大的重构任务切到浏览器查资料回来一看终端早就跑完了可能已经过去十几分钟。macOS 用户有osascript原生通知Linux 桌面有notify-send但 WSL 夹在中间——它既没有真正的 Linux 桌面总线又和 Windows 的通知中心不互通notify-send在 WSL 里要么报错要么静默失败。这个问题的本质是WSL 是一个没有桌面会话的 Linux 环境它无法直接调用 Windows 的 Toast 通知 API。但 WSL 有一个被很多人忽略的能力——互操作interop它可以直接执行 Windows 侧的.exe程序。所以思路就清晰了在 WSL 里检测到 Claude Code 任务结束时调用 Windows 的powershell.exe再由 PowerShell 的 BurntToast 模块弹出原生 Windows 通知。这篇文章解决的就是这件事让 WSL 里的 Claude Code 每次任务收尾时Windows 右下角弹出通知。适合所有在 WSL 下用 Claude Code 做长任务的开发者尤其是经常挂着任务去干别的事、回来发现早就跑完的人。下面我会给出完整的 PowerShell 通知脚本、WSL 侧调用配置、settings.json骨架以及一次真实的触发验证过程。2. 前置准备TaoToken 接入与 BurntToast 安装在动手改通知之前得先确保 Claude Code 本身能正常跑起来。Claude Code 需要一个可用的模型接入端点我用的是 TaoToken 的 API 服务它兼容 Anthropic 的接口格式配置起来比较直接。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。你需要在控制台创建一个 API Key然后把它写进 Claude Code 的环境变量或配置文件里。Claude Code 读取配置的方式是环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY。在 WSL 的~/.bashrc或~/.zshrc里加上export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的key改完执行source ~/.bashrc让它生效。这一步是后面所有通知逻辑的前提——如果 Claude Code 本身跑不起来通知也就无从谈起。接下来是 Windows 侧的 BurntToast 模块。BurntToast 是一个 PowerShell 模块专门用来发送 Windows Toast 通知比直接调 WinRT API 简单得多。在Windows PowerShell不是 WSL 里的中以管理员身份运行Install-Module -Name BurntToast -Scope CurrentUser -Force装完后验证一下Import-Module BurntToast New-BurntToastNotification -Text 测试标题, 测试内容如果右下角弹出了通知说明 Windows 侧准备好了。这一步很关键因为后面 WSL 调用的就是这个模块。如果这里不弹先排查 PowerShell 执行策略Set-ExecutionPolicy RemoteSigned -Scope CurrentUser和模块是否装到了当前用户目录。3. 可复制配置PowerShell 通知脚本 WSL 调用3.1 编写 PowerShell 通知脚本在 Windows 侧建一个脚本文件比如C:\Users\你的用户名\notify.ps1内容如下param( [string]$Title Claude Code, [string]$Body 任务已完成 ) try { Import-Module BurntToast -ErrorAction Stop New-BurntToastNotification -Text $Title, $Body exit 0 } catch { Write-Error BurntToast 发送失败: $_ exit 1 }这个脚本接收两个参数标题和正文。核心就一行New-BurntToastNotification外面包了 try/catch 方便排查。注意-ErrorAction Stop是必须的否则模块导入失败时不会抛异常脚本会静默返回 0你就不知道通知到底发出去没有。3.2 WSL 侧调用封装在 WSL 里建一个 shell 脚本~/.claude/notify.sh#!/bin/bash TITLE${1:-Claude Code} BODY${2:-任务已完成} # 优先用 pwsh.exe回退到 powershell.exe if command -v pwsh.exe /dev/null; then PSpwsh.exe elif command -v powershell.exe /dev/null; then PSpowershell.exe else echo 未找到 PowerShell跳过通知 2 exit 1 fi # 转义单引号防止注入 SAFE_TITLE$(printf %s $TITLE | sed s///g) SAFE_BODY$(printf %s $BODY | sed s///g) $PS -NoProfile -Command Import-Module BurntToast; New-BurntToastNotification -Text $SAFE_TITLE, $SAFE_BODY 2/dev/null给它执行权限chmod x ~/.claude/notify.sh。这里有几个设计点值得说明。第一pwsh.exe和powershell.exe的查找顺序——PowerShell 7pwsh性能更好但很多机器只装了 Windows PowerShell 5.1所以做了回退。第二单引号转义是必须的因为通知内容里如果出现单引号会破坏 PowerShell 命令的字符串边界轻则报错重则执行意外命令。第三-NoProfile能加快启动速度避免加载用户的 PowerShell 配置文件拖慢通知。3.3 settings.json 骨架Claude Code 支持通过 hooks 在特定事件触发时执行命令。在~/.claude/settings.json里配置 Stop hook让每轮对话结束时调用通知脚本{ hooks: { Stop: [ { matcher: , hooks: [ { type: command, command: bash ~/.claude/notify.sh Claude Code 任务已完成请查看终端 } ] } ] } }Stop事件在 Claude Code 完成一轮响应后触发正好对应任务收尾这个时机。matcher留空表示匹配所有情况。如果你只想在特定项目里启用可以把这段配置放到项目根目录的.claude/settings.json里。4. 验证请求跑一次任务看通知是否弹出配置写完了得实际验证。最直接的方式是手动调用脚本bash ~/.claude/notify.sh 测试通知 这是一条来自 WSL 的消息如果 Windows 右下角弹出通知说明 PowerShell 链路通了。如果没弹先看命令有没有报错再检查 BurntToast 是否装好。手动验证通过后跑一次真实的 Claude Code 任务。随便给个需要几秒的指令比如让它读一个文件并总结claude -p 读取 ~/.bashrc 并总结里面配置了哪些环境变量任务结束后Stop hook 会触发通知脚本。你应该能看到 Windows 通知中心出现Claude Code - 任务已完成请查看终端。我实测下来从 Claude Code 结束到通知弹出大约有 1 到 2 秒延迟主要花在 PowerShell 进程启动上。这个延迟完全可以接受毕竟通知的意义是提醒你回来看不是毫秒级同步。如果你想验证通知内容是否动态可以改一下脚本把任务摘要传进去。比如在 hook 命令里用$CLAUDE_LAST_MESSAGE之类的变量具体变量名看 Claude Code 版本把最后一条消息的前 100 字符作为通知正文。这样通知就不只是任务完成而是能直接看到结果概要。5. 本篇常见错排查5.1 通知完全不弹脚本也没报错最常见的原因是 PowerShell 执行策略限制。在 Windows PowerShell 里运行Get-ExecutionPolicy如果是Restricted改成RemoteSignedSet-ExecutionPolicy RemoteSigned -Scope CurrentUser另一个可能是 BurntToast 装到了系统级但当前用户加载不到。用Get-Module -ListAvailable BurntToast确认模块路径如果不在用户目录重装时加-Scope CurrentUser。5.2 报错 New-BurntToastNotification 不是可识别的命令这说明 BurntToast 模块没导入成功。可能是模块没装也可能是 PowerShell 版本太老。BurntToast 要求 PowerShell 5.1 以上Windows 10 自带的版本一般够用。如果用的是 PowerShell 7需要单独装模块Install-Module -Name BurntToast -Scope CurrentUser -Force注意 PowerShell 5.1 和 7 的模块目录是分开的在 5.1 里装的模块 7 里不一定能用反之亦然。建议两个都装一遍或者统一用pwsh.exe。5.3 通知弹出了但内容是乱码这是编码问题。WSL 默认 UTF-8Windows PowerShell 5.1 默认可能是 GBK。解决办法是在脚本里显式指定编码或者改用 PowerShell 7默认 UTF-8。如果必须用 5.1可以在调用时加-Encoding UTF8或者在 PowerShell 脚本开头加[Console]::OutputEncoding [System.Text.Encoding]::UTF85.4 hook 不触发先确认settings.json的路径对不对。Claude Code 读的是~/.claude/settings.json用户级或项目根目录的.claude/settings.json项目级。改完配置需要重启 Claude Code 会话才生效。另外检查 JSON 格式多一个逗号少一个括号都会导致整个配置被忽略。可以用python -m json.tool ~/.claude/settings.json验证格式。5.5 通知延迟特别大如果每次通知要等五六秒多半是 PowerShell 启动时加载了用户配置文件。确认调用时带了-NoProfile。另外如果 WSL 的/mnt/c挂载性能差比如跨文件系统访问慢也会拖慢.exe调用。这种情况可以把脚本放到 Windows 侧WSL 只负责传参。6. 把通知链路固化下来整套方案跑通后建议把notify.sh和settings.json纳入你的 dotfiles 管理换机器时直接同步。如果你用的是 TaoToken 的 Coding Plan 做长期编码任务配合这个通知机制体验会好很多——长任务跑着你可以放心去开会或查文档任务一结束 Windows 就提醒你。需要提醒的是通知脚本里的 API Key 不要硬编码在脚本里用环境变量引用。TaoToken 的 API Key 在控制台的 API Keys 页面管理定期轮换是个好习惯。接入文档在 https://taotoken.net/api 可以查到具体的接口格式和参数说明。最后说个实际踩过的坑BurntToast 的通知在 Windows 专注助手Focus Assist开启时会被静默拦截通知中心里能看到但不会弹横幅。如果你发现通知发了但没弹先检查专注助手是不是开着。这个不是脚本的问题是 Windows 的通知策略在设置里把专注助手关掉或者把 PowerShell 加入优先列表就行。

相关新闻

AI Agent的发动机:Pi的Agent Loop源码级拆解与TaoToken配置实战

AI Agent的发动机:Pi的Agent Loop源码级拆解与TaoToken配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 18:19:52 阅读更多 →
GitHub Copilot 被指“抄袭”算法大神代码:用 TaoToken 搭一套开源许可证合规检查工作流

GitHub Copilot 被指“抄袭”算法大神代码:用 TaoToken 搭一套开源许可证合规检查工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 18:20:39 阅读更多 →
基于Java+JSP的企业宣传网站毕业设计:从零搭建到答辩避坑全指南

基于Java+JSP的企业宣传网站毕业设计:从零搭建到答辩避坑全指南

简介:这份资源是面向高校计算机相关专业学生与Java Web初学者的企业宣传网站毕业设计完整源码包,基于Java与JSP技术栈实现,可用于课程设计、毕业设计参考或Java Web入门实战练习。压缩包共收录879个文件,约21.27MB,涵盖…

2026/9/29 18:19:47 阅读更多 →

最新新闻

AI辅助本科毕业论文全流程:8个实战工具与避坑指南

AI辅助本科毕业论文全流程:8个实战工具与避坑指南

又到一年毕业季,后台被师弟师妹问爆了:AI写论文到底靠不靠谱?说实话,我刚带完一届本科生的毕业设计,见过太多人要么完全不敢用AI,要么直接甩给AI生成全文然后被导师约谈。这两类都不可取。我的真实观点是&a…

2026/9/30 7:42:25 阅读更多 →
SpringBoot+Vue精准扶贫管理系统毕设完整指南:从选题到答辩

SpringBoot+Vue精准扶贫管理系统毕设完整指南:从选题到答辩

只要你在计算机毕业设计相关的群里蹲上半个月,一定会频繁看到“SpringBootvue精准扶贫管理系统(附源码论文)”这个标题。它几乎是每年毕设季的固定选项。说实话,这类系统并不复杂,本质上就是一个典型的管理信息系统&am…

2026/9/30 7:42:25 阅读更多 →
数字化巡检系统怎么落地?从点检标准到数据资产的完整路径

数字化巡检系统怎么落地?从点检标准到数据资产的完整路径

1. 传统巡检模式的成本黑洞:问题从来不在数据缺失 上周有个老朋友打电话问我,说厂里刚上线了一套数字化巡检系统,折腾了三个月,除了让维修工手里多了一台扫码的手机,好像没给管理工作带来任何实际变化。点检记录倒是电…

2026/9/30 7:42:25 阅读更多 →
毕业论文救星:8款AI工具覆盖选题、文献、初稿、降重全流程

毕业论文救星:8款AI工具覆盖选题、文献、初稿、降重全流程

每到毕业季,总能在各种群里看到有人半夜发“毕业论文怎么搞,救救孩子”之类的话。其实本科毕业论文真正让人崩溃的,不是“不会写”,而是信息太多、时间太少、格式太烦。好在AI工具这两年已经成熟到能当半个研究助理用,…

2026/9/30 7:42:25 阅读更多 →
Django官方教程后实战指南:ORM查询、Token认证与WebSocket推送

Django官方教程后实战指南:ORM查询、Token认证与WebSocket推送

1. 项目概述:官方教程跑通之后,真正的实战才刚刚开始 如果你刚把 Django 官方教程里那个投票应用从头到尾做完,可能会有一种微妙的错觉:觉得自己已经会 Django 了。但等你打开浏览器,看着那个勉强能用的后台和几个表单…

2026/9/30 7:42:25 阅读更多 →
系统参数配置实战:从内核参数到配置管理一次讲透

系统参数配置实战:从内核参数到配置管理一次讲透

1. 别把配置当杂活:先想清楚参数从哪里来 做运维和开发这些年,我最大的感受就是:系统参数配置这个事,看起来就是改几个数字、加几行配置,真正踩过坑的人才知道,它其实是整个系统稳定性的地基。很多线上事故…

2026/9/30 7:41:25 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →