1. 项目概述一个注入ENTJ人格的AI健身教练Hook系统如果你和我一样既痴迷于通过代码和自动化来提升效率又对健身训练有着近乎偏执的追求那么你肯定理解那种感觉市面上大多数健身App要么过于温和缺乏鞭策力要么过于死板无法适应你快速迭代的思维和项目化的训练需求。这正是我当初着手开发这个“ENTJ Muscle Coach Hook System”的初衷。它不是一个独立的App而是一个为OpenClaw平台设计的Hook钩子系统其核心目标是将ENTJ人格特质——高效、战略、逻辑、纪律——深度注入到你的AI健身教练中让它从一个被动的工具变成一个能与你思维同频、执行力拉满的“数字训练伙伴”。简单来说这个项目能做什么它能接管你的OpenClaw助手让它用ENTJ指挥官的口吻与你对话为你制定并执行一套为期16周、目标明确的“肌肉上杠”Muscle-Up训练计划。它不仅仅是生成文本更是一个完整的自动化系统自动记录你的训练状态、通过Cron任务定时提醒你训练、将你的训练数据同步到云端、甚至根据你的生物钟调整训练强度。它解决的核心问题是将健身训练这个需要高度自律和长期坚持的过程转化为一个可追踪、可自动化、可数据驱动的“项目”用我们开发者最熟悉的方式来管理。无论你是刚开始接触力量训练的新手还是已经有一定基础但苦于平台期的健身爱好者亦或是像我一样喜欢折腾自动化工具的极客这个系统都能提供价值。对于新手它提供了一条清晰、无废话的进阶路径对于老手它提供了数据追踪和自动化提醒帮你突破瓶颈对于开发者它本身就是一个学习如何构建复杂Hook系统、集成状态管理、定时任务和云同步的绝佳案例。2. 系统核心设计与架构解析2.1 为什么选择Hook系统而非独立应用在项目启动前我评估过几种方案开发一个独立的移动App、创建一个Web应用或者基于现有的聊天机器人框架如Botpress进行定制。最终选择为OpenClaw构建Hook系统是基于以下几个核心考量上下文无缝集成OpenClaw作为我的主力AI工作台已经承载了编码、写作、项目管理等大量上下文。将健身教练集成其中意味着我无需在多个应用间切换。训练计划可以直接与我的日程安排对话训练日志可以轻松插入到我的每日复盘笔记中实现了真正的“工作流一体化”。极低的启动成本Hook系统本质上是一组配置文件和脚本无需维护复杂的服务器、数据库或前端界面。安装即用对于个人或小团队来说部署和迭代成本几乎为零。强大的可扩展性OpenClaw的Hook机制提供了丰富的事件钩子如消息发送前、响应生成后、定时任务触发等。这允许我不仅改变AI的“说话方式”人格注入还能在关键节点插入自动化逻辑如训练后自动保存状态、每周日生成训练报告。人格注入的精准性独立的AI应用很难深度定制底层语言模型的“性格”。而通过Hook我可以在AI生成响应的每一个环节强制注入预设的提示词Prompt、语气词和决策框架确保每一次交互都严格符合ENTJ教练的行为模式。这个设计思路的本质是将健身教练视为一个运行在你数字工作环境中的“后台守护进程”和“交互式代理”而非一个孤立的应用。它与你最常用的生产力工具深度绑定从而获得最高的使用频次和情境相关性。2.2 ENTJ人格模型与教练风格的映射逻辑ENTJ指挥官型是迈尔斯-布里格斯类型指标MBTI中的一种人格以其外向、直觉、思考、判断的特质著称。我并非简单地将这些标签贴在AI上而是将其解构为具体、可执行的教练行为准则外向E - 直接沟通教练的指令必须清晰、无歧义、不含糊。避免使用“也许你可以试试”、“可能这样更好”等模糊表述。取而代之的是“今天完成4组每组8次”、“动作不标准重做”。在identity.md文件中我定义了大量的语气模板和禁忌词列表确保AI的输出始终强势、目标导向。直觉N - 战略规划训练不是一堆随机动作的集合。ENTJ教练擅长构建长期蓝图并将其分解为阶段性任务。这就是16周肌肉上杠计划的由来。系统不仅提供计划表还会在每周开始时自动基于你上一周的状态存储在state/current-state.json中动态调整本周的训练强度和重点并解释调整背后的战略意图例如“鉴于你上周轻松完成10次引体向上本周我们将增加负重以刺激新的肌纤维募集”。思考T - 数据驱动决策情绪和感觉在这里没有位置。所有建议都基于数据。系统会持续追踪关键指标最大重复次数、训练容量、休息时间、主观疲劳感觉。在handler.ts中我编写了逻辑来分析这些数据趋势并在对话中优先引用它们。例如当用户抱怨进步缓慢时教练不会安慰而是会调出数据“过去两周你的训练容量停滞在5000公斤这是瓶颈的直接原因。解决方案下周增加10%容量或调整动作变化。”判断J - 结构化执行与纪律这体现在系统的方方面面。固定的训练日程通过cron/reminders.json配置、强制性的训练日志记录每次训练后自动提示更新state/workout-log.md、严格的表单检查例如记录时必须包含重量、次数、组数、RPE。系统像一位严格的项目经理确保项目你的身体按计划推进。这种映射确保了教练的行为是可预测、可解释且高度一致的为用户建立了一种稳固的、值得信赖的“数字训练关系”。2.3 技术栈选型与模块化架构项目采用模块化设计每个目录承担独立的职责通过核心的handler.ts进行协调。这种设计便于调试、扩展和维护。核心运行时TypeScripthandler.ts是大脑用TypeScript编写。TypeScript的静态类型检查在早期帮我规避了许多潜在的状态管理错误特别是在处理复杂的JSON训练状态时。它负责处理OpenClaw发来的事件调用其他模块的功能并组装最终的AI响应。状态持久化JSON Markdownstate/目录存放所有可变数据。我选择了混合存储策略current-state.json存储结构化、频繁更新的数据如当前周数、今日训练完成状态、最新PR个人记录。JSON格式便于程序快速读写和序列化。workout-log.md和goals.md用Markdown存储非结构化的日志和长期目标。Markdown是人类可读的方便用户直接查看、编辑也便于未来进行简单的文本分析。handler.ts中包含逻辑会在每次训练对话后自动将摘要追加到日志文件中。自动化调度Croncron/reminders.json配置了定时任务。OpenClaw的Cron系统会定时触发Hook例如每天早上7点发送当日训练计划晚上9点提醒填写训练日志每周日晚进行复盘。这解决了健身中最常见的“启动能量”问题——系统主动推你一把。同步与备份脚本化sync/目录和scripts/sync.sh脚本负责将你的训练数据整个state/目录和配置推送到你选择的云服务Git、WebDAV等。我强烈建议启用此功能它不仅是备份更实现了训练环境的可移植性在家里的电脑和公司的笔记本上无缝切换。生物钟系统实验性bioclock/rhythm-config.json是一个有趣的实验模块。你可以设置自己一天中精力最充沛的时间段如上午9-11点晚上7-9点。系统在安排高强度训练提醒时会优先考虑这些时段。虽然它不能改变你的日程但能促使你在状态最佳时面对最困难的挑战。注意模块间的耦合度被刻意降低。例如即使你禁用云同步sync.enabled: false或生物钟系统核心的训练指导和状态记录功能依然完全正常。这允许用户根据自身需求和技术栈进行定制。3. 核心功能深度解析与实操要点3.1 人格注入如何让AI“变成”ENTJ教练人格注入是这个项目的灵魂其实现远比在提示词前加上“你是一个ENTJ教练”要复杂。关键在于多层次、高优先级的指令覆盖。在identity.md文件中我构建了一个分层的身份定义系统核心身份声明开宗明义地定义角色、使命和核心座右铭如“效率第一”、“只要结果”。这设定了基调。沟通准则详细规定了语气直接、命令式、用词偏好使用“执行”、“策略”、“数据”等词、禁忌禁止安慰、禁止模糊建议。例如要求AI在提供反馈时必须采用“观察-数据-指令”三段式“我观察到你在最后一组动作变形观察。这通常是因为核心肌群疲劳导致代偿数据。下次在力竭前一组就停止保持动作质量指令。”决策框架当面临用户提问时如“我今天很累可以少练点吗”AI必须按照预设的决策树来响应。首先检查训练日志判断是否是合理的恢复需求还是惰性。如果是惰性则引用纪律准则如果是连续高强度训练后的疲劳则可能调整当日计划为主动恢复。这个框架被写入系统提示的深层部分。上下文记忆通过handler.ts每次交互时系统会自动将最新的训练状态如“用户正处于第6周-爆发力阶段”作为上下文注入对话。这让AI的每一次回应都具有高度的情境连续性仿佛一个真正跟踪你进度的教练。实操心得初期测试时AI有时会“人格漂移”偶尔说出鼓励性的话。解决办法是在handler.ts中增加一个“人格过滤器”后处理步骤对AI生成的原始响应进行扫描如果检测到过于温和或模糊的短语则用预设的ENTJ式强硬语句替换。这虽然增加了复杂度但保证了人格的纯粹性。3.2 16周肌肉上杠计划从零到一的战略拆解提供的计划表是一个宏观路线图但真正的价值在于其微观执行和动态调整逻辑。每一阶段的4周都遵循“积累-强化-测试-调整”的微循环。第1-4周基础力量目标建立可靠的垂直拉和水平推的基础力量。肌肉上杠是拉引体向上和推臂屈伸的结合底层力量是根基。实操重点不以花哨动作为主死磕基础动作。引体向上追求动作幅度完整下巴过杠、控制匀速。同时加入划船、面拉等动作平衡背部肌群预防肩伤。系统在本阶段会重点关注你的动作自评通过提问并在日志中标记。数据追踪系统主要追踪“严格引体向上最大次数”和“一组内动作质量的一致性”。第5-8周爆发力目标将力量转化为速度。肌肉上杠的过渡阶段需要巨大的爆发力将身体拉过杠。实操重点引入高拉High Pull向胸部甚至腹部拉、爆发式引体向上。使用弹力带辅助减轻重量让你能专注于速度。同时开始进行低位臂屈伸的爆发式练习。动态调整如果用户在本阶段初期的爆发力练习中感到肩关节不适handler.ts中的逻辑会建议临时增加肩部稳定性训练如L支撑保持并略微推迟爆发力训练的进阶速度。这体现了“战略规划”下的灵活性。第9-12周技术过渡目标学习并打磨“过渡”技巧即身体从杠下摆荡到杠上支撑的瞬间。实操重点使用低杠或弹力带进行分解练习。重点练习“胸触杠”位置时的快速转身和支撑。这个阶段挫折感最强因为需要全新的神经肌肉协调。ENTJ教练此时的作用是提供极其清晰的技术要点分解“想象用你的胸去撞杠而不是用手拉”并强制要求记录每一次成功/失败的感受。常见问题很多人卡在“恐惧心理”不敢将身体向前抛。系统的应对策略是在对话中反复进行“认知重构”“这不是杂技这是一个可分解、可练习的力学动作。失败的唯一后果是落在垫子上这与第1周你从箱子上跳下没有区别。”第13-16周完整动作与巩固目标串联所有环节完成第一个无辅助肌肉上杠并增加连续次数。实操重点降低辅助强度尝试完整动作。首次成功往往带有偶然性系统的任务是帮你将偶然变为必然。它会要求你回看成功那次的动作视频如果你有录制或详细描述从中提取关键成功因素并在下一次训练中刻意重复。状态管理此时current-state.json中的phase字段会更新为muscle-up-consolidation教练的对话重点将从“如何做到”转向“如何稳定做到3个、5个”。3.3 状态持久化与数据驱动训练state/目录是你的数字训练日志本。其设计哲学是最小化记录负担最大化数据效用。current-state.json结构示例{ currentWeek: 7, currentPhase: explosive-power, lastWorkout: { date: 2023-10-27, exercise: Weighted Pull-ups, volume: 2880, // 总训练容量 (kg) notes: Felt strong, focused on explosive concentric. }, prs: { strictPullUps: 12, maxPullUpWeight: 20 // (kg) }, nextWorkoutScheduled: 2023-10-29T09:00:00 }handler.ts会在每次训练相关的对话后自动更新这个文件。volume容量是重量×次数×组数的总和是衡量训练负荷的关键指标用于确保“渐进超负荷”。workout-log.md的使用这是一个自由格式的Markdown文件。我建议的格式是## 2023-10-27 AM: Upper Body Power * **Weighted Pull-ups**: 20kg x 5, 5, 5, 5 (RPE 8) * **Explosive High Pulls**: BW x 3, 3, 3, 3 * **Notes**: 今天爆发感很好注意下放时的控制。肩部感觉稳定。系统不会解析这里的复杂内容但会在对话中引用“你上次训练提到爆发感很好”增加连续性。你可以用任何你喜欢的方式记录主观感受。数据如何驱动决策每周复盘时handler.ts会读取过去一周的日志计算平均训练容量、疲劳趋势。如果容量连续增长则计划下一周小幅提升强度如果容量停滞或疲劳感剧增则可能建议进行一个“减载周”。所有建议都会附带数据依据“过去三周你的容量增长率为5%本周建议提升至7%”或“你连续两次记录RPE主观用力程度为9建议本周降低容量10%以促进恢复。”4. 部署、配置与自动化流程详解4.1 环境准备与Hook安装假设你已经在本地或服务器上安装并运行了OpenClaw。部署这个Hook系统是一个标准的“克隆-放置-启用”流程。# 1. 克隆仓库到本地任意位置 git clone https://github.com/end8cl01g/entj-muscle-coach-template.git # 2. 进入OpenClaw的hooks工作区目录 # 通常路径在 ~/.openclaw/workspace/hooks/ 或 OpenClaw配置指定的目录 cd ~/.openclaw/workspace/hooks/ # 3. 将克隆的模板复制到hooks目录下并命名为你喜欢的名字例如 entj-coach cp -r /path/to/entj-muscle-coach-template ./entj-coach # 4. 启用该Hook openclaw hooks enable entj-coach关键检查点执行openclaw hooks list确认entj-coach出现在列表中且状态为enabled。检查~/.openclaw/workspace/hooks/entj-coach/目录权限确保OpenClaw进程有读写权限否则状态保存会失败。4.2 核心配置详解大部分配置在config/project-config.json。首次使用建议保持默认仅关注以下几项{ workspace: { restrictReadWrite: true // 强烈建议保持true限制Hook只读写自己的目录更安全 }, persistence: { enabled: true, // 必须为true否则无法记录进度 autoSaveInterval: 300 // 自动保存状态间隔秒对话中每5分钟保存一次 }, cron: { enabled: true, morningReminder: 0 7 * * *, // 每天早晨7点 eveningCheckin: 0 21 * * * // 每天晚上9点 }, sync: { enabled: false, // 初期可关闭稳定后再配置 provider: git }, bioclock: { enabled: true, peakHours: [09-11, 19-21] // 根据你的精力高峰调整 } }Cron表达式如果你希望调整提醒时间需要了解基本的Cron表达式。0 7 * * *代表“每天的第7小时的第0分钟”即7:00 AM。你可以使用在线Cron表达式生成器来调整。生物钟配置peakHours是字符串数组格式为HH-HH使用24小时制。系统在安排高强度训练提醒时会尽量让时间落在这个区间内。4.3 云同步配置实战以Git为例数据同步至关重要它能防止本地数据丢失并实现多设备训练记录同步。准备一个私有Git仓库在GitHub、GitLab或Gitee上创建一个新的私有仓库命名为my-workout-log或类似名称。修改同步配置cd ~/.openclaw/workspace/hooks/entj-coach vim sync/sync-config.json修改内容如下{ enabled: true, provider: git, config: { git: { enabled: true, remote: https://github.com/your-username/my-workout-log.git, // 替换为你的仓库URL branch: main, autoCommit: true, commitMessage: [Workout Sync] {timestamp} } } }初始化本地Git并设置远程仓库如果sync/目录尚未初始化cd sync/ git init git remote add origin https://github.com/your-username/my-workout-log.git # 首次推送可能需要身份验证确保已配置SSH Key或Personal Access Token运行同步脚本# 回到Hook根目录 cd .. ./scripts/sync.sh这个脚本会先将state/和config/目录的内容复制到sync/目录下然后执行git的add, commit, push操作。自动化集成最理想的方式是将./scripts/sync.sh命令添加到你的系统Cron任务中或者配置在每次关闭OpenClaw时自动运行。你可以在handler.ts的onExit事件钩子中调用这个脚本。4.4 项目打包与迁移scripts/package.sh脚本用于将整个Hook项目包括你的个人状态和配置打包成一个归档文件方便备份或迁移到另一台机器。./scripts/package.sh执行后会在项目根目录生成一个类似entj-muscle-coach-backup-20231027.tar.gz的文件。在新机器上你只需要解压这个文件到OpenClaw的hooks目录然后运行openclaw hooks enable hook-name即可完全恢复你的训练环境和所有历史数据。重要提示打包脚本默认会包含state/和config/目录。如果你在sync/sync-config.json中配置了Git且包含敏感信息如Token请注意检查打包文件内容或修改脚本将其排除。5. 常见问题排查与实战技巧5.1 Hook未触发或AI响应未改变症状启用了Hook但与OpenClaw对话时AI的回答没有表现出ENTJ教练的风格。排查步骤确认Hook状态openclaw hooks list确保状态为enabled。如果是disabled再次运行enable命令。检查OpenClaw Gateway有时Gateway服务需要重启以加载新的Hook配置。运行openclaw gateway restart。查看日志OpenClaw通常有运行日志。查看日志中是否有关于加载你的Hook时的错误信息。日志路径通常在~/.openclaw/logs/。验证Hook文件检查handler.ts是否有语法错误。你可以尝试在Hook目录下运行npx tsc --noEmit如果安装了TypeScript来检查类型错误。确保identity.md文件存在且内容格式正确。测试简单响应临时修改handler.ts中的onMessage函数让其直接返回一个简单的字符串如“ENTJ Coach is active.”看对话中是否出现。这可以隔离是人格注入逻辑问题还是Hook基础通信问题。5.2 训练状态无法保存症状对话中教练提到了进度但重启OpenClaw后状态回滚到了之前的样子。排查步骤检查文件权限进入Hook的state/目录运行ls -la。确保current-state.json等文件对运行OpenClaw的用户是可写的。如果权限不足使用chmod命令修改。检查JSON格式状态保存失败的一个常见原因是写入的JSON格式损坏。手动检查current-state.json文件cat state/current-state.json | jq . # 需要安装jq工具 # 或者用Python python3 -m json.tool state/current-state.json如果报错说明文件已损坏。你可以尝试从备份云同步或打包文件中恢复或者临时删除该文件系统可能会在下次对话时重建一个默认状态。查看持久化配置确认config/project-config.json中persistence.enabled为true。检查磁盘空间虽然不常见但磁盘满也会导致写入失败。5.3 云同步失败症状运行./scripts/sync.sh后报错数据未推送到远程仓库。排查步骤检查网络与认证这是最常见的问题。确保你的机器可以访问远程Git仓库如github.com。如果使用SSH确保密钥已添加到ssh-agent且仓库已配置部署密钥。如果使用HTTPS确保已缓存凭据或使用包含Token的URL。验证远程仓库URL在sync/目录下运行git remote -v确认远程地址正确。手动执行Git命令进入sync/目录手动执行git add . git commit -m test git push origin main观察具体的错误信息通常Git会给出明确的提示如无权限、网络错误、分支冲突等。处理合并冲突如果你在多台设备上修改了状态并同步可能会遇到冲突。sync.sh脚本比较简单不会处理冲突。你需要手动进入sync/目录解决冲突git status查看冲突文件编辑后git addgit commit。5.4 训练计划与个人情况不匹配症状16周计划太激进或太轻松不符合个人当前能力。解决方案调整起点系统默认从“零基础”开始。如果你已经能做5个标准引体向上你可以直接修改state/current-state.json中的currentWeek字段从第3或第4周开始。同时将prs.strictPullUps设置为你的真实水平。自定义计划16周计划模板在docs/technical-knowledge.md中有详细说明。你可以基于此创建自己的变体。更高级的做法是修改handler.ts中处理训练计划推荐的逻辑部分将其指向你自己的计划配置文件。与教练沟通直接告诉你的ENTJ AI教练“我认为当前计划强度不适合我我的当前水平是...”。一个设计良好的ENTJ教练应该会根据你提供的新数据重新评估并调整后续计划而不是固执己见。这考验的正是你注入的人格逻辑的灵活性。5.5 保持动力与避免自动化疲劳最后的心得自动化工具解决了“提醒”和“记录”的问题但无法替代你走上训练场的那一刻。初期这个系统的新鲜感和ENTJ教练的“鞭策”可能很有效。但几周后可能会产生“自动化疲劳”——对提醒视而不见。我的应对策略是定期微调每4-6周花10分钟回顾一下配置。调整一下Cron提醒的时间或者修改一下identity.md中的一句座右铭给自己一点新鲜感。社交 accountability虽然系统是私人的但你可以将workout-log.md中的精彩部分如突破PR手动分享到社交圈或将ENTJ教练给你的“毒舌”评价截图发给训练伙伴增加趣味性和责任感。接受不完美如果某天确实错过了训练或者状态极差只完成了一半计划如实记录在日志中。ENTJ教练不会容忍借口但会尊重事实。系统会根据这些“不完美”的数据在后续给出更合理的安排。记住长期坚持远比短期完美更重要而这个系统的终极目标就是帮助你建立那个“长期”的框架。