目标:回答「kitty 终端的日志在哪、如何恢复此前会话」并进一步调研社区/官方方案,给出可实现的“自动保存 + 恢复工作现场”的设计。
- Kitty 默认不会把终端输出持久化为“日志文件”;窗口关闭后 scrollback 也会丢失(除非你自己导出/录制)。
- Kitty 的 session 本质是“重建布局 + 重跑命令”:能恢复 tabs/windows/layout/cwd/要启动的程序,但不能做到 tmux-resurrect 那种“进程不断、断线重连”。
- 避免误关导致任务中断:官方建议用
confirm_os_window_close(见 issue #5448 回复)。
- Kitty 没有默认的 per-window 输出日志落盘。
- 可替代方案:
script -q ~/terminal.log录制整段交互command | tee -a ~/terminal.log记录单条命令输出- Kitty remote control 导出:
kitty @ get-text --extent all(可导出 scrollback 文本)
- 命令历史一般在 shell(如 zsh
~/.zsh_history)。
官方 Sessions 文档:
- Session 是一个文本文件,描述:OS Window、tab、window、layout、cwd、要运行的命令等。
- 常见关键字:
new_os_window/new_tab/layout/cd/launch --title .../focus/os_window_size等。 - 启动:
kitty --session /path/to/file.kitty-session或startup_session。
goto_session可绑定快捷键:在同一 kitty 进程内“跳转/加载”不同 session。tab_title_template可显示{session_name}。
save_as_sessionaction 能把当前打开的 OS windows/tabs/windows/程序/cwd 等保存成 session 文件。- 关键参数:
--save-only:仅保存不打开编辑器--relocatable:cwd 用相对路径(以 session 文件所在目录为基准)--match=session:.:只保存当前活动 session 内的窗口--use-foreground-process:把“shell 里当前前台进程”也写进 session(风险:如果你正在跑危险命令,恢复时会重跑)
- 文档建议用
new_tab_with_cwd/new_window_with_cwd,或launch --add-to-session=.。 - 归属只是运行时概念,不会自动改写 session 文件;需要再
save_as_session --match=session:. .更新。
- 直接
kitty --session通常会开新 OS window。 - 讨论 #4348 提到:可以用 remote control /
combine+launch --type tab的方式拼装;或写自定义 kitten。 - kovidgoyal/kitty#4348
- issue #5448:请求类似 tmux-resurrect(自动保存并复活)。维护者回复:duplicate of #1197,并建议误关用
confirm_os_window_close 1。 - issue #5991:同样诉求,被标记 dup #1197。
- #1197(长期 open):最早是 macOS “系统恢复应用窗口状态”类诉求。
补充:2025 年 RFC #8911 说明 save_as_session/goto_session 相关功能在 master/nightly 中推进,并给出了推荐 keymap。
- https://github.com/monoira/kitty-tabs
- 定位:tab 键位/交互配置,README 明确 limitation:
No sessions.
- https://github.com/dflock/kitty-save-session
- 思路:
kitty @ ls导出 JSON → 脚本生成 session 文件 →kitty --session恢复。 - 亮点:提供批量保存/恢复多个 kitty 实例的脚本;要求配置 remote control socket(
allow_remote_control+listen_on)。 - 限制:OS window size 不恢复;环境变量复制可能脆弱(可
--no-copy-env)。
- Reddit 帖子:
- 项目:
- 主要是 TUI 管理器:保存当前实例
kitty @ ls的结果、生成.kitty文件、提供列表/重命名/删除/启动。
- https://fossunited.org/hack/fosshack24/p/l2hu3e6540
- 内容偏“如何在 kitty 内部实现真正的状态序列化/恢复(包括 scrollback)”,说明了为什么做成 tmux-resurrect 很复杂。
目标不做“进程不断”,而是做到:崩溃/误关后能快速恢复布局、目录、命令、编辑器等(重跑)。
- 不建议自己解析
kitty @ ls再拼 session:容易遗漏 kitty 内部的set_layout_state等细节。 - 更稳的做法是远程控制直接触发 action:
kitty @ action "save_as_session --save-only ..."
在 kitty.conf:
allow_remote_control socket-onlylisten_on unix:/tmp/kitty-{kitty_pid}.sock(或其他可写目录;目录必须存在)- 防误关:
confirm_os_window_close -1 count-background
- 发现所有实例:遍历
listen_on创建的 socket(例如/tmp/kitty-*.sock)。 - 对每个实例执行:
kitty @ --to unix:/tmp/kitty-123.sock action "save_as_session --save-only --relocatable --match=session:. /path/to/autosave/123.kitty-session"
- 保存策略:
- 定时(每 N 分钟)
- 退出/关窗钩子(只能尽力而为;最可靠仍是定时)
- “恢复多个 OS windows”:遍历保存目录,对每个 session 文件启动:
kitty --session <file>。 - “单实例/多会话”:用
goto_session组织,或只维护一个last.kitty-session然后startup_session指向它。
- Session 无法把 scrollback 缓冲区原样写回,但可以另存文本:
kitty @ get-text --extent all --ansi --match=... > logs/...
- 恢复后可用
less打开这些日志作为“历史回放”。
- 这属于“终端复活”以外的问题:用
tmux/zellij或把长期任务变成系统服务。
- Kitty sessions 文档:https://sw.kovidgoyal.net/kitty/sessions/
- Kitty issue #5448:kovidgoyal/kitty#5448
- Kitty issue #1197:kovidgoyal/kitty#1197
- Kitty discussion #4348:kovidgoyal/kitty#4348
- Kitty discussion #5613:kovidgoyal/kitty#5613
- dflock/kitty-save-session:https://github.com/dflock/kitty-save-session
- kitty-sesh:https://github.com/Raghav-rv28/kitty-sesh
- reddit 帖子:https://www.reddit.com/r/KittyTerminal/comments/1c81w68/kitty_session_management_tool_kittysesh/
- FOSSUnited 页面:https://fossunited.org/hack/fosshack24/p/l2hu3e6540