mcpField
P
pp-ticketdata

pp-ticketdata

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

关于 pp-ticketdata

pp-ticketdata 是使用 `ticketdata-pp-cli` 查询 TicketData 活动、艺人和场馆票价的技能。它将价格历史与本地 SQLite 关注列表结合,用于历史分析、比较和目标价格提醒。

主要功能

  1. 01查询活动和艺人票价
  2. 02在本地 SQLite 保存关注活动
  3. 03分析价格历史与波动
  4. 04比较活动并排列场馆区域
  5. 05标记价格变化和目标价命中
  6. 06离线搜索已同步数据

适用场景

  1. 01判断活动门票价格是否偏低
  2. 02跨多次同步跟踪关注列表价格
  3. 03找出某艺人最便宜的日期
  4. 04筛选价格更合算的活动区域

MCP 相关

README 说明可通过 MCP 主机使用 `ticketdata-pp-mcp`,并通过主机环境传入 `TICKETDATA_HOME` 等配置,但未说明其暴露的 MCP 工具。

安装

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

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

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

详细介绍

TicketData — Printing Press 命令行工具

前提条件:安装 CLI

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

  1. 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install ticketdata --cli-only
    
  2. 验证:ticketdata-pp-cli --version
  3. 确保报告的安装目录位于将调用此技能的 Agent/运行时的 $PATH 中。

如果通过 npx 安装失败(没有 Node、处于离线状态等),请改用 Go 直接安装(需要 Go 1.26.6 或更高版本)。此安装方式会将二进制文件安装到 $GOPATH/bin(默认是 $HOME/go/bin),因此请将该目录添加到 $PATH:

go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/ticketdata/cmd/ticketdata-pp-cli@latest

如果安装后 --version 报告“command not found”,说明运行时无法通过 $PATH 找到二进制文件所在目录。在验证成功前,请勿继续执行技能命令。

TicketData 会跟踪每场活动的最低入场价(各大市场平台中含全部费用的最低转售价格)、完整价格历史、预测以及 3/7/14/30 天的价格变化。此 CLI 将所有数据以可编写脚本、适用于 Agent 的 JSON 格式提供,并将原始价格序列保存在本地 SQLite 中。因此,stats 可以计算历史低价和波动性,drift 可以在最低价降至目标价时发出提醒,board 可以为整个关注列表排名,compare 可以选出最便宜的日期——这些功能都无法在网站上使用。

何时使用此 CLI

当你需要查询特定活动、表演者或场馆的 TicketData 最低入场价、价格历史、预测或 N 天价格变化时,请使用此 CLI。尤其适用于你想要长期跟踪一组活动、计算历史价格统计数据、在价格下跌时收到提醒或比较活动的场景;整个过程都可离线进行,也可通过脚本执行。它非常适合 Agent 用来回答“这张票现在便宜吗?”“我应该什么时候买?”或“这些日期中哪天最便宜?”等问题。

不适用场景

以下情况请勿使用此 CLI:

  • 请勿使用此 CLI 购买、出售或发布门票;TicketData 是价格跟踪工具,不是市场平台。请使用 events get 提供的市场平台购买链接,并在该平台完成购买。
  • 请勿使用它浏览或发现某个类别中的所有活动;TicketData 不提供列表/浏览 API,因此此 CLI 需要使用你已知的活动 ID、表演者/场馆 slug,或通过名称解析得到的信息。
  • 请勿使用它购买首次开售的门票或选择座位;请使用市场平台或票房。

独特功能

其他任何适用于此 API 的工具都不具备这些功能。

会不断积累数据的本地价格库
  • watch — 在本地跟踪一组活动,以便一次同步就重新获取所有活动的当前价格。

    优先使用此命令:后续所有功能(board、drift、stats、compare)都会读取 CLI 同步的关注列表。

    ticketdata-pp-cli watch add 22323960
    
  • board — 将所有关注活动汇总到一个可排序的表格中,显示最低入场价、N 天价格变化、预测趋势,以及当前价格在各自历史中的位置。

    用于查看整个关注列表的快照;要查看自上次同步以来的变化,请使用 drift;要查看单场活动的价格分布,请使用 stats。

    ticketdata-pp-cli board --sort change --agent
    
  • drift — 对每个关注活动最近的两个快照进行比较,标记超过阈值的最低价变动,并触发价格目标提醒。

    用于查看自上次同步以来的价格变化,也可用于设置“降到我的目标价时提醒我”的提醒。

    ticketdata-pp-cli drift --threshold 10 --target 22323960=150 --agent
    
网站图表隐藏的价格情报
  • stats — 根据本地价格序列,获取历史最低价/最高价、中位数、当前百分位、波动率,以及价格通常最低的星期几。

    用于判断某场活动今天的入场最低价是否真的低,以及哪天通常最便宜。

    ticketdata-pp-cli stats 22323960 --agent
    
  • compare — 按入场最低价和变化百分比为多个关注的活动,或某位表演者所有关注的活动排名。

    用于挑选最便宜的城市或日期;若要查看单场活动自身的历史,请使用 stats。

    ticketdata-pp-cli compare --performer ariana-grande --agent
    
  • zones — 按当前入场最低价,以及各区域相对于自身历史价格的跌幅为活动区域排名,从而找出价格偏低的区域。

    用于按性价比挑选区域;若只需查看区域名称目录,请使用 events sections。

    ticketdata-pp-cli zones 22323960 --agent
    
面向 Agent 的基础功能
  • search — 对已同步的活动、表演者和场馆进行本地全文搜索,返回多个匹配结果。

    用于离线浏览匹配项;若要对名称进行单一的规范解析,请使用 performers search 或 venues search。

    ticketdata-pp-cli search "ariana" --type performers --agent
    

HTTP 传输

此 CLI 使用兼容 Chrome 的 HTTP 传输来访问面向浏览器的端点。常规 API 调用无需常驻的浏览器进程。

命令参考

events — 查询票务活动、入场最低价、价格历史和区域目录

  • ticketdata-pp-cli events get — 获取活动当前的入场最低价、预测、N 日变化、市场链接,以及场馆/表演者详情
  • ticketdata-pp-cli events history — 获取活动完整的入场最低价时间序列(数百个数据点),以及各区域的序列和开售/预售日期
  • ticketdata-pp-cli events sections — 列出活动已编目的区域名称

performers — 查询表演者(艺人、队伍),并将名称解析为规范的表演者页面

  • ticketdata-pp-cli performers get — 获取表演者的统计数据(即将举行的活动、入场最低价的平均值/最低值/最高值),以及转售/社交链接
  • ticketdata-pp-cli performers search — 将搜索查询解析为最匹配的表演者

venues — 查询场馆,并将名称解析为规范的场馆页面

  • ticketdata-pp-cli venues get — 获取场馆的统计数据(即将举行的活动、位置)
  • ticketdata-pp-cli venues search — 将搜索查询解析为最匹配的场馆
查找合适的命令

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

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

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

使用示例

这张票现在便宜吗?
ticketdata-pp-cli watch add 22323960 && ticketdata-pp-cli sync && ticketdata-pp-cli stats 22323960 --agent

关注该活动,获取其历史价格,并查看今天的入场最低价在自身价格分布中的位置。

当最低价降到我的目标价格时提醒我
ticketdata-pp-cli drift --target 22323960=150 --threshold 8 --agent

标记达到目标的价格,以及自上次同步以来降幅超过 8% 的最低价。

这位艺人的哪个日期最便宜?
ticketdata-pp-cli compare --performer ariana-grande --agent

按入场最低价和变化百分比为该表演者所有关注的活动排名。

为 Agent 精简大型活动载荷
ticketdata-pp-cli events get 22323960 --agent --select tickets.get_in_price,tickets.number_of_listings,forecast_value,price_trend.direction

使用点分隔的选择路径,从冗长的活动响应中仅提取与决策相关的字段。

找出性价比最高的区域
ticketdata-pp-cli zones 22323960 --agent

按活动区域当前的入场最低价,以及各区域相对于自身历史价格的跌幅进行排名。

身份验证设置

无需账户或 API 密钥。TicketData 的公开数据 API 已开放;此 CLI 会直接读取数据。

运行 ticketdata-pp-cli doctor 以验证设置。

Agent 模式

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

  • 可管道传输 — JSON 输出到 stdout,错误输出到 stderr

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

    ticketdata-pp-cli events get mock-value --agent --select id,name,status
    
  • 可预览 — --dry-run 显示请求,但不发送

  • 适合离线使用 — 有本地 SQLite 存储时,同步/搜索命令可以使用它

  • 非交互式 — 从不提示输入,所有输入都通过标志提供

  • 只读 — 不要使用此 CLI 执行创建、更新、删除、发布、评论、点赞、邀请、下单、发送或其他会修改数据的请求

响应封套

从本地存储或 API 读取的命令会将输出包装在一个来源信息封套中:

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

解析 .results 获取数据,并通过 .meta.source 判断数据来自实时 API 还是本地存储。只有当 stdout 指向终端,且未设置任何机器格式标志(--json、--csv、--compact、--quiet、--plain、--select)时,才会向 stderr 输出人类可读的 N results (live) 摘要;通过管道传输的消费者、Agent 消费者以及显式指定格式的运行,都会在 stdout 输出纯 JSON。

路径与状态

Agent 应将 CLI 的路径解析器视为运行时契约的一部分:

  • 单次调用使用 --home <dir>,或设置 TICKETDATA_HOME=<dir>,将所有四类路径重定位到同一个根目录下。

  • 只有在特定类别的路径必须与其他类别分开时,才使用对应的环境变量:TICKETDATA_CONFIG_DIR、TICKETDATA_DATA_DIR、TICKETDATA_STATE_DIR、TICKETDATA_CACHE_DIR。

  • 解析顺序为:各类别对应的环境变量、--home、TICKETDATA_HOME、XDG(XDG_CONFIG_HOME、XDG_DATA_HOME、XDG_STATE_HOME、XDG_CACHE_HOME),然后是平台默认值。

  • config 存放 config.toml 和配置档案等设置。data 存放 credentials.toml、data.db、Cookie 和认证辅助文件。state 存放持久化查询、任务和 teach.log。cache 存放可重新生成的 HTTP/缓存文件。

  • 已保存的机密信息位于数据目录下的 credentials.toml 中。为保持兼容性,系统也会读取旧版 config.toml 中的机密信息,并在首次写入认证信息时将它们移出 config.toml。

  • 运行 ticketdata-pp-cli doctor --fail-on warn 以显示路径和凭据位置警告。对于需要解析后目录的 Agent,agent-context 会提供一个 schema v4 paths 区块。

  • 对于 MCP,通过 MCP 主机配置传递重定位设置。MCP 二进制文件不会继承 CLI 标志:

    {
      "mcpServers": {
        "ticketdata": {
          "command": "ticketdata-pp-mcp",
          "env": {
            "TICKETDATA_HOME": "/srv/ticketdata"
          }
        }
      }
    }
    

多机部署优先级:继承的各类别环境变量会覆盖对应类别的显式 --home。使用 TICKETDATA_HOME 或各类别环境变量作为持久的多机配置手段;--home 仅用于单次调用。取消设置环境变量无法还原重定位;清除 TICKETDATA_HOME 前请手动移动文件,否则 doctor 将无法找到仍留在原根目录下的凭据。

自动学习

此 CLI 内置自动捕获式学习循环。CLI 会自行记录:每次调用都会在本地记入日志;标志使用失败后,若更正并重试,会自动生成一个 flag_alias 候选项;对于没有操作手册的查询类别,执行 teach 时会根据本次会话日志自动合成一个 playbook_candidate。你只需进行判断:先运行 recall,再处理显示的候选项;用 teach 记录最终答案;发现更正时运行 playbook amend。你无需手动记录失败。

步骤 1:在任何探索前运行 recall

针对新问题,在运行 list/search/drill 命令前,先运行:

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

响应封套:

{
  "query": "...",
  "normalized": "<normalized form>",
  "query_entities": ["..."],
  "found": true | false,
  "match_score": 0.0,
  "results": [
    { "resource_id": "...", "resource_type": "...", "venue": "...",
      "confidence": 2, "entity_match": "exact|partial|unknown",
      "source": "taught|preseed|pattern", "warnings": ["..."] }
  ],
  "mismatches": [ /* only when --debug-mismatches */ ],
  "warnings": [ /* top-level */ ],
  "candidates": [
    { "id": 12, "class": "flag_alias | playbook_candidate",
      "summary": "...", "sightings": 3, "last_seen": "...",
      "rationale": "...",
      "next_action": ["<trial command>", "ticketdata-pp-cli learnings confirm 12"] }
  ],
  "playbook": {
    "query_family": "...",
    "playbook": {
      "steps": [ { "cmd": "<command with {slot} substitution>", "purpose": "..." } ],
      "entity_slots": ["$ENTITY"],
      "expected_tool_calls": 3
    },
    "slots_resolved": { "$ENTITY": { "token": "<live token>", "canonical": "<canonical>" } },
    "notes": "<workarounds + gotchas for this query family>"
  },
  "notes": "<duplicate surface for non-playbook callers>"
}

空存储快速跳过:如果存储中尚无学习记录、操作手册或候选项(recall 未找到内容,且 learnings list 和 learnings candidates 均为空),则本次会话后续无需再运行 recall,避免每次查询都增加开销;一旦记录了学习内容,再恢复先运行 recall 的做法。

第 2 步:决策树

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

if Candidates present (warnings include "candidates_present"):
    -> candidates are try-then-confirm, never facts. Follow each candidate's
       two-step next_action verbatim: run the trial command first, then run
       `learnings confirm <id>` only after the trial verified the behavior.
       Reject a wrong candidate with `learnings reject <id>`.
    -> NEVER re-teach something recall surfaced as a candidate; confirm or
       reject that candidate instead of teaching a duplicate.
    -> candidates ride alongside playbooks and resource hits, not instead of
       them; continue with the branches below after acting on them.

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.
    -> the Playbook's expected_tool_calls is a budget; if you find yourself running
       materially more, record the divergence via `ticketdata-pp-cli playbook amend`
       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 data for Results[*].ResourceID in parallel

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
       (different canonical resolved from query_entities)

else:  // Found == false, no playbook, no notes
    -> cold start; run discovery normally; teach the answer afterward (Step 4).
       If the family has no playbook yet, that teach auto-synthesizes a
       playbook candidate from this session's journal - you do not need to
       record one by hand.

Playbook 和 Notes 与各资源的路径相互独立。召回响应可以同时包含 Playbook 和 Results[] 命中——两者都要使用:Playbook 会告诉你要执行哪种编排;资源命中则会跳过特定步骤。默认跳过 mismatches;仅在调查冷启动意外情况时传入 --debug-mismatches。

候选判断详情:learnings confirm <id> 会在将候选项写入之前打印其完整负载——请确认打印的负载与已验证的行为一致。learnings reject <id> 会将派生签名标记为已废弃,避免同一候选项再次出现。信封中只包含当前值得处理的少数候选项;ticketdata-pp-cli learnings candidates 会列出全部未处理项。

平稳降级:如果 learnings confirm 是未知命令,说明你正在使用较旧版本的二进制文件——忽略候选项指南,遵循其余协议。

第 3 步:始终读取 warnings
  • low_confidence:存在 confidence<2 的行。将其视为提示,而非可跳过发现步骤的命中。
  • resource_not_in_store:本地存储中没有该学习项指向的资源。匹配验证器无法对实体进行分类——直接获取资源并重新评估。
  • cross_alias_match(每条结果):该行是以不同别名录入的,并通过 entity_lookups 匹配到实时查询的规范实体(例如,以“USA”录入的学习项满足了“United States”召回)。请相信 resource_id。
  • similar_shape_different_entity:<canonical>(顶层):存在一条结构匹配的行,但其规范实体与实时查询不同。按冷启动处理;警告会提供冲突规范实体作为提示,但不会将该行提升到 Results 中。
  • ambiguous_alias(顶层):单个查询实体解析到了多个规范实体(例如,“Cards” → Arizona Cardinals + St. Louis Cardinals)。在确定资源之前,先结合上下文说明歧义。
  • candidates_present(顶层):信封中包含 candidates 部分。请在处理其他内容之前,按照第 2 步中的候选项分支处理。
  • lookup_refresh_available(顶层):查询中的某个实体尚无查找行,但同步数据可能会提供该行。运行 ticketdata-pp-cli sync 以刷新实体查找项。
  • 顶层 no_learnings_for_query_family:该表中没有高于 Jaccard 下限的行。属于纯冷启动。
第 4 步:定稿回复后始终执行 teach &

无条件教学。在解决存储无法回答的查询后,在后台教学最终资源映射——不设调用次数门槛,也不判断是否“值得”学习。教学是循环的锚点:对于尚无 Playbook 的类别,它会触发 Playbook 合成;同一指代对象的不同表述会归并到同一类别,因此近似重复的教学不会使存储碎片化。在整理好面向用户的回复后、发送回复之前,使用 shell 中的 & 启动教学,使调用立即返回:

ticketdata-pp-cli teach --query "<user's question>" --resource-type <type> --resource <id1> --resource <id2>
# (append shell `&` to background it)

成功时不输出任何内容。错误只会写入已解析状态目录下的 teach.log。教学时使用最具体的资源——如果用户提出宽泛问题,而你通过父级记录找到具体答案,请教学叶节点 ID,而非父级 ID。CLI 会在召回时使用预置的 entity_lookups 解析跨别名,因此以一种别名(例如“Niners”)录入的教学项,会自动满足之后使用其他别名(例如“49ers”或“San Francisco”)的查询。

PII 规则:教学时保留问题结构,但去除标识符——切勿在教学查询或备注中包含姓名、电子邮件、电话号码、账户 ID 或其他个人标识符。CLI 会扫描教学查询中明显的电子邮件/电话格式并发出警告,但不会阻止;应在教学前去除这些信息,而不要依赖警告。

步骤 5:playbook - 可选标记、自动合成

你不必判断某个会话是否“值得”编写 playbook:如果某个类别还没有 playbook,使用该类别进行 teach 会根据会话日志自动合成一个 playbook_candidate,并由下一次会话通过确认/拒绝来判断。只有当你已经掌握值得原样记录的操作流程时,才附加明确的 playbook 标记——例如 CLI 未显示的变通方法(被静默丢弃的标记、未记录的参数、分页技巧、负载问题)。优先使用集成式单次调用形式——在同一次 teach 调用中记录资源学习内容和 playbook:

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

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

Playbook 文件是包含 steps、entity_slots、expected_tool_calls 的 JSON 文件。Notes 文件是原样记录问题细节的 Markdown 文件。不使用文件的调用方(仅使用 MCP 的 Agent)可直接内联传入相同内容:在集成式 teach 形式中使用 --playbook-json 和 --playbook-notes,在 teach-playbook 中使用 --playbook-json 和 --notes。在集成式 teach 形式中,playbook 标记是可选的——如果只想 teach 资源,可完全省略这些标记。在独立的 teach-playbook 形式中,必须至少设置 playbook 标记和 notes 标记中的一个;两者都为空时会被拒绝。Playbook 以结构化查询类别(去除实体)为键,因此从一种实体形态的查询中学到的操作步骤适用于同一形态的所有其他查询,并在回忆时通过 slots_resolved 绑定当前查询的规范形式。

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

步骤 6:当调试响应指出需要更正时,使用 playbook amend &

如果你的调试协议响应指出 notes 或 playbook 应记录一项具体更正——例如变通方法、未记录的端点结构、过时的字段名称、观察到的架构漂移、空负载回退方案——请在生成面向用户的响应之前触发 playbook amend。与 teach 一样,采用触发后即不等待结果的方式。

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

哪些内容值得修订:本次会话中你 OBSERVED 到、且未来的你会受益于了解的行为。值得修订的示例:

  • CLI 界面会静默丢弃或调整标记顺序时的变通方法。
  • 未记录的端点结构(响应封装在 {meta, results} 中,负载嵌套层级比文档所述多两层)。
  • 观察到的架构漂移(字段重命名、索引在不同赛季间发生变化、API 现在返回小写的类别标签)。

哪些内容不应写入 notes:

  • 用户问题中与年份或实体相关的答案。这是响应内容,不是学习内容。
  • playbook 已在运行时获取的团队、运动员或行数据。
  • 只是转述现有 notes 内容的陈述。

amend 命令会将内容追加到该类别现有的 notes 中,并附加带时间戳的标记([amend YYYY-MM-DDTHH:MMZ]: <text>)。多次 amend 会累积,且审计记录可见。如果该类别尚无 playbook,amend 会创建一个仅含 notes 的 playbook(因此冷启动时发现的更正也能记录下来)。

amend notes 中的 PII 规范

playbook amend notes 可能会在未来版本的 Printing Press 中作为共享知识向上游传递。请勿在其中包含可识别用户身份的内容,以便保持向上游贡献的渠道畅通,避免之后再进行清理:

  • 请勿嵌入用户文件系统路径、个人 API 密钥或令牌、用户电子邮件地址、用户 GitHub 用户名,或与单个用户关联的特定查询历史记录。
  • 可以包含:端点结构、未记录的字段名称、API 问题、观察到的架构漂移、CLI 界面的变通方法、可泛化的分页或重试策略。

如果某项更正只有结合用户特定的上下文才有意义,就应写入个人笔记,而不是 playbook amend。

衡量循环效果

ticketdata-pp-cli learnings stats 会从本地 learn_events 表中报告召回命中率、教学转复用率、剧本解决率,以及候选项确认/拒绝次数。分母尚未产生前,相关比率为 null;所有数据都留在这台机器上。可用它检查这个循环是否为此 CLI 带来了实际价值。

禁用学习功能
  • 在单条命令中使用 --no-learn,会同时跳过 recall 和 teach 写入路径。适用于必须不受累积学习结果影响的确定性 Agent 工作流或测试。
  • 在环境中设置 TICKETDATA_NO_LEARN=true,可全局禁用整个管道。

Agent 反馈

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

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

条目会以 feedback.jsonl 的形式存储在解析后的数据目录下。除非设置了 TICKETDATA_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 TICKETDATA_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”模式。

ticketdata-pp-cli profile save briefing --json
ticketdata-pp-cli --profile briefing events get mock-value
ticketdata-pp-cli profile list --json
ticketdata-pp-cli profile show briefing
ticketdata-pp-cli profile delete briefing --yes

显式标志的优先级始终高于配置档案中的值;配置档案中的值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置档案,以便进行自省的 Agent 在运行时发现它们。

退出码

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

参数解析

解析 $ARGUMENTS:

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

安装 MCP 服务

  1. 安装 MCP 服务:
    go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/ticketdata/cmd/ticketdata-pp-mcp@latest
    
  2. 在 Claude Code 中注册:
    claude mcp add ticketdata-pp-mcp -- ticketdata-pp-mcp
    
  3. 验证:claude mcp list

直接使用

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

评论

支持 Markdown