基于AI代码生成的个人操作系统:从Bash脚本到自动化工作流
1. 项目概述一个极简的“个人操作系统”最近在折腾AI自动化工具发现了一个挺有意思的项目叫Personal OS简称pos。这玩意儿本质上就是一个不到10KB的bash脚本但它干的事儿是把你手头的Claude Code变成一个能自主执行任务的“个人操作系统”。你可以把它理解成一个极度精简、高度定制化的“贾维斯”雏形。它的核心哲学非常激进“大多数代码只是缓存”。什么意思呢传统的自动化工具比如OpenClaw会预先给你准备好几十个现成的集成接口比如连接Gmail、Slack、日历的模块。而pos的思路是它自己什么现成的功能都没有。当你需要它去操作WhatsApp时它会让Claude现场给你生成一个操作WhatsApp的脚本当你需要它管理日历时它再现场写一个日历技能。所有的代码都是按需生成、用完即弃或者被你保存下来复用。这样一来整个系统完全围绕你的个人工作流和习惯构建没有一丝一毫的冗余。这就像给你一个万能工具箱但里面只有一把能变成任何你所需工具的“扳手”。对于喜欢深度定制、希望完全掌控每一行代码在做什么的极客来说这种“白板”式的设计非常有吸引力。当然代价就是初期搭建需要你投入更多时间和Claude“沟通”去调试和打磨那些自动生成的脚本。2. 核心设计思路为什么选择“单文件脚本AI生成”模式2.1 从“集成框架”到“生成式代理”的范式转变市面上的个人助理工具大多走的是“集成框架”路线。开发者预先设想用户可能需要连接哪些服务邮箱、通讯软件、云文档然后编写好对应的API连接器、数据解析模块和动作触发器。用户需要在这些预设的模块中进行配置和组合。这种模式的优点是开箱即用社区生态丰富你可以直接使用别人写好的“技能包”。但pos选择了另一条路“生成式代理”。它本身不携带任何针对特定服务的“硬编码”逻辑。它的全部能力都建立在Claude Code这个强大的代码生成与执行引擎之上。pos脚本的核心是一个精心设计的系统提示词System Prompt这个提示词定义了AI代理的行为准则、可用工具如通过Chrome DevTools控制浏览器以及如何组织记忆和技能。当你给pos下达一个指令比如“检查我的邮箱并总结重要邮件”它会经历以下过程理解与规划Claude根据系统提示词理解这个目标。它会检查记忆库~/personal-os-data/下的文件看你是否已经有过邮箱相关的配置或脚本。生成与执行如果没有现成脚本Claude会现场编写一段Python或JavaScript代码利用Chrome DevTools协议模拟登录你的网页邮箱、解析页面、提取信息。然后它会在一个受控的沙盒实际上就是你的本地环境中执行这段代码。学习与存储执行成功后Claude会将这个成功的工作流总结成一个“技能”Skill以Markdown文档的形式保存下来。下次你再有类似需求它就可以直接调用或改编这个技能而无需从头开始生成。这种模式的核心优势在于无与伦比的灵活性和个性化。世界上没有两个人的工作流是完全一样的一个预设的框架总会遇到“我想让它做X但它只支持做Y”的窘境。而pos理论上可以适配任何你能用浏览器或命令行访问的服务。2.2 技术栈选型为什么是Bash Claude Code Chrome DevTools这个技术组合看似简单实则经过深思熟虑每一环都为了极致轻量和强大控制力。Bash脚本作为粘合剂Bash是Unix-like系统的原生语言无处不在。用一个Bash脚本作为入口意味着零安装、零依赖除了核心工具。它负责最基础的任务检查环境、设置路径、调用Claude Code、传递参数、管理数据目录结构。所有复杂逻辑都外包给AI脚本本身保持极简易于审计总共就几百行一眼就能看完。Claude Code作为大脑与执行器Claude CodeClaude的命令行版本是关键。它不仅仅是聊天接口更是一个能理解指令、生成代码、并安全执行代码的代理。它的--dangerously-skip-permissions标志使用时需极度谨慎赋予了它强大的自主行动能力。pos通过精心设计的提示词将Claude Code的这股“蛮力”引导到解决实际问题的轨道上。Chrome DevTools Protocol作为“手和眼”这是实现自动化最通用的一环。绝大多数现代应用都有网页版Gmail、Notion、Twitter、银行后台等。CDP允许外部脚本通过WebSocket协议与Chrome/Chromium浏览器实例通信实现模拟点击、填写表单、获取DOM数据等所有用户能在浏览器里做的操作。相比于为每个网站找官方API可能没有或限制严格CDP是一个“一刀切”的解决方案尽管更脆弱网站改版可能导致脚本失效但普适性最强。文件系统作为记忆体所有状态——你的偏好、AI生成的技能、执行日志——都以纯文本Markdown、JSON、脚本的形式存储在~/personal-os-data/目录下。这带来了几个好处可读可调你可以随时用文本编辑器查看和修改AI为你创建的“技能手册”。版本控制友好整个目录可以放进Git仓库方便回溯和同步。完全便携复制这个文件夹到另一台配置好环境的机器上你的“个人OS”就迁移过去了。这个技术栈构成了一个闭环Bash启动 - Claude思考并生成代码 - 通过CDP操控浏览器或执行本地脚本 - 结果保存到文件系统 - 成为下一次思考的上下文。3. 实操部署与初始配置详解3.1 环境准备与一键安装pos宣称无需安装但有几个前提条件必须满足。以下是在macOS上的详细步骤Linux类似但可能需要自行解决一些路径或依赖问题。第一步安装核心引擎——Claude Code CLI这是整个系统的“发动机”。你需要有Claude API的访问权限Claude Pro订阅或单独的API Key。# 按照Anthropic官方文档安装Claude Code CLI # 通常安装后可执行文件会在 ~/.local/bin/claude # 确保该路径在你的系统PATH环境变量中 echo $PATH | grep ~/.local/bin # 如果没有需要将其添加到你的shell配置文件如 ~/.zshrc 或 ~/.bashrc中 export PATH$HOME/.local/bin:$PATH安装后在终端测试claude --help应能正常显示帮助信息。你需要配置好API密钥通常通过环境变量ANTHROPIC_API_KEY设置。第二步获取pos脚本这是官方推荐的一行命令安装法mkdir -p ~/personal-os curl -o ~/personal-os/pos https://raw.githubusercontent.com/sshh12/personal-os/main/pos chmod x ~/personal-os/pos这条命令依次做了mkdir -p ~/personal-os在用户主目录下创建personal-os文件夹。curl -o ~/personal-os/pos ...从GitHub仓库下载最新的pos脚本到该文件夹。chmod x ~/personal-os/pos给脚本添加可执行权限。你也可以通过Git克隆整个仓库虽然仓库里基本就只有这一个脚本git clone https://github.com/sshh12/personal-os ~/personal-os第三步首次运行与交互式引导执行脚本开启“装机”流程cd ~/personal-os ./pos首次运行脚本不会直接执行任务而是进入一个交互式引导流程。Claude会通过一系列问题来了解你构建最初的上下文。这个过程至关重要它直接决定了后续AI生成代码的贴合度。注意首次运行时请确保网络通畅并且你的Claude API额度充足。引导过程可能会进行多轮对话消耗一些Token。引导通常会问及以下方面基础信息你希望AI如何称呼你你的主要工作领域是什么工具偏好你常用哪些软件和网站例如使用Chrome还是Safari用Outlook还是Gmail用哪款日历应用接口配置你希望pos通过什么方式与你交互终端通知Telegram机器人短信它会引导你配置相关接口的凭证如Telegram Bot Token这些敏感信息会存储在~/personal-os-data/.env文件中该文件被.gitignore排除不会误提交。数据存储确认它会向你确认数据目录~/personal-os-data的位置并初始化目录结构。引导结束后你的~/personal-os-data目录会生成一个核心文件CLAUDE.md。这个文件是AI的“中央知识库”记录了你的所有偏好、已配置的工具映射、以及后续学习到的所有技能索引。我强烈建议你定期浏览这个文件了解AI是如何理解你的需求的。3.2 数据目录结构解析理解数据目录的结构是掌握pos的关键。它就像一个透明的大脑所有“记忆”和“技能”都摆在你面前。~/personal-os-data/ ├── CLAUDE.md # 核心档案你的身份、偏好、工具列表、技能索引 ├── user/ # 关于你的深度上下文 │ ├── preferences.md # 具体偏好如“喜欢在上午处理邮件” │ └── context/*.md # 各类背景信息工作、项目、联系人等 ├── .claude/ # Claude会话与技能库 │ ├── projects/ # 每次任务执行的详细日志用于调试和审计 │ └── skills/ # 技能库AI生成的可复用操作指南 │ ├── check_gmail.md # 例如检查Gmail的技能 │ └── scrape_website.md # 例如抓取网站数据的技能 ├── interfaces/ # 通信接口脚本 │ ├── telegram_bot.py # AI生成的Telegram机器人脚本 │ └── terminal_notifier.sh # AI生成的终端通知脚本 ├── scripts/ # 可复用的自动化脚本 │ └── daily_summary.py # 例如生成每日摘要的脚本 └── .env # 环境变量与密钥切勿上传至GitCLAUDE.md这是最重要的文件。它采用Markdown格式人类和AI都可读。AI会持续更新这个文件。你可以手动编辑它来纠正AI的误解或添加固定的指令例如“永远不要修改系统文件”。skills/目录这是pos的“魔法”所在。每个.md文件都是一个“技能卡片”描述了如何完成一项特定任务。例如check_gmail.md里可能记录了“要登录我的Gmail需要先打开https://mail.google.com我的账号是xxxgmail.com密码存储在.env的GMAIL_PASSWORD变量中。登录后找到‘重要邮件’标签页提取前5封邮件的标题和发件人。” 这些描述是给AI看的AI下次遇到类似任务时会参考这个卡片来生成具体代码。projects/目录每次AI执行任务都会产生一个带时间戳的会话日志。如果任务出错这里是第一排查现场。你可以看到AI当时“想”了什么生成了什么代码执行后输出了什么。interfaces/和scripts/存放AI生成的、可独立运行的代码。你可以审查、修改这些代码。4. 核心工作流与高级用法4.1 下达指令与任务执行配置完成后你就可以像使唤一个真正的助手一样给pos下达指令了。指令可以通过你配置的接口如Telegram发送也可以直接在终端运行。终端直接执行./pos -p 检查我的Gmail收件箱找出所有来自‘项目组’的未读邮件把标题和链接发到我的Telegram。”-p参数后面跟着的就是你的自然语言指令。脚本会加载你的上下文CLAUDE.md和技能库调用Claude Code。Claude会“思考”这个任务需要“检查Gmail”技能和“发送Telegram消息”技能。如果技能库里有它就基于技能描述生成代码如果没有它会尝试从头创建。生成的代码可能是Python脚本会被执行操作浏览器登录你的Gmail筛选邮件然后调用Telegram接口发送消息给你。整个过程你只需要下达一个目标指令无需关心它打开了哪个浏览器、如何模拟登录、如何解析HTML、如何调用API。交互式会话模式你也可以启动一个交互式会话进行多轮对话来细化任务./pos --verbose在--verbose模式下你会看到更详细的思考过程。这对于调试复杂任务或教AI新技能非常有用。4.2 技能创建与知识积累让AI“学会”你的习惯pos的长期价值在于积累。最初它什么都不会但每完成一个新任务它就会尝试将这个过程抽象成一个“技能”。举个例子你第一次让它“把今天日历上的事件发给我”。AI没有现成技能它会询问你使用什么日历比如Google Calendar。你告诉它你的日历网址和登录方式或引导它去.env文件找凭证。AI生成代码打开浏览器登录Google Calendar爬取事件信息并格式化输出。任务成功后AI会自动或在你的确认下在skills/目录创建一个fetch_google_calendar_events.md文件。这个文件会描述“要获取用户日历需访问https://calendar.google.com登录凭据位于.env的GCAL_*变量事件位于ID为‘grid’的容器内...”。下次你再说“查看我明天的日程”AI就会直接引用这个技能文件更快更准地生成代码。你可以主动管理技能库审查与修正定期查看skills/下的文件。如果发现AI的描述有误或步骤过时比如网站改版了你可以直接用文本编辑器修改这个Markdown文件。下次AI就会使用更新后的描述。组合技能你可以给AI更复杂的指令如“检查邮件并将所有会议邀请自动添加到日历”。AI会尝试组合“检查Gmail”和“添加日历事件”两个技能生成一个连贯的工作流。文档即技能你甚至可以手动编写一个技能文件。比如你公司内部有一个复杂的报表系统你可以写一个generate_internal_report.md详细描述登录步骤、点击哪些按钮、下载哪个链接。AI就能据此为你自动化这个报表任务。4.3 定时任务与后台守护让AI助理7x24小时待命是pos的另一个强大功能。它利用macOS的launchdLinux上可以用cron或systemd来调度定时任务。设置一个每日简报任务创建任务描述你可以告诉AI“我希望每天上午9点执行一个任务内容是1. 检查邮件并总结重要内容2. 抓取我关注的几个新闻网站头条3. 检查今天的日历4. 将以上摘要通过Telegram发给我。”生成调度脚本AI会理解这个需求它不仅会生成执行摘要的脚本还会为你生成一个launchd的.plist配置文件。安装定时任务AI可能会指导你运行类似launchctl load ~/Library/LaunchAgents/com.user.daily-brief.plist的命令将这个任务注册为守护进程。日志与监控定时任务运行的日志会输出到projects/目录下方便你查看执行结果或排查失败原因。实际应用场景智能监控每小时检查一次某电商网站的商品价格低于设定阈值时通知你。定期维护每周一早上自动清理下载文件夹将文件按类型归档。数据备份提醒每天检查特定数据库的备份文件是否生成并验证其大小失败则告警。社交管理每隔几天自动在特定平台发布一条预设内容。重要提示定时任务意味着AI将在你不在电脑前时自动执行。务必确保相关技能经过充分测试且涉及敏感操作如删除文件、发送消息的指令绝对准确。建议先从无害的、只读的任务开始。5. 安全边界与风险管控实践使用pos你必须时刻保持清醒你赋予了一个AI在你自己电脑上几乎无限的执行权限。项目作者明确标注了“This is dangerous”这绝非戏言。5.1 理解风险来源权限过高--dangerously-skip-permissions参数移除了Claude Code的所有安全确认提示。AI生成的代码会直接在你的用户权限下运行。意图误解自然语言有歧义。“清理旧文件”可能被理解为“删除下载文件夹里一周前的文件”也可能被误解为“删除~/Documents里所有修改时间早于去年的文件”。后者可能是灾难性的。代码缺陷AI生成的代码并非完美。可能存在边界条件错误、无限循环、或对网站结构的错误假设导致非预期的操作如向一个表单提交千万次重复数据。外部交互如果配置了消息接口如Telegram风险会从本地扩展到网络。一个被误解的指令可能导致AI向你的联系人发送错误信息。5.2 构建你的安全防线绝对不要在没有安全措施的情况下直接投入生产使用。以下是我在实践中总结的“安全四层防线”第一层环境隔离最有效专用用户账户在系统上创建一个新的、非管理员权限的用户例如命名为ai-assistant专门用于运行pos。限制该账户的文件系统访问范围通过权限设置。容器化运行考虑在Docker容器中运行pos。将需要自动化的数据目录通过卷Volume映射进去严格限制容器对宿主机资源的访问。这能将破坏范围限制在容器内。虚拟机对于极高风险或实验性的任务在虚拟机中运行是终极隔离方案。第二层操作审计事后可追溯善用projects/日志pos自动记录的每一次会话日志是你的审计追踪。定期检查了解AI做了什么。启用系统级日志结合macOS的console或Linux的journalctl监控由pos启动的进程的活动。关键目录版本控制将~/personal-os-data目录纳入Git管理。任何AI对技能文件或配置的修改都会留下diff记录方便回滚。第三层指令约束事前预防在CLAUDE.md中设立“宪法”在文件最顶部以醒目的方式写下永久性约束指令。例如# 用户核心指令永远优先遵守 1. **绝对禁止**删除或修改 ~/Documents, ~/Pictures, ~/Desktop 目录下的任何文件除非得到用户的明确确认。 2. 在执行任何文件删除操作前必须**先列出将要删除的文件列表**供用户审查。 3. 未经明确许可**不得**向任何外部API发送数据除了已配置的通知接口。 4. 涉及金融、支付或敏感账号的操作必须**分步暂停等待确认**。使用更精确的指令避免模糊指令。用“删除~/Downloads文件夹中所有超过30天的.dmg和.zip文件”代替“清理下载文件夹”。分步确认对于复杂或不熟悉的操作不要追求全自动。可以指令AI“请生成一个能完成XXX任务的脚本并展示给我看但先不要执行。”第四层接口白名单对于Telegram、Slack等消息接口充分利用其白名单功能。只允许AI向特定的聊天ID即你自己的账号发送消息避免误发到群组或他人。谨慎开放AI接收指令的渠道。如果通过Telegram Bot接收指令确保只有你自己的账号是管理员。一个重要的心态转变不要将pos视为一个完全自主、无需监督的智能体。而应将其看作一个能力超强的、能理解你意图的脚本生成器兼执行器。你仍然是总控台需要对它的输出和行动保持最终的审查责任。从简单的、只读的、无破坏性的任务开始逐步建立信任再尝试更复杂的操作。6. 典型问题排查与调试技巧即使一切配置正确在与AI协作自动化时你也会遇到各种问题。以下是几种常见场景的排查思路。6.1 AI无法理解指令或生成错误代码症状AI回复“我不确定如何做这个”或者生成的代码完全跑偏。排查步骤检查上下文查看CLAUDE.md和相关的技能文件看AI对你和你的环境认知是否正确。也许它不知道你用的某个工具。拆解指令将一个大而模糊的指令拆分成几个清晰的小步骤分次下达。例如将“帮我管理社交媒体”拆成“1. 登录我的Twitter账号2. 获取最新的提及和私信3. 总结内容发给我”。提供示例在指令中直接提供示例。例如“请像之前的check_gmail.md技能那样为我创建一个检查Outlook邮件的技能。我的登录地址是https://outlook.office.com。”使用--verbose模式查看AI完整的思考链找出它是在哪一步理解出现偏差的。6.2 生成的脚本运行时出错如浏览器自动化失败症状脚本执行报错例如“元素未找到”、“超时”、“认证失败”。排查步骤查看项目日志第一时间去~/personal-os-data/.claude/projects/找到对应时间戳的会话日志里面有AI生成的完整代码和错误输出。手动复现步骤按照AI技能描述里的步骤手动在浏览器里操作一遍。网站界面是否已经更新登录流程是否变了验证码是否出现了检查依赖AI生成的Python脚本可能需要额外的库如selenium,pyautogui。错误日志会提示ModuleNotFoundError。你需要手动安装这些依赖。更新技能文件找到对应的.md技能文件根据你手动排查的结果修正其中的描述。例如将“点击id为loginBtn的按钮”改为“点击class包含sign-in-button的第一个按钮”。引入等待与重试网站加载速度不稳定。教导AI在生成代码时加入显式等待如time.sleep(2)或使用WebDriverWait和错误重试逻辑。6.3 定时任务不执行或执行异常症状配置的launchd或cron任务没有按时运行或者运行了但没效果。排查步骤检查任务状态# macOS launchd launchctl list | grep your-task-name launchctl print gui/$(id -u)/your-task-name检查系统日志# macOS log show --predicate subsystem com.apple.xpc.launchd --last 1h环境变量问题launchd和cron运行的环境与你的交互式Shell环境不同。PATH、ANTHROPIC_API_KEY等关键环境变量可能缺失。解决方案在pos脚本内部或通过launchd的EnvironmentVariables键显式设置所有必需的环境变量。路径问题定时任务运行时当前工作目录可能不是~/personal-os。在AI生成的调度脚本或plist中使用绝对路径如/Users/yourname/personal-os/pos。权限问题确保定时任务运行的用户有权限执行脚本、读写数据目录。6.4 性能优化与成本控制问题复杂任务运行慢或API调用Claude Token消耗快。优化技巧技能抽象将重复的、固定的操作步骤固化到技能文件中。AI每次执行时引用技能描述比从头生成详细代码更省Token。结果缓存对于数据查询类任务如“检查天气”教导AI将结果缓存到本地文件设定一个有效期如1小时。下次请求时先读缓存无效再重新获取。批量处理将多个小任务合并。例如不要设置每分钟检查一次邮件而是设置“每10分钟检查一次并汇总所有新邮件通知”。选择合适模型在CLAUDE.md中指定使用更小、更快的Claude模型如claude-3-haiku来处理简单的、模式化的任务保留大模型如claude-3-opus处理复杂逻辑。监控用量定期查看Anthropic API控制台了解Token消耗情况调整任务频率和复杂度。7. 进阶玩法与生态展望当你熟练掌握了pos的基本用法后可以探索一些更高级的玩法让它更深地融入你的数字生活。1. 构建跨设备工作流pos运行在你的主力电脑上但你可以通过它集成的消息接口如Telegram实现远程控制。例如在回家路上发消息让pos启动家里的电脑下载好今晚要看的电影。在办公室让pos检查家里NAS上的备份是否完成。你需要一份文件但不在电脑前让pos找到文件并发送到你的云存储或邮箱。2. 作为其他工具的“智能胶水”pos可以调用命令行任何工具这意味着它能串联起你的整个工具链。数据管道让pos定期从A网站抓取数据用pandas清洗后存入本地数据库再用matplotlib生成图表最后将图表发送到Slack频道。开发助手监听Git仓库当有新的Pull Request时让pos拉取代码运行测试套件并将结果摘要发给开发者。个人知识管理结合obsidian或logseq让pos定期扫描你的笔记根据内容自动添加标签、建立反向链接甚至生成知识图谱摘要。3. 从“自动化”到“半自主化”最初的自动化是“如果X则做Y”的简单规则。pos可以引入判断和决策。智能过滤不是把所有邮件摘要都发你而是让AI根据邮件内容、发件人历史、你当前日历状态是否在会议中来判断优先级只推送真正需要你立即处理的内容。主动建议基于你的日程和过往工作记录在每周一早上让pos主动生成一份“本周重点关注建议”提醒你可能遗忘的事项。交互式任务AI执行任务遇到无法确定的选项时例如“发现三封疑似垃圾邮件是否删除”可以通过Telegram向你发起一个快速投票或确认根据你的回复继续执行。关于与OpenClaw的再思考文章开头将pos比作可启动的USB驱动器将OpenClaw比作完整的Linux发行版。这个类比非常贴切。经过一段时间的深度使用我的体会是OpenClaw像一个功能齐全的“智能家居中控台”买来插上电配置一下各个厂商的设备集成就能享受自动化。社区活跃遇到问题容易找到答案。但如果你想让它控制一个非标设备可能需要等待社区开发支持或者自己动手去写一个复杂的“插件”。pos更像一套“智能家居万能工具箱”和一本“电器原理与维修指南”。一开始你需要自己接线、写规则甚至为了控制一个灯泡要研究半天协议。但一旦掌握你可以用这套工具组装出任何你想象得到的、完全贴合你个人习惯的自动化场景无论是控制一个冷门的设备还是实现一个极其特殊的联动逻辑。选择哪一个取决于你的时间、技术偏好以及对“控制权”的渴望。如果你追求快速见效和稳定OpenClaw是更好的选择。如果你享受创造的过程不介意在调试中学习并且渴望一个百分百专属的数字化助手那么pos提供的这片“空白画布”将带来无穷的乐趣和可能性。它的上限取决于你与AI协作的深度和你的想象力。