name: terminal-title description: 此技能用于根据上下文更新终端窗口标题。通过钩子在会话开始时自动触发。同时在对话过程中主题变更时触发(从调试切换到文档,从前端切换到后端)。使用表情符号+项目名称+当前主题更新标题。
<!-- ABOUTME: 终端标题技能,自动更新终端窗口标题 --> <!-- ABOUTME: 使用环境中的表情符号 + Claude的项目检测 + 当前主题 -->
终端标题管理
概述
此技能更新终端窗口标题以显示当前上下文:
- 工作/娱乐表情符号(来自
$TERMINAL_TITLE_EMOJI环境变量) - 项目名称(由Claude智能检测)
- 当前主题(您正在处理的内容)
格式: 💼 项目名称 - 主题
关键:何时调用
必须调用的情况:
- 会话开始: 由SessionStart钩子自动触发。Claude必须通过将标题设置为“Claude Code”作为默认主题来响应。
- 主题变更: 当用户切换到新主题时,Claude必须检测并调用。
主题变更模式(Claude必须检测这些):
- ✅ “让我们谈谈X” / “你能告诉我关于Y吗” → 立即调用
- ✅ 用户切换领域:调试→文档,前端→后端,功能→测试
- ✅ 在持续讨论后用户开始处理不同的模块/组件
- ✅ 在当前主题讨论3次以上后用户询问完全不相关的主题
- ❌ 同一主题的后续问题(“给那个函数添加注释”)→ 不要调用
- ❌ 当前工作的小幅改进(“把它变成蓝色”)→ 不要调用
- ❌ 关于当前任务的澄清 → 不要调用
Claude的责任: 主动监控对话流程,并在主题发生实质性变化时调用此技能。不要等待明确许可。
示例标题:
💼 技能仓库 - 终端标题🎉 dotfiles - zsh配置💼 OneOnOne - Firebase配置
设置要求
所需权限:
此技能运行脚本来更新终端标题。为防止Claude每次提示权限,请将此添加到您的 ~/.claude/settings.json:
对于Unix/Linux/macOS:
{
"permissions": {
"allow": [
"Bash(bash *skills/scripts/set_title.sh:*)"
]
}
}
对于Windows:
{
"permissions": {
"allow": [
"Bash(pwsh *skills/scripts/set_title.ps1:*)"
]
}
}
为什么需要此权限: 该技能执行一个脚本,在后台静默发送终端转义序列以更新窗口标题,而不中断您的工作流程。
跨平台支持: 插件包含适用于类Unix系统的bash脚本(.sh)和适用于Windows的PowerShell脚本(.ps1)。SessionStart钩子自动检测您的操作系统并使用适当的脚本。
项目检测策略
主要方法:Claude的智能分析
Claude分析当前上下文以确定项目名称:
- 当前工作目录和最近的对话
- 会话期间读取的文件
- Git仓库信息
- 包元数据(package.json、README.md等)
- 对项目代表的整体理解
关键原则: 使用智能理解,而不仅仅是机械的文件解析。
检测示例:
/Users/dylanr/work/2389/skills→ “技能仓库”(不仅仅是“skills”)/Users/dylanr/work/2389/oneonone/hosting→ “OneOnOne”/Users/dylanr/dotfiles→ “dotfiles”/Users/dylanr/projects/my-app→ “我的应用”(从目录人性化)
Claude检查的支持证据:
- Git远程URL或仓库目录名称
package.json名称字段(Node.js项目)- README.md中的第一个标题
- 目录基本名称(最后手段)
后备方案: 如果Claude无法确定上下文,请使用当前目录名称。
始终包含项目名称 - Claude总是可以确定一些有意义的内容。
标题格式化
标准格式:
$emoji 项目名称 - 主题
组件详情:
1. 表情符号(来自环境):
- 从
$TERMINAL_TITLE_EMOJI环境变量读取 - 由zsh主题根据目录上下文设置
- 常见值:💼(工作),🎉(娱乐/个人)
- 后备方案:如果变量未设置,则使用🎉
2. 项目名称(来自Claude的检测):
- 人性化的名称,而非slug格式
- 正确的大小写(例如“OneOnOne”而非“oneonone”)
- 始终存在(使用目录名称作为最低要求)
3. 主题(来自调用上下文):
- 当前工作的简短描述(2-4个词)
- 调用技能时提供
- 示例:“终端标题”、“Firebase配置”、“CSS重构”
脚本使用:
bash scripts/set_title.sh "项目名称" "主题"
注意: 脚本自动从环境读取表情符号并处理终端转义序列。
边缘情况:
- 没有
$TERMINAL_TITLE_EMOJI:使用🎉作为默认 - 非常长的项目/主题:让终端自然处理截断
- 空主题:使用“Claude Code”作为默认
工作流程
当Claude检测到主题变更(或会话开始)时,立即调用此工作流程:
按照以下步骤更新终端标题:
步骤1:确定项目名称
使用Claude对当前代码库和上下文的理解来确定项目名称。检查:
- 您从对话和文件中了解的关于此项目的信息
- Git仓库名称/远程URL
- package.json名称字段(如果是Node.js项目)
- README.md第一个标题
- 目录基本名称(最低后备方案)
生成一个人性化的名称(例如“技能仓库”而非“skills”)。
步骤2:从上下文获取主题
主题应来自:
- 调用参数(如果明确提供)
- 当前对话上下文(用户正在处理的内容)
- 会话开始时默认为“Claude Code”
步骤3:检测操作系统
在执行脚本之前,检测操作系统:
# 检查是否在Windows上运行(检查常见的Windows指示器)
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" || "$OSTYPE" == "cygwin" ]]; then
OS="windows"
else
OS="unix"
fi
步骤4:执行标题更新脚本(跨平台)
找到技能基础目录(在技能加载消息中可用),并根据操作系统执行适当的脚本:
对于Unix/Linux/macOS:
bash <技能基础目录>/scripts/set_title.sh "项目名称" "主题"
对于Windows:
pwsh -NoProfile -ExecutionPolicy Bypass -File <技能基础目录>/scripts/set_title.ps1 "项目名称" "主题"
脚本处理:
- 从
$TERMINAL_TITLE_EMOJI(Unix)或$env:TERMINAL_TITLE_EMOJI(Windows)读取表情符号 - 清理输入
- 格式化和发送终端转义序列
使用Bash工具(通过权限预先批准)静默执行此命令。
步骤5:完成
标题已静默更新。继续响应用户,除非他们询问,否则不要提及标题更新。
示例
示例1:技能仓库中的会话开始
上下文: 用户在 /Users/dylanr/work/2389/skills 中启动Claude Code
环境: TERMINAL_TITLE_EMOJI=💼
执行:
- 项目:“技能仓库”(Claude的知识)
- 主题:“Claude Code”(会话开始默认)
- 命令:
bash /Users/dylanr/work/2389/claude-plugins/terminal-title/skills/scripts/set_title.sh "技能仓库" "Claude Code"
结果: 终端标题显示 💼 技能仓库 - Claude Code(脚本从环境读取表情符号)
示例2:主题变更检测
上下文: 对话从“终端标题实现”切换到“稀有VWs”
Claude的检测: 用户询问“你能告诉我关于稀有vws吗?” - 这是一个明确的主题切换
环境: TERMINAL_TITLE_EMOJI=🎉
Claude的操作:
- 检测主题变更(从终端实现到VWs)
- 调用终端标题技能工作流程
- 项目:“Home”(当前目录基本名称)
- 主题:“稀有VWs”(来自新的对话方向)
- 命令:
bash <技能基础目录>/scripts/set_title.sh "Home" "稀有VWs" - 继续回答用户关于稀有VWs的问题
结果: 终端标题静默更新为 🎉 Home - 稀有VWs(脚本从环境读取表情符号)
示例3:没有环境变量的个人项目
上下文: 用户在 ~/projects/dotfiles 目录中工作
环境: TERMINAL_TITLE_EMOJI 未设置
执行:
- 项目:“dotfiles”(来自目录)
- 主题:“zsh配置”(来自对话)
- 命令:
bash <技能基础目录>/scripts/set_title.sh "dotfiles" "zsh配置"
结果: 终端标题显示 🎉 dotfiles - zsh配置(当TERMINAL_TITLE_EMOJI未设置时,脚本使用🎉作为后备)
示例4:不同的项目上下文
上下文: 用户在 /Users/dylanr/work/2389/oneonone/hosting 中工作
环境: TERMINAL_TITLE_EMOJI=💼
执行:
- 项目:“OneOnOne”(Claude知道此项目名称)
- 主题:“Firebase配置”(来自对话)
- 命令:
bash <技能基础目录>/scripts/set_title.sh "OneOnOne" "Firebase配置"
结果: 终端标题显示 💼 OneOnOne - Firebase配置(脚本从环境读取表情符号)
示例5:Windows用户会话开始
上下文: Windows用户在 C:\Users\Nat\projects\my-app 中启动Claude Code
环境: $env:TERMINAL_TITLE_EMOJI=💻(Windows环境变量)
操作系统检测: Claude通过 $OSTYPE 检查检测到Windows
执行:
- 项目:“我的应用”(来自目录名称,人性化)
- 主题:“Claude Code”(会话开始默认)
- 命令:
pwsh -NoProfile -ExecutionPolicy Bypass -File <技能基础目录>/scripts/set_title.ps1 "我的应用" "Claude Code"
结果: 终端标题显示 💻 我的应用 - Claude Code(PowerShell脚本从 $env:TERMINAL_TITLE_EMOJI 读取表情符号)
注意: SessionStart钩子自动检测到Windows并调用PowerShell版本的脚本,而不是bash版本。