mcpField
P
pp-table-reservation-goat

pp-table-reservation-goat

github.com/mvanhornその他2.1k248 回インストール今日更新
リポジトリ

pp-table-reservation-goat について

pp-table-reservation-goatは、OpenTable、Tock、Resyを横断してレストランや予約を検索するCLI用スキルです。空席確認と予約管理に対応し、エージェントのワークフロー向けに学習内容や検索データをローカル保存します。

主な機能

  1. 013サービスを横断したレストラン検索
  2. 02単日・複数日の空席確認
  3. 03予約の一覧、作成、変更、キャンセル
  4. 04保存済みレストランとユーザープロフィールの閲覧
  5. 05検索と学習データのローカル保存
  6. 06エージェントモードでの構造化出力

活用シーン

  1. 01複数サービスでレストランの空席を比較
  2. 02数日間の予約可能な時間を検索
  3. 03予約の作成またはキャンセル
  4. 04ローカル保存したレストラン検索の学習内容を再利用

MCP 対応

READMEにはtable-reservation-goat MCPサーバーの説明と、MCPホストでの設定例があります。環境変数でサーバーが保存するデータと認証情報の保存先を変更できます。

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/pp-table-reservation-goatを入力して読み込まれたか確認します。

詳細

Table Reservation Goat — Printing Press CLI

前提条件:CLI のインストール

このスキルは table-reservation-goat-pp-cli バイナリを使用します。このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。 インストールされていない場合は、先にインストールしてください。

  1. Printing Press インストーラーを使用してインストールします。デフォルトでは、macOS/Linux では $HOME/.local/bin、Windows では %LOCALAPPDATA%\Programs\PrintingPress\bin にバイナリがインストールされます。
    npx -y @mvanhorn/printing-press-library install table-reservation-goat --cli-only
    
  2. 確認します:table-reservation-goat-pp-cli --version
  3. 報告されたインストールディレクトリが、このスキルを実行するエージェント/ランタイムの $PATH に含まれていることを確認します。

npx によるインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールする方法に切り替えてください(Go 1.26.6 以降が必要です)。この方法では $GOPATH/bin(デフォルトは $HOME/go/bin)にインストールされるため、代わりにそのディレクトリを $PATH に追加してください。

go install github.com/mvanhorn/printing-press-library/library/food-and-dining/table-reservation-goat/cmd/table-reservation-goat-pp-cli@latest

インストール後に --version が「command not found」と報告する場合、ランタイムからバイナリディレクトリが $PATH 経由で認識されていません。確認が成功するまで、スキルのコマンドを実行しないでください。

OpenTable、Tock、Resy に対応する予約用 CLI です。3 つのネットワークを一度に検索し、キャンセルを監視し、予約とキャンセルを最初から最後まで行い、エージェントが照会できるローカルストアから変更を追跡します。

コマンドリファレンス

availability — OpenTable、Tock、Resy で予約可能な枠を確認します

  • table-reservation-goat-pp-cli availability check — 特定の日付と人数で、レストランの空き枠を確認します
  • table-reservation-goat-pp-cli availability multi-day — 1 軒のレストランについて、月曜日から日曜日までの空き状況を一覧で確認します

experiences — 前払い制やテイスティングメニューの体験を一覧表示します(Tock 形式)

me — 両方のネットワークから、認証済みユーザープロフィールを読み込みます

reservations — 予約の一覧表示、作成、変更、キャンセルを行います(認証ログインが必要です)

OpenTable のアタッチによる予約は、TABLE_RESERVATION_GOAT_OT_CHROME_DEBUG_URL が明示的に設定され、アタッチされたプロフィールがすでにサインイン済みの場合にのみ有効になります。有効な最終確認コントロールを操作するには TRG_ALLOW_BOOK=prepare を使用します。この場合、クリックは行われません。実際に予約を確定できるのは TRG_ALLOW_BOOK=1 のみです。型付きエラーは attach_unreachable、not_signed_in、selector_drift、form_validation、slot_taken、incomplete_confirmation です。page_state の診断情報は秘匿化され、URL クエリのトークンや任意のアカウントラベルは含まれません。

Tock の予約では、サインイン済みの Chrome セッション(TABLE_RESERVATION_GOAT_TOCK_CHROME_DEBUG_URL。デフォルトは http://localhost:9222)を優先し、ステルスヘッドレスセッションのフォールバックも維持します。まず従来のスロットボタンを試し、その後、正確な時刻の /search 行と、最新の時刻コンボボックス/体験カードのコントロールを試します。エージェントおよび --no-input による実行では、CVC の入力を求めるプロンプトは表示されません。必要な場合に限り、3 桁または 4 桁の TRG_TOCK_CVC を指定してください。型付きエラーは cvc_required と selector_drift です。セレクターの診断情報には、クエリ文字列を含まないパス、真偽値、時刻ラベル、許可リストに含まれるコントロール分類のみが含まれます。

restaurants — OpenTable、Tock、Resy でレストランを検索し、詳細を確認します

  • table-reservation-goat-pp-cli restaurants get — レストランの営業時間、住所、料理の種類、価格帯、写真、受賞歴などの詳細を取得します
  • table-reservation-goat-pp-cli restaurants list — OpenTable、Tock、Resy のレストランを一覧表示します。場所、料理の種類、価格帯、受賞歴、人数で絞り込めます

wishlist — 両方のネットワークから、保存済み/ウィッシュリスト登録済みのレストランを読み込みます

適切なコマンドを探す

実行したい操作は分かっていても、どのコマンドを使えばよいか分からない場合は、CLI に直接問い合わせてください。

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

which は、自然言語で記述された機能の問い合わせを、この CLI の厳選された機能インデックスから最も適したコマンドに対応付けます。終了コード 0 は一致する候補が少なくとも 1 つあることを示します。終了コード 2 は確信の持てる候補がないことを示します。その場合は --help に切り替えるか、より対象を絞った問い合わせを使用してください。

認証の設定

検索と空き状況の確認にアカウントは不要です。OpenTable と Tock の予約確定では、接続された Chrome プロファイルのサインイン済みセッションを使用します。Tock では保存済みセッションを使ったステルスヘッドレスのフォールバックを維持し、Resy の予約では保存済みの API トークンを使用します。

table-reservation-goat-pp-cli doctor を実行して、設定を確認してください。

エージェントモード

任意のコマンドに --agent を追加してください。次のオプションが展開されます:--json --compact --no-input --no-color --yes。

  • パイプ可能 — stdout に JSON、stderr にエラーを出力します

  • フィルタ可能 — --select でフィールドを絞り込めます。ドット区切りのパスはネストされた構造をたどり、配列では各要素を順にたどります。詳細な API でコンテキストを小さく保つうえで重要です:

  • プレビュー可能 — --dry-run で、リクエストを送信せずに内容を表示します

  • オフライン対応 — 利用可能な場合、同期/検索コマンドはローカルの SQLite ストアを使用できます

  • 非対話型 — プロンプトは表示されず、すべての入力はフラグで指定します

  • 明示的な再試行 — すでに存在する項目の作成を成功として扱う場合にのみ --idempotent を使用し、削除対象が存在しない場合の削除を成功として扱う場合にのみ --ignore-missing を使用してください

レスポンスエンベロープ

ローカルストアまたは API から読み取るコマンドは、出力をプロベナンスエンベロープでラップします:

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

データには .results を解析し、ライブデータかローカルデータかを確認するには .meta.source を参照してください。人間が読める形式の N results (live) という概要は、stdout がターミナルで、かつ機械形式のフラグ(--json、--csv、--compact、--quiet、--plain、--select)が設定されていない場合にのみ stderr に出力されます。パイプやエージェントからの利用、および明示的に形式を指定した実行では、stdout に純粋な JSON が出力されます。

パスと状態

エージェントは、CLI のパスリゾルバーを実行時の契約の一部として扱う必要があります。

  • 1 回の呼び出しには --home <dir> を使用するか、TABLE_RESERVATION_GOAT_HOME=<dir> を設定して、4 種類すべてのパスを 1 つのルートの下に移動します。

  • 特定の種類のパスだけを別の場所にする必要がある場合に限り、種類ごとの環境変数を使用します:TABLE_RESERVATION_GOAT_CONFIG_DIR、TABLE_RESERVATION_GOAT_DATA_DIR、TABLE_RESERVATION_GOAT_STATE_DIR、TABLE_RESERVATION_GOAT_CACHE_DIR。

  • 解決順序は、種類ごとの環境変数、--home、TABLE_RESERVATION_GOAT_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 から削除されます。

  • table-reservation-goat-pp-cli doctor --fail-on warn を実行して、パスと認証情報の保存場所に関する警告を表示してください。agent-context は、解決済みディレクトリを必要とするエージェント向けに、スキーマ v4 の paths ブロックを公開します。

  • MCP の場合は、MCP ホストの設定を通じてパスの移動先を指定してください。MCP バイナリは CLI フラグを継承しません:

    {
      "mcpServers": {
        "table-reservation-goat": {
          "command": "table-reservation-goat-pp-mcp",
          "env": {
            "TABLE_RESERVATION_GOAT_HOME": "/srv/table-reservation-goat"
          }
        }
      }
    }
    

フリートにおける優先順位:継承された種類ごとの環境変数は、その種類について明示的に指定した --home より優先されます。フリート全体で有効な設定には TABLE_RESERVATION_GOAT_HOME または種類ごとの変数を使用し、--home は 1 回の呼び出しに限って使用してください。環境変数を解除しても、パスの移動は元に戻りません。TABLE_RESERVATION_GOAT_HOME をクリアする前にファイルを手動で移動してください。そうしないと、doctor は以前のルートに残された認証情報を見つけられなくなります。

自動学習

この CLI には、自己記録型の学習ループが組み込まれています。CLI が自動で記録を管理します。すべての呼び出しはローカルに記録され、フラグの使用に失敗した後、修正して再試行すると flag_alias 候補が自動生成されます。また、プレイブックのないクエリファミリーに対して teach を実行すると、セッションの記録から playbook_candidate が自動生成されます。必要なのは判断だけです。まず recall を実行し、提示された候補に基づいて操作し、最終的な回答を teach し、修正を確認したら playbook amend を実行してください。失敗を手動で記録する必要はありません。

ステップ 1:探索の前に必ず recall を実行する

新しいユーザーの質問に対して、list/search/drill コマンドを実行する前に、次を実行します。

table-reservation-goat-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>", "table-reservation-goat-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 `table-reservation-goat-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.

プレイブックとノートは、リソースごとの手順とは独立しています。recall の応答には、プレイブックと Results[] のヒットが両方含まれることがあります。両方を使用してください。プレイブックは実行する手順を示し、リソースのヒットは個別の手順を省略できることを示します。デフォルトでは mismatches を省略し、コールドスタート時の予期しない動作を調査する場合に限り --debug-mismatches を渡してください。

候補の判断に関する詳細:learnings confirm <id> は候補を確定して反映する前に、候補のペイロード全体を表示します。表示されたペイロードが、検証した動作と一致することを確認してください。learnings reject <id> は導出シグネチャにトゥームストーンを設定し、同じ候補が再び表示されないようにします。エンベロープには、今対応する価値のある候補だけが含まれます。すべての未処理候補は table-reservation-goat-pp-cli learnings candidates で一覧表示できます。

グレースフルデグラデーション:learnings confirm が不明なコマンドの場合は、古いバイナリを使用しています。候補に関するガイダンスは無視し、残りのプロトコルに従ってください。

ステップ 3:必ず warnings を確認する
  • low_confidence:confidence<2 の行が存在します。手掛かりとして扱い、探索を省略できるヒットとは見なさないでください。
  • resource_not_in_store:ローカルストアに、学習内容が指すリソースがありません。一致検証でエンティティを分類できなかったため、直接取得して再評価してください。
  • cross_alias_match(結果ごと):行は別名で教えられましたが、entity_lookups を通じてライブクエリの正規名と一致しました(例:「USA」で教えた内容が「United States」の recall を満たす)。resource_id を信頼してください。
  • similar_shape_different_entity:<canonical>(トップレベル):構造的に一致する行は存在しますが、正規エンティティがライブクエリのものとは異なります。コールドスタートとして扱います。この警告には、手掛かりとして競合する正規名が含まれますが、その行は Results に追加されません。
  • ambiguous_alias(トップレベル):1 つのクエリエンティティが複数の正規名に解決されました(例:「Cards」→ Arizona Cardinals + St. Louis Cardinals)。リソースを確定する前に、文脈に基づいて曖昧さを示してください。
  • candidates_present(トップレベル):エンベロープに candidates セクションが含まれています。ステップ 2 の候補分岐に従い、ほかの処理より先に対応してください。
  • lookup_refresh_available(トップレベル):クエリ内のエンティティにまだ lookup 行がありませんが、同期済みデータから作成できる可能性があります。table-reservation-goat-pp-cli sync を実行して、エンティティルックアップを更新してください。
  • トップレベルの no_learnings_for_query_family:Jaccard のしきい値を超える行がテーブルにありません。完全なコールドスタートです。
ステップ 4:回答を確定した後、必ず teach & を実行する

学習は無条件です。ストアが回答できなかったクエリを解決したら、最終的なリソースのマッピングをバックグラウンドで学習させます。呼び出し回数のしきい値はなく、学習する価値があったかどうかを判断する必要もありません。teach はこのループの要です。プレイブックがないファミリーではプレイブックの合成を開始し、同じ参照対象を指す言い回しはひとつのファミリーにまとめられるため、よく似た teach が複数に分かれてストアを断片化することはありません。ユーザー向けの回答を組み立てた後、出力する前に、シェルの & を付けて実行し、呼び出しがすぐに戻るようにします。

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

成功時は何も表示されません。エラーは、解決済みの状態ディレクトリにある teach.log にのみ記録されます。最も具体的なリソースを学習させてください。ユーザーが広範な質問をし、具体的な回答を見つけるために親レコードをたどった場合は、親ではなくリーフ ID を学習させます。CLI は想起時に、シード済みの entity_lookups を使って別名をまたいで解決するため、ある別名(例:「Niners」)で teach すれば、別の別名(例:「49ers」、「San Francisco」)を使った今後のクエリにも自動的に対応できます。

PII に関するルール:識別子を削除した構造的な質問を学習させてください。学習させるクエリやメモには、名前、メールアドレス、電話番号、アカウント ID、その他の個人識別子を決して含めないでください。CLI は teach のクエリをスキャンして、明らかなメールアドレスや電話番号の形式を検出すると警告しますが、処理は中断しません。警告に頼らず、学習させる前に削除してください。

ステップ 5:プレイブック — フラグは任意、合成は自動

セッションにプレイブックが「ふさわしいか」を判断する必要はありません。プレイブックのないファミリーで teach を実行すると、セッションのジャーナルから playbook_candidate が自動的に合成され、次のセッションでそれを承認するか却下するかが判断されます。すでに逐語的に記録する価値のある手順を把握している場合に限り、明示的なプレイブックフラグを付けてください。たとえば、CLI が表示しなかった回避策(暗黙に破棄されるフラグ、未文書化のパラメーター、ページネーションのテクニック、ペイロードに関する注意点)です。統合されたワンコール形式を優先してください。リソースの学習とプレイブックを、同じ teach 呼び出しで記録します。

# Common case: record both the resource learning AND the playbook in one call.
table-reservation-goat-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).
table-reservation-goat-pp-cli teach-playbook \
  --query "<user's question>" \
  --playbook-file ~/playbooks/<shape>.json \
  --notes-file ~/playbooks/<shape>-notes.md

プレイブックファイルは、steps、entity_slots、expected_tool_calls を含む JSON です。メモファイルは、注意点を逐語的に記載した Markdown です。ファイルを使わない呼び出し元(MCP 専用エージェント)は、統合形式の teach では --playbook-json と --playbook-notes を、teach-playbook では --playbook-json と --notes を使い、同じ内容をインラインで渡します。統合形式の teach ではプレイブックのフラグは任意です。リソースのみを teach する場合は、フラグをすべて省略してください。単独形式の teach-playbook では、プレイブックとメモのフラグのうち、少なくとも一方を設定する必要があります。両方が空の場合は拒否されます。プレイブックは構造的なクエリのファミリー(エンティティを削除したもの)にひも付けられます。そのため、あるエンティティ形式のクエリから学習させた手順は、同じ形式のほかのすべてのクエリにも適用され、想起時には slots_resolved が現在のクエリの正規形を割り当てます。

今後の想起でプレイブックが見つかった場合は、それを正解として扱ってください。slots_resolved による置換を適用して手順を再実行し、すでに手順で文書化されている調査は省略し、どの手順よりも先に notes を読んでください。

ステップ 6:デバッグ応答で修正点が見つかったら playbook amend &

デバッグプロトコルへの応答で、メモやプレイブックに反映すべき具体的な修正点(回避策、文書化されていないエンドポイントの形式、古いフィールド名、確認されたスキーマの変更、空のペイロードに対するフォールバックなど)が見つかった場合は、ユーザー向けの応答を出す前に playbook amend を実行してください。teach と同じく、実行結果を待たずに次へ進みます。

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

修正する価値があるもの:このセッションで実際に確認し、将来の自分に役立つ挙動です。修正する価値がある例:

  • CLI のインターフェースで、フラグが黙って無視されたり、順序が入れ替わったりする場合の回避策。
  • 文書化されていないエンドポイントの形式(レスポンスが {meta, results} でラップされる、ペイロードがドキュメントの記載より 2 階層深くネストされているなど)。
  • 確認されたスキーマの変更(フィールド名の変更、シーズン間でのインデックスの移動、API が小文字で返すようになったカテゴリラベルなど)。

メモに含めないもの:

  • ユーザーの質問に対する、年やエンティティ固有の回答。これは応答であり、学びではありません。
  • プレイブックが実行時にすでに取得する、チーム、選手、行ごとのデータ。
  • 既存のメモの内容を言い換えただけの記述。

amend コマンドは、タイムスタンプ付きマーカー([amend YYYY-MM-DDTHH:MMZ]: <text>)を付けて、ファミリーの既存のメモに追記します。複数の amend は蓄積され、監査証跡を確認できます。ファミリーのプレイブックがまだない場合、amend はメモのみのプレイブックを作成します(そのため、コールドスタート時の修正も記録されます)。

amend メモにおける PII の取り扱い

playbook amend のメモは、将来の Printing Press のバージョンで共有知識として上流に送られる可能性があります。上流への貢献経路を事後の削除なしで維持できるよう、ユーザーを特定できる情報は含めないでください。

  • 含めないでください:ユーザーのファイルシステムのパス、個人用 API キーやトークン、ユーザーのメールアドレス、ユーザーの GitHub ハンドル、単一ユーザーにひもづく特定のクエリ履歴。
  • 含めても問題ありません:エンドポイントの形式、文書化されていないフィールド名、API の注意点、確認されたスキーマの変更、CLI インターフェースの回避策、汎用的なページネーションや再試行の方法。

修正点がユーザー固有のコンテキストなしでは意味をなさない場合は、プレイブックの amend ではなく、個人用メモに記録してください。

ループの測定

table-reservation-goat-pp-cli learnings stats は、ローカルの learn_events テーブルから、再呼び出しのヒット率、teach から再利用への移行率、プレイブックの解決率、候補の確認数/却下数を報告します。分母がない間は率が null になります。データはすべてこのマシン内にとどまります。この CLI でループが役立っているかを確認するために使ってください。

学習の無効化
  • 単一のコマンドに --no-learn を指定すると、recall と teach の書き込み処理がどちらもスキップされます。蓄積された学習内容の影響を受けてはならない、決定論的なエージェントのフローやテストに使用してください。
  • 環境変数 TABLE_RESERVATION_GOAT_NO_LEARN=true を設定すると、パイプライン全体が無効になります。

エージェントへのフィードバック

この CLI について気になる点に気づいた場合は(あなた自身でもエージェントでも)、記録してください。

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

エントリーは、解決済みのデータディレクトリにある feedback.jsonl にローカル保存されます。TABLE_RESERVATION_GOAT_FEEDBACK_ENDPOINT が設定されており、かつ --send が指定されているか TABLE_RESERVATION_GOAT_FEEDBACK_AUTO_SEND=true の場合に限り、POST されます。デフォルトではローカルにのみ保存されます。

バグ報告ではなく、意外だったことを書いてください。短く、具体的に、1 行で。それが積み重なっていく部分です。

出力の配信

すべてのコマンドで --deliver <sink> を指定できます。出力は標準出力に加えて(または標準出力の代わりに)指定したシンクに送られるため、エージェントはコマンド結果を手動でパイプに渡さずに転送できます。次の3つのシンクに対応しています。

シンク動作
stdoutデフォルト。標準出力のみに書き込みます
file:<path>出力を <path> にアトミックに書き込みます(一時ファイルを作成してからリネーム)
webhook:<url>出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson)

未知のスキームは、対応しているスキームを明示した構造化エラーとともに拒否されます。Webhook が失敗した場合は、ゼロ以外の終了コードを返し、URL と HTTP ステータスを標準エラーに記録します。

名前付きプロファイル

プロファイルは、保存したフラグ値のセットで、呼び出しをまたいで再利用できます。スケジュール実行や定期実行されるエージェントが、実行ごとに異なる入力を受け取りつつ、同じフラグを繰り返し使う場合に便利です。

table-reservation-goat-pp-cli profile save briefing --json
table-reservation-goat-pp-cli --profile briefing experiences list
table-reservation-goat-pp-cli profile list --json
table-reservation-goat-pp-cli profile show briefing
table-reservation-goat-pp-cli profile delete briefing --yes

明示的に指定したフラグは常にプロファイルの値より優先され、プロファイルの値はデフォルトより優先されます。agent-context は、実行時にエージェントがプロファイルを確認できるよう、利用可能なすべてのプロファイルを available_profiles の下に一覧表示します。

終了コード

コード意味
0成功
2使用方法のエラー(引数が正しくありません)
3リソースが見つかりません
5API エラー(上流の問題)
7レート制限中(待ってから再試行してください)
10設定エラー

引数の解析

$ARGUMENTS を解析します。

  1. 空、help、または --help → table-reservation-goat-pp-cli --help の出力を表示します
  2. install で始まる → mcp で終わる場合は MCP のインストール、それ以外の場合は上記の前提条件を参照してください
  3. それ以外 → 直接使用(--agent を付けて CLI コマンドを実行します)

MCP サーバーのインストール

  1. MCP サーバーをインストールします。
    go install github.com/mvanhorn/printing-press-library/library/food-and-dining/table-reservation-goat/cmd/table-reservation-goat-pp-mcp@latest
    
  2. Claude Code に登録します。
    claude mcp add table-reservation-goat-pp-mcp -- table-reservation-goat-pp-mcp
    
  3. 確認します:claude mcp list

直接使用

  1. インストール済みか確認します:which table-reservation-goat-pp-cli 見つからない場合は、インストールを提案してください(このスキルの冒頭にある前提条件を参照)。
  2. ユーザーのクエリに最適なコマンドを、上記の独自の機能とコマンドリファレンスから選びます。
  3. --agent フラグを付けて実行します。
    table-reservation-goat-pp-cli <command> [subcommand] [args] --agent
    
  4. 曖昧な場合は、サブコマンドのヘルプを確認します:table-reservation-goat-pp-cli <command> --help。

コメント