












本文永久链接 – https://tonybai.com/2026/08/02/ccsa-claude-code-session-alias-tool
你有没有过这样的时刻:打开终端想 resume 昨天的某个 Claude Code session,却在
--resume的列表里翻来翻去,最后干脆重开一个——于是好不容易攒下的上下文,又得从头喂一遍。
大家好,我是Tony Bai。
假设你同时在推进三条线:一个前端鉴权改造、一个后端 API 重构、一份技术调研。按最佳实践,每条线各开一个 Claude Code session,让上下文保持聚焦、互不污染。
头几天还好。可等你退出、隔天回来想接着干的时候,问题来了:
198d4193-3a16-4051-8dfa-a9dac573c933),你根本记不住哪条线对应哪个;claude --resume 不带参数倒是弹个 picker,但它只列当前目录下的 session,你在 backend-api 目录里看不到 frontend-auth 那条;claude --name xxx 只能在启动时设名,事后想起要改个名?没门;multi-agent-d5)也看不出具体在干嘛。于是你只能要么重开 session 重喂上下文,要么把几个 UUID 存进备忘录贴来贴去。这件事很小,但每天都在发生。

为了说清痛点从哪来,先补一句背景。Claude Code 用 session 保留工作记忆,本地存成两类文件:
~/.claude/sessions/<pid>.json —— 活跃 session 的注册表(含 sessionId、cwd、name、status);~/.claude/projects/<编码路径>/<sessionId>.jsonl —— 按项目存的 session 转录。原生 CLI 给了三个相关能力:启动时 --name 命名、--resume <uuid> 恢复、--continue 续上当前目录最近一个。能力都有,但都卡在"要么事前、要么局部"——偏偏我们最缺的是"事后、跨项目、语义化"的别名。
cc-session-alias(命令名 ccsa)就是来填这个空白的。一句话定位:它不替代 claude --resume,只替你维护"别名 → UUID"的映射,并在恢复时把别名解析回 UUID 再交给 claude。
它是个单二进制的 Go CLI,零运行时依赖、无 CGO、约 4MB,go install github.com/bigwhite/cc-session-alias@latest 即装即用。
装好之后,最常见的链路长这样:
# 在某项目目录下,给当前最近活跃的 session 起个名
ccsa set agent-evolution
# 跨项目一览(短 ID + 项目名 + 创建日期)
ccsa list
# 看详情和存活态
ccsa info agent-evolution
# 一键 resume,还能透传参数给 claude
ccsa r agent-evolution --model fable
ccsa set 不带 --id 时,会自动发现当前工作目录最近的 session——它做了双层扫描:先扫活跃的 sessions/*.json,没有再 fallback 到历史转录 projects/<编码路径>/*.jsonl。所以你不需要手动去找 UUID。
恢复 session 有三种姿势,任选其一:
ccsa r <alias> —— 最短,进程直接被 claude --resume <uuid> 替换;claude --resume <alias> —— 装个可选 shell wrapper 后,原生命令也透明支持别名(UUID 格式零开销透传,不认识的原样丢给 claude);claude --resume $(ccsa get <alias>) —— 不装 wrapper,显式管道组合,最稳。顺带还有 ccsa rename、ccsa rm、ccsa prune(清理指向已消失 session 的过期别名)和 ccsa info 显示的存活态——active (idle) / active (busy) / exited / gone,一眼看出这条 session 还在不在。
不展开实现,只点三个让我觉得"这工具想清楚了"的地方:
一是双轨 resume。 ccsa r 走进程替换(syscall.Exec),没有多一层进程包装、TTY 控制干净;shell wrapper 则走 shell 函数拦截,对 UUID 输入零侵入。两条路独立工作,按你的习惯选。
二是存储很克制。 别名就存成一个 JSON:~/.cc-session-alias/aliases.json,目录 0700、文件 0600,写入走 tmp+rename 原子替换,文件坏了自动备份成 .bak 再起空表。人类可读可手改,没有数据库、没有后台进程。
三是 shell wrapper 的边界感。 它只拦截 --resume/-r 的第一个参数,且只在参数不是 UUID 格式时才去解析;其它任何 claude 用法(claude -p、claude --continue、无参数等)一概不碰。装上之后你既有的肌肉记忆完全不受影响。
ccsa list 给你一个跨项目的全局视图,--project 还能按项目过滤。prune 定期清理,别名表常年清爽。如果你打算试一下,给三条建议:
ccsa set <一个你看一眼就知道在干嘛的名字>,体验下自动发现;命名规则是 [a-zA-Z0-9_-]、1–64 字符,别带空格和点。ccsa r 启用了 DisableFlagParsing,所以 --model 这类参数会原样透传给 claude——但也因此 r -h 不走 cobra 自动 help(工具自己处理了,会打一行用法)。这是有意的取舍。ccsa r 和管道姿势完整跑通;装了只是多一种"原生 claude --resume <别名>“的写法。装/卸用 ccsa install-hook / ccsa uninstall-hook,幂等、可回滚。回顾一下:Claude Code 的 session 机制本身够用,但"事后命名 + 跨项目视图 + 语义化恢复"这一块是空白。ccsa 用一个 4MB 的单二进制填上了它——set 自动发现、list 跨项目、info 三态存活、r 一键 resume,外加可选的透明 shell wrapper。
升华一句:好的工具不是替你做决定,而是把你已经在做的、重复而琐碎的那一步,缩短到三字符。 如果你也常在 --resume 的列表里翻找,不妨给 ccsa 一个机会。
如果哪天claude code原生自带session alias机制,那就果断丢掉这个工具就好^_^。不过在那之前,可以试用一下ccsa:
# From source (recommended)
go install github.com/bigwhite/cc-session-alias@latest
觉得好用的话,给个 ⭐ 是对开源作者最直接的鼓励。
还在为“复制粘贴喂AI”而烦恼?我的新专栏 《AI原生开发工作流实战》 将带你:
扫描下方二维码,开启你的AI原生开发之旅。

你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?
继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!
我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。
目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。