agent-session-titles
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push -1 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- spawnSync — Synchronous process spawning in bin/agent-session-titles.cjs
- fs.rmSync — Destructive file system operation in bin/agent-session-titles.cjs
- os.homedir — User home directory access in bin/agent-session-titles.cjs
- process.env — Environment variable access in bin/agent-session-titles.cjs
- fs module — File system access in bin/agent-session-titles.cjs
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
一条命令为 Codex 与 Claude Code 安装三段式会话标题插件
Agent Session Titles(会话标题自动更新)
简体中文 | English
为 Codex、Claude Code 和 DeepSeek Harness 的本地会话维护可选中文或英文的三段式标题:
状态|初始需求|当前进展
开发中|会话标题自动化|适配双端安装器
Building | Session titles | Add bilingual support

上图为 Codex CLI:每轮对话后,窗口标题和底部状态栏的会话标题随进展即时刷新。
中间段保留用户最初要解决的问题;DeepSeek Harness 的中间段按整个会话做简短摘要,而不是只复述首条需求。状态和末段在阶段变化时更新,无须等整个回合结束。当前支持的自动状态为「聊天、摸底、方案、开发中、测试、修复、待确认、已完成、搁置」。用户手动修改哪一段,插件就保留并锁定哪一段,其余段继续自动更新;手动状态词可以不在自动状态列表中。标题只有这三段,工作树和无项目会话都不额外加前缀或目录名。无法可靠拆分或确认来源的名称会整体保留;Claude Code 桌面端在首个标题确认前自动起的名字不算人工改名,插件会继续沿用自己的标题。
直接交给 Agent 安装
把下面这段话直接发给有本机终端权限的 Codex 或 Claude Code Agent。将“中文”改为“英文”即可选择英文;也可以将“两个客户端”改为“仅 Codex”或“仅 Claude Code”。Agent 会执行安装命令和检查步骤,你不需要自己打开终端。完整的中英文可复制版本见 Agent 安装说明;DeepSeek Harness 使用其中的 DSH 指令,或把目标改成 --dsh。
请从 https://github.com/panda-z519/agent-session-titles 安装本地会话标题插件,目标是两个客户端,标题使用中文。先检查本机
codex、claude、Node.js 20+ 和 Python 3.11+。执行npx --yes github:panda-z519/agent-session-titles --both --lang zh --migrate,再核对安装结果和配置备份。--migrate只用于备份并迁移旧版标题钩子,保留其他钩子。若缺少客户端或安装失败,说明具体原因,不声称成功。Codex 若要求信任新钩子,请让我在应用中检查并确认;完成后提醒我重启客户端并验证新本地会话。
自己运行命令安装
需要 macOS 或 Linux、Node.js 20+、Python 3.11+,以及要使用的客户端命令 codex、claude 或 dsh。选择一条命令运行:
自动安装本机已有的客户端(两者都有就安装两端):
npx --yes github:panda-z519/agent-session-titles
只安装 Codex:
npx --yes github:panda-z519/agent-session-titles --codex
只安装 Claude Code:
npx --yes github:panda-z519/agent-session-titles --claude
明确要求两端都安装(缺少任一客户端命令就停止):
npx --yes github:panda-z519/agent-session-titles --both
默认标题语言为中文。首次安装选择英文时加 --lang en;之后重跑时不指定语言会保留当前选择,切回中文可用 --lang zh:
--lang 控制插件钩子的标题格式、状态词和给 Agent 的提示。若你自己的全局 AGENTS.md 或 CLAUDE.md 仍强制另一种标题语言或“只在回复结束后更新”,安装器会提示疑似冲突的行,应同步调整;见下方全局规则文件。
npx --yes github:panda-z519/agent-session-titles --codex --lang en
npx --yes github:panda-z519/agent-session-titles --claude --lang zh
已有旧版独立标题钩子时,加 --migrate 才会迁移并安装插件;不加会报错并保持旧配置。迁移只删除旧标题钩子的注册条目,保留脚本、其他钩子和会话数据,并备份原配置。
DeepSeek Harness
需要 Node.js 20+,以及 dsh 命令或已存在的 ~/.dsh。只安装 DSH 插件:
npx --yes github:panda-z519/agent-session-titles --dsh --lang zh
安装器会把 dsh-session-titles 复制到 ~/.dsh/plugins/,在目标 profile 的 cordis.patch.yml
用户层写入受管块:禁用内置 session-title-llm 与 optional-session-title-all-prompts,并用相对
路径插入插件。这种方式不需要 dsh plugin,也不改 profile 的 package.json,重启 DeepSeek
Harness 后生效。桌面端的 desktop profile 由 Electron 独占,CLI 拒绝对它执行 --dump-config;dsh plugin 的 pnpm 转发仍然可用,见下一节的组合包安装。
如果已经在插件页把 dsh-session-titles 作为 bundle 安装,安装器会检测到,只写禁用行,不会再
重复插入插件行;卸载时先在插件页移除 bundle,再运行 --remove-dsh。
作为组合包安装(出现在插件页)
同一份插件带 dsh.bundle.patch,也可以装成 profile 的组合包。这样它会出现在 插件 → 已安装插件
里,能开关插件行、改 language / maxTitleBytes、直接在页面上卸载;受管块方式不会出现在插件页,
因为它不是 profile 的依赖记录。两种方式只能二选一:
- 先删掉安装器写入的受管块(
cordis.patch.yml里session-title-llm、optional-session-title-all-prompts和insert: agent-session-titles那一段),否则agent-session-titles行会被插入两次; - 在插件页用 添加插件 → 安装第三方插件 填本地目录绝对路径
~/.dsh/plugins/dsh-session-titles;等价命令是dsh plugin --profile <profile> add "link:$HOME/.dsh/plugins/dsh-session-titles"; - 确认 profile 的
package.json里dsh.profile.bundles的末尾是dsh-session-titles
——它的 patch 要最后应用,才能压住实验性 titles bundle 重新插入的内置 provider;插件页安装会
自动写入,纯命令方式若缺这一项就手动补上; - 重启 DeepSeek Harness。
已在 DSH 0.2.1-rc.5 的 desktop 和 web profile 上验证:组合后的配置里 session-title-llm、optional-session-title-all-prompts 都是 disabled: true,agent-session-titles 恰好一行。web profile 不含实验性 titles bundle,重启时 loader 会为 optional-session-title-all-prompts
打一条 "entry not found" 提示,不影响使用。
- 只装某个 profile:
--dsh-profile web(可重复);三端一起:--all; - 卸载:
--remove-dsh(删除受管块和插件副本,不删除已有会话标题); - DSH 标题由宿主
sessionTitle服务写入session/title事件;插件提供set_session_title工具,Agent 在理解需求后和阶段变化时更新; - 中间段用 4–12 字总结整个会话的主题/目标,不是只写首条需求;未手动锁定前 Agent 可以修正;
旧版本留下的截断或路径中间段会在下一次消息时自动修正; - 手动改名会锁定对应段,下一次用户消息或工具调用时自动恢复其余段;
- 状态和进展仍依赖 Agent 调用
set_session_title;未调用时标题停在聊天|…|刚开始。 - 默认标题上限 80 字节,超长会先裁“当前进展”,再裁“会话摘要”。
原理、边界和验证步骤见 DSH 方案文档。
全局规则文件
标题规则由插件钩子在每个会话中自动注入,不需要在全局 AGENTS.md(Codex)或 CLAUDE.md(Claude Code)里手写。安装器默认不修改这两个文件,只扫描其中疑似手写的会话标题规则,并在输出里指出行号,提醒你核对,避免和插件规则重复或冲突。
如果希望在钩子之外也把规则写进全局规则文件,可以加 --rules。安装器会在文件末尾写入一个由 <!-- agent-session-titles:start --> 和 <!-- agent-session-titles:end --> 包住的托管块,内容随标题语言生成,修改前会备份原文件。之后重新安装时,即使不加 --rules,已有的托管块也会整块更新。删除托管块(不安装插件):
npx --yes github:panda-z519/agent-session-titles --remove-rules
--remove-rules 同样支持 --codex / --claude,只删除标记之间的内容,并保留文件其余部分。
安装器从 GitHub 读取此仓库,将插件文件复制到用户目录中的稳定位置,再调用相应客户端的插件命令。它不会在 npm install 阶段执行 postinstall。新安装的 Codex 钩子需要在 Codex 中检查并信任;随后重启对应客户端,使用新的本地会话验证。Codex 钩子信任说明
安装器会修改什么
| 客户端 | 安装和配置 |
|---|---|
| Codex | 注册并安装 codex-session-titles 插件;把 ~/.codex/session-titles/ 加入窄范围可写目录;更新前检查状态库结构并创建 SQLite 一致性备份。 |
| Claude Code | 注册并安装 claude-session-titles 插件;在 ~/.claude/settings.json 中加入 Edit(~/.cc-session-titles/**);改动前备份已有设置。 |
| DeepSeek Harness | 复制 dsh-session-titles 到 ~/.dsh/plugins/;在目标 profile 的 cordis.patch.yml 用户层写入受管块,禁用内置标题 provider,并用相对路径加载插件;若已作为 bundle 安装则只写禁用行;修改前备份。想让插件出现在插件页时,可改用组合包方式(dsh plugin … add link:… + dsh.profile.bundles),此时需先删受管块。 |
已安装旧版用户级 session-title.sh 的客户端需要明确传入 --migrate;安装器会备份后移除匹配的旧钩子注册,再安装插件。CODEX_HOME、CLAUDE_CONFIG_DIR 和 DSH_HOME 分别支持自定义配置目录。
验证标题
- 重启客户端,新建一个本地会话,提出具体需求。助手理解需求后应尽早形成三段标题,阶段明显变化时更新状态与进展。
- 分别手动修改一段标题,再让助手进入下一阶段;手动改过的段应保持原样,其他段继续更新。若把整条标题改为无法拆分的格式,插件应保留整条名称;再改回合法的三段格式后,插件恢复自动更新(中间段锁定)。
- Codex 在标题文件写入后的工具事件尽早同步,即使 Codex 此时还没给会话起名;若 Codex 首轮结束后自动生成的名字覆盖了插件标题,下一次发消息时会恢复一次。
Stop和下一次发消息仍负责补偿。可检查~/.codex/session-titles/<会话ID>.state.json的phase、last_result和分段锁定信息。Codex CLI 使用后台守护进程(app-server daemon)时,插件经它的控制套接字调用thread/name/set,已打开的 CLI 窗口会立即刷新状态栏标题;守护进程不可用(例如--no-daemon)时退回直接写 SQLite,此时已打开的窗口要到重新打开或/rename后才显示新标题。侧边栏即时刷新仍取决于桌面端。 - Claude Code 首条提示词通过官方
sessionTitle钩子输出形成初始标题。桌面端在 Agent 写入标题文件后由PostToolUse钩子调用桌面端改名工具立即生效;命令行没有该工具,后续进展在下一次提交消息时应用(PostToolUse钩子会报一条不影响流程的错误)。可检查~/.cc-session-titles/<会话ID>.txt。Claude 钩子说明 - DeepSeek Harness 重启后新建本地会话,侧边栏应出现三段式标题;Agent 进入下一阶段时标题应即时更新。可检查会话日志中的
session/title事件,source.provider应为agent-session-titles。手动改名后,下一次消息应保留手改段并恢复其余段;把标题改成自由格式后应整体保留,改回三段式后恢复更新。若按组合包方式安装,重启后 插件 → 已安装插件 里应出现「会话标题」卡片,行内开关、配置(language、maxTitleBytes)和卸载都在该页面完成。
历史会话在收到新消息后才重新纳入 Codex 标题管理。若钩子提示“来源未确认”,会保留已有名称。无项目会话使用需求摘要,不把当前目录冒充项目名。
更新与卸载
更新时重新运行相同的 npx 命令,并重启对应客户端。安装器可重复执行;Codex 新版本会另存状态库备份。插件名沿用 codex-session-titles 和 claude-session-titles,两端插件源统一为 agent-session-titles。从旧插件源名称升级时,安装器会在新插件装好后自动卸载旧插件、移除旧插件源登记并删除旧复制目录,避免钩子重复运行,无需手动处理。
卸载插件可分别运行:
codex plugin remove codex-session-titles@agent-session-titles
claude plugin uninstall claude-session-titles@agent-session-titles
npx --yes github:panda-z519/agent-session-titles --remove-dsh
只使用一端时运行该端的卸载命令。准备脚本添加的可写目录或 Edit 规则可从用户配置中单独移除;旧版独立钩子和备份不会被自动删除。--remove-dsh 会删除受管块和插件副本,保留已有会话标题事件;不要只关闭插件行,否则内置标题 provider 仍处于禁用状态。
限制
- Codex 标题同步优先调用本机后台 app-server 的
thread/name/set,失败时直接写本机state_5.sqlite。两者都依赖当前 Codex 的内部接口和数据库结构,属于本地集成;结构不符时准备脚本会停止配置,钩子不会创建空数据库。 - Claude Code 命令行只能在
SessionStart或UserPromptSubmit通过官方钩子设置标题,本轮新写的进展要到下一次提交消息才生效;桌面端的即时改名依赖桌面端内置的ccd_session_mgmt工具。 - 即时改名按标题文件内容原样设置,锁定字段若被覆盖,会在下一次提交消息时恢复。自定义
CC_TITLE_DIR时即时改名不生效(钩子条件固定匹配~/.cc-session-titles/)。 - 插件只能从与上次应用标题的差异推断“外部修改”,无法证明修改者一定是用户。首次接管且没有基线的历史标题仍需保守处理。
- DeepSeek Harness 的标题由宿主
sessionTitle服务管理,服务只允许一个 provider;安装器会在用户 patch 层禁用内置 provider,如果另有第三方标题插件抢占,本插件会降级为不启用并记录警告。 - DSH 默认标题上限为 80 字节,超长时先裁“当前进展”,再裁“会话摘要”;需要更长标题时同时调整
session-title服务和插件配置。 - DSH 桌面端的
desktopprofile 由 Electron 独占,CLI 只有--dump-config被拒绝(dsh plugin仍可转发 pnpm);安装器只写用户 patch 层并跳过桌面端校验,重启应用后由宿主加载。想验证 desktop 的组合结果,可把 profile 复制到临时DSH_HOME下改名后--dump-config。 - 本仓库的生命周期钩子面向本地桌面端,不能作为带钩子的插件提交到 OpenAI 公共插件目录。插件打包说明
社区
感谢 LINUX DO 社区,本项目在这里发布、交流并收集佬友们的反馈。
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found