TastePolicy について
TastePolicyは、Qlooの文化的データと所有者が定めるルールを用いて、エージェントの嗜好に基づく選択に権限境界を設けます。理由と条件付き権限を添えてALLOW、ASK、REJECT、UNAVAILABLEを返し、購入などの実行権限は付与しません。
主な機能
- 01決定論的な嗜好判断
- 02所有者が定めるバージョン管理ポリシー
- 03確認基準付きの行動段階
- 04特定の選択に対する一時リース
- 05選択的開示に対応した署名付き証明
- 06文化的根拠と判断タイムライン
活用シーン
- 01ホテルを候補に加える権限の確認
- 02選択を確定表示する前に承認を求める
- 03状況の変化に応じて権限を一時停止
MCP 対応
`/api/mcp`でリモートMCPサーバーを提供し、嗜好に関わる判断ツールを公開します。ホスト型アシスタント向けにOAuth 2.1をサポートすると記載されています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://tastepolicy.vercel.app/api/mcpclaude mcp add --transport http victorcyberdev-tastepolicy https://tastepolicy.vercel.app/api/mcp{"mcpServers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}Cursor で開く{"servers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}VS Code で開く{"mcpServers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}{"mcpServers":{"victorcyberdev-tastepolicy":{"serverUrl":"https://tastepolicy.vercel.app/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
リリースの承認元:M10–M26 実行台帳。M6–M10 の正規候補:
m10-m26-company-build。ツリー/系譜監査。CI の成功とホストされたプレビューの承認は、本番環境への導入や、実際の ChatGPT/Claude の稼働開始を意味するものではありません。
TastePolicy
AI エージェントのための、主観的な権限レイヤーです。
Qloo はエージェントに好みを与えます。TastePolicy は、その好みに権限の境界を設けます。 あなたの好み。あなたのルール。あらゆるエージェントに。
エージェントは技術的には、ホテル、レコード、ブランドをおすすめできます。TastePolicy が答えるのは、その次の問いです。このエージェントは、この人のために、この状況で、今、この主観的な選択をしてよいのでしょうか? 答えは ALLOW、ASK、REJECT、UNAVAILABLE のいずれかです。判断の根拠となったルール、Cultural Receipt、そして事実が変わると終了する、範囲を限定した許可が伴います。
ALLOW が付与するのは、好みに関する権限のみです。 支払い、予約、購入、メッセージ送信、アカウント、法務、その他あらゆる実行権限を付与することはありません。メモリーは許可ではなく、Qloo の親和性は承認ではなく、おすすめは承認ではありません。UNAVAILABLE は REJECT ではなく、証明を検証しても行為が承認されたことにはなりません。
Qloo と TastePolicy
| Qloo | TastePolicy | |
|---|---|---|
| 提供するもの | 文化的な証拠:ドメインをまたぐエンティティ間の親和性 | 好みに基づく選択について、エージェントが何をしてよいかを定める権限 |
| 答える問い | 「どのくらい適合しますか?」 | 「このエージェントは、この人のために、今、どこまで進めてよいですか?」 |
| 失敗時の動作 | プロバイダーが利用できない | UNAVAILABLE:判断できませんでした。これは拒否ではなく、好みに対する否定的な判断でもありません |
全体の仕組み
Qloo cultural evidence
→ subject-owned preference state (immutable versions)
→ context + explicit constraints
→ one deterministic evaluator ─ ALLOW / ASK / REJECT / UNAVAILABLE ─ Cultural Receipt
→ owner policy (rules, action ladder, sensitive choices, temporary permissions)
→ bounded lease bound to commitments of the choice and situation
→ drift suspends it; a fresh evaluation is required to resume (new epoch)
→ signed, selectively disclosed proof another agent can verify
→ doors: REST · TypeScript SDK · remote MCP · A2A · OAuth account linking
ポリシー評価器は常に1つだけです。M6–M9 は、受け入れ済みの M1–M5 評価器をラップして拡張するものであり、置き換えるものではありません。
主観的な行為の段階
好みに合う選択について、エージェントがどこまで進めるかを、最も控えめなものから順に示します。
| 段階 | 意味 |
|---|---|
SUGGEST | アイデアの1つとして提案する |
RANK | 複数の選択肢に順位を付ける |
SHORTLIST | 選択肢をいくつかに絞る |
ADD_TO_DRAFT | まだ変更できる計画に追加する |
PRESENT_AS_SELECTED | あなたのために選ばれたものとして提示する |
所有者は、エージェントが確認を求めずに進められる最も高い段階を、全体、選択の種類ごと、エージェントごとに設定します。その段階を超える要求は ALLOW から ASK に変わり、所有者は1回だけ回答できます。ハードブロック、保存済みの制限、UNAVAILABLE、グループの拒否権は、この段階設定によって変更されることはありません。従来のクライアントの動作は維持されます。recommend = SHORTLIST、add_to_draft = ADD_TO_DRAFT で、所有者がオプトインするまでは、選択済みとして提示する場合は常に確認を求めます。ADR 0024 を参照してください。
Decisions、Passport、ポリシー、リース、証明
- Decisions。 判断は決定論的で、Cultural Receipt が記録されます。ASK は型付きです。権限の確認(ユーザー自身のルールが事前に確認を求めている場合)は回答を待つことができます。明確化(価格など、情報が不足している場合)は承認できず、新たな評価が必要です。
- Passport。 不透明な参照情報の背後にある非公開の状態、スコープ付きの許可、ハッシュ化された認証情報、アカウントセッションです。
- ポリシー。 バージョン管理され、公開前にシミュレーションされます。証拠クラスごとの鮮度、エージェントごとおよび種類ごとのルール、選択のうち機微な種類に対する追加の配慮、一時的な権限、反実仮想による説明を備えています。範囲を広げるには、最近のサインインが必要です。
- リース。 特定の選択 1 件に対する、短期間でイベントソース型の権限です。あなたの情報、ルール、共有、一時的な権限、または選択や状況そのものが変わると一時停止します。TastePolicy に通知された範囲に限ります(エージェントは検証時とチェックポイント時に現在の候補とコンテキストを提示します。誰も提示しない変更は検知できません)。ADR 0025 を参照してください。
- 証明。 選択的開示、ホルダーキーとのバインディング、リプレイ保護、Token Status List、オーディエンスごとの権限エポックを備えた、署名済み SD-JWT 証明です。権限が終了すると、そのエポックの証明は永久に無効になります。再開すると新しいエポックが始まり、古い証明が再び有効になることはありません。検証者が独自の選択と状況を指定すると、その証明が自分に関するものかどうかを知ることができます。
- タイムライン。
/account/timelineには、すべての質問、ルール変更、権限、共有された証明が順番に表示されます。
使い方
REST(認証情報のスコープ:PASSPORT_READ、TASTE_EVALUATE、RECEIPT_READ):
curl -sS https://YOUR_ORIGIN/api/v1/evaluate \
-H "authorization: Bearer $TASTEPOLICY_KEY" -H "content-type: application/json" \
-d '{"idempotencyKey":"trip-2026-001","passportRef":"tp_…","requestedAction":"ADD_TO_DRAFT",
"proposal":{"agentId":"my-agent","expectedStateVersion":1,
"candidate":{"id":"…","name":"Hotel Lisboa","type":"destination"},
"context":{"key":"trip","domain":"destination","price":{"amount":120,"currency":"USD"}}}}'
TypeScript SDK(サーバー側、このリポジトリ内。npm では公開されていません):
const tp = new TastePolicyClient({ baseUrl, credential });
const r = await tp.evaluate({
passportRef,
idempotencyKey,
requestedAction: "SHORTLIST",
proposal,
});
if (r.decision === "ALLOW") {
const lease = await tp.lease({
idempotencyKey,
evaluationRef: r.evaluationRef,
});
// before relying on it, present the choice as it is now:
await tp.leaseVerify(lease.leaseRef, { context: currentContext });
}
/api/mcpのリモート MCP(Streamable HTTP)。ツールの説明には、呼び出すタイミングが記載されています。_人のために、主観的な好みに左右される選択を行う際、候補の選択、順位付け、推奨、候補リストへの絞り込み、下書きへの追加、選択済みとしての提示、その他の方法で先に進む前_に呼び出してください。/.well-known/agent-card.jsonの A2A 1.0 Agent Card、/api/a2aの JSON-RPC。リース、証明、引き継ぎのためのオプトイン型権限ライフサイクル拡張を備えています(ADR 0026)。- ホスト型アシスタント向けの OAuth 2.1(認可コード + PKCE S256、クライアント ID メタデータまたは動的登録、ローテーションするリフレッシュトークン、MCP 専用オーディエンス)。ADR 0022 を参照してください。
/api/v1/openapiの OpenAPI。認証情報不要の検証ツールは/verifyとPOST /api/attest/verifyにあります。発行者メタデータは/.well-known/tastepolicy-issuerにあります。サードパーティの発行者は検査のうえ、明示的に信頼されます。自動的に信頼されることはありません(ADR 0027)。
セキュリティとプライバシー
認証情報とトークンはハッシュ化して保存されます。OAuth トークンはオーディエンスに紐付けられ、有効期間は 15 分です。プロバイダーへの呼び出しがデータベーストランザクションやロックの中で実行されることはありません。ポリシーの範囲を広げるには、最近のサインインが必要です。複数のインスタンス間で維持する必要があるレート制限は、PostgreSQL を通じて共有されます(ADR 0028)。エージェントに伝わるのは回答、簡潔な理由、許可される範囲です。レシートには選択、マッチングの根拠となった文化的証拠、判断を決定したルールが示されます。デフォルトでは、証明によって好み、名前、アカウント参照情報が開示されることはありません。脅威モデルとレビュー記録:docs/security/threat-model.md、サプライチェーン。
ローカル開発
Node.js 24 と npm が必要です。npm ci && cp .env.example .env.local && npm run dev を実行してください。認証情報がなくてもアプリは実行でき、利用不可の状態を報告します。Qloo の結果を捏造することはありません。Qloo を使用するには、QLOO_API_KEY(サーバー専用)、QLOO_API_BASE_URL、QLOO_AFFINITY_SCALE を設定してください(セットアップ)。永続化には DATABASE_URL が必要です。アカウント機能には BETTER_AUTH_SECRET と BETTER_AUTH_URL が必要です。証明には TASTEPOLICY_PUBLIC_ORIGIN と TASTEPOLICY_ATTESTATION_KEY が必要です。npm run db:migrate:all でスキーマを適用してください(台帳管理され、べき等です。ADR 0030)。.env.example を参照してください。
テスト、適合性、負荷
npm run verify # format, lint, typecheck, unit tests, build
npm run test:e2e # Playwright incl. axe accessibility checks
npm run conformance:compatible # tastepolicy-compatible-v1 (110 checks)
npm run tastebench:validate # evaluation methodology fixtures
TASTEPOLICY_TEST_DATABASE_URL=postgres://… npm test # adds real-PostgreSQL suites
npm run load:local # controlled contention probe (not a capacity claim)
ライブデプロイ
docs/evaluation/r6-hosted-acceptance.md では、証拠を種類別に分類しています:LIVE、HOSTED、CONTROLLED、SYNTHETIC、LOCAL、CI、NOT EXECUTED、BLOCKED。この README では、ベンダーのアシスタント(ChatGPT、Claude、Gemini)が TastePolicy で動作するとは一切主張していません。製品ページには、利用可能なもの、ロードマップにあるもの、未実装のものが記載されています。
現在の制限事項
- コミットメントベースのドリフト検出は、エージェントが TastePolicy に伝える内容を対象とします。外部の状況を観測することはできません。
- デプロイごとに設定できる組織の上限は 1 つで、運用者が設定します。複数組織モデル、SSO/SCIM、管理コンソールはありません。
- 機微な選択は、選択の種類ごとに所有者が宣言します。コンテンツは分類されません。
- 認証済み MCP/A2A リクエストの予算はインスタンスごとです。
- フェデレーションでは明示的な信頼のみを扱います。レジストリはなく、発行者間の失効情報の伝播もありません。
- 実際の Qloo およびベンダーコネクターを使用したホスト型受け入れテストは、R6 の記録に記載されています。ステータスを参照してください。
- TasteBench のしきい値は実験的なものであり、母集団に基づく調整はされていません。
以前のマイルストーンと受け入れ記録の履歴:docs/history、docs/evaluation。ライセンス:Apache-2.0。コントリビューション:CONTRIBUTING.md。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。