# パーソナルダッシュボード 指示書 v1.6.0

これは、ユーザーの個人用AIアシスタント（以下「あなた」）に読ませるための指示書です。

ユーザーが「パーソナルダッシュボードを作って」「ダッシュボードを更新して」と言ったら、あなたはこの指示書に従って、あなたがそのユーザーについて覚えていることを、パーソナルダッシュボードWebアプリに取り込めるJSONとしてまとめ、取り込みリンクを渡してください。

ユーザーはフォーム入力やJSONの知識を持つ必要はありません。足りない情報は、あなたが覚えている範囲で補い、分からないものは作らないでください。

ダッシュボードの置き場所: 説明ページは https://convly.jp/personal-dashboard/ （日本語は /ja/、英語は /en/）。アプリ本体（マイページ）は https://convly.jp/personal-dashboard/mypage/ で、URLは言語共通。表示言語はデータの language に追随する。
取り込みリンクの形式: §8 を参照。

v1.3.0 での変更: `reminders`（あなたに登録されているリマインダーの一覧）と、任意の連携モジュール `modules.health` / `modules.sokqa` を追加した。訂正にはリマインダーの取消・日時変更が加わった。

v1.4.1 での変更: 共有カードを図解カード（マガジン表紙型レイアウト）に一本化した（§6）。v1.4.0 の発見カード（文字中心）は廃止し、見出しは図解カード側に取り込んだ。

v1.4.0 での変更: `expertise`（ユーザー本人のスキル。「関心」とは別に、根拠のある「できること」）と、任意の `agent`（あなた自身の profile・スキル・コネクタ・デバイス・定期タスク）を追加し、タブに「スキル／装備」が加わる。共有画像には文字中心の発見カードに加えて図解カード（関心マップ型）を追加した（§6）。

---

## 1. あなたの役割

- あなたがユーザーについて覚えていること（関心、人、目標と約束、好みと判断基準）を、決められたJSON形式（§7）に整理して渡すこと。
- 特に「関心の変化」「本人が自覚していないかもしれない繰り返しのパターン」など、本人への気づきになる洞察（insights）を立てること（§4）。
- **会話の言語は、ユーザーが使っている言語に合わせること。** この指示書が日本語で書かれていることは、会話の言語を決めない。JSONの値はユーザーの言語で書き、JSONのキーとenum値は常に英語のままにすること。ユーザーが途中で言語を切り替えたら、それに追随すること。
- あなたは画像を生成しないこと。このプロダクトの共有画像は、ダッシュボード側がデータから描画する。ユーザーに「部屋の画像を作って」と言われても、この指示書の範囲では画像生成に分岐せず、ダッシュボード用データの作成として扱うこと（ユーザーが明示的に画像生成そのものを求めた場合はこの指示書の対象外）。

## 2. 起動と入口

- ユーザーが「ダッシュボードを作って／更新して／Museが覚えている私を見せて」等と言ったら、この指示書のフローに入ること。
- 初回は、作るものを短く伝えること：あなたが覚えていることを、発見・関心・人・目標のタブで見られるダッシュボードとしてまとめ、リンク1つで取り込める形で渡すこと。共有は図解カードの画像で行い、ダッシュボード側がデータから描くこと。
- 既に前回のダッシュボードがある場合は、前回の `revision` を +1 し、前回の各項目の `id` を必ず引き継ぐこと（idが変わると、ユーザーの訂正と共有設定が突き合わせられなくなる）。
- ユーザーから訂正（§9）が渡されている場合は、先に訂正を記憶へ反映してから、作り直すこと。

## 3. 集める内容と上限（リンクに載せるため小さく保つ）

ダッシュボード用JSONは「記憶の全量」ではなく、見せるための要約であること。次の上限を守ること（取り込みリンクの長さ制限のため。§8）。

| 区分 | 上限 | 備考 |
|---|---|---|
| insights（気づき） | 5件 | §4 の型から優先順に |
| interests（関心） | 12件 | level の高い順 |
| people（人） | 12件 | strength の高い順 |
| goals（目標・約束） | 10件 | active と直近の約束を優先 |
| preferences（好み・判断基準） | 12件 | kind ごとに偏らないように |
| reminders（リマインダー） | 20件 | あなたに実際に登録されているものだけ。日時が近い順 |
| modules（連携モジュール） | 任意 | 健康・Sokqa の集計のみ。データが無い連携は省略する |
| expertise（あなたのスキル） | 12件 | 「できること」を根拠（evidence）つきで。level の高い順 |
| stats（能力ステータス） | 6軸 | 共通4軸＋特性2軸のハイブリッド。測定ルールは §11。根拠のない軸は出さない |
| agent.skills（あなたのスキル） | 20件 | あなたが実際に使えるものだけ。builtin / custom / instruction の別つき |
| agent.connectors | 20件 | 接続状態（connected / available）が確認できるものだけ |
| agent.devices | 10件 | ペアリング状態が確認できるものだけ |
| agent.scheduled（定期タスク） | 20件 | あなたに実際に登録されている繰り返しタスクだけ |

- 各項目の文章は短くすること。note や detail は1〜2文まで。
- reminders には、あなた自身に登録されている通知（リマインダー／定期チェック等）を列挙すること。**登録されていないものを予定の推測で作ってはいけない。** `scheduled_for` は通知が発火する日時（期限そのものではない）。関連する目標があれば `related_goal_id` にその id を入れる。
- expertise は「関心（interests）」とは別物として扱うこと。話題によく出るだけではスキルにせず、実際にやっている・成果があるなど、根拠（evidence）を1文で書けるものだけを載せること。level は根拠の強さに対して正直に付けること（学習を始めた段階なら 1〜2）。
- agent は、あなた自身の構成をあなたが確認できる範囲で書くこと。**確認できないスキル・コネクタ・デバイス・定期タスクを推測で載せてはいけない。** あなたの環境に「スキル」の概念が無い場合は、代わりに「できることの手順・機能」を skills としてよい。agent が全く確認できない場合は、agent 自体を省略してよい。
- modules は、あなたが実際に読み取れるデータがある場合だけ付けること。健康は集計値のみ（歩数・睡眠の平均や前期間との比較、ワークアウト回数）で、生の時系列全量は入れないこと。Sokqa はコース作成の履歴など、あなた側に履歴があるものだけとし、アプリ側にしかない情報（読みの補正など）は、Sokqa の書き出し（Sokqa 指示書 §11）が渡された場合に限ること。出典の無い数値は入れないこと。
- 覚えていない区分は、無理に作らず空配列でよい。ただし interests と insights が両方とも空になる場合は、ダッシュボードを作る材料が無いことをユーザーに伝え、最近の関心や目標を最小限だけ聞くこと。

## 4. insights（気づき）の立て方

insights はこのダッシュボードの核である。単なる要約ではなく、本人への気づきになるものだけを立てること。

型は次の4つだけを使うこと（`type`）。

- `shift`（変化）: 関心や話題の中心が、以前と比べて移っている。
- `hidden_pattern`（隠れテーマ）: 本人が関心として挙げていないのに、話題に繰り返し現れるもの。
- `combination`（組み合わせ）: 複数の関心の交差が、その人らしさを作っている。
- `gap`（ズレ）: 本人が大事だと言っていることと、実際の話題・時間の使い方との差。

ルール:

- 各 insight には必ず `evidence`（根拠となった話題・出来事）を1〜3件付けること。根拠の無い推測は立てないこと。
- `novelty` には、本人が既に自覚していそうなら `known`、自覚していない可能性が高ければ `likely_new` を付けること。
- `confidence` は根拠の強さで正直に付けること（high / medium / low）。low の insight は最大1件まで。
- 性格診断のような断定はしないこと。「〜かもしれません」「〜が増えています」のように、検証可能な形で書くこと。医療・健康・心理状態の推測は insights に入れないこと。

## 5. sensitivity と share_default（共有の既定値）

全項目に次の2つを付けること。

- `sensitivity`: あなたからの提案値。`low` / `medium` / `high` と、high・medium の場合は `sensitivity_reason`（短く）。
- `share_default`: 共有画像・共有データにその項目をどう出すかの既定値。`public`（そのまま）/ `masked`（伏せ字化して出す）/ `private`（共有データから除外）。

既定値の表（これより緩い既定を付けないこと）:

| 項目 | sensitivity | share_default |
|---|---|---|
| 人の実名・所属が分かる情報 | high | private |
| 人の関係カテゴリと人数だけ | medium | masked |
| 目標・約束の具体名・期限・相手 | medium 以上 | private |
| 目標のカテゴリと件数 | low | masked |
| 好み・判断基準（固有名詞を含まないもの） | low | public |
| 関心テーマとトレンド | low | public |
| 健康・家族の事情・金銭の具体値 | high | private |
| リマインダーの具体名・日時 | medium 以上 | private |
| あなたのスキルの具体名（expertise） | medium | masked まで（public にしない） |

- `modules`（健康・Sokqa）の中身は、共有画像・共有データの対象に**含めない**こと。項目ごとの share_default も付けない（モジュール単位で共有対象外とする）。健康の具体値は本人のマイページでのみ見せる前提で扱うこと。
- `agent`（あなたのスキル・コネクタ・デバイス・定期タスク）の中身も同様に、共有画像・共有データの対象に**含めない**こと。コネクタやデバイスの構成は本人の画面でのみ見せる前提で扱い、項目ごとの share_default は付けないこと。

- Web側でユーザーが変更できるのは share_default の最終値だけであり、あなたは提案までを行う立場であることを、納品時に短く伝えること。
- 実名らしい文字列を含む項目は、内容によらず最低 `medium` にすること。

## 6. 共有カードについて

共有は、ダッシュボード側が描く画像で行う。カードは「能力レーダーカード」1種のみ（左に総合戦闘力、右に能力レーダーチャートを置くエンタメ枠）。カードに入るのは、本人の表示名と §11 の stats（軸の名前と数値、総合戦闘力）だけであり、根拠の文章・人の名前・目標の具体名は入らない。保存は横長PNG（1200×630）のみで、X共有ボタンも付く。かつての「図解カード」（関心マップ型）は 2026-11-09 に廃止し、共有タブの項目別共有設定（公開／伏せ字／非公開）も廃止した。interests 等の share_default は、もはやカードに影響しない。あなたが用意するのは §11 の stats までであり、カードの描画そのものはWeb側（または Space 側）が行う。イラストや画像の生成は、このプロダクトでは扱わない。

## 7. 出力形式（厳守）

```json
{
  "schema": "personal-dashboard/dashboard/v1",
  "revision": 1,
  "generated_at": "2026-11-03T00:00:00+09:00",
  "language": "ja",
  "subject": {
    "display_name": "表示名",
    "handle_for_share": null,
    "one_line": "その人を表す一文（ユーザーの言語）",
    "summary": "2〜3文の要約"
  },
  "insights": [
    {
      "id": "ins-001",
      "type": "shift",
      "title": "気づきの見出し",
      "detail": "1〜2文",
      "evidence": ["根拠の話題1"],
      "novelty": "likely_new",
      "confidence": "medium",
      "related_interest_ids": ["i-001"],
      "sensitivity": "low",
      "sensitivity_reason": "",
      "share_default": "public"
    }
  ],
  "interests": [
    {
      "id": "i-001",
      "topic": "関心テーマ",
      "level": 4,
      "trend": "up",
      "evidence": "根拠の話題を短く",
      "self_aware": true,
      "sensitivity": "low",
      "sensitivity_reason": "",
      "share_default": "public"
    }
  ],
  "people": [
    {
      "id": "p-001",
      "name": "名前または呼称",
      "relation_category": "work",
      "relation_label": "関係を表す短い言葉",
      "note": "1文まで",
      "strength": 2,
      "sensitivity": "high",
      "sensitivity_reason": "実名を含む",
      "share_default": "private"
    }
  ],
  "goals": [
    {
      "id": "g-001",
      "title": "目標・約束の名前",
      "category": "カテゴリ",
      "status": "active",
      "due": null,
      "is_commitment": false,
      "with_person_id": null,
      "sensitivity": "medium",
      "sensitivity_reason": "具体的な目標名",
      "share_default": "private"
    }
  ],
  "preferences": [
    {
      "id": "pr-001",
      "kind": "value",
      "text": "好み・判断基準を1文で",
      "sensitivity": "low",
      "sensitivity_reason": "",
      "share_default": "public"
    }
  ],
  "expertise": [
    {
      "id": "ex-001",
      "name": "スキルの名前（できること）",
      "category": "カテゴリ",
      "level": 3,
      "evidence": "根拠となる実績・行動を1文で",
      "sensitivity": "medium",
      "sensitivity_reason": "スキルの具体名",
      "share_default": "masked"
    }
  ],
  "reminders": [
    {
      "id": "r-001",
      "title": "リマインダーの名前",
      "scheduled_for": "2027-09-25T09:16:00+09:00",
      "detail": "発火時に何をお知らせ・確認するか（1文）",
      "related_goal_id": null,
      "sensitivity": "medium",
      "sensitivity_reason": "具体的な予定名と日時",
      "share_default": "private"
    }
  ],
  "modules": {
    "health": {
      "period_days": 28,
      "steps": { "avg_daily": 7200, "prev_avg_daily": 6400 },
      "sleep": { "avg_hours": 6.8, "weekday_hours": 6.5, "weekend_hours": 7.4 },
      "workouts": { "count": 9, "last": "2026-11-02" }
    },
    "sokqa": {
      "courses_total": 6,
      "recent_courses": [{ "title": "コース名", "created_at": "2026-10-20" }],
      "corrections_total": 23,
      "last_activity_at": "2026-11-01"
    }
  },
  "stats": {
    "axes": [
      { "id": "stat-ai", "kind": "common", "key": "ai", "label": "AI力", "score": 80, "basis": "根拠を1文で" },
      { "id": "stat-ideas", "kind": "common", "key": "ideas", "label": "発想力", "score": 70, "basis": "根拠を1文で" },
      { "id": "stat-persistence", "kind": "common", "key": "persistence", "label": "継続力", "score": 65, "basis": "根拠を1文で" },
      { "id": "stat-learning", "kind": "common", "key": "learning", "label": "学習力", "score": 60, "basis": "根拠を1文で" },
      { "id": "stat-special-1", "kind": "special", "label": "特性の名前（短く）", "score": 75, "basis": "根拠を1文で" },
      { "id": "stat-special-2", "kind": "special", "label": "特性の名前（短く）", "score": 55, "basis": "根拠を1文で" }
    ]
  },
  "agent": {
    "profile": { "name": "あなたの名前", "one_line": "あなたを表す一文" },
    "skills": [
      { "id": "as-001", "name": "スキルの名前", "kind": "builtin", "category": "カテゴリ", "summary": "何ができるかを1文で" }
    ],
    "connectors": [
      { "id": "ac-001", "name": "コネクタの名前", "category": "カテゴリ", "status": "connected", "note": "" }
    ],
    "devices": [
      { "id": "ad-001", "label": "デバイスの呼称", "kind": "smartphone", "status": "paired" }
    ],
    "scheduled": [
      { "id": "at-001", "title": "定期タスクの名前", "cadence": "頻度の要約（例: 平日 7:00）", "status": "active" }
    ]
  }
}
```

共通ルール:

- 出力はJSONとして解釈できる厳密な構文にすること。末尾カンマ禁止。文字列の途中で改行しないこと。
- `id` は区分ごとの接頭辞＋連番（ins- / i- / p- / g- / pr- / r- / ex- / as- / ac- / ad- / at-）で、更新時も引き継ぐこと。新規項目だけ新しい番号を振ること。
- `reminders` と `modules`、`expertise`、`agent` は任意区分である。リマインダーの登録が無い場合は `reminders` を空配列にし、連携データが無い場合は `modules` 自体を省略してよい。スキルとして根拠を書けるものが無い場合は `expertise` を空配列にし、自分の構成を確認できない場合は `agent` 自体を省略してよい。`scheduled_for` はタイムゾーン付きの ISO 8601 で書くこと。
- enum の値域: `trend` は `up` / `down` / `flat` / `new`。`relation_category` は `family` / `work` / `friend` / `community` / `other`。`status` は `active` / `paused` / `done`。`kind`（preferences）は `like` / `avoid` / `value` / `style` / `principle`。`kind`（agent.skills）は `builtin` / `custom` / `instruction`。agent.connectors の `status` は `connected` / `available`、agent.devices の `status` は `paired` / `available`、agent.scheduled の `status` は `active` / `paused`。`level` と `strength` は整数（level は1〜5、strength は1〜3）。
- `due` は分かれば `YYYY-MM-DD`、無ければ null。「現在」「今年」「最新」など時間が経つと陳腐化する表現は使わないこと。
- 事実として覚えていないことを、もっともらしく補完しないこと。

## 8. 渡し方（取り込みリンクを第一とする）

納品は次の順序で行うこと。

### 8.1 取り込みリンクの生成（コード実行ができる環境）

1. §7 のJSONをファイルに書き出すこと。
2. 次の手順でリンクを作ること。**エンコード文字列を手で書いたり推測で作ったりしてはいけない。** 必ずコードで計算すること。
   - JSONを UTF-8 でバイト列にする
   - raw DEFLATE で圧縮する（例: Python なら `zlib.compress(data, wbits=-15)`）
   - base64url 形式（`+`→`-`、`/`→`_`、末尾の `=` は除く）に変換する
   - リンクは `https://convly.jp/personal-dashboard/mypage/#import=v1.` ＋ 変換後の文字列 とする（マイページのURLは言語共通で、表示言語はJSONの `language` で決まる）
3. **検証**: 作ったリンクのペイロード部分をデコード→解凍し、元のJSONと完全一致することを確認してから渡すこと。一致しなければリンクを渡さず、8.2 に切り替えること。
4. リンクの全体が概ね 16,000 文字を超える場合は、§3 の上限をさらに絞って作り直すこと。それでも超える場合は 8.2 に切り替えること。

### 8.2 フォールバック（コード実行ができない／リンクが作れない環境）

- 完成JSONをコードブロックでそのまま渡し、説明ページ（https://convly.jp/personal-dashboard/ 、言語に合わせて /ja/ または /en/）で「貼り付けて取り込む」とマイページへ移動できることを短く案内すること。
- この場合も、JSON以外の説明文をJSONの中に混ぜないこと。

### 8.3 納品時に伝えること（短く）

1. 取り込んだら何が見られるか（発見タブの気づきが件数だけでも分かるように）
2. 共有の既定値はあなたからの提案であり、項目ごとにWeb側で変更できること
3. 間違いを見つけたら各項目の「違っている」から訂正を作れること（§9）

## 9. 訂正の受け取りと反映

ユーザーがダッシュボードから作った訂正を渡してきたら、次のように扱うこと。

- 訂正は次の形式のJSON（またはそれと同内容の文章）で届く:
  `schema` が `personal-dashboard/correction/v1`、`based_on_revision` に元の revision、`corrections` に `{target_type, target_id, type, field, before, after, note}` の配列、`insight_feedback` に `{insight_id, reaction}`（reaction は `correct` / `incorrect` / `new_to_me`）の配列。
- `type` が `incorrect` / `outdated` の訂正は、あなたの記憶の該当箇所を `after` の内容で置き換えること。`remove` は、その項目を記憶とダッシュボードの両方から外すこと。`incomplete` は `note` の内容を補うこと。
- 訂正を反映したら、`revision` を +1 してダッシュボードを作り直し、§8 の手順で新しいリンクを渡すこと。その際、訂正された項目の `id` は変えないこと。
- `insight_feedback` の `new_to_me` は、気づきが本人に届いた記録として扱い、次回の insights では同種の気づきを優先してよい。`incorrect` だった insight は、根拠の立て方を見直し、同じ誤りを繰り返さないこと。
- リマインダーの訂正（`target_type` が `reminder`）: `type` が `reminder_cancel` のものは、あなたの側の実際のリマインダー登録を取り消すこと。`reminder_reschedule` のものは、登録日時を `after`（新しい日時、ISO 8601）に変更すること。どちらも実設定を変更したうえで、次のダッシュボードの `reminders` に反映すること。あなたの環境で実設定を変更できない場合は、変更できたふりをせず、その旨と代替手段（ユーザーがどこで消せるか）を正直に伝えること。

## 10. 自己検証チェック（納品前に必ず実施し、結果を報告する）

- [ ] JSONとして構文エラーがない（カンマ、引用符、括弧の対応）
- [ ] `schema` が `personal-dashboard/dashboard/v1` で、`language` がユーザーの言語と一致している
- [ ] 各区分が §3 の上限以内で、文章が上限の長さに収まっている
- [ ] すべての `id` が重複なく、更新の場合は前回から引き継がれている
- [ ] すべての項目に `sensitivity` と `share_default` が付き、§5 の表より緩い既定になっていない
- [ ] すべての insight に `evidence` が1件以上あり、断定的な性格診断や健康・心理の推測が入っていない
- [ ] 覚えていないことを補完した箇所が無い
- [ ] （リンクで渡す場合）デコード検証で元のJSONと完全一致した
- [ ] 画像生成に分岐していない
- [ ] `reminders` が実際に登録されているものと一致している（推測で作った予定が無い）
- [ ] `modules` の数値に出典があり、集計のみで生データの全量が入っていない／共有に含めていない
- [ ] すべての `expertise` に根拠（evidence）があり、関心の言い換えになっていない／level が根拠に対して盛られていない
- [ ] `agent` のスキル・コネクタ・デバイス・定期タスクが、自分の環境で確認できたものだけになっている（推測で載せたものが無い）／共有に含めていない
- [ ] `stats` の全軸に根拠（basis）があり、特性軸は前回から引き継がれている（入れ替えた場合は報告した）／数値を盛っていない

検証で直した点があれば、ユーザーへの報告に含めること。

## 11. ステータス（能力レーダー）の測定

会話と実績から読み取れる「能力」を数値化して見せる、エンタメ枠の区分。共有カードの「能力レーダーカード」と「スキル／装備」タブのステータス表示に使われる。

- **構成はハイブリッド（共通4軸＋特性2軸）**。共通軸は全ユーザー共通で、次の4つ（key と意味は固定）:
  - `ai`（AI力）: AIへの指示の出し方、任せる／任せないの判断、使い倒し度
  - `ideas`（発想力）: 企画の転換や新しい組み合わせを生む力
  - `persistence`（継続力）: 始めたものを区切りまで持っていく力
  - `learning`（学習力）: 新しい領域に入る速さと深さ
- **特性軸は2つ**。共通軸に収まらない、その人らしい能力を立てる。label は短く（日本語で8文字以内が目安。例: 検証力、仕組み化力、登山力）。「上位の能力」を選ぶこと。
- **score は 0〜100**。各軸に根拠（basis）を1文で必ず書く。数値は根拠の強さと実績の量に対する正直な評価であり、人物の価値の評価ではない。盛らない・忖度しない。
- **根拠のない軸は出さない**。共通軸でも、会話・実績から読み取れないものは省略してよい（その場合 axes は3〜5本でもよい）。無理に6本を埋めない。
- **更新時は特性軸を引き継ぐ**。前回の特性軸の id と label はそのまま使い、score と basis だけを更新する。根拠が消えた、または明らかに強い別の特性が現れた場合だけ入れ替え、入れ替えたら納品報告で伝える。
- **総合戦闘力はJSONに入れない**（アプリ側が全軸の平均×100で計算する）。
- 性格診断や健康・心理の推測はしない（§4 の insight と同じ境界）。測れるのは、会話と実績に現れた行動と成果だけである。


---

バージョン: v1.6.0（2026-11-09。変更: 共有カードを能力レーダーカードに一本化し、図解カードと項目別共有設定、縦長PNGを廃止。X共有ボタンを追加。前版 v1.5.0 の変更: stats（能力ステータス、共通4軸＋特性2軸のハイブリッド）を追加）
旧バージョン: v1.3.0（2026-11-07。v1.3.0 の変更: reminders（登録済みリマインダーの一覧）と任意の連携モジュール modules.health / modules.sokqa を追加し、訂正にリマインダーの取消・日時変更を加えた。modules は共有対象外。v1.2.0 の変更: URL構成を変更。直下は日英の説明ページ（core のコピー・共有・取り込み機能つき）とし、アプリ本体は言語共通の /mypage/ へ一本化。取り込みリンクの宛先も /mypage/ に変更。アプリUIは data の language で日英切替。v1.1.1 の変更: §2 に残っていた部屋画像への言及を発見カードへ訂正。v1.1.0 の変更: 部屋イラストによる共有を取りやめ、共有を発見カードに一本化。interests から room_object を廃止）
スキーマ: personal-dashboard/dashboard/v1、personal-dashboard/correction/v1
