
先交代一句我把这套东西取名叫Caveman不是要去过原始生活而是受够了那些越做越重的效率工具。手机里装了五六个任务管理、记账、笔记软件结果每天花在整理工具上的时间比做事还多。后来我干脆推倒重来给自己搭了一套纯文本、纯本地、能靠脑子记住全部规则的极简个人管理系统。这篇文章就是把Caveman从需求到落地、再到踩坑修复的完整记录适合那些觉得“工具越用越累”、想回归简单方案的人参考。1. 为什么做Caveman被复杂工具绑架后的反向设计1.1 痛点工具的维护成本超过了使用收益我大概统计过自己一周的使用习惯早上打开任务清单App先要看它的同步状态偶尔还要处理账号登录失效晚上想记一笔账打开记账软件却发现分类体系和我的实际消费习惯对不上光调分类就花了半小时写笔记的时候笔记软件的内置编辑器动不动就提示格式升级旧笔记渲染全乱。这些事情单独看都能忍但叠在一起就是巨大的心力损耗。工具本该是“用完了就放下”的东西结果变成了“每天都要伺候”的新负担。我印象最深的一次是某天急用记账数据软件提示需要更新到新版本才能导出更新完又发现历史账目多了几笔重复记录。那一刻我意识到不是工具不够好而是工具的设计目标和我这种“只需要知道钱花到哪、事还剩多少”的朴素需求根本不匹配。Caveman的核心出发点很简单只保留每天真正会碰的功能其他全部砍掉。想要新增功能时先问自己一句——这个功能一年能用几次如果答案不超过三次那就用最笨的方式手动处理。例如我偶尔需要统计某个项目的总花费既没有在记账脚本里做复杂的项目维度分析也没有引入可视化报表而是用一个简单的累计函数配合手动输入的关键词筛选来做。没了同步、没了订阅、没了云端系统的复杂度直接降低了一个数量级。1.2 设计目标三原则Caveman的设计过程其实不是从功能出发而是先定死了三条规则后面所有决策都用这三条卡自己第一本地优先。所有数据都是纯文本文件放在我自己的磁盘目录里。不存在“数据在服务器上”的担忧也不用担心服务商哪天停止运营。文件就是我自己的用任何文本编辑器都能打开哪怕所有专用脚本都坏了还能手动读文件。第二文本优先。一切信息都用可读的文本格式存储比如每行一条任务、每行一条记账记录。之所以不用SQLite数据库是因为文本可以直接用grep、sed、awk等基础命令处理也方便我用任何设备查看。数据库虽然查询能力强但会引入维护和备份的额外负担。第三十分钟恢复。系统全部脚本加起来不到五百行核心配置就一个目录和一个环境变量。如果换一台新电脑只需要同步目录、安装基础命令工具基本十分钟内就能恢复整个系统。这个原则非常重要它逼着我避免依赖任何需要复杂初始化、依赖编译或特殊运行时的方案。从结果来看这三条原则非常有效。系统用到现在已经稳定运行了很久期间没有出现过一次数据损坏或无法读取的情况。而且因为规则简单我随时可以对脚本做调整不用担心牵一发动全身。2. 整体架构与工具选型2.1 目录结构与文件设计Caveman的整个数据目录结构非常直白没有数据库表没有配置文件迷宫看一眼就能记住caveman/ ├── tasks/ │ ├── inbox.txt # 收集箱所有临时想法先丢这里 │ ├── today.txt # 今日任务清单 │ └── done.log # 完成任务的历史记录 ├── money/ │ ├── 2025.csv # 按年份存放的记账文件 │ └── categories.txt # 分类规则 ├── journal/ │ └── 2025-01.md # 每日记录 └── scripts/ ├── caveman.sh # 主脚本所有操作入口 └── week.sh # 周报生成脚本tasks目录管任务money目录管记账journal目录管日志。每个文件都是纯文本命名规则统一要么按日期、要么按用途不存在让人猜半天名字的情况。有人可能会问为什么任务不直接用现成的todo.txt格式非要自己再造一遍我的考虑是todo.txt是个成熟标准但它默认的命令行工具更新频率太高而且依赖HTTPS仓库下载、远程同步等对我来说不必要的功能。Caveman只需要最基础的“添加、完成、整理”三件事所以我几乎只用了三个shell函数添加一行、把一行标记为完成、把完成行归档。知道自己在为什么写代码才不会越陷越深。2.2 为什么选纯文本加基础命令我在开发过程中反复比较过几种方案Web应用、带界面的桌面程序、云端同步笔记、纯文本加脚本。最终敲定纯文本加脚本原因有三点。第一纯文本没有锁定期。任何程序崩溃、系统重装、磁盘修复都不会让我永远失去数据——文件的本质是一串UTF-8字符随时可以恢复。第二基础命令足够强大。日常的增删改查用cat、echo、grep、awk就能解决不需要学一套新的操作逻辑。第三调试简单。脚本写坏了报错信息直白我随时能在终端里单步验证每一步输出。当然纯文本也是有代价的。最明显的代价是并发写入冲突如果我在手机上修改了同步文件回到电脑又同时执行脚本就可能出现记录互相覆盖的情况。这个问题在后面的常见问题章节会专门讲。另外一个代价是不适合做复杂的数据关联比如任务和记账的联动统计但我的原则就是不为低频需求引入复杂度所以可以接受。2.3 可扩展性的正确打开方式Caveman看起来功能简陋但它并不是封闭的。相反因为数据全部是文档扩展路径非常清晰需要新维度时往对应目录加一个新文件需要新逻辑时往scripts目录加一个新脚本然后用cron调度。举个例子一开始我的周报全靠手动复制粘贴。后来觉得工作太机械就写了个week.sh专门扫描journal目录里最近七天的md文件提取标题和加粗行汇总生成周报草稿。整个过程没有动任何旧文件只是新增了一个脚本。这就是我想要的扩展方式——增长是加法式的而不是翻新式的。只要保持“新增大于修改”的习惯系统就不会被重构折腾坏。2.4 备份与恢复的具体操作数据全在本地的另一面是数据安全责任完全在自己身上。我采用的备份策略很朴素每周手动将caveman目录打包上传到自己的私有存储同时定期用移动硬盘做一次冷备份。因为数据目录很小一般连压缩都不需要看一眼就知道备份成功了没有。恢复流程就三步在新电脑安装基础环境把备份目录拉回来设置必要的环境变量指向新路径。然后执行caveman.sh status验证文件是否完整。我做过两次从零恢复的演练时间基本都花在安装系统上Caveman本身没有成为瓶颈。这也印证了十分钟恢复的设计目标不是空话。3. 核心功能拆解与实现过程3.1 任务管理真正能被清空的清单任务管理功能是Caveman里最简单也最常被使用的部分。整个逻辑围绕三个动作展开收件箱任何时间冒出来的想法、待办、灵感统一追加到inbox.txt不需要分类、不需要设优先级纯粹是“先记下来再说”。每日挑选早上看一眼inbox.txt和today.txt把今天真正打算做的任务挑出来在today.txt里单独建一份清单。挑任务时我会问两个问题这件事今天必须推进吗如果今天完全不动它后果可承受吗两个问题答完70%的任务会被留在收件箱里继续沉淀。完成后归档任务完成后在today.txt对应行前加上完成时间和简短说明然后移动记录到done.log。done.log是一个持续增长的流水账按年累积用来回顾过去一段时间到底完成了什么。主脚本的核心逻辑大概是这样的我简化了辅助函数保留最关键的部分function task_add() { echo $(date %Y-%m-%d %H:%M) | $* $CAVEMAN_DIR/tasks/inbox.txt } function task_done() { sed -i s|^$1$|✓ $1| $CAVEMAN_DIR/tasks/today.txt grep ✓ $1 $CAVEMAN_DIR/tasks/today.txt $CAVEMAN_DIR/tasks/done.log }你可能会说这也太简陋了。确实简陋但这种简陋恰恰是它的优点。没有优先级系统逼着我每天必须手动确认什么最重要没有提醒功能逼着我保持每天查看清单的习惯没有标签系统剩下的只有“做”或者“不做”的判断。这套逻辑运行久了反而锻炼出一种清醒感每天能真正推进的事情数量是非常有限的。3.2 极简记账按年份累积的CSV文件记账是Caveman里稍微复杂一点的部分。我放弃所有自动分类、报表、预算预警只保留一个动作记录每一笔支出。格式很简单一行一条记录字段顺序固定2025-01-15,餐饮,午餐外卖,35.00 2025-01-15,交通,地铁充值,50.00 2025-01-16,购物,日用品,89.90每行四个字段日期、分类、备注、金额。分类维护在一个categories.txt文件里目前只有餐饮、交通、居住、购物、娱乐、医疗、其他七类。为什么这么少因为我的经验是分类一旦超过十个每次记账都要犹豫“这笔算哪一类”犹豫就会放弃记录放弃记录统计数据就失真。统计需求同样用基础命令实现。想看某月总支出就执行一条简单的awk求和命令。想按分类查看就在输出里加group by逻辑。这些几十行的脚本完全够用哪怕数据量积累到几千行处理速度依然是毫秒级。记账的痛点从来不在计算而在于可持续地记录这一点纯文本方案反而最有优势因为手机上随便开个文本编辑器就能追加一行。3.3 日志系统千篇一律中的力量日志模块最初不在设计范围内是在用了大约两周后临时加的。原因是当时我发现只记录任务和开销依然缺少一个维度来捕捉“今天发生了什么、状态怎么样”。于是我在caveman目录下增加了一个journal子目录每天新建一个以日期命名的md文件格式故意固定为三段今天最重要的三件事及完成情况一个状态打分1到10分备注区任何不想丢失的念头这个格式帮助我保持记录习惯因为每天只要花两分钟。更大的价值出现在周末复盘时把一周的日志排开能很清楚地看到自己的状态起伏和事情推进节奏很多决策也因此变得有依据。3.4 周报的自动化生成有了日志周报就可以半自动生成。我的week.sh脚本逻辑是读取最近七天的journal文件把每个文件的第一行标题汇总成一个列表再把预算不足5行的文件标记为“记录较浅”最后输出一份简短的周回顾草稿。for f in $CAVEMAN_DIR/journal/*.md; do echo $(basename $f) : $(head -1 $f) done这段代码做了最基础的产出后续再人工润色。我不追求完全自动化因为完全自动化的代价是要维护一套解析模板投入产出比很低。让脚本处理机械的收集工作让人脑处理判断和表达这是我认为的最优分工。4. 实际操作中的关键细节与习惯养成4.1 晨间例行流程Caveman不是那种打开就会自动运行的程序它需要配合人的节奏才有意义。我每天早上的固定流程是先看today.txt确认今天的任务清单然后花三分钟把inbox.txt里值得转成今日任务的行挑出来追加到today.txt最后看一眼昨天的日志和支出记录算是快速前情回顾。这个过程大概持续不到十分钟。它不用打开任何“高大上”的仪表盘也没有统计分数或连续打卡的激励纯粹就是面对自己的一天。坚持一段时间后我发现仪式感的来源不是特效而是重复。简单规则下的持续行动比花里胡哨的功能更让人踏实。4.2 晚上收工前的两分钟收尾晚上睡前我会执行一次收尾把today.txt中已完成的任务统一归档到done.log把未完成的留在清单里同时标记哪些应该顺延到明天顺手在journal里写上当天记录看一眼当天的账目是否都记完了。收尾的目的不是强迫自己完成所有任务而是让每个文件都能准确反映当前状态。第二天早上打开电脑时看到的永远是干净、可信的数据这套系统才真正可信。一旦某个文件出现漏记或延迟更新人的使用意愿就会断崖式下降。4.3 从手动到半自动的渐进改进Caveman刚搭建的时候几乎一切都是手动的。每周统计收支是我手动运行awk命令复制粘贴结果周报也是手工整理。慢慢地我把重复劳动比较多的部分抽象成脚本但每次抽象都带着克制。比如周报脚本我写了但只让它输出草稿。收支统计脚本我写了但故意不加入复杂的图表。这种渐进式改进的好处是每一步改动都在真实需求的驱动下发生而不是为了“让系统更先进”而改动。系统的复杂度和真实需求保持同步增长这是Caveman长期能持续维护下去的关键。5. 常见问题与排查技巧实录5.1 手机和电脑同时编辑记录被覆盖这是我遇到的第一个真实问题。某天我用手机编辑器往记账文件里追加了一笔记录随后在电脑上也追加了一笔结果互相覆盖其中一笔丢了。根本原因是多个终端同时编辑同一个文本文件没有文件锁机制。解决方案分两层。第一层是改变使用习惯约定同一时刻只能有一个设备在写核心文件一般以电脑为准手机只做紧急记录并事后同步。第二层是引入一个简单的检测机制每次写入前对比文件大小和修改时间如果在打开期间文件被改过就提示人工检查后再写入。考虑到单人使用场景这个方案足够可靠。5.2 脚本突然失效报错半天找不出头绪有一次task_done函数突然失效明明列表里有这一行却一直匹配不到。排查了半天发现是任务文本里包含特殊符号比如方括号和转义符号它们在sed命令里被当成了语法部分。这类问题在纯文本方案中特别典型不是逻辑错了而是转义和分隔符没处理好。我的处理办法是统一任务命名规范禁止在清单行中出现可能干扰正则表达式的特殊符号。另一个习惯是任何脚本改动必须立刻用一行实际数据做验证确认无误后再投入日常使用。文本解析看起来简单该做的防御措施一样不能少。5.3 记账分类漏记导致月度统计失真有一段时间我的月度支出统计总是偏低排查后发现是有几笔大额支出被记到了“其他”分类因为当时赶时间没细看分类表。单纯看总额没问题但一旦要按分类分析数据就是错的。针对这个问题我在categories.txt里做了两件事一是把常用分类写在最前面减少滚动查找二是增加了类别别名比如“超市”自动归入“购物”“外卖”自动归入“餐饮”。录入时我只需要写白话备注统计时脚本再做一次分类映射。这个改动让记账更快也显著降低了漏记带来的统计偏差。5.4 文件多处备份版本不一致备份策略从手动复制升级为脚本打包后出现过一次本地目录和备份目录不一致的情况。原因是备份脚本在打包时过滤了某些临时文件而我恰恰有一个需要保留的数据文件放在临时目录里。经验是备份脚本必须定期做恢复演练不能只备份不检查。我现在每次打包完成后都会执行一次对比命令确认关键文件的校验值一致再把备份确认为有效。这个动作多花不了几秒钟却能在关键时刻救回重要数据。5.5 一个值得分享的排查思路面对任何Caveman相关的问题我基本都按照一套固定顺序排查先确认文件还在且可以正常读取然后确认脚本权限和执行路径没错再逐行运行核心命令观察输出最后才是翻日志找原因。这个顺序看起来很简单但能避免大量的无效排查。纯文本系统最大的优势就是可观测性极强每一步都能打开文件看内容实在不行还能手动改这也是我坚持不引入数据库的原因之一。6. 这套方案的局限性与适用边界Caveman不是万能方案它有不少明确的局限性。比如它不适合多人协作因为没有任何并发控制和权限管理不适合跨平台实时同步文件系统的同步机制始终是个隐患不适合做复杂的项目管理因为任务之间没有依赖关系、没有里程碑概念。适合Caveman的人是那些日常事务以个人为主、不想在工具维护上花太多时间、愿意建立起简单但规律的使用习惯的人。如果你希望系统自动识别账单、自动生成各类报表、自动提醒所有事项那现成的商业软件会更省力。Caveman的哲学是减少对工具的依赖而不是让工具替你做所有决策这两者之间有很大区别。我刚搭好Caveman的头两周其实也怀疑过它太简陋是不是在自欺欺人。但用了大概一个月之后我发现自己每天打开电脑的第一件事已经不再是检查和整理工具而是直接面对当天的任务和数据。这个转变给了我很大的正反馈。我在实际使用中最深的体会是对个人系统而言一致性远比功能多重要。一个每天都能坚持记录的纯文本文件好过一个装了却从不打开的豪华软件。如果你也想做一套自己的极简系统我的建议是从最小功能开始先把习惯固化下来再按真实需求慢慢加。等你回头看时会发现很多当初觉得必需的功能其实根本用不上。