ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

在你的 Claude Code 里装一个黑洞:Ghostty + GLSL 着色器实战

在你的 Claude Code 里装一个黑洞:Ghostty + GLSL 着色器实战 1. 为什么要在 Claude Code 终端里塞一个黑洞先说清楚这个东西是什么。Ghostty 从 1.3 版本开始支持自定义 GLSL 着色器每个像素执行一段片段着色器代码机制跟 Shadertoy 类似。有人利用这个能力把 Eric Bruneton 那套经典的黑洞渲染算法搬进了终端——不是 ASCII 艺术不是贴图是每像素独立积分光子路径的史瓦西黑洞带吸积盘、光子环和引力透镜。它适合谁适合把 Ghostty 当主力终端、又长期泡在 Claude Code 里写代码的人。你终端里靠近黑洞的文字会被拉伸成光子环然后消失黑洞的大小跟着你的上下文窗口填充率实时变化0% 时缩在角落快满时吞掉半个屏幕。这本质上是一个用视觉方式提醒你「该 /compact 了」或者「该休息了」的装置。我试过之后最大的感受是它把「上下文快满了」这个抽象数字变成了一个你根本没法忽略的物理现象。以前你盯着 token 计数条现在你盯着一个正在长大的黑洞。下面我会从环境准备、Ghostty 配置、GLSL 着色器文件、Claude Code 启动参数到验证和排错一步步带你装好。2. 前置准备Ghostty 版本、GLSL 着色器与 Claude Code 环境2.1 确认 Ghostty 版本支持自定义着色器自定义着色器是 Ghostty 1.3 才引入的能力低于这个版本配置项会被忽略。先确认版本ghostty --version输出里如果看到1.3.0或更高就可以继续。macOS 用户如果用 Homebrew 装的升级命令是brew upgrade --cask ghosttyLinux 用户根据你的发行版走对应的包管理器或者从源码构建。版本不够的话后面custom-shader这一行写了也不会生效这是最常见的「配了没反应」原因。2.2 拿到黑洞着色器文件着色器本体是一个.glsl文件放在你本地任意目录即可比如~/shaders/blackhole.glsl。它的核心逻辑是对黑洞附近的每个像素发射一条平行光线用数值方法积分它在 Schwarzschild 时空中的零测地线。加速度方程是 Binet 形式的// 角动量守恒量 h |x × v|一次计算全程复用 // 加速度 a -(3/2) * h² * x / r⁵ vec3 accel(vec3 x, vec3 v, float h2) { float r2 dot(x, x); float r5 r2 * r2 * sqrt(r2); return -1.5 * h2 * x / r5; }光线要么落入视界变成黑色要么逃逸并被投影回终端画面形成被弯曲的文字和吸积盘。性能上有个巧思只有黑洞附近的像素走完整数值积分远处直接切换到解析的弱场偏转近似α 2r_s/b几乎不花计算。所以小黑洞时对帧率几乎没影响只有它长大时计算量才上升。N_STEPS是主要的性能旋钮控制每像素积分步数。2.3 关于 TaoToken 与 Claude Code 的接入如果你还没配好 Claude Code 的模型接入这里顺带说一下。TaoToken 提供兼容 Anthropic 的 API 端点Claude Code 通过环境变量指向它即可。你需要三件套Base URL、API Key、Model ID。API Key 在控制台创建接入文档里有完整的端点说明。这一步和黑洞特效是独立的但如果你本来就在用 Claude Code先把接入跑通再叠加视觉层会更顺。控制台创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite3. 可复制配置Ghostty config 与 Claude Code settings.json3.1 Ghostty 配置片段打开 Ghostty 的配置文件路径通常是~/.config/ghostty/configmacOS 上可能是~/Library/Application Support/com.mitchellh.ghostty/config。加入两行# ~/.config/ghostty/config custom-shader /Users/你的用户名/shaders/blackhole.glsl custom-shader-animation truecustom-shader-animation true很关键它让着色器按帧持续重绘。不加这行黑洞就是一张静止的图不会转也不会长大。路径必须写绝对路径~在部分版本里不会被展开这是踩过的坑之一。3.2 Claude Code 的 settings.json 配置黑洞大小要跟着上下文填充率走需要 Claude Code 通过 hook 把状态传出来。编辑~/.claude/settings.json{ statusLine: { type: command, command: /Users/你的用户名/shaders/claude-token.py }, hooks: { SessionStart: [ { hooks: [ { type: command, command: /Users/你的用户名/shaders/claude-token.py } ] } ], SessionEnd: [ { hooks: [ { type: command, command: /Users/你的用户名/shaders/claude-token.py } ] } ] } }这里的claude-token.py是一个辅助脚本它把上下文填充率编码进终端光标颜色。原理是Ghostty 的着色器能读取iCurrentCursorColor而任何程序都能用标准的 OSC 12 转义序列设置光标颜色。脚本把填充率编码到光标颜色的低 4 位琥珀色从#f5b000空渐变到#f0bf0a满高位固定加 4 位校验和组成 16 位签名所以你主题自带的琥珀色光标不会误触发。Ghostty 在光标颜色变化时会把旧颜色存入iPreviousCursorColor并触发iTimeCursorChange着色器据此做平滑过渡——1% 变化花 0.3 秒10% 变化花 1 秒最多 1.5 秒。你能看到黑洞在长大而不是在跳。3.3 三种模式开关着色器顶部有一个SIZE_MODE开关决定黑洞大小由什么驱动模式驱动源适用场景Token 模式默认Claude Code 上下文填充率日常写代码实时提醒番茄钟模式壁钟55 分钟工作 5 分钟休息不依赖 Claude CodeDemo 模式42 秒自动循环8 种预设切换当屏保看番茄钟模式还带打字检测连续 90 秒没操作黑洞自动缩小消失。Demo 模式在 Inferno、Gargantua、M87* donut、Quasar、Blazar、Pure lens 等预设间自动切换全部在一个编译的着色器里跑完没有文件重载。4. 验证请求终端内黑洞动画与 Claude Code 交互实测4.1 启动并观察渲染配置保存后完全退出 Ghostty 再重新打开不是新开标签页是退出进程。新开一个终端窗口你应该能在右上角看到一个小黑洞。如果没看到先确认custom-shader路径没写错再确认版本够。启动 Claude Codeclaude会话开始后SessionStarthook 触发黑洞重置为角落小点0%。随着你和 Claude 对话上下文填充率上升黑洞逐渐长大、漂移速度加快、活动范围扩展到屏幕上方。接近满的时候黑洞影子覆盖终端约 3% 面积但视觉上吸积盘要大 3 倍看着就是半个屏幕被吞掉。4.2 验证交互不受影响这是关键验证点黑洞是渲染层的东西不应该影响输入输出。实测下来打字、滚动、复制粘贴、Claude Code 的流式输出都正常。着色器只改变像素颜色不拦截任何终端事件。你可以这样验证# 在黑洞附近跑一个持续输出的命令观察文字是否正常 for i in $(seq 1 100); do echo line $i - 测试文字是否被透镜弯曲; sleep 0.1; done靠近黑洞的文字会被拉伸成光子环然后消失但那是视觉上的实际字符还在缓冲区里选中复制拿到的是原文。黑洞背后会出现一个倒立的二次成像这是引力透镜的物理结果不是 bug。4.3 验证 Token 模式的数据通道想确认光标颜色编码在工作可以在 Claude Code 里执行/clear观察黑洞是否缩回角落。再连续对话几轮看它是否重新长大。如果黑洞大小完全不动说明claude-token.py没被正确调用检查 settings.json 里的路径和 hook 结构。5. 本篇常见错排查401、local proxy failed 与着色器不生效5.1 着色器完全不显示最常见的原因是 Ghostty 版本低于 1.3或者custom-shader路径写成了相对路径。另一个坑是配置文件位置不对——Ghostty 会读多个位置你改的那个可能不是它实际加载的。用ghostty show-config可以打印当前生效的配置确认custom-shader在里面。5.2 黑洞显示但不动九成是漏了custom-shader-animation true。没有这行着色器只渲染一帧你看到的是静止画面。5.3 Claude Code 报 401 或 local proxy failed这跟黑洞无关是模型接入层的问题。401 通常是 API Key 无效或没带上检查环境变量echo $ANTHROPIC_API_KEY echo $ANTHROPIC_BASE_URLlocal proxy failed一般是 Base URL 写错或者本地网络到端点的连通性问题。确认 Base URL 指向https://taotoken.net/api不要多加路径后缀。如果用的是 Codex 的auth.json或 Cline 的 MCP 配置同样要保证 Base URL、Key、Model ID 三件套齐全且一致。5.4 报错 reading choices 或 OAuth 相关reading choices通常出现在响应体格式不符合预期时多半是 Model ID 填错或者端点返回了非预期结构。OAuth 类报错则是认证方式没对齐——Claude Code 用 API Key 模式时不需要走 OAuth 流程检查是不是混用了两套认证配置。5.5 帧率掉得厉害黑洞很大又在高分屏上时每像素积分步数会拖垮帧率。调低着色器里的N_STEPS或者把黑洞尺寸上限压小。作者自己在 README 里也写了大黑洞配大高分屏就是帧率的坟墓。6. 把黑洞接进你的日常编码流装好之后这个黑洞会变成你工作流的一部分。刚/clear时它缩在角落你几乎注意不到对话深入它慢慢长大、漂移加快快满的时候它吞掉半个屏幕你自然就知道该/compact或者开新会话了。这比盯着一个百分比数字直观得多。如果你还想把模型接入也理顺可以走 TaoToken 的 Coding Plan 做长期编码和 Agent 场景或者直接在模型对话页面试不同模型的表现。黑洞是视觉层接入是能力层两层都配好Claude Code 的体验才算完整。模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewriteCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后留一个实用技巧如果你不想让黑洞在演示或者录屏时出现把custom-shader-animation临时改成false就行不用删配置。想彻底关掉就注释掉custom-shader那一行重启 Ghostty 即可。
返回列表