BKD

AI 驱动的看板应用,专为编程代理设计。创建任务、分配给 Claude Code、Codex 或 Gemini CLI,实时查看工作进度——内置 diff 查看器、Web 终端和多轮对话。

数据存储

BKD 使用 SQLite 作为数据库。所有数据都存储在本地机器上——不会发送到外部服务器(除了你配置的 AI 提供商的 API 调用)。

数据库位置

默认情况下,数据库存储在 BKD 工作目录的 data/db/bkd.db。你可以通过 DB_PATH 环境变量修改路径。

# 默认位置
data/db/bkd.db

# 自定义位置
DB_PATH=/path/to/your/database.db

存储内容

数据 说明
项目 项目名称、工作目录路径
Issue 标题、描述、状态、分配的代理/模型
会话 聊天历史、代理输出、工具调用日志
文件 Diff 代理执行期间所做的更改
上传文件 附加到 Issue 作为代理上下文的文件

目录结构

BKD 的数据目录组织如下:

data/
├── app/                 # 当前运行的应用版本
│   └── ...              # 应用包文件
├── updates/             # 升级包
│   └── ...              # 下载的更新存档
├── db/
│   └── bkd.db           # SQLite 数据库(项目、Issue、会话)
└── uploads/             # 上传的文件附件

data/app/ — 包含当前运行的应用版本。启动器将应用包解压到此目录。BKD 启动时从该目录加载并运行应用。不要手动修改此目录中的文件——下次更新时会被覆盖。

data/updates/ — 存储下载的升级包。当有新版本可用时,启动器会将更新存档下载到此目录,然后解压到 data/app/。旧的升级包可能会逐渐积累,可以安全删除以释放磁盘空间。

data/db/ — 存放 SQLite 数据库文件。所有持久化状态——项目、Issue、会话、聊天历史和代理输出——都保存在 bkd.db 中。

data/uploads/ — 存储通过 UI 上传并附加到 Issue 的文件。执行任务时,这些文件会作为上下文传递给代理。

工作树目录

在根目录(data/ 之外),BKD 会创建 worktrees/ 目录用于管理 git 工作树:

worktrees/
└── <project-id>/
    └── <issue-id>/      # 代理执行的隔离 git 工作树

worktrees/ — 每个 Issue 执行都会获得独立的 git 工作树,按项目 ID 和 Issue ID 组织。这允许多个代理同时在同一仓库的不同 Issue 上工作,互不干扰。工作树在代理开始执行时创建,并与项目的工作目录仓库关联。

工作树要点:

  • 每个工作树都是仓库的独立工作副本,拥有自己的分支
  • 代理在工作树中进行修改,保持主仓库整洁
  • 你可以在 UI 中审查 diff,然后再合并更改
  • 工作树以项目 ID 和 Issue ID 为键,避免冲突
  • 已完成或已取消 Issue 的工作树可以安全清理

数据清理

删除单个项目

在 UI 中点击项目设置,选择「删除项目」。这会从数据库中删除项目、所有 Issue 及关联的会话数据。不会删除代理在工作目录或工作树中创建的文件。

重置所有数据

要完全重置 BKD 并重新开始,停止服务器后删除数据目录和工作树:

# 先停止 BKD,然后:
rm -rf data/
rm -rf worktrees/

这会删除数据库、上传的文件和所有工作树。下次启动时,BKD 会创建全新的数据库。

仅删除会话历史

如果你想保留项目和 Issue,但清除所有聊天记录和代理输出:

# 使用 sqlite3 CLI
sqlite3 data/db/bkd.db "DELETE FROM sessions; DELETE FROM messages; VACUUM;"

清理工作树

删除已完成或旧 Issue 的工作树:

# 删除所有工作树(先停止 BKD)
rm -rf worktrees/

# 删除特定项目的工作树
rm -rf worktrees/<project-id>/

代理执行时 BKD 会根据需要重新创建工作树。

清理旧升级包

data/updates/ 中下载的升级包可以安全删除:

rm -rf data/updates/*

启动器会在需要时重新下载更新。

数据库备份

由于 BKD 使用单个 SQLite 文件,备份非常简单:

# 简单文件复制(建议先停止 BKD 以确保一致性)
cp data/db/bkd.db data/db/bkd-backup-$(date +%Y%m%d).db

# 或使用 sqlite3 备份命令(运行中也安全)
sqlite3 data/db/bkd.db ".backup data/db/bkd-backup.db"

磁盘占用

数据库会随着会话增多而增长。代理输出(尤其是详细的工具调用日志)会逐渐积累。工作树的磁盘占用与仓库大小成正比。监控磁盘使用:

# 数据库大小
ls -lh data/db/bkd.db

# 工作树大小
du -sh worktrees/

# 升级包大小
du -sh data/updates/

删除旧数据后回收空间:

sqlite3 data/db/bkd.db "VACUUM;"