当前位置:首页>java>写了 20 年代码的 Steve Yegge,开始用 AI 指挥“一座城”:你的 AI 编码到哪一层了?

写了 20 年代码的 Steve Yegge,开始用 AI 指挥“一座城”:你的 AI 编码到哪一层了?

  • 2026-02-06 20:17:29
写了 20 年代码的 Steve Yegge,开始用 AI 指挥“一座城”:你的 AI 编码到哪一层了?
最近一段时间,我一直在研究一个人:Peter Steinberger
如果你关注 AI Agent、AI Coding,大概率已经听过他的名字。
Clawdbot / Moltbot 背后的那个人,一个已经赚到 8 亿美金,却选择重新写代码的人
这段时间,我围绕他写了几篇文章,也算是一次持续追踪式的研究:
这个月 29 号,他又参加了一场非常深度的博客访谈。我把整期播客从头到尾听完,也写了完整解析:
但说实话,真正触动我的,并不是他讲了什么方法论,而是:
在持续研究 Steinberger 的过程中,我开始不断地反思自己。
去年,我把一个很久没动过的 GitHub 老账号重新拿了出来,给自己定了一个目标:Build in Public
这是 Peter 的 GitHub Activity。
这是我的。
没有比较之前,,我甚至还有点被去年的自己感动——几乎没有休息日,每天思考、每天反思、每天试图推翻昨天的自己。
我其实并不太在意 commit 数量,很多时候是尽量把改动合成一个提交的。我一直对那种为了堆代码行数、刷提交数量而提交的行为非常警惕,甚至是反感的。
年中,行业开始热烈讨论Spec Driven AI Coding 。但说实话,在那之前我已经实践了很久。后来云老师 Jesse 给我推荐了 Kiro,我用 YOLO 模式折腾了几天,很快发现:我驾驭不了
花时间、花钱,还直接拖慢了项目进度。折腾了一周之后,我停下来了。
下面是一片我写的和我翻译的文章
于是问题又回到了原点
AI Coding,究竟怎样才能真正提效?数量质量心力,如何同时推进?
也正是在这个反思过程中,我看到了 Steve Yegge 的那篇文章和他的新项目。
读完之后,我觉得非常有意思,也非常值得拿出来和大家一起讨论。
于是,就有了这篇文章。
━━━━━━━━━━━━━━━━━━━━
👤 作者:Steve Yegge(前Geoworks、亚马逊、谷歌、Grab、Sourcegraph工程师)
📅 发布时间:2026年1月
💡 摘要:
技术行业资深老兵Steve Yegge在2026年开年带来了他的最新项目——Gas Town。这是一个革命性的AI编码代理编排系统,旨在解决管理多个Claude Code实例的痛点。通过创新的"工作分子化"理念和GUPP(Gas Town通用推进原则),Gas Town让开发者能够同时高效管理20-30个AI编码代理,将软件开发转变为工业化的工作流工厂。
在这篇深度长文中,Yegge详细解释了Gas Town的设计哲学、核心架构、工作流程,以及为什么这个系统代表了AI辅助编程的下一个前沿。
━━━━━━━━━━━━━━━━━━━━

01

🎯 什么是Gas Town?
图1:欢迎来到Gas Town
🔥 Gas Town到底是什么?
[Gas Town](https://github.com/steveyegge/gastown)是2026年IDE的新范式。它帮助您处理运行多个Claude Code实例的繁琐工作。当您同时使用多个AI编码代理时,东西会丢失,很难跟踪谁在做什么等等。Gas Town解决了所有这些"修修补补"的问题,让您专注于Claude Code正在处理的工作。
对于这篇博客文章,"Claude Code"指的是"Claude Code及其所有外观相似的竞争对手",即Codex、Gemini CLI、Amp、Amazon Q-developer CLI等等,因为它们本质上都是克隆品。整个行业就像一个尴尬的小孩足球队,追逐着2025年Claude Code的CLI形态,而不是构建下一个时代的产品。
所以我继续前进,构建了下一个时代的产品。首先我在三月份的[《初级开发者的复仇》](https://sourcegraph.com/blog/revenge-of-the-junior-developer)中预测了它。我预测有人会把Claude Code的骆驼绑在一起变成战车,而这就是我用Gas Town所做的。我已经驯服了它们,让您可以同时高效地使用20-30个代理,持续运行。
Gas Town是有主见的——很像Kubernetes或Temporal,Gas Town与这两者都有相似之处,至少如果您眯着眼睛看直到几乎完全闭上时是这样。我会在文章末尾包括与k8s和Temporal的比较。尽管它们的基础完全不同,但相似之处还是有点令人惊讶。
但这个比较应该作为一个警告:Gas Town很复杂。不是因为我希望它复杂,而是因为我必须不断添加组件,直到它成为一个自持机器。而它现在拥有的部件,嗯,看起来很像Kubernetes和Temporal交配后生下的非常丑陋的宝宝。
但它确实有效!Gas Town轻松解决了[MAKER问题](https://arxiv.org/abs/2511.09030)(20盘汉诺塔),您可以从公式生成百万步的"轻雾"(wisp)。昨晚我为了好玩在几分钟内运行了10盘版本,只是为了证明一千步不是问题(MAKER论文说LLM在几百步后就会失败)。20盘的轻雾大约需要30小时。感谢参加我的TED演讲。
如果您能看完接下来的23页,这一切都会变得完全合理。
━━━━━━━━━━━━━━━━━━━━

02

📜 Gas Town并非秘密
在《初级开发者的复仇》之后,我全年四处旅行,大声告诉每个人需要构建什么,我指的是每个人。我对此并不害羞。我会宣布:"编排器是下一个!"每个人都会慢慢点头,深思熟虑地皱眉说:"嗯。"
我去了像Temporal和Anthropic这样公司的高级人员那里,告诉他们应该构建一个代理编排器,Claude Code只是一个构建块,未来将是AI工作流和"代理的Kubernetes"。我在多个活动上登台描述了我对编排器的愿景。我去了所有地方,见了所有人。
"它将像Kubernetes,但是为Agent设计的,"我说。
"它必须有多个级别的代理来监督其他Agent,"我说。
"它将有一个合并队列,"我说。
"它将编排工作流,"我说。
"它将有插件和质量门,"我说。
我为此说了很多话,持续了几个月。但是,该死的,我们甚至无法让人们使用Claude Code,更不用说考虑同时使用10到20个了
所以在八月,我开始构建自己的编排器,因为似乎没有人在乎。最终它失败了,我把它扔掉并开始v2,这个也失败了,但我们从中学到了[Beads](https://github.com/steveyegge/beads)。然后是v3(Python Gas Town),这个持续了六到八周。
Gas Town(Go版本)是我在2025年第四个完整、可运行的编排器。我如何达到Gas Town的故事很有趣,但我们留到下次再说。不幸的是,这篇文章已经足够长了(25页以上!),只是告诉您它如何工作的最基础知识。我们可以稍后再讲背景故事。
但是首先,在我们深入Gas Town的操作之前,我需要快速摆脱您。
━━━━━━━━━━━━━━━━━━━━

03

⚠️ 警告危险注意

04

🚫 滚出去

05

💀 你会死
让我们谈谈一些您不应该使用Gas Town的原因。我可以想到更多,但这些应该足够了。
首先,代码库还不到3周。在"抛光钻石"到"未切割原石"到"我刚在屁股里走私了400英里上游"的尺度上,我将Gas Town描述为"您可能还不想使用它"。它需要一些消毒剂。它也是100%氛围编码的。我从未看过代码,也永远不想看,这可能会让您犹豫。当然,我也从未看过[Beads](https://github.com/steveyegge/beads),这是22.5万行Go代码,每天有成千上万的人在使用。我十月份才创建了它。如果这让您感到不舒服,现在就走
其次,您真的、认真地还没准备好。让我们谈谈2024-2026年程序员的进化,如图2所示:
图2:开发者到AI的8个进化阶段
首先,您应该在图表上定位自己。在您的AI辅助编码旅程中,您处于哪个阶段?
第1阶段:零或接近零AI:可能使用代码补全,有时问Chat问题
第2阶段:IDE中的编码代理,权限开启。侧边栏中的窄编码代理请求您运行工具的权限。
第3阶段:IDE中的代理,YOLO模式:信任度上升。您关闭权限,代理变得更宽。
第4阶段:IDE中,宽代理:您的代理逐渐增长填满屏幕。代码只用于差异比较。
第5阶段:CLI,单代理。YOLO。差异滚动而过。您可能看也可能不看它们。
第6阶段:CLI,多代理,YOLO。您经常使用3到5个并行实例。您非常快。
第7阶段:10+个代理手动管理。您开始触及手动管理的极限。
第8阶段:构建自己的编排器。您处于前沿,自动化您的工作流。
如果您至少没有达到第7阶段,或者可能第6阶段且非常勇敢,那么您将无法使用Gas Town。您还没准备好。Gas Town是一个由超智能机器人黑猩猩操作的工业化编码工厂,当它们愿意时,它们可以瞬间毁掉您的一切。它们会毁掉其他黑猩猩、工作站、客户。如果您还不是经验丰富的黑猩猩驯兽师,它们会撕掉您的脸。所以不行。如果您有任何疑问,那么您不能使用它。
在Gas Town中高效工作需要投入氛围编码。工作变得流动,成为一种不可计量的物质,您可以自由地抛掷,就像在码头上把闪亮的鱼倒进木桶里。大部分工作完成了;有些工作丢失了。鱼从桶里掉出来。有些逃回海里,或者被踩到。更多的鱼会来。重点是吞吐量:以思考速度进行创建和修正。
图3:氛围编码的混乱
Gas Town中的工作可能是混乱和马虎的,这就是它得名的原因。有些错误被修复了2或3次,有人必须选出获胜者。其他修复丢失了。设计消失需要重做。这没关系,因为您正在无情地推进巨大的、巨大的工作堆,Gas Town既在生成也在消耗这些工作。您可能不是100%高效,但您正在飞翔
在Gas Town中,您让Claude Code做它的事。您是产品经理,Gas Town是想法编译器。您只需构思功能,设计它们,提交实施计划,然后将工作抛给您的polecat和crew。Opus 4.5可以处理任何合理大小的任务,所以您的工作就是为它创建任务。就这样。
除此之外,您还必须帮助保持Gas Town运行。它大部分时间都运行得很好,但经常出问题。需要您和工作人员付出很多努力才能让它平稳运行。这完全是一个需要手把手的编排系统。
如果您不能那样工作,那么您到底还在这里做什么?回到您的IDE并就地避难。Gas Town对您不安全。
Gas Town也贵得要命。如果您曾经需要思考钱从哪里来,哪怕是一瞬间,您也不会喜欢Gas Town。我终于不得不开了第二个Claude Code账户;他们不让您从单个账户无限制地吸钱,所以您需要多个电子邮件和吸管,这都很愚蠢。我的计算显示,现在Gas Town终于实现了起飞,我下周结束前将需要第三个Claude Code账户。这是一个吞金兽。
Gas Town使用tmux作为其主要UI。我不得不学习tmux。这比我想象的要容易,而且更有用。3周后,我爱上了tmux。您将不得不学习一点tmux。或者,您可以等到有人为Gas Town编写更好的UI。更好的UI会来的。但tmux是您现在拥有的。而且值得学习。
图4:市长tmux状态行
无论喜欢与否,Gas Town建立在Beads之上。它实际上是Beads的续集:我的《帝国反击战》对Beads的《星球大战》。Gas Town没有"替代后端"。Beads是Gas Town中发生的一切的通用Git支持数据平面(以及控制平面)。您必须使用Beads才能使用Gas Town。
您可能不喜欢Beads。如果您认为Beads过于有主见,那您就等着瞧吧。Gas Town是我走进AI辅助编码的公众意见教堂,抬起腿,放出一个将在全世界闻到的屁。
你们中的许多人可能会对我的品牌感到恶心。但我怀疑你们中的一些人会喜欢成为超级英雄,以至于愿意忽略Gas Town的怪癖,按照我的方式看待它。这就是工作应该完成的方式。它已经是最好的方式,而且会变得更好。
Gas Town设计为今年在三个维度上扩展:(1)模型认知,(2)代理变得更加Gas Town友好,以及(3)Gas Town和Beads进入前沿模型的训练语料库。即使没有所有这些,代理如此轻松地使用Beads和Gas Town已经够令人震惊了。零训练。
但现在呢?它就像一个19世纪末的工厂,机器可以在您不小心时剖开您的肚子。
好了!这是不使用Gas Town的六七个充分理由。如果我还没有摆脱您,那么我猜您是疯狂者之一。坚持住。这将是一次漫长而复杂的旅程。我尝试了超级自上而下的方法,并尽可能简化,但这有点像教科书。
我很抱歉。但为我辩护的是,Gas Town太有趣了。我做过的最好的东西。
让我们深入。
━━━━━━━━━━━━━━━━━━━━

06

图5:Gas Town的工作者角色
Gas Town工作者是常规的编码代理,每个都被提示扮演七个明确定义的工作者角色之一。我将简要介绍一些其他关键概念,如Towns和Rigs。
关于Gas Town需要提前知道的一件事:它会优雅降级。每个工作者都可以独立工作,或以小组形式工作,任何时候您都可以选择运行Gas Town的哪些部分。它甚至在"无tmux"模式下也能工作,并使用裸Claude Code会话(没有实时消息)蹒跚前行。有点慢,但仍然有效。
七个Gas Town角色都协同工作以帮助保持Gas Town运行。有时也需要您的帮助;Gas Town运行在等量的汽油和努力上。
以下是关键角色和概念:
🏙️ 城镇(The Town):这是您的总部。我的是`~/gt`,我所有的项目钻机都在它下面:gastown、beads、wyvern、efrit等。城镇(Go二进制文件`gt`)管理并编排您所有钻机上的所有工作者。您将它保存在一个单独的仓库中,主要是为了配置。
🏗️ 钻机(Rigs):您置于Gas Town管理下的每个项目(git仓库)都称为钻机。一些角色(Witness、Polecats、Refinery、Crew)是每个钻机的,而其他角色(Mayor、Deacon、Dogs)是城镇级别的角色。`gt rig add`和相关命令在Gas Town框架内管理您的钻机。钻机很容易添加和移除。
👤 监督者(The Overseer):那就是您,人类。我在图片中为您画了一些眼妆。作为监督者,您在系统中有身份,有自己的收件箱,可以发送和接收城镇邮件。您是老板,头头,大人物。
🎩 市长(The Mayor):这是您大部分时间交谈的主要代理。它是您的礼宾员和参谋长。但如果市长忙,所有其他工作者也都是Claude Code,所以它们都非常聪明和乐于助人。市长通常启动您的大部分工作车队,并在完成时接收通知。
😺 Polecats:Gas Town是一个工作群集引擎。Polecats是按需启动的临时每钻机工作者。Polecats工作,通常以群集形式,生成合并请求(MRs),然后将它们交给合并队列(MQ)。合并后,它们完全退役,尽管它们的名称被回收。
🏭 精炼厂(Refinery):一旦您开始群集工作者,就会遇到合并队列(MQ)问题。您的工作者会就变基/合并陷入猴子刀战,可能会变得丑陋。基线在群集期间可能变化如此之大,以至于最终合并的工作者试图合并到一个无法识别的新头部。它们可能需要完全重新构想其更改并重新实施。这就是精炼厂的工作:负责智能合并所有更改(一次一个)到主分支的工程师代理。不能丢失任何工作,尽管允许升级。
🦉 见证者(The Witness):一旦您启动足够多的polecats,您会意识到需要一个代理来监视它们并帮助它们摆脱困境。Gas Town的推进(GUPP)有效,但现在还有点不稳定,有时您需要去催促polecats提交它们的MRs,然后催促精炼厂处理它们。见证者巡逻帮助平滑这一点,使其在大多数运行中几乎完美。
🐺 执事(The Deacon):执事是守护进程信标。它以《水世界》中Dennis Hopper扮演的角色命名,该角色灵感来自《疯狂的麦克斯》宇宙中的Lord Humungus角色,使其成为跨界。执事是一个巡逻代理:它循环运行"巡逻"(明确定义的工作流)。Gas Town有一个守护进程,每隔几分钟ping一次执事并说:"做你的工作。"执事智能地将这个DYFJ信号向下传播给其他城镇工作者,确保Gas Town保持运行。
🐶 狗(Dogs):灵感来自Mick Herron的MI5 "Dogs",这是执事的个人团队。与polecats不同,狗是城镇级别的工作者。它们做诸如维护(清理陈旧分支等)和为执事偶尔做杂工的事情,比如运行插件。执事的巡逻职责过载,需要助手,所以我添加了狗。这使执事专注于完成巡逻,而不是陷入某个步骤的泥潭。执事将工作抛给狗,它们处理繁琐的细节。
🐕 启动狗(Boot the Dog):有一只名叫Boot的特殊狗,每5分钟被守护进程唤醒一次,只是为了检查执事。这是它唯一的工作。Boot存在是因为守护进程不断用烦人的心跳和鼓励性谈话打断执事,所以现在狗听到了它。Boot决定执事是否需要心跳、推动、重启,或者只是被留下不管,然后回去睡觉。
👷 船员(The Crew):尽管在列表中最后,船员是您个人使用最多的代理,仅次于市长。船员是为监督者(您)工作的每钻机编码代理,不受见证者管理。您选择它们的名称,它们有长期身份。您可以启动任意多个。tmux绑定让您可以用`C-b n/p`为每个钻机循环遍历船员。船员是您以前使用的任何工作流的直接替代品。它只是一堆命名的claude code实例,可以接收邮件并抛掷工作。船员非常适合设计工作等工作,有很多来回。它们很棒。您会爱您的船员。
━━━━━━━━━━━━━━━━━━━━

07

📬 邮件和消息传递
[Beads](https://github.com/steveyegge/beads)是Gas Town中的工作原子单位。Bead是一种特殊的问题跟踪器问题,具有ID、描述、状态、分配者等。Beads存储在JSON中(每行一个问题)并与您的项目仓库一起在Git中跟踪。城镇邮件和消息传递(事件)使用Beads,其他类型的编排也使用。
Gas Town有一个两级Beads结构:钻机Beads和城镇Beads。
图6:两层Beads流程
Gas Town中有两级工作在进行:钻机级别和城镇级别。
  • 钻机级别工作是项目工作:使您的项目更好。功能、错误修复等。这项工作在polecats和crew之间分配,其他工作者偶尔介入。
  • 城镇级别工作是编排,包括巡逻(要遵循的长步骤串,编码为链接的Beads)和一次性工作流,如发布或生成跨钻机代码审查波。
这两种工作都使用Beads,两者之间有一些重叠。大多数情况下,它相当灵活,您在何处提交问题或实例化工作并不重要。所有工作者都了解Gas Town,如果您从错误的钻机给它们工作,它们会相当冷静。
所有钻机级别工作者(精炼厂、见证者、polecats和crew)在需要时完全能够跨钻机工作。有一个`gt worktree`命令,它们可以用来获取任何钻机的自己的克隆并进行修复。但通常它们在一个项目内工作。
Beads有跨钻机路由。Gas Town配置Beads根据问题前缀(如"bd-"或"wy-")将`bd create`和`bd show`等请求路由到正确的数据库。所有Beads命令在Gas Town中几乎任何地方都有效,并找到正确的位置放置它们,如果不是,移动Beads很容易。
📝 关于《疯狂的麦克斯》主题的说明
Gas Town就是Gas Town。它始于《疯狂的麦克斯》主题,但都不太强。没有角色是该系列中的适当名称,而且我正在从其他来源引入主题,包括Slow Horses宇宙、《水世界》、《猫的摇篮》、《绝命毒师》(您很快就会看到),显然还有《柳林风声》,来自Nano Banana的绘画。
如果有人曾经为此给我发送C&D信,Gas Town将智能章鱼变形为Gastown,以美丽的加拿大不列颠哥伦比亚省温哥华的Gastown区命名,我们的polecats将只是在不同的杆子上。
长话短说,"Gastown"也是指代项目的正确方式。说到这里...
━━━━━━━━━━━━━━━━━━━━

08

⚙️ Gastown通用推进原则(GUPP)
GUPP是保持Gas Town运行的原因。Claude Code的最大问题是它结束了。上下文窗口填满,它耗尽了蒸汽,然后停止。GUPP是我对这个问题的解决方案。
GUPP简单地说:如果您的钩子上有工作,您必须运行它
所有Gas Town工作者,在所有角色中,在Beads中都有持久身份,这意味着在Git中。工作者身份类型由角色Bead表示,这类似于描述角色的域表。每个工作者都有一个代理Bead,这是代理的持久身份。
角色Beads和代理Beads(以及钩子)都是"固定Beads"的例子,意味着它们像黄色便签一样漂浮在Beads数据平面中,永远不会像常规问题那样关闭(除非身份消失)。它们不会出现在`bd ready`(就绪工作)中,并在其他各种方面被特殊处理。
在Gas Town中,代理不是会话。会话是临时的;它们是Kubernetes"宠物vs牛"比喻中的"牛"。Claude Code会话是Gas Town投向持久工作的牛。所有这些工作都存在于Beads中,连同工作者的持久身份、邮件、事件系统,甚至临时编排,正如我们将看到的。
在Gas Town中,代理一个Bead,一个具有单例全局地址的身份。它有一些插槽,包括指向其角色Bead的指针(具有该角色的引导信息等)、其邮件收件箱(所有Beads)、其钩子(也是一个Bead,用于GUPP)以及一些管理内容,如编排状态(标签和注释)。该代理所做的一切历史都记录在Git和Beads中。
那么什么是钩子?每个Gas Town工作者都有自己的钩子🪝。它是一个特殊的固定Bead,只为该代理,是您挂分子(Gas Town工作流)的地方。
图7:GUPP,Gastown通用推进原则
东西如何挂在那里?当然是用`gt sling`。您将工作抛给工作者,它放在它们的钩子上。您可以立即启动它们,或推迟,甚至让它们先重启。我们稍后会讨论所有这些。将工作抛给它们意味着您可以处理其他事情,它们将继续。
关于Gas Town最简单但最伟大的事情之一是,在任何会话中的任何时间,您可以说"让我们交接",工作者将优雅地清理并重新启动自己。由于GUPP,如果代理被钩住,它将自动继续工作。
不幸的是,Claude Code如此令人痛苦地有礼貌,以至于GUPP在实践中并不总是有效。我们告诉代理,您必须运行您的钩子,它有时什么都不做。它只是坐在那里等待用户输入。
所以我们有一个变通方案。
🔄 GUPP推动
Gas Town工作者被提示遵循"物理优于礼貌",并告诉在启动时查看它们的钩子。如果它们的钩子上有工作,它们必须在不等待的情况下开始工作。
不幸的是,在实践中,Claude Code通常等到您输入某些内容——任何内容——然后才检查其邮件和钩子,报告并开始工作。有时会,有时不会。随着时间的推移这会变得更好,但现在,有时需要推动一下。
因为Gas Town工作者并不总是遵循GUPP,所以有各种系统会在大约30到60秒后推动代理。有时更快,有时更慢。但如果城镇正在运行且不静止,它总会在5分钟左右得到推动。
代理通过`gt nudge`获得启动推动,这是Gas Town的核心实时消息传递命令,向工作者(或整个频道)发送tmux通知。它解决了`tmux send-keys`的一些去抖问题,并确保工作者接收到通知,就像用户键入一样。这将工作者踢入读取邮件和钩子,并采取行动。
随着Gupp推动"黑客"就位,以及从执事向下的分层心跳,GUPP通常嗡嗡作响,并保持Gas Town运行,只要有工作可用。车队启动、完成并着陆而无需干预。工作者跨会话继续分子。如果您提供足够的工作,Gas Town可以整夜工作。
👻 与您的已故祖先交谈
GUPP推动导致了一个有趣的功能`gt seance`,它允许Gas Town工作者直接与其角色的前任沟通。即现任市长可以与上一任市长交谈,等等。它们借助Claude Code的`/resume`功能做到这一点,该功能让您重新启动您杀死的旧会话。
这很有用,因为通常工作者会说:"好的,我把这堆工作和建议交给了我的继任者!再见!`/handoff`",然后消失,然后新的工作者会启动并说:"什么?我什么都没看到。"您曾经不得不笨拙地找出哪个会话是前一个,在您最近的40多个会话中,所有这些都以"让我们开始"开头,因为您一直在手动进行GUPP推动。这真的很尴尬,几乎不值得。
`gt seance`出现的方式是:您在推动中告诉代理什么并不重要。因为它们的提示如此严格地关于GUPP和Gas Town的操作理论,以及它们在机器中作为齿轮的重要性,等等等等,代理将完全忽略您键入的任何内容,除非您直接覆盖它们的钩子指令。
图8:使用\`gt seance\`与已故祖先交谈
所以您只需要说"嗨",或"Elon Musk说月亮是绿奶酪做的",或"做您的工作",代理就会运行钩子。
我一周前的想法是:既然我们必须推动所有会话,我决定在推动中包含Claude Code的`session_id`(以及Gas Town角色和PID)。这为每个`/resume`会话提供了独特且有用/可发现的标题。
使用`gt seance`,工作者实际上会在子进程中启动Claude Code,使用`/resume`恢复其前任,并问它:"你留给我的东西到底在哪里?"
好时光,我告诉您。Gas Town是好时光。
我想现在可能是时候谈谈MEOW堆栈了。我想您已经准备好了。
━━━━━━━━━━━━━━━━━━━━

09

🐱 工作分子表达(MEOW)
Gas Town是深冰山的尖端。Gas Town本身可能不会活过12个月,但Gas Town的骨架——MEOW堆栈——可能会持续几年。这感觉更像是一个发现而不是发明。
图9:工作分子表达(MEOW)
首先是Beads。十月,我沮丧地告诉Claude将我所有的工作放在轻量级问题跟踪器中。我想要Git。Claude想要SQLite。我们妥协了两者,Beads诞生了,大约15分钟的疯狂设计。这些是基本工作单位。
不久之后出现了史诗(Epics):具有子级的Beads,这些子级本身也可以是史诗。这给您很多灵活性来构建自上而下的计划。史诗的子级默认是并行的,但您可以在它们之间放入显式依赖关系以强制排序。史诗允许创建"倒置"计划,其中最后要做的事情是根,首先要做的事情是史诗树的叶子。有点丑,但AI可以很好地解决。
接下来是分子(Molecules)。我在12月17日有这个想法,从澳大利亚回来几天后。我对前两个编排器的工作让我想要将代理工作分解为排序的小任务,它们必须像TODO列表一样检查。它们已经这样做了,但我想提前做,以便我可以提前设置数小时的工作,它们将以正确的顺序原子性地执行。
换句话说,分子是工作流,用Beads链接。它们可以有任意形状,不像史诗,并且可以在运行时缝合在一起。
然后我提出了原分子(protomolecules),它们像类或模板——由实际的Beads组成,所有指令和依赖关系提前设置,整个模板问题图(例如简单的一个中的"设计"、"计划"、"实施"、"审查"、"测试"),您将实例化为分子。实例化涉及复制所有原分子Beads并对其执行变量替换以创建真实工作流。
示例:我有一个20步的Beads发布流程。代理过去常常努力完成它,因为它有很长的等待状态,例如等待GitHub Actions完成、CI完成以及各种工件部署。我不得不催促代理完成,它们总是跳过步骤。
有了分子,想法是:为发布步骤创建20个Beads,以正确的顺序链接它们,并让代理遍历链,一次一个问题。一个额外的好处是它会自动生成活动源,因为它们声明并关闭问题。
如果工作流被捕获为分子,那么它可以在代理崩溃、压缩、重启和中断中幸存。只需在相同的沙箱中启动代理,让它找到在分子中的位置,并从它离开的地方继续。
原分子很棒。Claude坚持《The Expanse》参考,确保我们将被几乎所有主要工作室起诉。但我们很快发现需要宏扩展阶段,以便正确组合具有循环和门的分子。所以我想出了工作流的源形式,公式(Formulas),采用TOML格式,它们被"烹饪"成原分子,然后实例化为Beads数据库中的轻雾或分子。
公式为您提供了一种描述和组合几乎所有知识工作的方法。我正在建立一个名为Mol Mall的市场。请继续关注。
图10:公式和烹饪
最后,我需要一个词来表示"分子化工作"——代理可以一次选取和完成步骤的形式。这是您可以组合在一起的工作,分子与其他分子结合,您可以提前为整个巨大项目设置依赖关系,并让Gas Town在周末群集它,无人值守,如果您足够勇敢的话。
所有世界工作分子的术语是"汽油(guzzoline)",尽管我们在文档中不经常使用它。这只是Gas Town的一个习语,有点像War Rig,这是给定钻机对跨钻机车队的贡献。您会不时听到它,但它不是日常命名的重要部分。
━━━━━━━━━━━━━━━━━━━━

10

🔄 非确定性幂等性
Gas Town基于我称为非确定性幂等性(NDI)的原则运行。它类似于Temporal的确定性、持久重放,但Gas Town通过完全不同的机制实现其持久性和保证执行。
图11:非确定性幂等性
在Gas Town中,基于MEOW堆栈操作,所有工作都表达为分子。其中有一点代数,这是我在过去两周发现的。分子是工作流。它们可以有复杂的形状、循环和门,实际上是图灵完备的。工作流的每个步骤都由超智能AI执行。
因为AI非常擅长遵循TODO列表和验收标准,它们在遵循分子方面是可靠的。它们理解GUPP的概念,并且理解检查问题(无论多么琐碎)的官僚主义更新实时活动源并将工作放在永久分类账上。这种推理足以让它们在执行时保持嗡嗡作响并处于正轨。它们不会"无聊",并且犯错误的可能性要小得多,因为它们不管理自己的TODO列表(除非在单个小步骤内)。
这意味着分子工作流是持久的。如果分子在代理的钩子上,那么:
  1. 代理是持久的:由Git支持的Bead。会话来来去去;代理留下。
  2. 钩子是持久的,也是由Git支持的Bead。
  3. 分子是持久的——Beads链,也在Git中。
所以Claude Code是否崩溃或上下文耗尽并不重要。只要为此代理角色启动另一个会话,它将立即开始处理该分子中的步骤(通过GUPP,或当被某个巡逻代理推动时)。如果它发现它在最后一步中间崩溃了,没什么大不了的,它将找出正确的修复方法,执行并继续。
所以即使路径完全是非确定性的,结果——您想要运行的工作流——最终完成,"保证",只要您不断向它投掷代理。代理甚至可能在此过程中犯错,但可以自我纠正,因为分子的验收标准大概由设计分子的人明确指定。
有很多边缘情况。这个NDI描述是过度简化的。Gas Town不是Temporal的替代品。请咨询您的医生,Gas Town是否适合您。但Gas Town确实提供了对于开发工具足够好的工作流保证!如果您是我!
💨 轻雾:临时编排Beads
我们的教科书中可能还有一些其他角落需要涉及。大多数时间,您不关心这些东西,您关心车队的启动和完成,以及观看您的活动源和仪表板。但Gas Town的分子"化学"有很多丰富的角落,在编排中积极使用。
12月21日的一个关键扩展发明是轻雾(Wisps),它们是临时的Beads。它们在数据库中,获得哈希ID,并像常规Beads一样行动。但它们不写入JSONL文件,因此不持久化到Git。在运行结束时,轻雾被"燃烧"(销毁)。可选地,它们可以被压缩成单行摘要/摘要并提交到git。
轻雾对于高速度编排工作流很重要。它们是Gas Town工作的气相。所有巡逻代理——精炼厂、见证者、执事、Polecats——为每个巡逻或工作流运行创建轻雾分子。它们确保工作流以事务方式完成,但不会用编排噪音污染Git。
🚓 巡逻
巡逻是巡逻工作者(特别是精炼厂、见证者和执事)运行的临时工作流。
图12:Gas Town的巡逻
巡逻是代理循环运行的临时(轻雾)工作流。巡逻具有指数退避:如果代理在其巡逻步骤中找不到工作,它将逐渐进入睡眠状态,等待越来越长的时间才开始下一次巡逻。任何变异的`gt`或`bd`命令都会唤醒城镇,或者您可以用`gt`命令自己做,启动个别工作者、组、钻机或整个城镇。
精炼厂的巡逻相当简单。它有一些预检步骤来清理工作空间,然后处理合并队列,直到它为空,或者需要回收会话。当它准备好交接时,其分子中有一些飞行后步骤。我正准备向精炼厂的巡逻添加插件,但它们还不存在。当我添加它们时,您将能够添加插件来干扰MQ并尝试智能地重新排序它,并将Gas Town的后端连接到其他系统。
见证者的巡逻更复杂一些。它必须检查polecats和精炼厂的状况。它还窥探执事,只是为了确保它没有卡住。见证者运行钻机级别插件。
执事的巡逻有很多重要的职责。它运行城镇级别插件,这些插件可以提供全新的UI或功能。执事还参与`gt handoff`和回收代理会话的协议,并确保一些工作者被正确清理。执事的巡逻变得足够复杂,以至于我添加了狗作为助手,执事的个人团队。现在它被提示将复杂工作和调查交给狗,以便长时间的巡逻步骤不会干扰城镇的核心事件系统,该系统是协作和基于邮件的。
🔌 Gas Town插件
Gas Town将插件定义为"来自代理的协调或调度关注"。Gas Town工作者运行工作流(通常在巡逻循环中),任何工作流都可以包含任意数量的"运行插件"步骤。
Gas Town的执事巡逻运行城镇级别插件,现在用狗运行,所以它们可以运行几乎无限的时间。我们对定时器和回调有一些支持,但主要是生命周期钩子。我还没有对这个子系统投入大量设计思考,所以如果您想开始使用插件系统,请告诉我,我们可以解决。
我计划在Gas Town中实现大量附加功能作为插件。它们只是没有进入v1发布。它们可能最终成为Mol Mall中的公式。
图13:Gas Town的轻量级插件
━━━━━━━━━━━━━━━━━━━━

11

🚚 车队 🚚
好的,呼。您做得很好。我们涵盖了很多理论,这尤其困难,因为它是我在过去3周从屁股里拉出来的一堆废话,我以獾等东西命名它。但它有一种优雅的一致性和连贯性。基于Git数据平面中黄色小便签的工作流编排,作为连接工作海洋中的图节点。
呸!没人在乎,我知道。您想超级快速地完成任务,仅受限于您的令牌吸收速度。让我们谈谈如何实现。
Gas Town中的所有工作,所有工作,都汇总到一个车队中。
图14:车队CLI显示
车队是Gas Town的票据或工单系统。
车队是一个特殊的Bead,它将一堆工作包装成一个您跟踪交付的单位。它不使用史诗结构,因为车队中跟踪的问题不是其子级——它们中的大多数已经有另一个父级。
在Gas Town中抛掷工作的基本原语是`gt sling`。如果我告诉市长:"我们的tmux会话在状态栏中显示错误的钻机数量——提交它并抛掷它",市长将为问题提交一个Bead,然后`gt sling`它给一个polecat,后者立即处理它。
真实示例:我经常告诉我的Beads船员将发布分子抛掷给一个polecat。Polecat将走过20步发布流程,完成它,然后我会收到通知车队已经着陆/完成。编辑:实际上现在甚至更花哨。当分子在门状态等待时,例如等待GH Action或CI/CD,polecat消失。然后当门Bead触发时,Gas Town唤醒一个polecat以继续工作。
听到"问题`wy-a7je4`刚刚完成"会令人困惑。即使您看到标题,它可能并不反映该问题所属的更大工作块。所以现在我们用车队包装每一块抛掷的工作,从单个polecat抛掷到有人启动的大群集。
车队出现在一个日益改进的仪表板中;有一个Charmbracelet TUI,带有每个车队的扩展树,所以您可以看到其个别跟踪的问题。UI和UX将改进。这是Gas Town的第一天。
车队基本上是功能。无论是技术债务清理、实际功能还是错误修复,每个车队都是Gas Town工单架构的票据单位。它们相当新(可能3-4天?),但已经是最有趣的工作方式。
请注意,车队在完成之前可以有多个群集"攻击"它(处理它)。群集是承担持久工作的临时代理会话。无论谁管理车队(例如见证者)都会不断回收polecats并将它们推向问题。
━━━━━━━━━━━━━━━━━━━━

12

🔄 Gas Town工作流
Gas Town中最基本的工作流是交接`gt handoff`,或`/handoff`命令,或者就说"让我们交接"。您的工作者将可选地向自己发送工作,然后在tmux中为您重新启动其会话。您指导的所有工作者——市长、您的船员,有时其他——将需要您让它们知道是时候交接了。
除此之外,Gas Town开发循环或多或少与使用Claude Code(和Beads)时相同,只是更多。您免费获得群集(它们只花钱),您获得一些不错的仪表板,您获得描述工作流的方式,并获得邮件和消息传递。这...差不多就是这样。
我发现tmux既易于使用又令人震惊地强大,而且我几乎还没有开始学习细节。它给了我所需的一切:切换到任何代理,扫描它们都在做什么,循环不同的相关代理组。这很棒。
图15:tmux list-sessions视图
我当然期待Gas Town的Emacs UI。而且我确信你们中的一些人期待Web UI。请便!
但tmux足够好。您不需要学习许多tmux命令就能熟练。我只用一些:
  • `C-b s` —— 列出会话,窥探它们,切换到其中一个
  • `C-b b` —— 向后移动光标(在许多编辑器和shell中是`C-b`)。在tmux中,它只是向后移动得更慢。付出的小代价!
  • `C-b [` —— 进入"复制模式",暂停输出并让您滚动(`ESC`退出)
  • `C-b C-z C-z` —— 将进程挂起到shell
  • `C-b n/p` —— 循环到组中的下一个工作者(例如钻机中的下一个船员)
  • `C-b a` —— 调出活动源视图(我的配置)
就是这样!我发誓,您不需要太多tmux。它不碍事,并且经常救您一命。它还支持远程云工作者(我们将在几天内连接),并且非常可定制。您只需要求Claude Code让tmux更好地为您工作,它就会做。它会制作任何您想要的视图,重新绑定键,制作自定义弹出窗口,无论什么。这太神奇了,几乎像一个婴儿Emacs。
━━━━━━━━━━━━━━━━━━━━

13

📋 Gas Town中的计划
Gas Town需要很多燃料。它既消耗又产生汽油,或工作分子。除了保持Gas Town在轨道上,可能最困难的问题是保持它被喂食。它如此快速地消耗实施计划,以至于您必须做很多设计和计划来保持引擎被喂食。
在消耗方面,您喂Gas Town史诗、问题和分子(构建的工作流)。它咀嚼它们,产生...嗯...我现在尽量保持在30个工作者以下,因为我还没有实现超大规模上的远程工作者(即将到来!),通常我只有十几个左右活跃,除非我真的在市长和见证者上努力。
但是哇。有12到30个工作者,您可以在一次坐姿中烧掉巨大的工作积压,即使您使用"闪亮"或"镀铬"的polecat工作流,这些工作流做额外的代码审查和测试步骤(因此需要更长时间完成)。
在生产方面,嗯,您可以使用自己的计划工具,如Spec Kit或BMAD,然后一旦您的计划就绪,要求代理将其转换为Beads史诗。如果计划足够大,您可能想要群集它,并为计划的不同部分在一个大车队中产生史诗。
您可以使用公式生成工作。如果您希望每一块编码工作(或设计工作,或UX工作)都通过特定模板或工作流,您可以将其定义为分子,然后用您的编排模板"包装"或组合基础工作。
我为Jeffrey Emanuel的"五法则"实现了一个公式,这是观察结果:如果您让LLM审查某物五次,每次关注不同领域,它会产生更优的结果和工件。所以您可以获取任何工作流,用五法则烹饪,它将使每个步骤被审查4次(实施计为第一次审查)。
这可以生成大型工作流,可能需要数小时或数天才能完成,特别是如果您限制polecat数量以节流成本或令牌消耗。但Gas Town的好处是,一旦工作生成,您可以钩住它并自主完成。
━━━━━━━━━━━━━━━━━━━━

14

⚖️ 与Kubernetes比较
这是我承诺的Kubernetes比较。请随意跳过。
图16:Kubernetes/Gas Town比较
Gas Town可能确实有点意外地像Kubernetes。两个系统都为某个目标协调不可靠的工作者。两者都有控制平面(市长/执事 vs kube-scheduler/controller-manager)监视执行节点(钻机 vs 节点),每个都有本地代理(见证者 vs kubelet)监视临时工作者(Polecats vs Pods)。两者都使用整个系统协调的真相来源(Beads vs etcd)。这些显然是当您需要大规模放牧猫时出现的自然形状。
最大的区别是,Kubernetes问:"它在运行吗?"而Gas Town问:"它完成了吗?"K8s优化正常运行时间——保持N个副本存活,重启崩溃的pods,永远维持期望状态。Gas Town优化完成——完成这项工作,着陆车队,然后核爆工作者并继续。K8s pods是匿名的牛;Gas Town polecats是有信用的工作者,其完成积累成CV链,而会话是牛。K8s向连续期望状态协调;Gas Town向终端目标前进。相似的引擎形状,根本不同的目的地。
━━━━━━━━━━━━━━━━━━━━

15

📋 我根本没时间做的内容
我想在圣诞节发布Gas Town,但错过了。它实际上直到12月29日晚上8点左右才开始工作,我意思是飞翔,就像我设想的那样。它飞了两个小时我才注意到。我一直在和市长交谈,抱怨事情,然后修复开始在我周围着陆,我意识到我只是通过交谈来塑造整个事情。车队在流动和着陆,工作在提交和审查...这是我几个月来一直瞄准的目标。我两天前才让它工作。足够发布了!
以下是未能在新年截止日期前完成的内容。
  • 联邦——即使是Python Gas Town也有对GCP上远程工作者的支持。我需要设计对联邦的支持,既为了扩展您自己城镇的容量,也为了链接和与其他人类城镇共享工作。
  • GUI——我甚至没有时间制作Emacs UI,更不用说漂亮的Web UI。但有人应该完全制作一个,如果没有,我最终会做到。
  • 插件——我没有机会在任何功能上实现插件作为分子步骤,但所有基础设施都已就位。
  • Mol Mall——定义和塑造工作负载的分子的市场和交易所。
  • 汉诺塔/MAKER——我想运行百万步的轻雾,但时间用完了。
也就是说,我对确实完成的内容相当满意:
  • 自我交接无缝工作——Gas Town的核心内循环工作流
  • 抛掷工作,车队工作
  • 整个MEOW堆栈工作
  • 执事见证者精炼厂巡逻都自动运行
  • 船员很棒,比原始Claude Code实例好得多
  • tmux UI惊人地工作良好,比我猜想的要好。
加上我们得到了一些酷功能,如`gt seance`。总而言之,17天工作的好成果。到目前为止。
━━━━━━━━━━━━━━━━━━━━

16

🎬 下次继续
我和您一样筋疲力尽。这次聊天很有趣,但我必须回到Gas Town。
还有更多内容。这只是尝鲜。我将发布更多关于Gas Town的博客、视频和内容。如果您想贡献,并且您足够疯狂地跳上乐队车,加入社区并开始发送讨论、GH问题和PRs!
只需记住黄金法则:
  • 如果您不每天至少同时玩五个Claude Code,请不要使用Gas Town。
  • 如果您关心钱,请不要使用Gas Town。
  • 如果您身高超过4英尺,请不要使用Gas Town。我想在会议上令人印象深刻地耸立,像索伦一样。
  • 请不要使用Gas Town。
Gas Town只有17天,至少这个版本,Go "端口"的Python Gas Town。过去两周见证了整个MEOW堆栈、轻雾、巡逻、车队、代理和身份作为Beads、群集作为Beads、角色作为Beads、"馈送作为信号"创新,以及精炼厂、执事和狗(自Python Gas Town以来)的添加。还有大量其他内容。
17天,7.5万行代码,2000次提交。它终于在两天前起飞(GUPP开始工作)。这看起来是一个有趣的一年。
我在十一月与Anthropic分享了Gas Town,至少是粗略草图。我想我吓到他们了。我从未见过一家公司变得如此保守,如此之快。但他们认为Beads太有主见了,所以我担心Gas Town将是一个放屁太远,正如他们所说。
但我已经开始收到奇怪的报价,来自早期Gas Town谣言的人嗅探,付钱让我坐在家里做我自己:我可以在Beads和Gas Town上工作,只需要偶尔写一篇不错的博客文章或参加会议或研讨会。我现在有三个这样的报价。这几乎是超现实的。
这让我想起我在Crunchyroll上看到的几集动漫,其中这只懒惰的熊猫找不到工作,整天向他开咖啡馆的北极熊朋友抱怨。然后有一天,他参观动物园,发现他们在熊猫展览中有广告招聘职位。所以他申请并接受了工作,白天坐在那里扮演熊猫,晚上回家。这太荒谬了。
我就是那只熊猫。
在我能找到"理解"的公司和团队之前,我不会回去工作。我厌倦了四处走动告诉人们未来,就在他们面前挥手,却不被相信。
我宁愿坐在家里用我自己的双手创造未来。我实际上在我的财产上有六种竹子。我已经是熊猫了,享受着生命中的时光。
如果您想帮助我,请联系!并感谢所有令人难以置信的Beads贡献者!
下次见,更多[Gas Town](https://github.com/steveyegge/gastown)内容。新年快乐!
图17:新年快乐!
━━━━━━━━━━━━━━━━━━━━

17

👤 关于作者
Steve Yegge是一位拥有超过30年科技行业经验和40年编程经验的技术行业资深人士。他曾任职于Geoworks、亚马逊、谷歌、Grab和Sourcegraph等知名公司,在系统架构、软件工程和技术领导力方面有着丰富的经验。
他以深刻的技术洞察力和直言不讳的写作风格而闻名,著有《咆哮的程序员》一书(人民邮电出版社,2014年)。他的博客文章经常引发行业内的广泛讨论和深度思考,被认为是技术思想领导力的重要声音。
在过去的几年里,Yegge一直专注于AI辅助编程和开发工具的创新,先后推出了Beads和Gas Town等项目,探索软件开发的下一个前沿。
━━━━━━━━━━━━━━━━━━━━

18

📌 相关阅读
  • 《咆哮的程序员》- Steve Yegge
  • [《初级开发者的复仇》](https://sourcegraph.com/blog/revenge-of-the-junior-developer) - Steve Yegge对AI编程的早期思考
  • [Beads项目](https://github.com/steveyegge/beads) - Git支持的轻量级问题跟踪器
  • [Gas Town项目](https://github.com/steveyegge/gastown) - AI编码代理编排系统
🔗 原文链接:https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
━━━━━━━━━━━━━━━━━━━━
推荐阅读
10倍生产力飞跃!AI编程新范式揭秘,Clawdbot创始人最新中文播客深度解析
他已经赚到 8 亿,却重新写代码:ClawdBot 背后的那个人,才是真正可怕的地方
蜕变与重生:Steinberger、Moltbot (Clawdbot) 与AI Agent 时代的崛起
我被 AI Agent 搞得累趴下后的10个关键发现!(AI 编程实战干货分享)
Thinking in Vibe用 Claude Code 进入氛围式编程的新工作流

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 15:19:35 HTTP/2.0 GET : https://f.mffb.com.cn/a/470094.html
  2. 运行时间 : 0.229751s [ 吞吐率:4.35req/s ] 内存消耗:4,678.80kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6f3ff7e720f385c3978d46d03fb73c5a
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.002271s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.002466s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001083s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001091s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.003221s ]
  6. SELECT * FROM `set` [ RunTime:0.014052s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.002453s ]
  8. SELECT * FROM `article` WHERE `id` = 470094 LIMIT 1 [ RunTime:0.009757s ]
  9. UPDATE `article` SET `lasttime` = 1770448776 WHERE `id` = 470094 [ RunTime:0.012788s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000266s ]
  11. SELECT * FROM `article` WHERE `id` < 470094 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000815s ]
  12. SELECT * FROM `article` WHERE `id` > 470094 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000452s ]
  13. SELECT * FROM `article` WHERE `id` < 470094 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000996s ]
  14. SELECT * FROM `article` WHERE `id` < 470094 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002344s ]
  15. SELECT * FROM `article` WHERE `id` < 470094 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006213s ]
0.231374s