MadoHub Docs

持久化

MadoHub 保存什么、保存到哪里,以及如何保存。

MadoHub 会将你的工作空间状态持久化到磁盘,因此在你重新启动应用时,所有内容都会恢复。所有持久化的工作区数据都保存在本地设备上。

存储位置

所有文件都保存在 ~/.madohub/ 中:

~/.madohub/
├── canvas-state.json         # 完整画布状态
├── config.json               # 应用配置
├── chat-history.json         # 聊天消息历史
├── memory-policies.json      # 内存自动注入策略
├── templates/
│   └── <slug>.json           # 每个已保存的工作空间模板对应一个文件
├── flows/
│   └── <id>.json             # 每个已保存的 flow 对应一个文件
├── logs/
│   └── madohub.log           # 应用日志
├── notifications/            # Stop hook 完成标记
└── orchestrator/             # Orchestrator 模式状态

保存内容

画布状态 (canvas-state.json)

数据说明
Tiles类型、位置、大小、z-index、文件路径、工作目录
Frames工作空间路径、颜色、位置
Viewport平移偏移(X/Y)和缩放级别
Connections所有路由连接及其触发/转换配置
SettingsAPI provider、key、model;通知 hook 状态
Max z-index新图块的层级顺序
Dismissed sessions已隐藏的 tmux 会话

应用配置 (config.json)

数据说明
Hooks stateClaude Code 通知 hook 是否已启用
Workspaces(遗留,已失效)配置 schema 中仍定义了已注册项目目录列表和当前激活工作空间 ID,但没有任何前端代码路径会调用它们的保存/加载函数,因此这部分已经是死代码。每个项目状态现在实际的载体是 frame,保存在 canvas-state.json 中。

保存方式

  • 自动保存:在任何画布、连接或设置变更时触发。
  • 防抖:延迟 500ms 以合并快速连续的更改。
  • 原子写入:数据先写入一个唯一的同级文件(<name>.tmp.<pid>.<seq>),再重命名到目标位置。这样即使应用在写入中途崩溃,也能避免损坏数据。
  • 损坏恢复:如果某个文件在加载时解析 JSON 失败,其原始字节会被隔离到一个内容寻址的同级文件 <name>.corrupt.<hash>(在多次重启间保持稳定),随后加载会回退到默认值,而不是直接失败。

不会保存的内容

  • 终端会话内容(PTY 输出是临时的)
  • 剪贴板内容

On this page