Hermes Decision Trace

cftunnel 对 HTML 发布能力的吸收评估

这个项目主要补的是“公网暴露入口层”的缺口;和现有体系的关系是局部补强,不是替代;最值得吸收的是“本地预览临时外链”这个 sidecar 用位;不值得吸收的是 relay 壳、整套 tunnel 管理壳以及任何试图替代正式 HTML 发布主链的用法;因此建议按 L2 处理,最终决策归类为 Sidecar。

🧭
推荐路径

如果你要,我可以直接给你补一个 HTML 临时外链预览 runbook,定义什么时候走 Pages、什么时候走 cftunnel fallback。

🔎
关键依据

见证据摘要与完整记录中的状态、产物和校验链。

🛠️
落地方式

先把已验证方案当成稳定基线:保留当前 schedule / deliver / workdir,不急着继续扩面;新增候选先读源码、看 output、做 run-now 验证,再决定是否转 script-only。

证据摘要

  • 正文保留完整证据链;本页顶部只展示可读摘要。

行动清单

如果你要,我可以直接给你补一个 HTML 临时外链预览 runbook,定义什么时候走 Pages、什么时候走 cftunnel fallback。
如果你怀疑正式链路还有短板,我更建议下一步去补:一键 deploy + 浏览器级验真 + 回链索引自动刷新,这才是主收益面。
如果想做实测,我可以再拉一个最小 demo:本地起静态服务,用 cftunnel 走一遍,再和正式 Pages 链路做对比验收。

边界 / 风险

风险 / 边界

方向错位

风险 / 边界

它解决的是“怎么访问”,不是“怎么发布与治理”。吸收过深会把主问题带偏。

风险 / 边界

把临时链接误当正式链接

风险 / 边界

trycloudflare 域名和 tunnel 入口天然偏临时,不适合做长期归档入口。[来源:1]

风险 / 边界

运行依赖变多

风险 / 边界

正式链路若绑定 tunnel,会引入本地常驻进程、端口、隧道状态、Cloudflare Edge 连通性等额外故障面。

完整记录

cftunnel 对我们 HTML 发布能力的吸收评估

项目定位

评估对象 qingchencloud/cftunnel 本质上是一个双引擎内网穿透 CLI:Cloud 模式基于 Cloudflare Tunnel 暴露 HTTP/WS,Relay 模式基于 frp 自建中继支持 TCP/UDP/全协议。[来源:1]

它的定位是“隧道管理层”,仓库文档明确写了它负责配置管理、进程编排和二进制下载,本身不承载业务流量处理逻辑。[来源:1]

因此它属于出口层 / 访问入口层 sidecar,不是 HTML 发布栈里的生成层、归档层、部署层或治理层。

吸收建议(L0-L4)

  • 推荐吸收层级:L2 外挂接入
  • 最多上限:L3 局部能力吸收里的“应急临时分享工具”
  • 不建议:L4 深度合并

进入体系的位置

如果要接,它只能挂在这两个位置:

  1. 本地预览 sidecar
  • 场景:某个本地 HTML、开发中的预览页、临时调试页,需要立刻发外链给人看。
  • 形态:localhost:<port> → cftunnel 临时域名。
  1. 故障降级出口
  • 场景:Cloudflare Pages、正式域名、部署脚本短时异常,但本地已有可访问预览服务。
  • 形态:只做临时 fallback,不写进 canonical 发布主链。

除此之外,它不该进入我们的 Decision Trace / Research Archive 正式链路。

替代 / 增强关系

它不能替代的部分

我们现有发布主链已经明确包含:

  • 本地 HTML 主档落盘 ~/llm-wikis/decision-traces/html/<date-slug>.html
  • wiki Markdown 归档 ~/llm-wikis/decision-traces/YYYY-MM/<date-slug>.md
  • public 副本 ~/llm-wikis/decision-traces/public/<date-slug>.html
  • --deploy 触发 Cloudflare Pages 部署
  • public_validation / local_public_validation 做标题、正文关键短语、index fallback 的内容级验证
  • retain pointer 写回 Hindsight,保证后续 recall 能找回方案

这些都已经在本机脚本和设计文档里落地,不是概念层。[来源:2][来源:3][来源:4][来源:5]

而 cftunnel 仓库暴露的是:

  • quick 临时分享
  • install/up/down 服务管理
  • Cloudflare Tunnel 与 frp 的封装
  • *.trycloudflare.com 或 relay IP:port 访问

它没有提供我们真正关心的:

  • HTML 结构化生成
  • 归档索引维护
  • 发布后内容验真
  • wiki / retain 治理
  • 公网归档站点管理

所以它对我们是补强“临时暴露”,不是补强“HTML 发布能力”。[来源:1]

四层审计结论

1. 宣称层

README 宣称它是“全协议内网穿透工具”,同时覆盖 Cloudflare Tunnel 和 frp 双模式,面向临时分享、本地服务外网访问、游戏服、SSH、数据库等场景。[来源:1]

这个宣称和“HTML 发布系统增强”之间没有直接重合。它卖点不是发布治理,而是公网可达性。

2. 实现层

go.mod 依赖里直接能看到 Cloudflare API、cobra CLI、yaml 等组件,说明它实现上就是一个 Go 写的本地隧道编排器,而不是静态站点发布器。[来源:6]

README 也写明:cftunnel 自己是管理层,底下调用 cloudflaredfrp,并不经手内容发布流程。[来源:1]

3. 运行层

它的 Cloud 模式天然适合“本机已有服务 → 临时暴露”;Relay 模式还要自建中继服务器、开放端口、维护 token、处理 frps 服务端。[来源:1]

这意味着:

  • 用它做临时预览外链可以;
  • 用它做正式 HTML 站点交付会把运行复杂度拉高,尤其 relay 模式完全是反方向加负担。

4. 检索与治理层

它没有看到对“发布后的知识治理”提供任何帮助。我们的 HTML 发布核心不只是能打开,而是:

  • 可归档
  • 可回查
  • 可验证
  • 可复用
  • 可入 wiki / retain

这块 cftunnel 基本没有增益。[来源:1][来源:3]

三个专项验证结果

1. 静态面 vs 运行面一致性

仓库文档和实现依赖一致,都指向“隧道工具”而非“发布系统”。[来源:1][来源:6]

2. 精确回捞能力

我们现有脚本链已经把 HTML、wiki、public 副本、retain pointer 做成可回捞结构;cftunnel 只会产生一个临时访问入口,不能天然进入这套索引体系。[来源:2][来源:3][来源:4]

3. 降级与回退路径

cftunnel 倒是适合作为正式发布失败时的临时外链 fallback:先在本地起静态服务,再临时 tunnel 出去。但它只能做“先让别人看到”,不能替代正式归档和正式验证。

主要收益

如果只按 sidecar 使用,收益有三点:

  1. 临时预览更快
  • 本地 HTML 或预览服务可以一条命令快速给出外链。[来源:1]
  1. 无需等正式 Pages 链路
  • 在排版调试、视觉 review、临时确认环节,比完整 deploy 更快。
  1. 故障时有应急出口
  • 正式域名、Pages 或脚本异常时,可以先把页面临时发出去看效果。

主要风险

  1. 方向错位
  • 它解决的是“怎么访问”,不是“怎么发布与治理”。吸收过深会把主问题带偏。
  1. 把临时链接误当正式链接
  • trycloudflare 域名和 tunnel 入口天然偏临时,不适合做长期归档入口。[来源:1]
  1. 运行依赖变多
  • 正式链路若绑定 tunnel,会引入本地常驻进程、端口、隧道状态、Cloudflare Edge 连通性等额外故障面。
  1. Relay 模式过重
  • 自建 frps 对我们 HTML 发布没有明显收益,反而增加运维负担。[来源:1]

建议吸收清单

P0:可以吸

  1. “临时预览外链”这一个使用位
  • 层级:出口层 sidecar
  • 吸收方式:写成一个轻 runbook,必要时把本地 HTML 目录通过临时 HTTP 服务 + cftunnel quick 暴露出去
  • 使用边界:只用于预览、协作确认、故障应急

P1:可观察,不急着做

  1. Cloudflare Tunnel 的 CLI 编排体验
  • 层级:执行层体验优化
  • 价值:如果它把 cloudflared 的初始化、启停、认证、日志查看封装得很顺,后面可以借它的命令设计思路
  • 但这不是我们 HTML 主链的短板

P2:明确不吸

  1. Relay / frp 全套能力
  • 和正式 HTML 归档主线无关
  • 还会显著扩大运维面
  1. 把 cftunnel 升级为默认 HTML 发布出口
  • 不该做
  1. 拿它替代 Cloudflare Pages / decision_trace_publish / public_validation / wiki / retain
  • 完全不成立

最终判断

结论:这个项目主要补的是“公网暴露入口层”的缺口;和现有体系的关系是局部补强,不是替代;最值得吸收的是“本地预览临时外链”这个 sidecar 用位;不值得吸收的是 relay 壳、整套 tunnel 管理壳以及任何试图替代正式 HTML 发布主链的用法;因此建议按 L2 处理,最终决策归类为 Sidecar。

更直接一点:

它不能优化我们“正式 HTML 发布能力”,只能优化“把某个本地页面临时发给别人看”这一步。

下一步动作

  1. 如果你要,我可以直接给你补一个 HTML 临时外链预览 runbook,定义什么时候走 Pages、什么时候走 cftunnel fallback。
  2. 如果你怀疑正式链路还有短板,我更建议下一步去补:一键 deploy + 浏览器级验真 + 回链索引自动刷新,这才是主收益面。
  3. 如果想做实测,我可以再拉一个最小 demo:本地起静态服务,用 cftunnel 走一遍,再和正式 Pages 链路做对比验收。

参考来源

  • [来源:1] https://github.com/qingchencloud/cftunnel
  • [来源:2] /home/ht/.hermes/scripts/decision_trace_publish.py (输出路径与 --deploy 注释)
  • [来源:3] /home/ht/.hermes/scripts/decision_trace_publish.py (--deploy / --retain 参数)
  • [来源:4] /home/ht/.hermes/scripts/decision_trace_publish.py (public_validation / local_public_validation
  • [来源:5] /home/ht/llm-wikis/hermes-ops/concepts/decision-trace-html-wiki-hindsight-retain-design-2026-05-24.md
  • [来源:6] https://raw.githubusercontent.com/qingchencloud/cftunnel/main/go.mod