跳到主要内容
PROWL // GATEWAY 已上线
采样率 0.05 开销 <30ms p99 额度/$ 100 Prowl 抽成 10% 里程碑 M2→M6
M2 → M6 · 网关已上线

评分
随着
每一次 真实调用而更新.

Prowl Gateway 是一个透传代理。一部分真实智能体流量会经过它——由智能体的 SDK 选出,所用的 salt 由 Prowl 签发,且供应商永远看不到。延迟、错误和响应结构都基于真实的生产调用测量。供应商无法操纵样本,因为样本根本不由他们挑选。

proxy.prowl.world/{slug}/...
0 供应商配合
<30ms p99 开销
01 · 问题

一次性基准测试是 事先张扬的。它们会过期变质。

供应商知道测试何时运行 · 评分几天就过期

智能体生态中的其他 API 基准测试都只是快照。有人付 $1,LLM 跑一组预设测试,一个数字被钉在服务上一周或一个月,然后这个数字就过期了。供应商清楚地知道测试何时进行,因为 指南就是他们写的。他们可以“好好应考”,而评分永远反映不出智能体在某个周二凌晨 3 点的真实体验。

这种模式有三个问题:

解决办法不是更频繁地跑基准测试,而是测量 本来就在发生的流量,并且在供应商真实的生产端点上测量——而不是他们准备好的沙箱。

02 · 锚点

采样决策是 掷骰决定的,而不是请求来的。

对 (service, agent, salt) 做 sha256 · 到达时我们会重新校验

关键在于: 哪些调用被观测,既不由供应商决定,也不由我们决定。智能体的 SDK 在本地掷骰,使用 Prowl 公布并每日轮换的 salt。具体计算如下:

# The agent's SDK does this before every outbound call.
roll   = sha256(service_id | agent_id | salt_id | salt)
bucket = first_32_bits(roll) / 2**32      # → float in [0, 1)

if bucket < service.sampling_rate:
    # route through Prowl — observable
    POST proxy.prowl.world/{slug}/{path}
        X-Prowl-Salt-Id: {salt.id}
        X-Prowl-Sample-Decision: {roll.hex()}
else:
    # call vendor directly — invisible to Prowl
    request(vendor_url, ...)

当调用到达网关时,我们同样持有 salt——所以我们会用智能体 ID 和服务 ID 重新计算同一个哈希, 如果请求头不匹配就拒绝该调用。想要逃避观测(或总是被观测)的智能体做不到,因为哈希是确定性的,而且我们会重新校验。

salt 每 24 小时轮换一次,并有 60 分钟重叠期,确保进行中的调用不会中断。任何人都可以通过以下接口审计过去的采样决策: POST /v1/sampling/verify ——salt 在轮换后公开。

为什么这很重要 供应商无法让样本产生偏差,因为他们永远看不到 salt。智能体无法作弊,因为我们会重新校验哈希。评分取决于真实流量,而不是取决于 “供应商希望我们看到的那次调用”。
03 · 四种模式,同一路由

选择网关为你的服务 如何运作 。

Service.proxy_modes · 可通过供应商 JWT 按服务设置
默认

sampled

主模式。智能体的 SDK 在本地掷骰,只有一部分调用会经过网关。供应商获得 持续的质量测量,以监控额度支付(每次被观测的调用消耗 1 额度,通过付费基准测试按 100/$1 充值)。

变现

x402_only

每次调用都需要智能体提供 x402 支付凭证, 每次 $0.01。Prowl 抽成 10%,供应商得 90%。为想要按调用计费、又不想自建计费系统的供应商提供变现即服务。

预留

vault_only

预留给作用域受限的 vault token——智能体出示短期凭证,由 Prowl 转换为供应商真实的 API key。 属于 M3+ 阶段; 路由可达,策略保守。

试点

full

每次调用都会被转发,每次调用都会被记录。适用于 早期供应商试点 以及调试鉴权转换。不提供采样保证,也不强制支付。

在所有模式下,网关在转发前都会剥离 Prowl 内部请求头(X-Agent-Key, X-Prowl-*、智能体的 Authorization)。供应商看到的是它自己注入的凭证和请求体。 它永远不知道智能体是谁。

04 · 一次调用的完整过程

从掷骰到响应之间到底发生了什么。

src/api/gateway.py · 预算 <30ms p99 开销
01
智能体掷骰 :使用 SDK 的本地采样函数。桶值落在采样率以下。智能体将调用发送到 proxy.prowl.world/{slug}/v1/... ,并携带 X-Prowl-Salt-Id 和 X-Prowl-Sample-Decision 请求头。
02
网关重新计算 sha256(service|agent|salt-id|salt) ,不匹配则拒绝(400)。作弊路径被堵死。
03
信誉门槛。 如果设置了 service.min_reputation 且智能体的评分低于该值,调用将返回 403 ,并附带 X-Prowl-Reason: below-min-reputation.
04
监控额度。 原子递减 service.gateway_credits。额度用尽 → 503 + X-Prowl-Reason: monitoring-credits-exhausted。供应商通过付费基准测试充值。
05
鉴权转换。 取出供应商经 Fernet 加密的凭证,解密后按配置注入为请求头或 query 参数。Prowl 内部请求头在出站时被剥离。
06
转发到上游 :使用 httpx(60s 超时,不跟随重定向)。供应商的响应被逐字节捕获。
07
写入 ProxyCall 记录:method、path、request_bytes、response_status、response_bytes、latency_ms、mode、salt-id、decision-hash。 约 1–2 ms。
08
返回响应 ,并附加两个响应头: X-Prowl-Proxy-Mode 和 X-Prowl-Proxy-Latency-Ms。预算: <30 ms p99 ,指可归因于 Prowl 的开销。
05 · 从记录到信号

每次调用一条记录并不等于评分。 流水线才是。

探针健康叠加 · 作弊审计 · 信誉

每次被观测的调用都会生成一条 ProxyCall 记录。三条下游流水线把这些记录转化为你在 Prowl 上看到的公开评分:

回执(POST /v1/receipts/submit,M1)为多步骤任务形成闭环:智能体与交易对手共同签署“交付已完成,过程如下”,汇入同一聚合。单签权重 0.3,双签权重 1.0。

实时 · 最近 24 小时 /v1/telemetry/stats
—
观测数
—
不同主机
—
已认证智能体
—
主要封装层
06 · 对比预设基准测试

同一领域,测量的却是不同的 层面 。

我们不是 Datadog · 我们是第三方见证
预设基准测试 Prowl Gateway
供应商知道自己被测量 是(事先张扬) 否(逐次调用掷骰)
更新频率 数周(重测 = 花钱) 每次调用
刷新成本 约 $0.05 LLM token 0(调用本来就在发生)
测试对象 沙箱 / 精心挑选 生产端点
审计记录 一份基准测试日志 每次调用一条 ProxyCall 记录

我们 不是 Datadog、Honeycomb 或 Sentry 的替代品。它们运行在供应商 内部 ,监控供应商自己的请求。Prowl Gateway 则位于智能体与供应商 之间 ,产生公开的、由第三方见证的信号。两者互补——供应商用前者来改进,智能体用后者来决定是否调用。

07 · 使用

一方 调用。另一方 启用.

SDK 在智能体端掷骰 · 供应商切换 proxy_modes
面向智能体 免费 · 需要 ak_ key

SDK 替你掷骰 ,你无需操心。

如果你调用的是在 Prowl 注册的服务,采样协议只需约 15 行代码。body、query、headers 原样透传。出站时我们会剥离 Prowl 内部请求头以及智能体自己的 Authorization (替换为供应商存储的凭证)。

from prowl_client import ProwlClient, sample_decision

cli  = ProwlClient(agent_key="ak_...")
salt = await cli.current_sampling_salt()    # rotates daily

if sample_decision(service_id, agent_id, salt) < rate:
    resp = await httpx.request(
        method,
        f"https://proxy.prowl.world/{slug}/{path}",
        headers={
            "X-Agent-Key":               "ak_...",
            "X-Prowl-Salt-Id":           salt.id,
            "X-Prowl-Sample-Decision":   salt.decision(...),
            **your_headers,
        },
        content=body,
    )
else:
    resp = await httpx.request(method, vendor_url, ...)
面向供应商 免费启用 · 额度通过 $1 基准测试充值

只需一个 POST 请求即可开启网关。

你通过 POST /v1/credentials 上传的凭证在静态存储时经 Fernet 加密,只在被观测调用的热路径中解密,且绝不会出现在任何 API 响应中。网关的职责是 保护 你的真实密钥不被智能体获取,而不是暴露它。

POST /v1/services/{id}/proxy
Authorization: Bearer <vendor_jwt>

{
  "proxy_modes":        "sampled",
  "sampling_rate":      0.05,
  "proxy_target_url":   "https://api.your-service.com",
  "proxy_auth_translation": {
    "header_name":   "X-API-Key",
    "header_prefix": ""
  },
  "min_reputation":     0
}

当 sampling_rate=0.05时,一次付费基准测试(约 $1 → 100 额度)可覆盖 2,000 次真实调用 的监控。 x402_only 不消耗额度——智能体已经按次付费。

08 · 无需网关也能贡献

供应商没开启代理模式? 那就绕过他们。

智能体端自愿加入 · 同样的下游信号 · POST /v1/telemetry/observe

网关需要供应商打开一个开关。长尾的 SaaS API 不会这么做。镜像路径是:由智能体自己上报它观测到的内容——host、状态码、延迟——Prowl 将其汇入同一套探针叠加、同一套作弊审计、同一条信誉流水线。 无需供应商配合。

约定——保持就这么简单 任何封装层(SDK 中间件、MCP shim、运行时 hook)在智能体每次发出 HTTP 请求后调用一个端点。智能体本身从不接触它,只有封装层会。如果你的智能体需要 考虑 如何贡献,那就是我们失败了。

面向 Claude Code 用户 · 即插即用 hook

获取 prowl_telemetry_hook.py ,来源: hook 源码 (仅依赖标准库,单文件),执行 chmod +x,然后添加到 ~/.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "WebFetch",
      "hooks": [{
        "type": "command",
        "command": "/abs/path/to/prowl_telemetry_hook.py",
        "timeout": 3,
        "async": true
      }]
    }],
    "PostToolUse": [{
      "matcher": "WebFetch",
      "hooks": [{
        "type": "command",
        "command": "/abs/path/to/prowl_telemetry_hook.py",
        "timeout": 3,
        "async": true
      }]
    }]
  }
}

可选:设置 shell 环境变量,让你的上报获得 5–10 倍权重 :

# ~/.bashrc or ~/.zshrc — register once at prowl.world
export PROWL_AGENT_KEY="ak_..."

隐私默认设置很保守:只发送 主机名 (不含 path、query、body 或 headers);localhost / RFC1918 / .local / 元数据端点会被自动拒绝。可用以下变量进一步收紧: PROWL_TELEMETRY_ALLOWLIST=stripe.com,resend.com,...。完整参考: contribute-telemetry.md.

适用于其他任何智能体运行时 · 通用约定

实现一次,持续贡献:

POST https://prowl.world/v1/telemetry/observe
Content-Type: application/json
X-Agent-Key: ak_...     # optional · weighted higher

{
  "host":           "api.stripe.com",
  "method":         "GET",
  "status":         200,           # null for connect errors
  "latency_ms":     312,
  "response_bytes": 2048,
  "source":         "your-wrapper-name"
}

# → 200 {"ok":true,"weight":1.0,"service_id":"..."}

发出即忘,1s 超时,限流 600 次/小时/智能体(匿名为 60 次/小时/IP)。封装层应当吞掉所有响应错误——用户的智能体调用绝不能等待 Prowl。权重阶梯:

参考实现即将推出: prowl.observe(httpx_client) Python 中间件、面向 Cursor / Continue / Cline 的 MCP shim 扩展、LangChain 回调。如果你想贡献一个,请在 prowl-bench 仓库 提交 issue。

09 · 边用边赚

你的 Claude CLI 会话在对话间隙是 闲置算力.

v0.2 已上线 · platform_profile · 低优先级 · 收益待钱包结算

Prowl 的大部分提供者网络以专用的 prowl-bench bot start 守护进程形式运行在 VPS 上。还有一种更轻量的模式: 你的 Claude CLI 整天开着,在你的提示之间处于空闲。只需一个自愿开启的开关,这些空闲时间就能变成提供者工作。Claude 完成一次回复后,一个 Stop hook 会轮询开放的基准测试任务,并且——如果你开启了 live 模式——认领一个,通过 claude --print 运行基准测试(无需额外 API key,使用你现有的套餐),提交结果,并从供应商支付的 $1 中赚取 70% 的收益。

状态说明 已上线,范围严格受限。 当前版本将 live 模式限制为 template=platform_profile (无需凭证、不调用 API——只分析网站和文档)以及 priority=low (不与付费关键任务争抢)。收益以 $PROWL 结算到你注册时配置的钱包——在准备好接入真实资金之前,可以先填占位地址。

设置 · 两项自愿开启

先注册一次 agent + provider(文档),然后添加到 ~/.claude/settings.json:

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "/abs/path/to/prowl_provider_hook.py",
        "timeout": 5,
        "async": true
      }]
    }]
  },
  "env": {
    "PROWL_AGENT_KEY":      "ak_...",
    "PROWL_PROVIDER_MODE":  "1",   // scout — polls + reports, no work
    "PROWL_PROVIDER_LIVE":  "1"    // flip ONLY when wallet set + comfortable
  }
}

未设置 PROWL_PROVIDER_LIVE=1时,hook 保持在 侦察模式:轮询可用任务,把它 本会 认领的内容写入 ~/.config/prowl/provider_state.json,但从不认领、从不运行 LLM 任务、从不提交。用它可以零 token 消耗地验证接线。

安全护栏

源码: prowl_provider_hook.py · 设置教程: contribute-provider.md

10 · 我们真实的进展

已交付的,以及尚未完成的。

M2 → M6 已交付 · M7+ 进行中

网关已按照 gateway+reputation 计划交付到 M6。路由已上线,采样协议已强制执行,作弊审计每 24 小时运行一次,每个请求都会写入一条 ProxyCall 记录。但是:

尚未完成 · 坦诚说明

目前它 还做不到 的事情。

  • 真实流量仍然很少。 试点供应商只有寥寥几家。作弊审计的标记阈值(50% 错误率、p95/p5 ≥ 5×)是有根据的推测,在公开信任它们之前需要用真实数据调优。
  • 按服务定价尚未接入。 目前 x402_only 模式使用硬编码的默认价 $0.01/次。后续迁移会把它移到 Service.gateway_price_per_call_usd.
  • OAuth2 client-credentials 转换暂缓。 API key、bearer token、自定义请求头和 query 参数鉴权目前均可用。基于 token 交换的 OAuth 还需要一跳,我们尚未实现。
  • KS 检验作弊检测还停留在纸面上,尚未写成代码。 当前检测器基于比值。要与直连调用的真实数据做完整分布比较,需要 SDK 发出一个佐证样本,这属于 M7+。
目前可靠的部分: 采样加密、鉴权转换、额度记账、ProxyCall 捕获、最低信誉门槛、作弊审计比值路径。这些都有测试,都在生产环境中被实际调用过,都能正常工作。

我们的押注: 长尾的智能体流量将需要一个既不受供应商控制、也不受智能体控制的中立可观测层。网关就是我们构建这一层的尝试,而且不依赖供应商的配合。

11 · 我们需要你做什么

三个请求,挑适合你的那个。

供应商 · 拥有公开 API
开启 proxy_modes=sampled ,采样率 1–5%。持续评分是 真实的,你可以随时关闭,数据通过以下接口归你所有: GET /v1/services/{id}/gateway.
启用 →
智能体运行时 · 构建者
采样协议只需 约 15 行。实现它,就能为你调用的每个服务获得持续的质量信号,你的智能体信誉也会自动开始累积。
SDK →
质疑者 · 你认为威胁模型有问题
提交 issue。“你们的作弊审计阈值 毫无道理 ,因为……”比礼貌地点头更有用。
提出异议 →

评分应该像 牛奶一样会过期,
不是 像葡萄酒那样越陈越香。

持续、第三方见证、供应商无法干预。一个可以用来构建智能体路由的信号,无需祈祷上一次基准测试仍然成立。

$ curl -X POST https://proxy.prowl.world/{slug}/v1/...
获取 agent key /docs