Beads已死,Linear CLI长存

不到一个月前,我写了篇完整文章介绍如何在Claude Code中使用三层记忆系统:Linear负责战略、Beads负责战术、Tasks负责执行。构建了一个优雅的金字塔模型。 然而现实很骨感。 今天我正式退役Beads。这不是心血来潮,而是因为这个工具制造的麻烦已经超过了它解决的问题——它不再是工具,而是累赘。 Beads的初衷 对于没读过前文的读者,Beads是一个基于Git的issue跟踪器。作为Claude Code的插件,它将issues存储为代码库中的JSONL文件。理论上设计很精妙: Git持久化:issues保存在.beads/目录并与代码一起提交 依赖管理:支持issue间阻塞关系 离线工作:无需网络连接 LLM原生支持:直接读取文件,无需API配置 其核心价值是作为"本周计划"(Linear)和"当前任务"(Tasks)之间的战术衔接层。 故障始末 起初一切顺利,直到各种创意故障接踵而至。 恶魔守护进程 Beads依赖后台守护进程管理SQLite数据库并与Git同步。听起来合理?实际状况: 检测到数据库不匹配! 当前数据库属于其他代码库: 数据库记录库ID:d1f9ca0c 当前代码库ID:01eac8ea ⚠️ 严重警告:此错误可能导致同步时误删issues! 这个错误会在每次会话启动时出现。守护进程崩溃、同步失败,导致issues陷入量子态——既存在于本地SQLite又不存在于Git,反之亦然。 幽灵同步 bd sync本应同步Git远程仓库的issues,但经常失效: → 从远程拉取中... 错误:git pull执行失败:退出状态1 remote: 仓库不存在 fatal: 无法访问'https://git.frr.dev/frr/wuwei.git/' 当代码库配置多个remote时(这很常见),Beads可能选错远程仓库。若该仓库不存在或已更名,每次操作都会静默报错。最终issues停止同步,直到下次会话时数据全部消失才后知后觉。 认知损耗 每次Claude Code会话都这样开始: Claude读取Beads提示(通过hooks注入) 尝试启动守护进程 因数据库不匹配失败 Claude尝试bd sync 因远程仓库错误失败 你手动输入"忽略该错误" 终于可以开始工作 六个摩擦步骤消耗着上下文、时间和耐心。 局势转变 两件事让Beads从"带bug的实用工具"沦为"不必要的负担": 1. Tasks的成熟 当初设计三层架构时,Tasks功能简陋。现在已具备: 支持描述和元数据的TaskCreate 带依赖关系的TaskUpdate 查询功能TaskList/TaskGet 通过CLAUDE_CODE_TASK_LIST_ID实现跨会话持久化 简言之:Tasks现已实现Beads的所有会话内功能,且无需守护进程、SQLite或Git同步。 2. Linear CLI问世 原生的Linear管理控制台(MCP)往好了说也很糟糕——延迟高、稳定性差,总在关键时刻掉链子。 直接调用GraphQL API?理论上可行,直到你需要在issue描述中使用特殊字符: # 尝试1:使用bash字符串插值 # 结果:括号和箭头破坏JSON结构 # 尝试2:Python urllib方案 # 结果:因op read无法在Python环境执行报401错误 # 尝试3:默默流泪 # 结果:情绪宣泄但无实际产出 直到发现linear命令行工具: ...

2026年2月18日 · Fernando

ChromaDB: 如何使用向量数据库避免教学错误

问题:教授概念前提前使用 我有一门包含47节课的编程课程。每节课都有笔记(用来解释概念)以及实验室任务(供学员练习)。然而,我有一个问题:有时我会在实验中使用尚未在笔记中解释过的概念。 “好吧,在这个练习中使用 map 来转换列表。” 问题是什么?直到三节课后,我才开始解释 map 的含义。 这种问题比你想象中更常见。因为我对教学内容非常熟悉,经常跳跃思路,可能在无意间假设学生已经理解了一些我还没有实际讲到的概念。结果导致学生感到非常困惑和沮丧,他们认为自己不够聪明,但真正需要改进的是老师的教学大纲。 手动解决方案是检查每个实验室任务,列出所使用的概念,并验证这些概念是否已被教学过。然而,我的课程有47节课,每节课有多个Notebooks。手动搞定显然不是办法。 解决方案:使用 ChromaDB 实现语义搜索 解决方案其实很简单: 从每个 Notebook 中提取概念(包括教学和使用的概念) 将这些概念存储到一个能够处理“意义”、不仅是文本的数据库中 对实验室任务中使用的每个概念,验证其是否已在之前的笔记中介绍过 这个“处理意义”是关键。如果在笔记中我提到了“高阶函数”,而在实验室任务中使用了“higher-order function”,普通的 grep 是无法匹配到的。但从语义上来说,它们是相同的。 这就是 ChromaDB 派上用场的地方:这是一种将文本转化为嵌入向量的向量数据库,并支持基于相似度的搜索。简单来说,你可以将文本存储进去,然后问它“有没有类似这个的东西?”它会返回最相似的内容。 五分钟了解 ChromaDB ChromaDB 就像是用于嵌入向量的 SQLite。一个单独的文件(或文件夹),无需服务器部署,也不需要复杂的配置。安装后即可直接使用。 pip install chromadb # 如果你使用 uv: uv add chromadb 基础概念 在普通的关系型数据库中,你存储的是行和列。而在 ChromaDB 中,你存储的是带有 嵌入向量 的 文档: import chromadb # 创建客户端(支持磁盘持久化) client = chromadb.PersistentClient(path="./mi_db") # 创建“集合”(类似于表) collection = client.get_or_create_collection( name="conceptos", metadata={"hnsw:space": "cosine"} # 使用余弦距离 ) # 存储文档 collection.add( ids=["c1", "c2", "c3"], documents=["纯函数", "for 循环", "递归"], metadatas=[ {"clase": "class_010", "tipo": "notes"}, {"clase": "class_015", "tipo": "notes"}, {"clase": "class_020", "tipo": "notes"} ] ) 就是这样。ChromaDB 会自动: ...

2026年1月18日 · Fernando