MINARA

学習済み設定

GET / POST /v1/preferences:ユーザーの会話から抽出した設定を一覧、確認、承認、却下、非推奨化します。

設定進化システムは、会話から永続的なユーザー設定(例:「ミームコインは絶対に取引しない」「簡潔に返答する」「ローソク足よりオンチェーンデータを優先する」)を抽出し、有効になる前に状態機械を通します。

M1 は読み取り専用エンドポイントを提供しました。M2 では approve / reject / deprecate の変更操作と、一覧エンドポイントの total フィールドを追加しました。M3 では undo エンドポイントと hard_constraint 行のツールレベル強制を追加しました。

M4 ではブリッジを追加しました。active への遷移は設定を関連する下流ストアへ書き込みます。有効な 11 次元タグを指定するハード制約には user_tags、各 personal_style 行には memories ミラー(スタイルヒントを FTS インデックス化)、シナリオ対象 behavioral_preference 行には scenario-classifier ブースト、methodology ID 対象の行には方法論優先度の乗数を書き込みます。active からの遷移(deprecate / reject)は各書き込みを元に戻します。ブリッジ書き込みはベストエフォートで、状態遷移を妨げません。失敗は learning/preference-bridge を含むログに出力されます。完全な書き込みパス図は自己改善システムを参照してください。

各設定には 3 つの分類軸があります。

  • kindpersonal_stylebehavioral_preferencehard_constraint のいずれか。
  • dimensionriskchainasset_classtimingmethodologystyleconstraint のいずれか。
  • stateproposedactivedeprecatedrejected のいずれか。

完全なライフサイクルは ~/.claude/plans/autoclaw-agent-agent-lazy-lollipop.md のプロジェクト計画を参照してください。


GET /v1/preferences

任意のフィルターで設定を一覧します。

メソッドGET
パス/v1/preferences
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
クエリstatedimensionkindlimit(既定 100、最大 500)
カテゴリlearning

レスポンス 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "pref_a1b2c3d4e5f6",
        "user_id": "default",
        "dimension": "asset_class",
        "kind": "hard_constraint",
        "statement": "Never trade meme coins",
        "structured": { "operator": "exclude", "subjects": ["meme_coin"], "scope": ["buy", "swap"] },
        "evidence": null,
        "source": "manual",
        "state": "active",
        "confidence": 0.65,
        "times_observed": 4,
        "times_violated": 0,
        "dedup_key": "asset_class:hard_constraint:never trade meme coins",
        "bridges_user_tag": null,
        "approved_at": "2026-04-15T08:00:00Z",
        "last_ask_at": null,
        "created_at": "2026-04-13T10:00:00Z",
        "updated_at": "2026-04-15T08:00:00Z"
      }
    ],
    "count": 1,
    "total": 1
  }
}

count はこのページの行数(≤ limit)、total はテーブル全体でフィルターに一致する行数です。count == limit && total > limit の場合は、フィルターを絞るか、より小さな limit でページングして残りを確認してください。

statedimensionkindlimit が無効な場合は レスポンス 422 を返します。


GET /v1/preferences/:id

ID で単一の設定を取得します。

メソッドGET
パス/v1/preferences/:id
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
カテゴリlearning

レスポンス 200:上記の items[] 要素と同じ行形式です。

ID が存在しない場合は レスポンス 404 を返します。


POST /v1/preferences/:id/approve

proposed 行を active に昇格します。未設定なら approved_at を設定します。REPL の /preferences approve コマンドおよび minara preferences approve <id> と同等です。

メソッドPOST
パス/v1/preferences/:id/approve
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
本文任意の { "reason": "..." }(監査証跡、≤ 500 文字)
カテゴリlearning

レスポンス 200:標準エンベロープ内の更新済み設定行。

ID が見つからない場合は レスポンス 404

レスポンス 409:無効な遷移(例:行がすでに rejected)または別の書き込み側が先行した場合(CAS lost。現在の状態を見るには再度 GET)。


POST /v1/preferences/:id/reject

proposed(既存設定を廃止する場合は active)を rejected に昇格します。形式は上記 approve と同じです。rejected は終端状態で、行は監査証跡として保持されますが再表示されません。

メソッドPOST
パス/v1/preferences/:id/reject
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
本文任意の { "reason": "..." }
カテゴリlearning

POST /v1/preferences/:id/deprecate

activedeprecated に昇格します。設定はシステムプロンプトへ注入されなくなりますが、行は保持されます。そのため類似性ゲートは再提案を重複として検出し、再質問を省略できます。類似ステートメントの一致として二度と戻さない場合は reject を使用してください。

メソッドPOST
パス/v1/preferences/:id/deprecate
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
本文任意の { "reason": "..." }
カテゴリlearning

POST /v1/preferences/:id/undo

設定済みの取り消し期間内で、強いシグナルにより自動有効化された hard_constraint を取り消します(既定 24 時間。PREFERENCE_HARD_UNDO_WINDOW_HOURS を参照)。行は deprecated に遷移し、ツールレベルの強制はただちに停止します。監査証跡(auto_activated_at タイムスタンプ、元のステートメント)は保持されます。M3 で導入されました。

次の場合は deprecate を使用してください。(a) 設定が手動承認されている(auto_activated_at が null)、または (b) 期間が失効している場合です。

メソッドPOST
パス/v1/preferences/:id/undo
認証GATEWAY_AUTH_TOKEN 設定時は Authorization: Bearer <token> が必要
本文任意の { "reason": "..." }(≤ 500 文字)
カテゴリlearning

レスポンス 200:行は非推奨になりました。

レスポンス 404:ID が見つかりません。

レスポンス 410 Gone:行は自動有効化されていますが、取り消し期間が失効しています。deprecate を使用してください。

レスポンス 413:本文が 4 KB を超えています。

レスポンス 422:行は手動承認済み(auto_activated_at なし)です。deprecate を使用してください。

レスポンス 409:CAS lost(別の書き込み側が先に行を変更)または無効な構造遷移。

目次