mcpField
P
pp-prediction-goat

pp-prediction-goat

github.com/mvanhorn其他2.1k43 次安装今天更新
代码仓库

关于 pp-prediction-goat

pp-prediction-goat 是查询 Polymarket 和 Kalshi 预测市场数据的技能,不支持交易。它可跨平台发现市场并比较赔率,同步后可用本地 SQLite 和 FTS5 搜索。

主要功能

  1. 01跨 Polymarket 和 Kalshi 查找相关市场
  2. 02比较不同平台的隐含概率
  3. 03识别同一结果市场的价格差异
  4. 04浏览热门、即将结算、高流动性和新市场
  5. 05使用 SQLite 和 FTS5 搜索本地同步数据

适用场景

  1. 01查询某主题在两个平台的赔率
  2. 02研究隐含概率差异
  3. 03跟踪即将结算的市场
  4. 04按主题或系列发现市场

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-prediction-goat

安装后在 Claude Code 中输入/pp-prediction-goat确认已加载。

详细介绍

Prediction GOAT — Printing Press CLI

前提条件:安装 CLI

此技能由 prediction-goat-pp-cli 二进制文件驱动。调用此技能中的任何命令前,必须确认 CLI 已安装。如果尚未安装,请先安装:

  1. 使用 Printing Press 安装程序安装:
    npx -y @mvanhorn/printing-press-library install prediction-goat --cli-only
    
  2. 验证:prediction-goat-pp-cli --version
  3. 确保 $GOPATH/bin(或 $HOME/go/bin)位于 $PATH 中。

如果 npx 安装失败(没有 Node、处于离线状态等),请改用直接 Go 安装(需要 Go 1.26.6 或更高版本):

go install github.com/mvanhorn/printing-press-library/library/payments/prediction-goat/cmd/prediction-goat-pp-cli@latest

如果安装后 --version 报告“command not found”,说明安装步骤未将二进制文件放入 $PATH。验证成功前,不要继续执行此技能中的命令。

此工具在设计和 CI lint 上均为只读——其二进制文件从结构上无法进行交易。topic <name> 会在一个约 3 KB 的排序结果包中返回所有相关的 Polymarket + Kalshi 市场/事件/标签(而官方 Polymarket CLI 会倾泻约 250 KB 的数据)。本地 SQLite + FTS5 可在一次同步后,让查询保持即时且免费。六个视图(trending、resolving、liquid、mispriced、movers、new)涵盖了 Agent 和赔率研究人员每周都会执行的工作流。

何时使用此 CLI

当 Agent 需要获取 Polymarket 和 Kalshi 两个平台的最新预测市场赔率,且不进行交易时,可使用 prediction-goat-pp-cli。最实用的命令是 topic、compare 和六个视图;其他所有命令都是为需要深入查看某个平台或某个市场的高级用户准备的。CI 的结构性保证使此 CLI 只读:它无法下单、持有钱包或签署交易,因此可以安全地嵌入 Agent 工具链。

独特功能

这些功能在其他任何用于此 API 的工具中都无法实现。

跨平台情报
  • topic - 在一个精简的、约 3 KB 的排序结果包中,获取与某个主题相关的所有 Polymarket 和 Kalshi 市场,例如 kanye、argentina、chatgpt-5。

    当 Agent 需要了解某个主题的最新赔率时,只需调用一次,就能获取两个平台的答案,无需分别调用两个平台工具再手动重新排序。

    prediction-goat-pp-cli topic kanye --json
    
  • mispriced - 查找相同结果的市场中,Polymarket 和 Kalshi 的隐含概率差异超过指定阈值的市场。

    这是某个平台报价有误或某一方定价不当的最明确迹象,可用于校准研究,而非交易。

    prediction-goat-pp-cli mispriced --threshold 0.05 --json
    
  • compare - 并列比较 Polymarket 和 Kalshi 上同一主题的 YES/NO 和隐含概率。

    通过一次只读调用,告诉 Agent 或分析师“哪个平台对此结果给出了更高/不同的数字”。

    prediction-goat-pp-cli compare 'arizona basketball' --json
    
  • markets diff - 对特定 Polymarket 市场和特定 Kalshi 市场进行逐字段结构化对比。

    如果你已经知道两个 slug/ticker(例如通过 topic <theme> 获取),diff 会准确显示两个平台之间的差异。

    prediction-goat-pp-cli markets diff <pm-slug> <kalshi-ticker> --json
    
逐步探索
  • polymarket event-of - 查找任意 Polymarket 市场 slug 所属的父级事件 slug。

    这是定位多结果事件系列的可靠方法,无需猜测 slug 后缀(gamma 前端应用会追加 -467、-595 等后缀)。

    prediction-goat-pp-cli polymarket event-of will-ghana-win-the-2026-fifa-world-cup
    
  • polymarket siblings - 列出已知市场 slug 所属父级事件下的所有同级市场。

    一次调用即可返回世界杯赛事中的所有球队、所有选秀顺位、所有 WCF 候选项及其价格。当 topic 和公共搜索都遗漏了不常见的结果时,这种方式依然有效。

    prediction-goat-pp-cli polymarket siblings will-ghana-win-the-2026-fifa-world-cup --agent
    
  • kalshi-series-search - 在本地同步的 Kalshi 系列 ticker 和标题中进行子串搜索。

    当你大致知道要找什么时,它比 topic 更快、召回率更高(例如搜索 WEST 会找到 KXNBAWEST,这是成交量达 2,900 万美元的分区冠军系列)。

    prediction-goat-pp-cli kalshi-series-search WEST --agent
    
屏幕
  • trending - 两个平台 24 小时成交量涨幅最大的市场,按排名排列。

    一条命令即可回答“今天该关注什么”,无需抓取两个主页。

    prediction-goat-pp-cli trending --json --limit 20
    
  • resolving - 未来一周/一个月/几天内即将结算的市场,按流动性排序。

    告诉 Agent“哪些市场即将结算”,无需重新翻阅两个游标。

    prediction-goat-pp-cli resolving --week --json
    
  • liquid - 两个平台中高于标准化成交量/流动性下限的市场。

    过滤掉那些只需一笔 100 美元的下注就会波动的流动性不足市场。

    prediction-goat-pp-cli liquid --min-volume 100000 --json
    
  • movers - 两个平台中 24 小时或 7 天窗口内隐含概率变动最大的市场。

    呈现叙事变化(由价格驱动)与炒作变化(由成交量驱动,来源于 )。

    prediction-goat-pp-cli movers --window 7d --json
    
  • new - 两个平台中最近 N 天创建的市场。

    新上市的市场往往蕴藏着超额收益和定价错误。

    prediction-goat-pp-cli new --days 7 --json
    

命令参考

comments - 评论系统和用户互动

  • prediction-goat-pp-cli comments get-by-id - 按评论 ID 获取评论
  • prediction-goat-pp-cli comments get-by-user-address - 按用户地址获取评论
  • prediction-goat-pp-cli comments list - 列出评论

events - 事件管理和相关操作

  • prediction-goat-pp-cli events get - 按 ID 获取事件
  • prediction-goat-pp-cli events get-by-slug - 按 slug 获取事件
  • prediction-goat-pp-cli events get-creator - 按 ID 获取事件创建者
  • prediction-goat-pp-cli events list - 列出事件
  • prediction-goat-pp-cli events list-creators - 列出事件创建者
  • prediction-goat-pp-cli events list-keyset - 使用基于游标(keyset)的分页方式返回事件,以便稳定、高效地浏览大型结果集。使用...
  • prediction-goat-pp-cli events list-pagination - 列出事件(分页)
  • prediction-goat-pp-cli events list-sport-results - 列出体育赛事结果

markets - 市场数据和相关操作

  • prediction-goat-pp-cli markets get - 按 ID 获取市场
  • prediction-goat-pp-cli markets get-abridged - 按信息筛选条件查询简要市场信息
  • prediction-goat-pp-cli markets get-by-slug - 按 slug 获取市场
  • prediction-goat-pp-cli markets get-information - 按信息筛选条件查询市场
  • prediction-goat-pp-cli markets list - 列出市场
  • prediction-goat-pp-cli markets list-keyset - 使用基于游标(keyset)的分页方式返回市场,以便稳定、高效地浏览大型结果集。使用...

profiles - 用户个人资料管理

  • prediction-goat-pp-cli profiles <user_address> - 按用户地址获取公开个人资料

public-profile - 管理公开个人资料

  • prediction-goat-pp-cli public-profile - 按钱包地址获取公开个人资料

public-search - 管理公开搜索

  • prediction-goat-pp-cli public-search - 搜索市场、事件和个人资料

series - 系列管理和相关操作

  • prediction-goat-pp-cli series get - 按 ID 获取系列
  • prediction-goat-pp-cli series list - 列出系列

series-summary - 管理系列摘要

  • prediction-goat-pp-cli series-summary get-by-id - 按 ID 获取系列摘要
  • prediction-goat-pp-cli series-summary get-by-slug - 按 slug 获取系列摘要

sports - 体育相关端点,包括球队和比赛数据

  • prediction-goat-pp-cli sports get-market-types - 获取有效的体育市场类型
  • prediction-goat-pp-cli sports get-metadata - 获取体育元数据信息

status - 管理状态

  • prediction-goat-pp-cli status - Gamma API 健康检查

tags - 标签管理和相关操作

  • prediction-goat-pp-cli tags get - 按 ID 获取标签
  • prediction-goat-pp-cli tags get-by-slug - 按 slug 获取标签
  • prediction-goat-pp-cli tags get-related-by-slug - 按标签 slug 获取相关标签(关系)
  • prediction-goat-pp-cli tags get-related-to-atag-by-slug - 获取与标签 slug 相关的标签
  • prediction-goat-pp-cli tags list - 列出标签

teams - 管理球队

  • prediction-goat-pp-cli teams get - 按 ID 获取球队
  • prediction-goat-pp-cli teams list - 列出球队
找到合适的命令

如果你知道要做什么,却不知道该用哪个命令,可以直接询问 CLI:

prediction-goat-pp-cli which "<capability in your own words>"

which 会根据自然语言能力查询,从此 CLI 精选的功能索引中解析出最匹配的命令。退出代码 0 表示至少有一个匹配项;退出代码 2 表示没有可信的匹配项——请改用 --help 或使用更具体的查询。

示例

查找两个交易场所中某个主题的所有市场
prediction-goat-pp-cli topic kanye --json --select markets.title,markets.venue,markets.yesProbability,markets.endDate

精简的相关 PM + Kalshi 市场排序汇总。--select 将每行缩减为四个字段;Agent 看到的内容约为 1 KB,而不是海量数据。

本周有哪些市场即将结算?
prediction-goat-pp-cli resolving --week --json --select title,venue,endDate,liquidity --limit 10

在本地对两个交易场所的数据按 end_date < now+7d 进行 SQL 筛选,并按流动性降序排序。--select 可让响应保持精简。

并排比较赔率
prediction-goat-pp-cli compare 'arizona basketball' --json

将主题解析为成对的市场,并并排显示各平台的 YES/NO 和隐含概率。准确指出 PM 和 Kalshi 的分歧所在。

列出 Kalshi 事件下的所有子市场

已知事件代码时(通常通过 kalshi-series-search,然后运行 kalshi events list --series 发现),一次调用即可返回所有子市场及其实时价格:

prediction-goat-pp-cli kalshi events get KXMENWORLDCUP-26 --with-markets --agent

向上游 /events/{ticker} 端点传入 with_nested_markets=true。响应会包含一个 markets 数组,其中包含每个子市场的 ticker、title、yes_sub_title、status、yes_ask_dollars、no_ask_dollars、volume_24h_fp 和 expiration_time。如果只需要某个事件的子市场,这是一种比完整同步遍历更轻量的替代方案。

列出某个 Kalshi 系列下的所有事件
prediction-goat-pp-cli kalshi events list --series KXMENWORLDCUP --agent

按 series_ticker 筛选 /events。--series 标志会强制使用 --data-source live,因为本地存储不会按系列 ticker 建立索引。如果不知道确切的事件 ticker,可先用此命令,再运行 kalshi events get --with-markets——系列 → 事件 → 市场,三次调用即可完成。

发现不同平台之间的错误定价
prediction-goat-pp-cli mispriced --threshold 0.05 --json --select pair.pm.title,pair.kalshi.title,delta

返回结果相同、隐含概率相差 5 个或更多百分点的市场对。使用 --select 精简输出。配对前会过滤未交易的 Kalshi 市场(即采用平台默认 17c 卖价且成交量为零的市场),确保结果反映可操作的价差,而非噪声。

X 赢得事件 Y 的赔率是多少?(事件遍历方案)

已知某个结果的市场 slug,但想查看同一多结果事件下的所有关联项时(例如所有 48 支世界杯球队或全部 14 个 NBA 选秀抽签顺位),可从任意已知 slug 找到父事件,再返回所有关联市场:

prediction-goat-pp-cli polymarket siblings will-ghana-win-the-2026-fifa-world-cup --agent

返回父事件元数据以及所有关联市场,并填充 yesPercent。此方法绕过上游 /public-search 端点;该端点对名人和多结果中心主题会出现过期结果。如果只需要父事件 slug,可搭配 polymarket event-of <market-slug> 使用。

按子字符串查找 Kalshi 系列
prediction-goat-pp-cli kalshi-series-search WEST --agent

对本地同步的 kalshi_series 行进行子字符串 grep。当 FTS 排名器把你要找的系列 ticker 排在后面时(例如 KXNBAWEST 排在词频更高的匹配项之后),此命令很有用。需要先运行 prediction-goat-pp-cli kalshi sync。

跨平台进行同类概率比较

JSON 输出中每个有价格的行都包含 yesProbability(0-1 浮点数,规范的机器字段)和 yesPercent(四舍五入到 0-100,便于显示)。面向用户时始终显示 yesPercent;计算时使用 yesProbability。错误定价的市场对还会包含 deltaPercent,以及规范字段 delta。没有真实交易的 Kalshi 市场(无最新价格、无成交量,且价差超过 1.00 美元)会带有 untraded: true,文本模式下的 YES 列会显示 untraded,而非可能造成误导的平台默认百分比。

身份验证设置

无需身份验证。

运行 prediction-goat-pp-cli doctor 验证设置。

Agent 模式

在任意命令中添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。

  • 可通过管道传输 - JSON 输出到 stdout,错误输出到 stderr

  • 可筛选 - --select 可保留部分字段。点分路径可深入嵌套结构;数组会逐元素遍历。在详细 API 中,这对控制上下文大小至关重要:

    prediction-goat-pp-cli comments list --agent --select id,name,status
    
  • 可预览 - --dry-run 显示请求内容,但不会发送

  • 支持离线使用 - 在本地 SQLite 存储可用时,同步和搜索命令可以使用该存储

  • 非交互式 - 从不提示输入,所有输入均通过标志传入

  • 显式重试 - 仅当已存在的创建操作应视为成功时,才使用 --idempotent

响应信封

从本地存储或 API 读取数据的命令会将输出封装在来源信封中:

{
  "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
  "results": <data>
}

解析 .results 获取数据,并查看 .meta.source 判断数据来自实时数据还是本地数据。仅当标准输出是终端,且未设置任何机器格式标志(--json、--csv、--compact、--quiet、--plain、--select)时,才会将人类可读的 N results (live) 摘要打印到标准错误;管道或 Agent 消费者以及显式指定格式的运行,标准输出中只有纯 JSON。

自动学习

双调用协议:发现前先执行 recall,输出前先执行 teach &。CLI 会进行实体感知匹配验证,并展示与查询类型相关的已存工作手册;你需要读取信封并遵循六分支决策树。跳过任一环节,都会让你在未来会话中错失免费的回忆命中。

步骤 1:在任何发现操作前执行 recall

对于新的用户问题,在运行 topic、compare、polymarket siblings、kalshi events list 或任何其他发现命令之前,先运行:

prediction-goat-pp-cli recall "<user's question>" --agent

响应信封:

{
  "query": "...",
  "normalized": "world cup",
  "query_entities": ["England"],
  "found": true | false,
  "match_score": 0.0,
  "results": [
    { "resource_id": "...", "resource_type": "...", "venue": "...",
      "confidence": 2, "entity_match": "exact|partial|unknown",
      "source": "taught|preseed|recipe", "warnings": ["..."] }
  ],
  "mismatches": [ /* only when --debug-mismatches */ ],
  "warnings": [ /* top-level */ ],
  "playbook": {
    "query_family": "...",
    "playbook": {
      "steps": [ { "cmd": "kalshi events get $EVENT --with-markets", "purpose": "..." }, ... ],
      "entity_slots": ["$TEAM", "$EVENT", "$SERIES"],
      "expected_tool_calls": 2
    },
    "slots_resolved": { "$TEAM": { "token": "portugal", "canonical": "Portugal" } },
    "notes": "kalshi events list pages by created_at desc; --series forces --data-source live"
  },
  "notes": "kalshi events list pages by created_at desc; --series forces --data-source live"
}
步骤 2:六分支决策树

按以下顺序读取 playbook、notes、results[0] 和 warnings:

if Playbook present:
    -> READ Playbook.notes verbatim FIRST (workarounds + gotchas the CLI surface doesn't expose)
    -> replay Playbook.steps in order, substituting Playbook.slots_resolved entries
       for the entity slot tokens. If a step's slot is unresolved, fall back to
       discovery for that step only.
    -> Playbook.expected_tool_calls is a budget; if you find yourself running
       materially more, record the divergence via teach-playbook at end-of-session.

elif Notes present (no Playbook):
    -> read Notes verbatim before any discovery step; they carry known gotchas
       for this query family even when no structured choreography exists yet.

elif Found AND Results[0].EntityMatch == "exact" AND Results[0].Confidence >= 2:
    -> skip discovery; fetch live prices for Results[*].ResourceID in parallel
       (kalshi markets get <ticker>, markets get-by-slug <pm-slug>, etc.)

elif Found AND Results[0].EntityMatch == "partial":
    -> candidate hint, NOT a hit; read the resource title to validate before trusting

elif (any row in Mismatches[] when --debug-mismatches was passed):
    -> treat as cold start; the stored learning is for a different entity
       (e.g., a "Portugal" learning won't satisfy an "England" query — different canonical)

else:  // Found == false, no playbook, no notes
    -> cold start; run discovery normally; teach the answer afterward AND record
       a playbook + notes via teach-playbook so the next session of the same
       family is faster.

工作手册和 Notes 与单个资源路径相互独立。recall 响应可能同时包含 Playbook 和 Results[] 命中——两者都要使用:Playbook 告诉你要执行哪套流程;资源命中则可跳过特定步骤。默认跳过 mismatches;仅在调查冷启动时的意外情况时才传入 --debug-mismatches。

prediction-goat 开箱即用提供的三个工作手册覆盖了最常见的查询类型:odds_for_team(多结果事件中的单支球队赔率)、event_markets(特定 Kalshi 事件或 Polymarket 父事件下的所有子市场)以及 series_summary(Kalshi 系列标题、活跃事件和热门市场)。每个工作手册都附有 notes,记录了通过 dogfooding 发现的该类查询的注意事项(未交易标志筛选、--series 强制使用实时数据源、父级与子级 ticker 的消歧)。

步骤 3:始终读取 warnings
  • parent_event_when_child_exists:不要获取父事件。该 warning 会提供建议的子级 ticker;即使父级 ticker 出现在 Results 中,也应改为获取该子级。
  • low_confidence:该行存在,但 confidence<2。将其视为提示,而不是跳过发现的依据。
  • resource_not_in_store:本地存储中没有学习记录所指向的资源。匹配验证器无法识别实体——请直接获取并重新评估。
  • cross_alias_match(每个结果单独标记):该行是用其他别名学习的,并通过 entity_lookups 与实时查询的规范实体匹配(例如,用“USA”学习的记录满足了“United States”查询)。请相信 resource_id。
  • similar_shape_different_entity(顶层):存在结构匹配的记录,但其规范实体与实时查询的实体不同(例如,用户询问英格兰,却找到葡萄牙的学习记录)。此情况按冷启动处理;适用时,它会取代误导性的 no_learnings_for_query_family warning。
  • ambiguous_alias(顶层):单个查询实体解析为多个规范实体(例如,“Cards” → Arizona Cardinals + St. Louis Cardinals)。在确定 ticker 前,先向用户说明存在歧义。
  • 顶层 no_learnings_for_query_family:该表中没有高于 Jaccard 下限的行。纯粹的冷启动。
第 4 步:完成回复后执行 teach &

在组装好包含 ticker/slug 的面向用户的回复后、发送回复前,在后台执行 teach 调用。在末尾附加 shell &,让调用立即返回,不阻塞面向用户的回复:

prediction-goat-pp-cli teach --query "<user's question>" --resource <id1> --resource <id2>

成功时不输出任何内容。对最具体的资源执行 teach——如果你在发现过程中获取了父事件,但答案对应的是某个具体的子 ticker,就对该子项执行 teach。如果没有这样做,CLI 会将 parent_event_when_child_exists 警告写入 teach.log,并通过 learnings list --warnings 显示。用户不会看到该警告。CLI 使用预置的 entity_lookups(ISO 3166 国家代码,以及带别名的 NFL/NBA/MLB/MLS 球队名单)进行跨别名解析,因此,对“Niners”执行 teach 后,未来查询“49ers”时会自动匹配。

第 5 步:如果发现过程耗费超过 5 次调用,则记录操作手册

如果你为回答问题执行了超过 5 次工具调用,并且发现了 CLI 未提示的变通方法(被静默忽略的标志、未记录的参数、分页技巧、负载陷阱、未交易标志产生的噪声),请记录下来,以便同类查询的下一次会话跳过这些发现。优先使用集成式单次调用形式——在同一次 teach 调用中记录资源学习和操作手册:

# Common case: record both the resource learning AND the playbook in one call.
prediction-goat-pp-cli teach \
  --query "<user's question>" \
  --resource <id1> \
  --playbook-file ~/playbooks/series-summary.json \
  --playbook-notes-file ~/playbooks/series-summary-notes.md
# (append shell `&` to background it)

# Alternate: playbook-only (no resource ticker to record alongside).
prediction-goat-pp-cli teach-playbook \
  --query "<user's question>" \
  --playbook-file ~/playbooks/series-summary.json \
  --notes-file ~/playbooks/series-summary-notes.md

操作手册文件是包含 steps、entity_slots、expected_tool_calls 的 JSON 文件。Notes 文件是逐字记录这些注意事项的 Markdown 文件。使用集成式 teach 形式时,操作手册标志是可选的——至少要设置其中一个,才能新增或更新操作手册;如果只想针对资源执行 teach,也可以完全省略这些标志。使用独立的 teach-playbook 形式时,必须设置 --playbook-file 和 --notes/--notes-file 中的至少一个;两者都为空会被拒绝。操作手册按结构化查询类别(去除实体后)建立索引,因此,为“odds Portugal wins world cup”记录的操作流程也适用于英格兰、巴西以及其他所有结构相同的国家查询;slots_resolved 会在回忆时绑定当前查询的规范实体。

prediction-goat 已内置操作手册的三个类别(odds_for_team、event_markets、series_summary)涵盖了常见形式;如果你的查询类别已有操作手册,请优先使用 playbook amend(第 6 步),而不是完整地重新记录。

未来回忆时如果确实找到操作手册,请将其视为事实依据:使用 slots_resolved 替换值后重放步骤,跳过操作流程已记录的发现过程,并在执行任何步骤前阅读 notes。

步骤 6:当你的调试响应发现需要修正时,执行 playbook amend &

如果你的调试协议响应发现了笔记或 playbook 应当记录的具体修正——例如变通方法、未记录的端点结构、过时的字段名、观察到的架构漂移或空载荷回退方案——请在输出面向用户的响应之前执行 playbook amend。与 teach 一样,执行后无需等待结果。

prediction-goat-pp-cli playbook amend \
  --query "<exact recall query string>" \
  --add-note "<your concrete correction>"
# (append shell `&` to background it)

哪些内容值得修订:本次会话中你观察到、未来的你会从中受益的行为。值得修订的示例:

  • “kalshi events list --series 会强制使用 --data-source live;本地存储不会为 series_ticker 建立索引”
  • “polymarket /public-search 对名人中心主题会过时;请通过父事件改用 polymarket 同级项”
  • “未交易的 Kalshi 市场会显示平台默认的 17c 卖价且成交量为零;配对前请用 untraded: true 过滤”
  • “如果该主题只有一个平台有市场,compare 会返回结构化的未配对诊断;不要将其解读为‘没有数据’”

哪些内容不应写入笔记:

  • 特定年份的答案(“葡萄牙有 8% 的胜率”)。这是响应内容,不是经验总结。
  • playbook 已在运行时检索的各国或各队数据。
  • 只是改述现有笔记的内容。

amend 命令会将内容附加到该系列现有笔记中,并添加带时间戳的标记([amend YYYY-MM-DDTHH:MMZ]: <text>)。多次 amend 会累积;可以查看审计记录。如果该系列尚无 playbook,amend 会创建一个仅包含笔记的 playbook(因此冷启动时的修正也会被记录)。使用 playbook list --agent 检查已存储的内容。

示例

本协议基于以下三条操作记录构建:

  1. 冷启动:“odds USA wins world cup”——recall 返回 found=false(尚无已教授的条目,预置数据可能已创建一条)。执行发现流程(kalshi-series-search WORLD,遍历子项)。使用 KXMENWORLDCUP-26-US 作答。教授该子项:

    prediction-goat-pp-cli recall "odds USA wins world cup" --agent
    # found=false -> discovery
    prediction-goat-pp-cli kalshi-series-search WORLD --agent
    prediction-goat-pp-cli kalshi events get KXMENWORLDCUP-26 --with-markets --agent
    # ...respond with KXMENWORLDCUP-26-US...
    prediction-goat-pp-cli teach --query "odds USA wins world cup" --resource KXMENWORLDCUP-26-US
    # (append shell `&` to background it)
    
  2. 热启动:“odds portugal wins world cup”——recall 返回 found=true,results[0].entity_match="exact",results[0].confidence>=2。跳过发现流程;并行获取实时报价:

    prediction-goat-pp-cli recall "odds portugal wins world cup" --agent
    # found=true, results=[{resource_id: "KXMENWORLDCUP-26-PT", entity_match: "exact"}, ...]
    prediction-goat-pp-cli kalshi markets get KXMENWORLDCUP-26-PT --agent
    
  3. 热启动但不匹配:“odds england wins the world cup”——尽管一条葡萄牙学习记录与该查询共享非实体词元,recall 仍返回 found=false。实体验证器将葡萄牙记录筛入 mismatches(只有使用 --debug-mismatches 才可见)。按冷启动处理;配方引擎可能会通过预置的 country_iso2 查找直接解析出 KXMENWORLDCUP-26-GB;否则照常执行发现流程。

使用 teach-recipe 显式编写模板

配方推断会从两条结构相似的教授记录中自动提取模板(葡萄牙 + 美国 + country_iso2 查找会生成世界杯模板)。你也可以提前编写模板:

prediction-goat-pp-cli teach-recipe \
  --query-template "odds {entity} wins world cup" \
  --resource-template "KXMENWORLDCUP-26-{entity:country_iso2}" \
  --resource-type kalshi_markets

可选——仅当你希望在累积两条教授记录之前就添加配方,或资源模板需要策略时(使用 * 后缀进行前缀搜索)才使用。

使用 teach-lookup 添加实体映射

ISO 国家代码和主要联赛的运动队名单已预置。仅在存在缺漏时使用 teach-lookup:

prediction-goat-pp-cli teach-lookup --kind country_iso2 --canonical "Curaçao" --value CW

计算类型(lowercase、uppercase、kebab-case、capitalize-first、slug)通过字符串转换解析,无需添加行。

禁用学习
  • 单条命令使用 --no-learn:跳过 recall 和 teach 写入流程。适用于确定性的 Agent 工作流,或不应受累积学习影响的测试。
  • 在环境中设置 PREDICTION_GOAT_NO_LEARN=true:全局禁用该流程。
审核过往的教授记录
prediction-goat-pp-cli learnings list --agent             # all rows
prediction-goat-pp-cli learnings list --warnings --agent  # rows whose teach raised a warning (parent-vs-child, no-entity-overlap)
prediction-goat-pp-cli forget "<query>" --resource <id>   # undo one teach
prediction-goat-pp-cli forget "<query>" --all             # undo every teach for that query

使用 learnings list --warnings 查找 CLI 标记但未阻止的错误教授记录。

Agent 反馈

当你(或 Agent)发现这个 CLI 有不妥之处时,请记录下来:

prediction-goat-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
prediction-goat-pp-cli feedback --stdin < notes.txt
prediction-goat-pp-cli feedback list --json --limit 10

条目会本地存储在 ~/.prediction-goat-pp-cli/feedback.jsonl 中。除非设置了 PREDICTION_GOAT_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 PREDICTION_GOAT_FEEDBACK_AUTO_SEND=true,否则不会发送 POST 请求。默认行为是仅存储在本地。

记录让你感到意外的地方,而不是提交错误报告。简短、具体,写成一行:这才是能不断累积的内容。

输出传递

每条命令都接受 --deliver <sink>。输出会发送到指定目标,同时写入标准输出,或取代标准输出,因此 Agent 无需手动管道传递即可路由命令结果。支持三种目标:

目标效果
stdout默认;仅写入标准输出
file:<path>将输出原子写入 <path>(临时文件 + 重命名)
webhook:<url>将输出正文 POST 到该 URL(使用 --compact 时为 application/json 或 application/x-ndjson)

不支持的方案会被拒绝,并返回列明支持方案的结构化错误。Webhook 请求失败时会返回非零状态码,并在标准错误输出中记录 URL 和 HTTP 状态码。

命名配置

配置是一组已保存的标志值,可在多次调用中重复使用。适用于计划任务中的 Agent 每次都使用相同配置调用同一命令的场景——即 HeyGen 的“Beacon”模式。

prediction-goat-pp-cli profile save briefing --json
prediction-goat-pp-cli --profile briefing comments list
prediction-goat-pp-cli profile list --json
prediction-goat-pp-cli profile show briefing
prediction-goat-pp-cli profile delete briefing --yes

显式指定的标志始终优先于配置值;配置值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置,以便能够内省的 Agent 在运行时发现它们。

退出代码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
5API 错误(上游问题)
7请求过于频繁(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 prediction-goat-pp-cli --help 的输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 请参阅上方的先决条件
  3. 其他任何内容 → 直接使用(将其作为 CLI 命令执行,并带上 --agent)

MCP 服务安装

从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后进行注册:

claude mcp add prediction-goat-pp-mcp -- prediction-goat-pp-mcp

验证:claude mcp list

直接使用

  1. 检查是否已安装:which prediction-goat-pp-cli 如果未找到,请提供安装选项(请参阅本技能顶部的先决条件)。
  2. 将用户查询与上方“独特功能”和“命令参考”中的最佳命令匹配。
  3. 使用 --agent 标志执行:
    prediction-goat-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果存在歧义,请查看子命令帮助:prediction-goat-pp-cli <command> --help。

评论

支持 Markdown