HermesAgent橙皮书2.0(从入门到精通 Nous Research 开源框架实战指南)_第1页
HermesAgent橙皮书2.0(从入门到精通 Nous Research 开源框架实战指南)_第2页
HermesAgent橙皮书2.0(从入门到精通 Nous Research 开源框架实战指南)_第3页
HermesAgent橙皮书2.0(从入门到精通 Nous Research 开源框架实战指南)_第4页
HermesAgent橙皮书2.0(从入门到精通 Nous Research 开源框架实战指南)_第5页
已阅读5页,还剩129页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

橙皮书橙皮书HermesAgent2.0从入门到精通NousResearch开源框架实战指南TheAgentThatGrowsWithYou关键词:自改进闭环·多Agent编排·三层记忆·Skill系统·安全边界适合读者:想搭建个人AIAgent的开发者和AI爱好者版本:v260607本手册基于HermesAgentv0.16.0(2026.6ΓTheSurfaceRelease」)编写。AI工具迭代迅速,部分内容可能随版本更新而变化,请以官方文档为准。Part1:这是什么§01先认识Hermes:一个会自己长本事的Agent§0260秒全景:一个大脑,很多张脸§03Nous为什么做这件事Part2:缰绳会自己长§04造、修、续:自改进的三台引擎§05Curator:给自进化装刹车§06最该学的是Γ不要学」Part3:它怎么记住你§07三层记忆:从金鱼到老友§08会话搜索:把不该用LLM的活要回来§09Skill系统与开放标准红利§10一个agent指挥一群agentPart4:连接一切§1323个平台与会自生长的GatewayPart5:多Agent与编排§15从delegate_task到Kanban平台Part6:部署、安全与边界§20Promptware防御与可观测性§21自改进Agent能走多远§01先认识Hermes:一个会自己长本事的AgentMeetHermes:TheAgentThatGrowsItsOwnSkils先把这本书的主角介绍清楚。HermesAgent是一个开源的、会自我改进的AIAgent——它记得你,会从用过的经验里自己写技能,你睡觉的时候还在后台替你干活。与其说它是个工具,不如说是个越用越懂你的数字同事。它到底能干什么但你用到第十次,情况完全不一样了。它知道你偏爱httpx不爱requests,知道你习惯把日志写进文件而不是打这就是Hermes最特别的地方,一句话说清:市面上的Agent要你亲手给它套Γ缰绳」——写规则、配权限、整理记忆;而Hermes出厂就带好了缰绳能力具体是什么记得你跨会话的长期记忆:你是谁、你的偏好、上次聊到哪,它都存着,不用每次重新交代自己写技能用过的经验会沉淀成可复用的Skill,下次遇到同类活直接调,越用越顺手后台干活能挂定时任务,你睡觉的时候它替你跑日报、看代码流水线、盯一个长期项目指挥一群Agent一个主Agent能派生出子Agent并行干活,自己当指挥在哪都能找到它命令行、原生桌面App、浏览器管理面板、二十多个聊天平台,同一个它事。这本书要拆的,就是这个同事的脑子是怎么长出来它跟你已经知道的那些,是什么关系你大概率听过几个名字:Harness、ClaudeCode、OpenHarness是方法论,不是产品。如果你读过《HarnessEngineering》那本橙皮书,会记得它讲的是怎么给AIHermes是把这套理念产品化的那个东西。它出厂就带好了这缰绳做成了能自己生长的基础设施——这是它和大多数Agent最根ClaudeCode、OpenClaw是它的同类,但定位不同。粗略分一下:ClaudeCode是交互式编码,你坐在那儿顺便说,它现在火得有点夸张它的GitHubstars量级已经越过了十八万。被Dealroom列进了2026年增长最快的开源Agent框架。你每次打开一个数字感受一下迭代速度:最新的v0.16.0这一个版本,背后是八百多个commit、五百多个merge的PR、一百七十多位贡献者。这还只是一个minor版本。开源社区的飞轮一旦转起来,加速度是吓人的。靠Telegram远程操控的极客玩具。两个月、九个版本之后,它已经长出了原生桌面App、浏览得专门写一本的,是它快的背后那个稳定的内核——会自己造缰绳、缰绳还会自己长。这个我们顺带交代下我的位置,免得你以为这是临时查资料攒的。这两年我几乎全扑在AIAgent和skill上:开源的女娲.skill到现在两万多star,给设计用的huashu-design一万六,会自己进化skill的达尔文.skill三千多,这本书的第一版本身在GitHub也攒了四千多star。自改进的Agent、会自进化的skill,是我天天在做、在玩的东西。所以该不该从OpenClaw搬家OpenClaw这两个月发生了一件大事。它的创始人PeterSteinberger宣布加入OpenAI,项目本身转给了一个非营利基金会托管。论体量,OpenClaw现在还是比Hermes大,stars差不多是它的两倍。但灵魂人物走了、而Hermes这边做了个挺有意思的动作。它没停留在Γ我比OpenClaw好」的口头较劲,而是在了搬家的地毯。源码里有一条命令叫hermesclawmigrate,README里专门有一整节教你怎么从OpenClaw核心建议核心建议要不要搬,我的建议是别急着下结论。这本书后面会把Hermes的记忆、技能、安全这些机制讲透,你看完再判断它值不值得搬,比现在拍脑袋强。但有一点可以先记住:搬家的技术成本,Hermes已经帮你压到很低了,这本身就是一个信号。这本书要带你看的,是脸下面那个内核真正值得你花时间的,是脸下面那个内核——一个会自己给自己造缰绳、缰绳还会自己生长的自改进Agent。它§0260秒全景:一个大脑,很多张脸OneBrain,ManyFaces:60-SecondTour你以为自己面对的是好几个产品:一个命令行、一个桌面App、一个网页面板、二十多个聊天机器人。其实它们背后是同一个东西。整套架构可以用一句话概括:一个大脑,很多张脸。先看这张图23个IM平台Electron桌面App23个IM平台CLICLIInkTUI桌面App→AIAgent←Web面板那个大脑长什么样AIAgent这个类,是整个系统的中枢。它有个很扎眼的特征:构凭证、路由、各种回调、会话上下文、预算、凭证池……全塞在一个构造函数里。任何一个写里白纸黑字写着这是个godobject。但它是故意这么设计的。后面会讲为什么宁可背这这个大脑对外只开两个口子。一个叫chat(message),扔进去一句话,吐出来一句回复,简单粗暴。另一个叫 run_conversation(),是完整接口,返回最终回复加上整轮对话的消息列表。日常你用到的所有功能,最终都收口到这两个方法上。多转90圈,而且这90圈的预算是主Agent和它派生的子Agent共用五个内建系统,对应Harness五组件如果你读过HarnessEngineering那本橙皮书,会记得一套缰绳框架:指令、约束、反馈、Hermes里是什么一句话Harness组件Hermes里是什么一句话指令层Skill系统markdown技能文件,注入时是usermessage不是systemprompt约束层工具集开关+沙箱+6种终端后端该给的权限给,不该碰的关掉反馈层自改进学习循环+Curator用得越多越好用,还会自己剪掉过时的技能记忆层SQLite+FTS5+可换的记忆provider本地存、全文索引、跨会话找得回来编排层子Agent委派+定时任务+Kanban看板一个Agent能指挥一群Agent干活记住这条对应关系。它是整本书的骨架。读到后面任何一个系统觉得绕,回来看这张表,问自己Γ这是缰绳的哪一组件」,多半就理顺了。为什么宁可背一个上帝对象,也不拆微服务推荐推荐promptcache不可破。对话中途绝不能改过去的上下文、不能换工具集、不能重建systemprompt——一改,缓存全废,每次请求都得重新烧token。这条约束甚至决定了Skill为什么注入成usermessage而不是systemprompt。不推荐几万个测试不能动。整个项目压着将近一万七千个测试。拆架构等于动地基,这么多测试跟着遭殃,工程成本高到不现实。这一版v0.16.0做过一次教科书级的重§03Nous为什么做这件事WhyNousBuiltThis一个东西免费、开源、还在疯狂迭代,你第一反应应该是警惕,不是感动。HermesAgent就是这样的东西。搞清楚出钱的人图什么,你才知道该信它几分。先问一个扫兴的问题Nous是谁:一群不信Γ大力出奇迹」的人靠的是Hermes系列模型:从早期的Nous-Hermes,到Hermes2,再到2025年的Hermes4,做到了14B、赖什么?高质量的训练数据。尤其是那种真实场景下、人和模型来回动机一:你每用一次,都在给它喂饭这是Nous做Hermes最被低估、也最聪明的一招。你打开Hermes的仓库根目录,会看到两个不起眼的大文件:一个叫batch_runner.py,一个叫 trajectory_compressor.py。名字很技术十几万级用户真实使用海量工具调用轨迹压缩成训练数据→更强的模型反哺Agent训练下一代Hermes模型更强的模型反哺Agent我的判断是(这是我从源码和README推断的,不是Nous时是Nous给自家模型采集真实数据的超大规模采集器。Anthropic这些公司为了拿这种数据,得自己花钱搭环境、雇人标注。而Nous想了个更省钱的办法。把工具白换个角度想:你以为你在白嫖一个免费Agent,其实你和Nous是在做一笔交换。你拿到了一个好用的数字同事,Nous拿到了训练下一代模型的燃料。这笔交换不一定不公平,但你得知道它存在。动机二:开源拉人,Portal收钱Hermes本身不要钱,但它在第一次安装时,会把一个叫NousPortal的东西做成默认推荐路径之一。Portal是这一层明面上是什么暗线里图什么HermesAgent免费开源工具,拉用户采集训练数据+做获客漏斗NousPortal一站式订阅,省去配一堆API的麻烦把变现入口和模型分发口攥在自己手里Hermes模型家族开源可下载的前沿模型通过Portal成为默认分发渠道开源拉来海量用户,Portal把其中愿意付钱、又不想折腾配置的那批人转化成订阅。更关键的是,Portal一旦成动机三:对手丢了灵魂人物,正好抢人Hermes最大的对手是OpenClaw,一个同样开源的个人AI助手,体量比Hermes还大(star数大约是Hermes的直接铺好了从OpenClaw搬家的地毯——§01里说过的那条hermesclawmigrate,自动识别旧配置、把记忆不推荐传统竞品的姿态:我比对手强在哪哪哪不推荐传统竞品的姿态:我比对手强在哪哪哪,至于你怎么从对手那边过来,自己想办法。推荐Hermes的姿态:不光说Γ我比对手强」,还把Γ你怎么从对手那边无痛搬过来」写进产品,当成显式的获客策略。三个动机叠在一起,你该信它几分据,用训练出的模型撑起Portal的商业闭环,再趁对手交接班的空档把市场份额吃到最大。每一环都为下一环尾。Nous有数据飞轮、有商业闭环、有抢市场的明确动机,意味着核心建议核心建议读任何Γ免费又好用」的开源工具,都值得先问一句:做它的人靠什么活下去?答案越清晰,项目越值得长期押注;答案越含糊,越要做好它随时断更的心理准备。Hermes属于前者,这也是我愿意花一整本书拆它的原因。→→§04造、修、续:自改进的三台引擎Build,Repair,Continue:ThreeEnginesofSelf-Improvement旧书写的是Γ缰绳会自己长」。两个月后读源码,我能指着说这根缰绳是谁在长、长歪了谁来剪、剪错了怎么救。它从一句理念,变成了三台跑在后台、各管一摊的引擎。先说两个月前那本书欠下的债上一版Hermes橙皮书写学习循环的时候,对应版本是v0.7.0。我当时的措辞挺虚的来。那时候它本质上还是个理念,加一个被prompt鼓励着去存东西的主agent。造BackgroundReview→修→修Curator续Goals/RalphLoop造,是每轮对话后悄悄fork一个子agent去复盘,决定这次学到了什么、写进哪个skill。修,是一个每七天自己醒一次的维护者,给agent造出来的skill库做合并、归档、打包。续,是当一个目标没完成时,agent给自己续一个能自我进化的东西,必须也能自我清理会自己长skill的agent,有个绕不开的副作用:它解决一个新问题就想存一条经验,跑上几个月,攒出几十上百个又窄又重复的skill。每个都只对当时那一个bug有用,合在一起就是一团污染catalog、白白烧token的垃圾。一个只增不亡的组织有个名字,叫肿瘤。Hermes的backgroundreview负责增殖,Curator负责凋亡,这俩是第一台·造:每轮对话后的后台复盘这台引擎对应源码里的agent/background_review.py。它的工作方式,文件头注释写得很直白:每一轮对话结束后,主agent可能会fork一个守护线程,把刚才那段对话的快有什么skill或记忆值得存下来、改一改?关键是它跑在主回复发出去之后。源码注释专门解释了为什么:复盘绝不能和用户的以它是best-effort的,失败了就静默跳过,绝不拖垮主流程。你跟它对话时根本感觉不到背后有个分身在写笔计数器按什么算默认阈值管的是哪种知识记忆nudge对话轮数每10轮你是谁、当前在干什么skillnudge本轮工具迭代次数每10次这类活该怎么干这台引擎里最值得引用的,是它复盘skill时用的那段prompt。我把核心几条挑出来,这几乎就是一份ΓAI该怎默认就该学:prompt原话是ΓBeACTIVE,大多数session都该产出至少一次skill更新……一次什么都不做的复盘,是错过了学习机会,不是中性结果」。它把Γ不学」定义成失职,而不是默认安全选项。更有意思的是它对学习信号的定义。MitchellHashimoto用ClaudeCode时有个习惯:agent每犯一个错,他就号,要求当场编码成skill里的坑位或步骤。它改skill还有个优先级梯度,不是一遇到事就新建:先改本轮刚加载过的那个skill,再改一个已有的大类新的。新建的skill名字还必须是Γ类级」的,禁止用某个PR号、某串报错第二台·修:Curator,七天醒一次的维护者第二台引擎是Curator,源码在agent/curator.py。这玩意儿在旧书里压根不存在,它是v0.12.0才诞生的,那个版本官方直接命名为TheCuratorrelease,发布说明第一句就是:Hermes现在能自己维护backgroundreview在复盘时如果发现两个skill重叠,它不会自己去合并,只会「记一笔,交给curator大规模Curator的触发节奏跟第一台完全不同。它不靠cron守护进程,靠的是idle检测:默认每7天最多跑一次,而且要等agent闲置满2小时才动手。还有一道很贴心的闸门:全新安装或刚update完,第一次tick它不会立刻乱动陈旧的skill一旦被重新用到,会自动复活回active。被pin住的skill永远不参与自动转移。这一段不烧一分钱token,纯靠时间戳推。第二段才是大模型复盘,fork一个agent真正去判断哪些该合并、哪些该归档。转向,以及那套永不删除、跑前打tar.gz第三台·续:Goals的RalphLoop前两台改的是agent跨会话的能力。第三台不一样,它改的是agent在一次会话里的坚持度。源码在 hermes_cli/goals.py,注释里管它叫「Hermes的Ralphloop」。机制不复杂:一个goal是用户给的、跨多轮一直生效的目标。每一轮结束后,一个很小的judge调用会问辅助模它有几个我挺欣赏的克制设计。续命用的提示就是一条普通的用户消息追加进去,不动systemprompt、不换工具集,这样prefixcache不会失效,省钱。ju核心建议核心建议前两台引擎让agentΓ越用越懂你」,第三台让它Γ盯着一个目标不松手」。造能力、修能力、续动力,三件事合起来,才是完整的Γagent自己给自己造缰绳」。三台引擎,一张全景引擎动词触发节奏干什么跑在哪BackgroundReview造每对话10轮/10次工具迭代决定这次学到什么→写记忆、建改skill主回复后fork的后台线程Curator修默认每7天+idle2小时合并、归档、打包skill库独立fork的agent,用辅助模型Goals/RalphLoop续每轮结束后判一次目标没完成就续命,连跑多轮同一会话内,追加提示这就是两个月里这条闭环最大的变化。旧书写的是一个Γ应该会自我进化」觉的两笔设计。下一节我们就钻进Curator,看看一个会自我清理的agent,刹§05Curator:给自进化装刹车Curator:BrakesforSelf-Evolution一个会自己造skill的agent,迟早会造出一堆垃圾。Hermes的答案不是Γ别造那么多」,而是请了一个会自己上班的清洁工——它永远不删东西,动手前先给你备份。先想清楚一个问题上一节讲到Hermes每轮对话后都会fork一个后台复盘,把这次学到的东西写成skill。听起来很美,但我第一反应是担心:它会不会越攒越多,最后攒出几十个长得差不多的小破skill?这个担心是对的。你今天修了个bug,它存一个;明天换个token又容易选错。这不是假想。后台复盘的prompt里有一句话,态度很激进:Γ大多数会话至少该产出一次skill更新,什么都不题是一句很有底气的话:HermesAgentnowmaintainsitself,它开始自己维护自己了。接着§04那个比喻说:backgroundreview负责增殖,Curator负责凋亡——而Curator正是这里要拆的那台Γ凋亡引擎」。Karpathy也说过类似的话,对一个学习系统来说,遗忘和学习同样重要。它怎么被叫醒Curator不是个一直转的定时任务。源码里没有crondaemon,它靠「闲置触发」:CLI启动时检查一下,距上次跑够久了,而且agent也闲够久了,才fork一个后台进程去干活。距上次运行≥7天→→agent闲置≥2小时fork一次维护还有个我挺欣赏的细节:全新装好之后第一次tick不会立刻干活。它会把「上次运行时间」直接记成现在,逼自己等满一个完整的7天周期。注释里说得很实在:刚hermesupdate完就乱动你的skill库,体验太差。给你一整个星期去pin住你在乎的、opt-out掉你不想要的。两段式:先用纯函数,再用LLMCurator真正动手时分两步。第一步完全不调用大模型,是一段纯函数状态机,按active活跃stale陈旧active活跃stale陈旧archived归档这套状态机有意思的地方在于它是可逆的、确定性的。一个被标成stale的skill,只要再被用上一回active。没有玄学,没有大模型的判断,纯靠时间戳算。被pin住的skill则完全跳过这一步,时间再久也不会第二步才fork一个用辅助模型跑的agent,让它巡视那些agent自己造的skill,逐个决定:保留、改一改、跟别的合并、还是归档。这一步是有Γ想法」的,下面这套想法是两个月里Cura从Γ找重复删掉」到Γ建一把伞」早期你会以为Curator干的是去重:找出两个像的,删掉一个。但v0.16.0的reviewprompt第一句就把这个理解一个带几个小节的skill」。prompt里甚至明确禁止用Γ每个手法什么时候用怎么做并进现有伞已经有一个够大的skill能当伞把兄弟skill的独特点patch进去,归档兄弟新建一把伞没有现成的伞罩得住新建一个类级的SKILL.md,把零散的收进来降级成子文件内容窄但有价值降成umbrella下的references/templates/scripts维护逻辑。prompt里那句话我特别喜欢:Γ几百个各管一个session具体bug的窄skill,是这个库的失败,不是刹车的四道设计这正是§05的核心。Curator不是一脚油门踩到底的自动化,它的刹车做得很重,重到我觉得值得逐条讲。第一道:永不删除,只归档源码文件头写了一条不变量:Neverauto-deletes—onlyarchives.Archiveisrecoverable.所谓归档,就是把skill目录挪进~/.hermes/skills/.archive/,随时能restore回来。Curator没有Γ删除」这个动作,它最第二道:动手前先打快照每次正式维护之前,Curator会先把整个skills目录打成一个tar.gz快照,连.archive/一起存进 .curator_backups/,文件名是UTC时间戳。注意这意味着哪怕这一轮归档错了一片,你一条hermescuratorrollback就能把整轮撤销,包括它这次归档的、之前归档的,全救回来。快照连旧归档一起存,所以回滚是真的Γ时光倒流」,不是只撤销最近一步。第三道:dry-run预览不放心自动跑?hermescuratorrun-dry-run让它把这一轮想干的事全列出来,但一个字都不动你的库。这一点对应MartinFowler那个著名的框架:人和自动化系统的关系,是intheloop(事事亲为)、ontheloop(在旁监督可干预)、还是outtheloop(完全放手)。Hermes明确选了ontheloop,你不必盯着它每一步,第四道:provenance锁死破坏半径最优雅的一道在这。Curator凭什么知道哪些skill能动、哪些碰都不能碰?靠的是每个skill的「出身」标记。skill出身谁造的Curator能动吗bundled内置Hermes出厂自带默认不碰(v0.16.0起可选开启修剪)hub安装从社区市场装的永远豁免,绝不自动碰用户前台要求写的你明确让agent写的属于你,Curator永不染指agent后台复盘造的agent自己fork出来造的这才是Curator唯一的管辖区实现上靠一个contextvar:后台复盘fork跑的时候,写入来源被标成background_review,只有这种来源造出来的skill才被打上created_by:agent,才进Curator的管辖。你手写的、装来的,永远安全。这句话值得停一下:agent自我进化的破坏半径,被严格锁在它自己的自留地里。它能回收的,只有它自己长出来的东西。你的财产和它的财产之间,有一道源核心建议核心建议有个容易混淆的细节:pin一个skill,只挡删除、归档、合并,不挡内容改进。被pin的skill照样能被Curator改这把刹车回答了什么不推荐Γ我们有完善的安全机制保障自进化过程的可控性」:一句听着安心、出了事什么都兜不住的空话。不推荐Γ我们有完善的安全机制保障自进化过程的可控性」:一句听着安心、出了事什么都兜不住的空话。推荐永不删(只归档可恢复)+跑前tar.gz快照+dry-run预览+provenance锁死破坏半径。每一条都对应一个§06最该学的是Γ不要学」TheMostImportantLessonIsWhatNottoLearn一个会自我进化的Agent,真正的危险从来不是学不会。是学错了之后,它会拿着错误的规则,一连几个月反复拒绝自己。Hermes的reviewprompt里,专门有一段黑名单在防这件事。先讲一个会反噬几个月的bug设想这么个场景。某天你让Hermes帮你抓个网页,恰好那一到这里都还正常。问题在于,它有一套学习循环(见§04每轮对话后会fork一个后台Hermes源码注释里把这个现象描述得很到位,我直接引一句(出自agent/background_review.py原文:Negativeclaimsabouttoolsorfeatures('browsertoolsdonotwork','Xtoolisbroken').Thesehardenintorefusalstheagentcitesagainstitselfformonthsaftertheactualproblemwasfixed.为什么自改进Agent特别容易栽这一跤这事得和前面连起来看。§04讲过,那段后台复盘的prompt态度相当激进,默认就该多写规则—也就是说,Hermes默认就该学,倾向于多写规则而不是少写。这个倾向本身是对的,它对应着Mitch推荐推荐我把命令参数写错了→这是我的错,该学,下次别再写错不推荐这台机器恰好没装那个二进制文件→这是环境的临时状态,不该学成永久规则黑名单:明确列出哪些东西不许学Hermes的对策不复杂,但很实在:在那段reviewprompt里,专门写了一份Γ不要学」的清单(同 background_review.py)。复盘的子agent在决定写不写skill之前,必须先对照这份黑名单过一遍。黑名单类别典型例子为什么不能学环境依赖型失败缺二进制文件、commandnotfound、凭证没配是这台机器此刻的状态,不是任务的普遍规律对工具的否定论「浏览器工具用不了」「X工具坏了」会硬化成Agent反复引用、长期拒绝自己的断借口一次性的任务残某个PR编号、某串报错文本、今天临时的只对今天这一件事有意义,明天就是噪音片codename注意注意这条认知是旧书完全没有的。两个月前Hermes还只是个Γ会写记忆、会建skill」的理念,那时候没人意识到,自改进的真正难点不是Γ怎么让它学」,而是Γ怎么拦住它别乱学」。黑名单是这两个月长出来的最成熟的一笔。万一还是学错了,provenance锁住破坏半径黑名单是事前预防。可再清醒的规则也拦不住所有靠的是§05讲过的那套provenance(出身追踪每个skill都带着「是谁造的」标签——出厂自带、社区装的、你亲手写的、Agent自己fork出来造的。这里只需记住那条产权线在「不要学」有Agent自己造的skill,才会被Agent自己回收。所以哪怕黑名单百密一疏、某条坏规则漏网写进了某个agent-created的skill,它能污染的也只是Agent那块agent写的skill属于用户,Curator永远不许碰。破坏半径:一个Agent自学时写歪的skill,最坏也只会污染它自己的那块自留地。它碰不到你精心维护的配置,碰不到社区那些经过安全扫描的可信skill。自改进的代价被严格圈在一个可控的小圈子里。这层设计我觉得才是真正见功力的地方。前面§05讲过Curator永不删除、只归档、跑前还打tar.gz快照可以整轮回滚。provenance又往前加了一道:它根本不让自改进的影响溢出到agent自留地之外。事前有黑名单拦着别乱学,事后有provenance一个会自学的系统,最该学会的是克制回到这一节的标题。我们总在期待Agent学得更多、改得更勤、进化得更快。但Hermes这套机制告诉我一件所以Hermes在「让它学」这件事上花了很多力气,又同样认真地在「拦住它别乱学」上设了三道闸:黑名单管事前、provenance管边界、Curator管回收。这种清醒,比任何「越用越聪明」的宣传都更让我信任它。一§07三层记忆:从金鱼到老友ThreeLayersofMemory:FromGoldfishtoOldFriend大多数AI工具的记忆,是把聊天记录越堆越长,撑到上下文塞不下为止。Hermes的记忆是另一种东西:它把经验蒸馏成可以一直用下去的笔记,而且为了省你的钱,它给模型看的还是Γ昨天那一版」。记不住的金鱼,和记得住的老友多数工具是金鱼,七秒记忆。这次告诉它你的项目用httpx不用requests,下次它照样给你写requests。它不是Hermes想做的是老友:你不用每次重新自我介绍层管什么存哪类比会话记忆(情景)什么时候说过什么SQLite+FTS5全文索引翻得到的聊天记录持久记忆(语义)关于你和环境的稳定事实MEMORY.md+USER.md两个文件贴在桌前的便利贴Skill记忆(程序性)某件事具体怎么做skills/下的markdown写好的操作手册这一节我重点讲中间那层。会话记忆放到下一节单独说,那里有个更精彩的故事;Skill记忆前面讲学习两个文件,分得很清楚持久记忆其实就是两个markdown文件,躺在~/.hermes/memories/里。一个叫MEMORY.md,一个叫分两个文件不是为了好看。MEMORY.md装的是Agent自己的笔记:这个项目的约定、某个工具的怪癖、上次个汉字。这个限制是故意的。记忆不是越多越好,便利贴贴满一墙就等于没贴一个细节:它数的是字符不是token。注释里写得很直白:字符数跟模型无关,换个模型也不会变。这种Γ不为某个模型的分词器买账」的克制,是整个产品的性格。写盘是实时的,给模型看的是冻结的Hermes的解法很巧:写盘是实时的,给模型看的是冻结的。中途写入立刻落盘系统提示整段不变中途写入立刻落盘系统提示整段不变下次会话刷新快照记忆冻结成快照记忆是个攻击面还有个更朴素的防护:如果别的进程(某个补丁工具、一条shell追加、你手动改、或者另一个并发的会话)往MEMORY.md里塞了它解析不回来的内容,memo核心建议这套设计的潜台词是:记忆越强大,越要把它当成不可全信的输入来对待。一个会永久记住你的Agent,必须同时是一个会怀疑自己记忆的Agent。能力和警惕,是一起长出来的。和ClaudeCode的auto-memory比一比维度ClaudeCodeauto-memoryHermes持久记忆载体单个MEMORY.md(约200行上限)MEMORY.md+USER.md双库,各有字符预算事实/画像混在一份文件里Γ关于环境」和Γ关于你」物理分开写入时机触发式(你说Γ记住」或满足条件)nudge定时提醒+上下文将丢失前抢存缓存友好会话内一般稳定显式冻结快照,为前缀缓存而设计防注入较轻写入扫+加载扫+BLOCKED占位顾着干活忘了记笔记。一个叫flush,在上下文快要丢失之前(压缩、重置、退出的那一刻)再给Agent一轮机三层之外,还有可选的第四层个可选的外挂位:外部记忆provider,做的是更深的跨会话用户建模,比如Honcho。这一层不是默认开的,要自己去hermesmemorysetup里选一个装上,可能还得配APIkey。目前目录里并排§08会话搜索:把不该用LLM的活要回来SessionSearch:TakingBacktheWorkLLMsShouldNotDo两个月里这套记忆系统最大的改动,不是检索变快了,而是有人把一颗本不该在这里的LLM拔了出去。结果是同一件事,免费、即时、还不会胡编。先看一句官方的话v0.15.0这版的releasenotes里有一行,我读到的时候停了一下。它说session_search重写了,noLLM、nocost、4500×faster。benchmark就原形毕露。所以我去翻了源码,想看看这4500×到底是怎么来的。旧版到底慢在哪、贵在哪新版做的事:把那颗LLM删了推荐新版:FTS5召回→直接从DB取出命中的真实消息→约推荐新版:FTS5召回→直接从DB取出命中的真实消息→约20ms、零成本、不可能编→返回原文不推荐旧版:FTS5召回→喊辅助LLM摘要三个会话→约30秒、约0.3美元、可能编造→返回Γ转述版」源码里这句话写得很硬气。session_search的工具文件开头那段注释明引,ΓNoLLMcallsanywhere」,每种返回都是数据库里的真实消息。discovery这种带搜索的查询,从原来约90秒压到约20毫秒;纯翻页(scroll)更快,约1毫秒。所谓4500×,一个反直觉的判断:很多人下意识觉得Γ上了LLM=更智能=更好」。但检索是个有标准答案的任务:命中就是命中,没命中就是没命中。给一个确定性任务套一层概率性的模型,换来的不是智能,是成本、延迟和幻觉。工程上最克制的进步,有时候是做减法。不用LLM摘要,凭什么够用新版的巧思在discovery这个形态里。它一次调用,就同时给你三样东西:会话开头的头几条消息(让你知道这四种检索姿势,全靠参数推断releasenotes说有三种模式(discovery/scroll/browse但我翻源码发现其实是四种。而且没有所谓的mode形态你传什么它给你什么用LLM吗关键词queryFTS5命中按会话去重,每条带摘录片段、命中点上下窗、头尾否搜书挡会话id+锚点消息id以锚点为中心上下若干条(默认5,最多20不搜不书挡否只传会话id整段会话(太长就取头20+尾10)否什么都不传最近若干会话的标题、预览、时间戳否里贴一个会话链接进来,它能跨profile只读地把那段会话翻出来给你看,这是「跨身份记忆互通」的入给中文用户的彩蛋:双FTS5表新版建了两张FTS5虚拟表来解决。一张是默认的unicode61,伺候英文;另一张专门给CJK,用的是trigram非中文查询主表unicode61·中文每词≥3字trigram表·中文每词<3字→LIKE兜底路由逻辑是源码确认的:英文走主表,BM25排序加高亮;中文且每个词够三个汉字,走trigram表;中文但词东西全部跑在本地、零成本,这就是Γ为什么Hermes的会话搜索对中文也好用」的最后这个彩蛋,是给所有人的方法论一处在配置示例文件里,旧版那套给Γ会话摘要」用的LLM配置块还原封不动留着,provider、mtimeout、并发数全在。可新代码根本不读这些。这是一段已经死掉的配置。注意注意README说Γ带LLM摘要」,源码说Γ全程零LLM」,信哪个?信源码。代码是会运行的事实,文档是可能过期的说法。这个矛盾本身,就是Γ别信二手解读,去读源码」最好的教学案例。加载、可共享的Skill。§09Skill系统与开放标准红利TheSkilSystemandtheOpen-StandardDividend两个月前Hermes的Skill还只是Γ自带的一堆模板」。今天它的官方描述被改写成Γ会从经验里造Skill的agent」,Skill从配角升成了主角。但这一节最值得讲的,其实是它做的另一个选择:不自造格式,去蹭别人的生态。Skill从哪来:三个源头混在一个目录里Hermes的所有Skill都落在同一个目录下,~/.hermes/skills/。这是它的singlesourceoftruth。打开这个目来源怎么进来的信任级别内置bundled装Hermes时从仓库复制,每次update增量补新builtin(永不扫描)Agent自创后台复盘进程发现值得沉淀,自己写进来agent-created(归curator管)社区Hub从9个外部源安装,先过安全扫描才落盘trusted/community出来是74个内置Skill,外加95个官方optional(默认不加载,一条命令装回)。两个月时间,从40出但同一个版本里它还干了件反方向的事:主动给默认Skill集瘦身。删掉被原生功能取代的死Skill,把一批不常用的从内置降级成optional,还加了个environments门控。上下文专属的Skill不再污染所有人的索引,你不显这个动作我觉得很关键。Skill不是越多越好。塞太多,agent每次选Skill都得在一长串里翻,prompt也变重。真正的聪明在于:它没自己造轮子这才是这一节的主线。Hermes的Skill用的不是自家发明的格式,而是agentskills.io这个开放标准。这套SKILL.md格式最早是Anthropic给ClaudeCode做的,后来开放成了通用标准。源码里到处是兼容它的痕迹。frontmatter的license、compatibility这些字段都标着「agentskills.io可移植到什么程度?一个为ClaudeCode写的SKILL.md,直接拷进Codex的Skill目录就能跑,行为一致。同文件在CodexCLI、GeminiCLI、GitHubCopilot、Cursor这些已采纳标准的平台上都认。网络效应在加速:旧书基线时采纳这个标准的工具是Γ11+」,两个月后变成Γ26+」。标准的盘子越大,押注它的人吃到的存量就越多。Hermes怎么吃这份红利?很直接。它能装那些原本给ClaudeCode、Codex生态做的Skill仓库,比如openai、anthropic、huggingface这几家官方的Skillrepo,拿来即用。它甚至给OpenClaw做了迁移路径,因为两边都我推断这是个典型的「不和标准对着干」的决策。自己从零攒NVIDIA进了默认信任名单说到生态,v0.16.0有个标志性事件:NVIDIA官方的Skill仓库进了Hermes的默认trustedtap。所谓trustedtap,是装Hermes后不用任何设置就能直接浏览的几个源。原本名单里是openai、anthropic、huggingface、garrytan这几家。这一版加进了NVIDIA/skills,经过NVIDIA验证、带签名、带治理卡片,覆这件事的信号比它本身的功能更重要。当硬件厂商都开始为agent的Skill生态做官方供给,说明SKILL.md这个标准已经不只是软件圈的玩具了。OpenAI、Anthropic、HuggingFace在列还能理解,连英伟达都来铺,标准三层加载:要用时才打开Skill多了有个现实问题:全塞进上下文,token吃不消。Hermes的解法是渐进式披露(progressivedisclosure分三层加载。Level0只看名字+描述Level2Level0只看名字+描述Level2取某个参考文件第一层,agent只拿到每个Skill的名字、描述、分类,大概几千token就够列完全部Skill。它在这一层判断「这这个设计的好处是,你可以装几十上百个Skill,但平时不占context。agent像翻一本有目录的书,先看目录决定翻哪页,而不是把整本书背下来。这也是为什SkillsHub:9个源+隔离扫描+三级信任源是什么规模skills.shVercel的公开Skill目录约2万+ClawHub第三方Skill市场5万级LobeHubagent市场,条目转成可装Skill1.4万+agentsbrowse.shBrowserbase的浏览器自动化Skill200+站点github/url/well-known/official/claude-marketplace直装repo、单文件URL、站点约定发现、官方—optional、Claude兼容市场5万个陌生Skill听着诱人,但这里藏着一个真实的攻击面。装一个陌生的SKILL.md,等于往agent里塞一段会被当成指令执行的文本。这本身就是promptinjection的温床。一个看着人畜无害的Γ帮你查天气」Skill,正文Hermes对这件事的处理是必须讲的一段设计。社区来的Skill不是裸装的,得先过一个强制安全扫描器。它用静态分析去找已知的坏模式,比如数据外泄、prompt注入、破坏性命令、持久化后门。扫描定级safe/caution/dangerous扫描定级safe/caution/dangerous下载到隔离区全程写审计日志推荐builtin:推荐builtin:随Hermes出厂,永不扫描永远信任;trusted(仅openai/anthropic允许caution级别通过不推荐community(其他所有任何可疑发现都直接拦截,除非你手动加--force强装这套机制正好接得上Skill投毒这类话题。开放标准带来的红利和风险是一体两面:它让你能白路不明的陌生Skill默认当贼防。我觉得这个边界划得挺清醒。核心建议核心建议实操建议:自己用的话,优先从trustedtap(openai/anthropic/huggingface/NVIDIA)装Skill,这些过了官方背书。从ClawHub这类社区源装之前,花一分钟读一眼SKILL.md正文,尤其看它有没有要求联网、要不要你的密钥、有没有奇怪的命令。隔离扫描挡得住已知的坏模式,但你的常识是最后一道闸。把这一节连起来看:Hermes押注开放标准,换§10一个agent指挥一群agentOneAgentCommandingaSwarmofAgents前面几节里skill一直是一份知识文档,告诉agentΓ这事该怎么做」。这一节里它变成了另一种东西:一根指挥棒。Hermes把ClaudeCode、Codex、OpenHands、OpenCode、Grok全封装成可调用的skill,自己退到后面当总指挥。一个画面:它不写代码,它派活设想你让Hermes实现一个功能。它当然可以自己上手,调terminal、写文件、跑测试。但v0.16.0里它多了在skills/autonomous-ai-agents/这个目录下,源码里躺着四个内置skill。它们不是教HermesΓ怎么写Python」,而是教它怎么调用另一个codingagent帮自己写。CSkill版本它指挥谁去干活 claude-code2.2.0委派编码给ClaudeCodeCLI(做feature/提PR)codexcodex1.0.0委派编码给OpenAICodexCLI opencode1.2.0委派编码给OpenCodeCLI(可挂多个provider) hermes-agent2.1.0配置、扩展、给Hermes本体贡献代码→你Hermes(总指挥)挑一个skilloptional目录里还有更多:OpenHands、Grok的BuildCLI、antigravity-cli。装上之后,Hermes手里就握着一整排可以差遣的codingagent。→你Hermes(总指挥)挑一个skillClaudeCode/Codex/OpenHands…代码/PR交回来为什么要这么干?因为不同的agent各有各的脾气。Claude-native的活交给claude-code,OpenAI-native的拆一个范本:OpenHandsskill长什么样这群编排skill里,OpenHands那份写得最讲究,我想把它拎出来当标本。如果你想知道Γ一个好skil先说它干的事:OpenHands是model-agnostic的,背后能接任何LiteLLM支持的provider,OpenAI、Anthropic、OpenRouter、DeepSeek、Ollama、vLLM都行。所以这个skill的定位很清楚:要Claude原生就走claude-code,要OpenAI原生就走codex,要换着模型玩,才轮到OpenHands。skill开头就把这条选择设计具体做法为什么是范本真实flag给出可用参数表,并标注「verifiedagainstopenhands-help,CLI不是凭记忆瞎写,是对着帮表1.16.0」助文档逐条核对过的负向清单明确写出哪些flag不存在(没有-model/-max-iterations/--workspace/-sandbox)主动告诉调用者「别试这轮试错一整段LiteLLM的噪声warning、banner刷屏、modelslug是LiteLLM的不把踩过的坑全写进去,后来Pitfalls是provider的、pipinstallopenhands-ai装的是错包(那是legacyV0)者直接绕过平台门控 [linux,macos]门控,OpenHands上游在Windows要WSL不兼容的系统上这skill直接隐身,不污染索引调用方式也很克制:通过terminal工具headless调一行openhands-headless-json-override-with-envs-exit-without-confirmation好skill的判据:不在于它写了多少Γ该做什么」,而在于它写了多少Γ别做什么」。负向清单、Pitfalls、Γ什么时候不用我」,这三样才是把一份文档从Γ看着像对的」变成Γ跑起来真的对」的分水岭。一个只列正确步骤的skill,等于一份没经过实战的说明书。OpenHandsskill本质上是一层薄薄的胶水:把agent的意图,翻译成另一个agent听得懂的命令行。skill的会进化的skill:darwinian-evolver编排别的agent是一种玩法,让skill帮你优化东西是另一种。optional的research目录里有个darwinian-evolver,薄封装了Imbue开源的darwinian_evolver,一个LLM驱动的进化搜索循环。它的用法是:你给它一个fitness函数(一个打分器它就用进化的方式去优化某个artifact,可以是一段要分清它和Hermes自带的自进化不是一回事。内置自进化改的是skill库本身;darwinian-evolver改的是你和我自己做的darwinskill是同源的:给定一个客观分数,让机器自己一代代往上爬,比人手调要稳。subprocess调它的命令行,刻意不去import上游的类,这样就只是「调承上启下把这一节往回看一步。前面我们讲skill是怎么被造出来、被改进、被开放标准白嫖来的。到这里,skill显出了当一个skill可以是「调用另一个agent」的封装,一个有意思的问题就浮上来了——如果Hermes能指挥这正是后面Part5要展开的:从delegate_task派一个隔离上下文的子agent,到Kanban看板上一群agent排队认领任务。skill把「调度」这件事变得可调用,多agent编排把它变得可规模化。这一节是那64ToolsandExposureonDemandREADME写着Γ40+tools」,我数源码数出64个。这个差不只是计数口径,它背后藏着一个更有意思的设计:工具越多,越不能一股脑全塞给模型。先把数字数清楚注册项,真正能被模型调用的工具是64个。如果把spotify那套走插件路径注册的也算上,大概71个。不推荐工具集(toolset把工具分组打包的别名。不推荐工具集(toolset把工具分组打包的别名。比如web={web_search,web_extract}。这种约50个。推荐工具(tool模型实际能call的那个函数。比如web_search、terminal、image_generate。这种有64个。五大类,64个工具的全景把这64个工具按职能归一下类,能看清Hermes到底能干什么。我读了toolsets.py和各个工具文件,归成五大类别代表工具能力执行类ute_code、ute_code、read_file、patch、computer_use跑命令、读写文件、改代码。computer_use在后台控制桌面,不抢你的鼠标信息类web_search、web_extract、browser_*(12搜网页、抓内容、开浏览器。browser是大头,光子工具就12个媒体类image_generate、video_generate、video_analyze、text_to_speech生图、生视频、看视频、语音合成。每个只暴露一个统一入口记忆规划类ist、todo、ist、todo、cronjob、session_search跨会话记忆、管Skill、待办、定时任务、翻历史协调类delegate_task、delegate_ta派子agent、多模型混合、看板协调一群agent关键不在多,在Γ该出现时才出现」Hermes的解法是两层门控。第一层是toolset分组,第二层叫progressivetooldisclosure。先说第一层。很多工具不是无条件出现的,它们带一个check_fn门控函数,只在满足运行时条件时才进模型可见的工具列check_fn门控的几个实例:send_message只在网关跑起来时才出现;HomeAssistant那套工具只在你配了HASS_TOKEN时才出现;computer_use只在装了桌面驱动时才出现;kanban那9个看板工具只在被看板调度器派生出来时才出现。没装、没配、没触发,模型就压根看不见它们。还有一处我觉得设计得很聪明的安全收窄。webhook场景下,比如有人提了个PR、发了条评论触发Hermes,内容可能来自不可信的第三方。这种场景Hermes只放出四个最安全的工具(搜索、抽取、看图、澄清本地执行权限一个都不给。因为webhook里的文字可能藏着promptinjection,万一模型被骗去跑terminal就完Progressivetooldisclosure:跟OpenClaw学的一课第二层门控是v0.16.0的新东西,叫progressivetooldisclosure,工具按需暴露。tool_search、tool_describe、tool_call。模型需要时自己搜一下有什么工具、查一下怎么用、再调用。像图模型想做某事tool_search搜可用工具tool_describe查用法→tool_call调用这里有两条让我觉得设计很有分寸的规则。一是核心工具永不延迟,源码原话是ΓAlwaysloadmeansalwaysload.Noexceptions.」最常用的那批工具该全程可见就全程可见,不绕弯子。二是有个阈值门控:当可延迟的工具占context还不到10%时,这套省context的机制本身可不能变成新的负担。最有意思的是源码注释里写的一句话:这个工具目录是无状态的、每轮重建。为什么取了OpenClaw的教训。注意注意OpenClaw曾经踩过一个坑:把工具目录做了session级缓存,结果缓存和实时的工具注册表漂移了,导致工具静默消失。用户以为某个工具还在,模型却看不见了,还不报错。Hermes的注释里直接点名引用了这个回归bug,宁可每轮重建也不缓存,就为了避开同一个坑。带血的经验。这套progressivedisclosure本质上是AnthropicΓ工具按需加载」思路的开源实现,解决的就是工具交付全面插件化:一文件一后端web、browser、image_gen、video_gen这四类,全部拆成了plugins目录下的一文件一后端。想加一个新的生图这块最能说明问题。你只看到image_generate一个工具,但背后挂着5个provider目录:fal、krea、openai、openai-codex、xai。具体走哪个,由配置和可用性自动路由。生视频同理,video_generate一个入Krea2和xAI:插件化带来的两个新成员2Medium大概15到25秒出图,强项是插画、动漫、绘画这类表现性风格。这种另一个更夸张,是xAI。它不是一个普通的provider,而是横跨登录、搜索、生图、生视频、语音的一条龙。xAI接进来的能力具体是什么SuperGrokOAuth登录不用APIkey,订阅直接用x_search搜X上的帖子和线程WebSearchprovider和Brave、Tavily并列的一个搜索后端grok-imagine生图挂在image_gen插件里GrokImagine生视频文生、图生、参考图引导都支持CustomVoicesTTS语音合成加语音克隆我觉得xAI这条线特别值得玩味。它是Γ一个开源age订了SuperGrok,Hermes就帮你把这份订阅的搜索不过有个工程细节我得替Nous说句公道话,他们没偷懒。x_search的返回值里加了一个degraded字段:当你加了账号或日期过滤却拿不到任何引用来源时,它会标degraded=true,等于在告诉你Γ这个答案是这一节想说的回到开头那个64对40的差。它其实是整节的隐喻:工具Hermes的回答是,不要把Γ能力多」直接等同于Γ全暴露给模型」。toolset分组、check_fn门控、progressivedisclosure、插件化交付,这四件事串起来是一个统一的态度——能力可以无限长,但每一刻暴露给模型的,只是此时此地真正用得上的那一小撮。OpenClaw用工具太多掉准确率的坑,Hermes用这套机制绕§12MCP的两个方向MCPinTwoDirections大多数人理解的MCP是单向的:让自己的agent去调别人的工具。Hermes把这件事做成了双向——它既是一个会逛官方商店一键装插件的客户端,也是一个能被ClaudeCode、Cursor反过来调用的服务端。同一个协议,两个方向,这才是这两个月最值得讲的变化。先把Γ方向」这件事说清楚MCP是个连接协议,规定了agent和外部工具怎么对话。绝大多数教程只讲一个方向:你的agent作为client,被当成移动硬盘读(当device)。Hermes同时是host和device。它能调外部的MCPserver,也能把自己变成一↔同一个MCP协议↔方向二Hermes当server被别的agent调方向一Hermes当client调外部server方向一:Hermes作为client去调外部server这是旧版本就有的能力,但底子打得很扎实。源码里读到,它支持三种传输方式(transport对应三种部署形态的server。传输方式跑在哪典型场景stdio本地子进程本机装的工具,启动一个进程通过标准输入输出对话HTTP(StreamableHTTP)远程服务云端托管的MCP,比如Linear这种自带服务的产品SSE远程服务(流式)需要服务端持续推送的长连接场景配置写在~/.hermes/config.yaml的mcp_servers里。连上之后,外部server的工具会被注册进Hermes自per-server还能各自配细节:超时时间、这个server的工具能不能并发调、要不要带Bearer鉴权头、要不要允许server反向发起LLM请求。这些都是给真实生产环境用的螺丝。token自动刷新全都有。这意味着像Linear这种自带OAuth的远程MCP,你本地什么都不用装,agent第一次调中间夹着的事:从Γ自己找」到Γ官方商店」新版本补上了这个缺口,做法是搞了一个Nous官方审核目录。形态和它的skill目录一样:敲hermesmcp进一Γ在目录里=已审核」:进这个官方目录的MCP,都是经过PRreview合进来的。这等于Nous替你做了一道可信筛选,你不用再赌一个陌生的GitHub仓库安不安全。目录里的MCP连接方式特点Linear远程HTTP+原生OAuth2.1本地零安装,hermesmcpinstalllinear,授权即用n8nstdio桥接(gitclone+venv)暴露11个工具,默认只开8个只读的,写操作(激活/停用/读容器日志等)默认裁掉,按需自己开n8n这个默认配置值得多看一眼。它默认关掉了所有开。这是一种「默认最小权限」的设计姿态——先给你看的能力,改的能力你得明确要。这种克到了最新版本,这个目录还搬进了浏览器后台面板。enable/disable直接网页上点,不用再SSH登进服务器改config.yaml。对不想碰命令行的人,这一步挺重要。方向二:Hermes把自己暴露成MCPserver敲一行hermesmcpserve,Hermes会起一个stdio的MCPserver。这时候它不再是调工具的一方,而是被调的一方。ClaudeCode、Cursor、Codex这些本身是MCPclient的工具,可以反过来把Hermes当成一个外部工翻译成人话:你可以在ClaudeCode里,直接读和回你Telegram上和Hermes的对话。Hermes成了一个「会核心建议核心建议源码注释里有句话很有意思,说这套接口Γ对标OpenClaw的9工具MCP桥」,Hermes多给了一个频道列表工具凑成10个。这是开源圈互相借鉴的常态——看到对手做得好的接口形态,照着做一个还更全。写书时这种一手细节比空泛的Γ功能强大」有说服力得多。什么时候用MCP,什么时候用原生工具讲完两个方向,得回答一个实际问题:Hermes里很多外部产品(Spotify、飞书、HomeAssistant这些)是直不推荐用原生工具:①这个集成是Hermes想深度打磨、做到不推荐用原生工具:①这个集成是Hermes想深度打磨、做到极致体验的(Spotify七个工具覆盖播放/设备/歌单,比MCP桥更顺手②需要和Hermes内部机制紧密耦合(比如飞书文档要配合记忆系统);③调用频率高、对延迟敏感,少一层MCP协议开销。推荐用MCP:①这个服务本身已经提供了官方MCPserver(比如Linear自带远程MCP,接上就行,何必重写一遍②你想接的是Γ任意」第三方,数量无上限,不可能一个个写原生工具;③工具集会频繁变动,交给server那边维护更省心。还有一层考虑藏在上一节讲过的progressivetooldisclosure里。MCP接多了,几十上百个工具定义会把模型的§1323个平台与会自生长的Gateway23PlatformsandaSelf-GrowingGateway两个月前这本书写的是Γ6个一级平台、统一Gateway进程」。现在官方口径是23个消息平台。真正变了的其实不是数字,是加一个新平台的方式,从Γ改核心代码」变成了Γ往一个目录里丢个文件夹」。先说那个会被反复念叨的数字:23从Telegram、Discord、Slack、WhatsApp、Signal、SMS、邮件,到钉钉、飞书、企业微信、讯元宝,再到MicrosoftTeams、GoogleChat、LINE、Matrix、HomeAssistant,最后到第23个ntfy。你能想源码里另外还躺着IRC、APIServer、Webhook这些接入通道。真去数源码里能跟人对话的adapter,至少有24平台进来的版本官方计数GoogleChatv0.13.0第20个LINE+SimpleXChatv0.14.0累计到22个MicrosoftTeams(端到端打通)v0.14.0—ntfyv0.15.0(2026.5.28)第23个从Γ改核心」到Γ丢文件夹」旧书那个版本,加一个平台是件挺重的活。你得去核心代码里改一堆if/elif分支:消息进来要判断它从哪个平台v0.16.0的做法不一样了。核心有个叫PlatformRegistry的注册表(在gateway/platform_registry.pyplugins/platforms/目录,一个平台一个文件夹,里面放一个plugin.yaml和一个adapter.py。插件启动时调用ctx.register_platform()新建一个文件夹写adapter+plugin.yaml自注册进Registry→核心代码一行不改官方文档里那句话说得很直接:插件路径ΓrequireszerochangestocoreHermescode」。adapter创建、配置解析、用户授权、cron投递、消息路由、系统提示、状态展示、安装向导,这一整套插那一个平台到底要给Registry交代清楚哪些事?这就是PlatformEntry这个数据结构干的活。它把ΓGateway字段字段它解决什么问题 max_message_length这个平台单条消息最长多少,超了自动智能分块 pii_safe会话描述要不要脱敏(比如SMS的电话号码别明文显示) platform_hint注入系统提示的平台指引,比如告诉AgentΓ你现在在IRC上,别用markdown」 standalone_sender_fncron任务和Gateway不在同一个进程时,临时开个连接把消息发出去 apply_yaml_config_fn让插件自己解析自己的配置,核心config.py不必懂每个平台的schema这条线和这本书的主线Γ缰绳会自己长」是呼应的。一个细节:Discord、HomeAssistant、Mattermost这几个,在老的内建枚举里有,在新的插件目录里也有同名。这不是bug,是历史内建平台正一个个迁成插件的痕迹。新架构留了条兼容路:查不到注册表,就回落老路径。平台越加越多,启动反而越来越快现在改成了用到才加载。配合v0.14.0砍掉约19秒冷启动、v0.15.0每次对话少调用47%的函数,整ΓTelegram开始,Discord继续」——这句话得改Discord能接着聊。听起来很魔法。agent:main:{platform}:dm:{chat_id}agent:main:{platform}:{chat_type}:{chat_id}1同一个Agent,同一套记忆和Skill2跨平台发消息时做transcript镜像3桌面App还能跨profile引用会话新出的桌面App里可以用@session直接引用另一个会话,把不同来源的对话串起来。注意注意写这一章时我

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论