用途
write-provider-skill 用于指导编写 treg provider skill。Provider skill 是一个由文档构成的 MCP 服务器。MCP 服务器向模型提供工具列表和带类型的参数,但无法为每个平台都发布一个服务器,因此技能以散文形式承载同样的信息:哪些端点重要、参数的真实含义,以及 API 在哪些地方会误导你。第三部分(API 的误导之处)是 MCP 无法提供的,也是几乎全部价值所在。
编写规则
决定内容取舍的规则是:记录那些会产生错误答案却不产生错误的文档。按对智能体的价值排序:
- 静默错误答案:智能体自信地报告错误结果,单独无法恢复。例如 GA4 中不兼容的维度+指标每行返回 "0" 而非错误,读起来像“没有收入”。
- 形状错误的错误:错误不描述真实原因,导致重试走偏。例如 GA4 中错误路径返回 Google HTML 404 页面而非 JSON,JSON 解析会抛出无关错误。
- 无法猜测的标识符:智能体编造 ID 并永远得到 403/404。例如 GA4 需要 properties/123456789;GSC 需要 sc-domain:x.com 对比 https://x.com/。
- 主机拆分:端点存在但不在绑定的主机上。例如 GA4 Admin API 是 analyticsadmin,工具绑定到 analyticsdata 则返回 404。
- 能力限制:智能体尝试范围无法完成的工作。例如 GA4 连接是只读的。
- 端点列表:可在官方文档中找到。
对于最后一行(端点列表),链接到文档即可,不要复述。一个转述 API 参考的技能比一个 URL 更糟——它会过时且更长。
验证协议(不可协商)
技能中的每个端点和每个示例请求体都必须被执行过。不是从文档改编,不是看起来合理——而是实际运行。
scripts/dev-local.sh up
scripts/dev-local.sh cli connections ls # confirm health + resource_ref
scripts/dev-local.sh cli call <provider> <path> # always via /call/, never direct
通过 /call/ 调用而非带 token 的 curl:这样可以检验绑定注入、token 刷新和审计追踪,这些正是 treg 缺陷暴露的地方。
将每个端点标记为 ✅ 已验证或 ⚠️ 未验证,并给技能标注日期。允许存在未验证的端点——但不允许未标记的端点。
当出现 404 时读取审计日志。它记录确切的上游 URL,可以捕获终端输出隐藏的客户端路径篡改:
sqlite3 treg-dev.db "select method,path,status_code from callrecord order by id desc limit 5"
这就是发现下面 zsh :r 缺陷的方式:终端显示了一个看似合理的 Google 错误,审计日志显示请求发往了 ...123456789unRealtimeReport。
写入端测试
读取端点:可自由调用。写入端点会向真实账户发布真实内容且不可逆。在任何创建内容或花钱的 POST/PUT/DELETE 之前:
- 从人类获取明确指定的目标(一次性账户、沙盒广告账户)
- 获取每个 provider 的明确许可
- 如果两者都不存在,将端点标记为 ⚠️ 未验证,并根据 API 参考记录
绝不要为了满足复选框而向生产账户发布。
技能结构
遵循以下顺序——它匹配智能体在时间压力下实际阅读的方式:
- frontmatter:name + description(description = 触发器;列出用户会说的词)
# <Platform> via treg- 一行:你通过 treg 的代理调用 X,你从不持有凭证
- "All examples verified live on <date>"
## Setup (once per team)— 连接命令,你获得什么能力## Which <resource> to use— 如何读取 id,绝不猜测## The endpoints— 表格:path | method | purpose | verified?## Common jobs— 4-6 个真实任务,完整可运行的请求体## Reading the response— 形状陷阱(位置数组、字符串而非数字、时区)## Pitfalls— 静默错误答案列表。最有价值的部分。## Full documentation— 链接出去
跨 provider 反复出现的陷阱类别
构建新技能时明确检查每一项。已在 GA4 确认;在其他平台预期但未确认,直到测试。
- 主机拆分——是否存在与数据 API 不同主机名的管理/管理 API?工具的 base_url 绑定一个主机;另一个无法通过 /call/ 访问。预计在 Google Ads(googleads 对比 googleadsapi 表面)和 Meta(graph 对比 business)上出现。
- 资源 id 格式——确切前缀、确切编码。从 treg connections ls → resource_ref 读取。如果为空,treg connections resources <id> 然后 treg connections use。
- 位置响应数组——表头和值按索引匹配,而非按名称。
- 数字作为字符串——算术前先转换。
- 时区/货币——报告以属性的时区呈现。在解释“今天”之前从响应中读取它。
- 静默截断——默认行限制、高基数维度的 (other) 桶、看起来像完成的分页令牌。
- Shell 引用——在 zsh 中,$VAR:runReport 触发 :r 历史修饰符并静默损坏路径。使用 ${VAR}:runReport。适用于任何带 :action 路径后缀的 API。
- 范围与能力——连接实际授予的内容(treg connections ls → scopes, capabilities, missing_capabilities),而非平台提供的内容。
同时记录 treg 摩擦
这个练习同时是 treg 测试。当智能体可能对 treg 自身接口做出合理错误猜测时,记录下来——那些是产品缺陷,不是技能内容。目前发现:
- treg connections list 无效;子命令是 ls
- treg connections resources 接受数字 id,而非 provider 名称
检查清单
- 通过真实 OAuth 连接;connections ls 显示 health: ok
- 每个端点通过 /call/ 执行;每个标记为已验证/未验证
- 故意探测静默错误答案(错误字段名、不兼容组合)
- 确认连接实际具有的能力
- 检查主机拆分
- 写入端点要么已授权+测试,要么标记为未验证
- 链接出去而非复述参考
- treg 摩擦与平台摩擦分开记录