Outcome
只为当前 Codex Desktop 本地项目中已归属的主对话整理简洁标题;先进行只读改名能力预检,再展示唯一的候选表,确认后只调用线程改名接口。
Routing
- 进入条件:用户要求处理当前 Codex Desktop 本地项目中的对话标题,并保留项目和会话的其他状态。
- 枚举范围:包含已归属本地项目的主对话,包含未归档和已归档线程;排除 projectless(无项目)线程、
exec记录和subAgent子线程。 - 改名范围:只处理脚本预检标记为
renameable的线程;标记为no_rollout或unknown的线程保留原名,不进入确认后的改名映射。 - 退出条件:无法读取项目归属、无法调用 App Server、无法读取对话内容,或无法可靠提炼主题时保持原名并停止对应线程;不猜测。
Steps
读取
scripts/codex_sessions.py的帮助并运行list。脚本只读取本地项目归属、线程元数据和 Rollout 路径,并为每个候选返回renameStatus:renameable、no_rollout或unknown。当前 Codex App Server 对已归档线程的thread/name/set会返回no rollout found,因此已归档线程标记为no_rollout;缺少或找不到 Rollout 时按脚本结果处理。候选日期必须来自返回的createdAt,按Asia/Shanghai转换为MMDD,不得使用updatedAt。只对
renameStatus=renameable的线程运行content --thread-id <id>,根据用户消息和相关助手消息提炼实际主题。项目名称只能用于排除主题重复,不得写入新标题;无法判断主题时保留原名,内容不足、主题不明确或类型无法判断时不猜测。no_rollout和unknown线程不读取内容、不生成映射,保留原名。为主题和类型均可判断的可改名线程生成标题,格式必须是
MMDD|类型|主题。类型只使用功能、设计、修复、优化、发布、探索、文档、研究;主题要具体、简洁、适合左侧栏,不重复项目名称。优化批次文字显示→0903|优化|批次文字显示整合快捷键提示页面→0902|功能|整合快捷键提示页提交代码到 GitHub→0813|发布|提交代码到GitHub新功能讨论→0901|设计|界面对齐检查
执行前只输出一个两列表格,不加解释、统计、代码围栏或其他文本;表头必须严格为:
| 原名称 | 新名称 |表格只包含预检可改名的线程;主题无法判断的线程在两列中保留原名。
no_rollout和unknown线程不放入表格,保留原名并由脚本结果报告跳过原因。没有可改名线程时只输出表头。输出表格后停止,等待用户确认,不得提前调用apply。只有收到用户对该表的明确确认后,才把实际需要变化的
threadId到新标题映射通过以下命令传给脚本,并带上--confirmed:python3 <skill-root>/scripts/codex_sessions.py apply --confirmed <<'JSON' {"<thread-id>": "0903|优化|批次文字显示"} JSON脚本会重新核对线程仍属于本地项目主对话和
renameStatus,并在任何写入前校验全部新标题;已变为no_rollout或unknown的线程不调用写入接口。结果中的changed只表示服务端确认成功,unchanged表示无需写入,skipped表示预检不可执行且原名保留,failed表示thread/name/set实际返回错误。changed可以与failed同时出现;脚本不会回滚已经成功的线程,存在failed时以非零状态退出。仅报告脚本返回的修改结果;不复述候选表,不追加无关说明。
Guardrails
- 只用
createdAt计算日期;不得以updatedAt替代、排序或修正日期。 - 脚本的
list、content和改名能力预检只读;预检不得用thread/name/set试错。apply的唯一写入方法是thread/name/set。不得调用项目改名、线程归属、thread/metadata/update、归档、置顶、删除或内容编辑接口。 - 不直接写入 Codex Desktop 状态文件;不要修改项目名称、对话内容、项目归属、排序、置顶或归档状态。
- 用户未确认候选表、项目状态无法核对、预检状态为
no_rollout或unknown、内容不足或主题不确定时,不执行改名;保留原名。
References
- 需要执行线程枚举、内容读取或改名时,读取并调用
scripts/codex_sessions.py;不要在提示词中复制 JSON-RPC 实现。