"朝のブリーフィング。「おはよう/おはよ/morning/朝のブリーフィング/今日のタスク/今日の予定教えて」で必ず起動。Calendar・Gmail・Todoist・Notionを横断し今日1日を日本語でまとめる"
Resources
3Install
npx skillscat add thiguchi125-debug/claude-config/ohayo Install via the SkillsCat registry.
ohayo v3.1 — 朝のブリーフィング(2026-07-03 全面書き直し・同日v3.1修正)
v2系(12層パッチ・1,444行)を廃止し一直線の手順に再構築。旧版はclaude-config gitに保全。
v3の設計原則: ①実態とズレない(死んだ手順ゼロ・自動化の死活を毎朝可視化)②今日の行動に直結(予定コンテキスト・議会/選挙カウントダウン・ニュース展開フック)③燃費60〜80K。
🔴 大原則(他のすべてに優先)
- タスク・プロジェクトはTodoistが唯一のソース。
python3 ~/.claude/scripts/todoist/td.pyのみ使用。Notionの旧✅タスクDB(292cf503系)・旧🗂️プロジェクトDBは廃止済み(🗄️旧アーカイブ収容)— クエリ禁止。 - チャット出力が主成果物。Notionダッシュボードへの書込は3セクションのみ(§F)。ニュース・iJAMP・過去発言連動・Drive資料をダッシュボードに書くことはない。
- リトライ規律: Notion書込がtimeoutしても即リトライ禁止(適用済みの可能性大)。fetch確認→未適用の場合のみ1回だけ再試行。
- ルーティンページ(
34acf503-「📅毎日のルーティン(改訂版)」)には一切書き込まない(リセット処理は2026-05-08廃止済み)。 - 日付・曜日は
date '+%Y-%m-%d (%a)'で実確認してから使う(7/3を木曜と誤記した事故対策・全セクションで同一値を使う)。 - Notion読み取りツール(2026-09-15改定):
notion-query-database-viewは MCPから削除済み=呼ぶと必ず⊘。使うのは notion-fetch / notion-search / notion-query-data-sources(スキーマは起動時に ToolSearchselect:mcp__claude_ai_Notion__notion-fetch,mcp__claude_ai_Notion__notion-query-data-sourcesで読み込む)。- SQLモードは §8・§10・ご無沙汰アラートの定型クエリ4本だけ許可(本文にSQL全文あり・列を絞りLIMIT付き)。Business未満はワークスペース共有の利用枠があるため、それ以外の探索的SQLは禁止(7/3の「全面ブロック」は9/15実測で解消・4本とも応答1〜3K字)。
- view mode(
{"mode":"view","view_url":…})と view URLの notion-fetch は朝の定型取得に使わない(9/15実測: ネタDB view=100行で63K字+has_more/後援会員view=約100行・全列+個人情報で数万字/自治会view=50行超で約3万字。view URLのfetchは行を返さずスキーマだけ=ネタDB 1.3万字・後援会員 1.6万字・自治会 2.4万字)。 - SQLが枠切れ・エラーのときのフォールバックは各節に記載(rows mode+filter+limit小)。それも失敗なら ⊘ 1行で先へ進む(リトライ1回まで)。
§0 実行チェックリスト(起動直後に内部初期化・全14項目)
- ステータス群(📥取込パイプライン+ニュースRoutine死活)
- 昨夜のまとめ
- 今日の予定+予定コンテキスト連動
- 要チェックメール
- タスク3ブロック+増分監査
- 今朝のニュース+過去発言grep
- 議会・選挙カウントダウン
- 発信テーマ提案(街頭3案+ブログ/SNS)
- ご意見箱フォーム新着表示(夜間form-intake結果)
- シグナル欄(policy-radar承認待ち/📥未分類インテーク件数/Drive新規資料/月初のみ全体地図チェック)
- 📋 Todoist提案の滞留+無応答で退避された分(§1後半・
pending_status.py) - 🗓 【作業】枠 × Todoist期限の突合(§5後半・幽霊枠/枠なし/衝突)
- 🗂 市民要望管理台帳の⚠要対応(§9b・
yobo.py alertローカル1call) - 📥 Todoist Inbox棚卸し(§5・この項目だけは対話の往復が要る=真っ先に劣化する。一覧表示と「振り分けますか?」の文章は実行に数えない。0件でも「✅ Inbox空」の1行を必ず出す)
各項目の実行後にチェック。スキップは「⊘ skipped: 理由」を記録し、未実行があればチャット末尾に「⚠️ N件未実行」。全14完了後に §F(ダッシュボード3セクション更新)→ 最終出力。
§1 ステータス群(ローカルRead 1回+判定・書込なし)
~/.claude/agents/knowledge/kusagawa_archive/99_raw/_scripts/_pipeline_status.json をRead:
root_intake_error:"none"→📥 昨夜の振り分け: N件(AI判定 X)✅(0件でも1行=生存確認)root_intake_personal > 0→🔒 個人情報として隔離 P件(中身を読んで名簿と分かったものが含まれる=草川に一言伝える)root_intake_unclassified > 0→⚠️ 未分類 U件 —日常資料アーカイブ/📥未分類_YYYY-MM/に待機。「未分類を片付けて」で処理root_intake_error:"visibility_error"→🚨 取込パイプライン権限エラー(フルディスクアクセス未付与の疑い・reference_storage_map.mdのトラブル手順参照)を最上部表示root_intake_error:"archive_not_visible"→🚨 Driveが見えていません(マウント確認)- キー無し or
root_intake_last_runが48h超 →🚨 取込パイプラインが動いていません(launchctl list | grep daily-drive-pipeline) - (旧v4キー
council_moved/daily_moved/inbox_remainingは 2026-08-26 以降更新されない。残っていても無視する)
ニュースRoutine死活は§6で判定(当日レコード0件+最終登録26h超 → 🚨 ニュース収集Routineが落ちている可能性: https://claude.ai/code/routines/)。
Notion退避キューflush(旧「Discord投げ込み監視」・2026-09-06改)
- Discord夜間intake(3:10)は2026-09-06に停止。
discord_intakeキーの死活判定はしない(🚨を出さない)。スマホからの投げ込みは Todoist Inbox 一本(§5で振り分け)。 ~/.claude/scripts/sns-routine/_notion_queue.jsonlが存在し1行以上あれば、queue flushを実行: 各行のdestに従いNotionへ保存(市民意見→c2c34bd8- / 未分類→391cf503-a68f-8191-b218-e80fdc7aedeb / ledger→当日nichijo日次ログ / critical→草川に内容提示して指示を仰ぐ)→ 保存済み行を削除 → 件数をブリーフィングに表示。- flushできなかった行は必ず件数を出す。
content_safety_gate.pyに deny された行を黙って残すと、キューが「毎朝flushしている」外見のまま無限に積み上がる(2026-08-11時点で17件滞留していた)。deny された行は⚠️ queue flush不可 N件(ゲート未通過)として理由つきで表示する。
- flushできなかった行は必ず件数を出す。
📋 Todoist提案の滞留チェック(2026-08-11新設・必須・ローカル1call)
(2026-09-06以降は新規提案が発生しない。_pending_tasks.jsonl の残件が0なら本節はスキップ可。)
夜間triageのB系タスク提案は「①OK」の返信が無いと誰の手番にも乗らない。放置を可視化しないと、返信しなかったというだけの理由で仕事が消える(→ [[feedback_discord_task_proposal_retire_loses_urgent]])。
python3 ~/.claude/scripts/sns-routine/pending_status.py --json- 出力が
clean以外なら、そのままブリーフィングに転記(整形し直さない)。滞留2日以上の行には🚨が付く。 - 🗑「無応答で退避された分」が出たら、内容を読んで復活させるか草川に1回確認する。交通安全・市民相談が混じっていたら必ず名指しで出す。捨てた事実を毎朝見せ続けるのがこの欄の役目なので、件数が減らないことを異常と扱わない。
- 承認されたものを期限つきで登録する場合は §3 で取得済みのカレンダーを使い task-add の突合手順を通す。
- 日曜朝は
sns_auditキーも確認。errorなら🚨+~/.claude/scripts/sns-routine/_audit_report.mdの内容を表示(未処理メッセージ=迷子候補)。
ご意見箱フォーム取込監視(form-intake・2026-07-25〜)
_pipeline_status.jsonのform_intakeキーを確認。errorなら🚨表示+「state未更新=取りこぼしなし・~/.claude/scripts/form-intake/_intake.log確認→手動『フォーム取り込んで』」を案内。- キーが存在しない、または
updatedが26h超 →🚨 form-intake夜間ジョブ(3:30)が動いていない可能性(launchctl list | grep form-intake 確認→kickstart)を表示(drive-pipelineが2:30にstatusを全書き換えするため、走らなかった夜はキー自体が消える)。 - 新着内容の表示は§9(
_form_status.json)が担当。ここは死活のみ。
§2 昨夜のまとめ(Notion 2call)
oyasumiデイリーサマリを取得する。⚠️ notion-searchはセマンティック検索で「最新順」を保証しない(2026-07-06に7/4を最新と誤認し7/5を取りこぼす誤報が発生)。必ず以下の手順で昨夜の日付を名指しで引く:
- §0で
date実確認した今日の日付から前日(=昨夜)の日付文字列を算出(例: 今日2026-07-06なら2026-07-05(日))。 - notion-search を その日付文字列で 実行(格納先:
https://www.notion.so/34ecf503a68f818299d3fabb7e7c4c5e配下・query例:2026-07-05(日)デイリーサマリ)。 - fetch前に必ずタイトルの日付が昨夜と一致するか照合。一致した1件だけを fetch する。
- 一致するページが見つからない場合のみ、キーワード検索(
デイリーサマリ 昨夜のまとめ)で1回リトライ→それでも昨夜日付が無ければ「昨夜のまとめなし(oyasumi未実行)」1行。日付照合をせずに検索最上位を『最新』と決め打ちすることを禁止。
取得できたら要点3〜5行に圧縮してチャットに表示。
🧾 タスク登録候補の承認(v3.1新設・必須): サマリに「🧾 タスク登録候補(承認待ち)」セクションがあれば、候補を全件そのまま列挙して「登録する?(全部/選んで/しない)」と草川に確認 → 承認分のみ td.py add で登録。「N件自動登録しました」のような内訳なしの事後報告は禁止(何が登録されたか分からない事故の再発防止)。過去に自動登録済みの表記を見つけた場合も内訳を必ず展開表示する。
- 🗓 期限つきで登録する場合は task-add の突合手順を通す(想定所要を1hセッション換算→カレンダー突合→✅/⚠️/🚫判定→承認)。突合なしの
td.py add --due、Todoist MCPupdate-tasksでの期限後付け、reschedule-tasksでの明後日以降への期限設定は PreToolUse hook が deny する。今日・明日への移動(朝の繰越・即日対応)はゲート対象外。期限なしの登録はこれまで通り。朝の繰越はreschedule-tasksで今日へ動かす限りゲート対象外なので従来通り。
🗓 @要期限 の期限確定(2026-08-04新設・必須): 夜間Discord triageは Google Calendar を持たないため、承認済みタスクを期限なし+@要期限ラベルで登録し、期限の確定を朝に委ねている(案A)。§3でカレンダーを取得済みなので、そのまま確定まで進める。
python3 ~/.claude/scripts/todoist/td.py list 2>/dev/null | grep -n "要期限"- 各タスクの desc に
期限案 YYYY-MM-DD(未突合)が入っている。この期限案を鵜呑みにせず、task-add の手順で想定所要を出し §3 のカレンダーと突合して ✅/⚠️/🚫 を判定する - 判定つきで草川に提示 → 承認を得る(🚫なら代替期限2案)
- 承認分のみ
_verified.jsonを書いてから期限を設定し、@要期限ラベルを外す - **前夜のtriageが動いた朝は必ずこのチェックを回す。**放置すると期限なしタスクが溜まり、
td.py auditの「期限なし」件数だけが増えていく
§3 今日の予定+予定コンテキスト連動
- Google Calendar
list_events(calendarId:kusakawa.taku@gmail.comのみ・今日0:00〜23:59) - 予定コンテキスト連動(v3新設・「今日の行動に直結」の核): 各予定のタイトルから会議体名・地区名・人物/団体名を抽出し、予定1件につき notion-search 1回(上限5予定・6件以上は重要度順に5件)で以下を横断ヒットさせる:
- 📅ミーティングノートDB → 同じ会議体の前回ノート(宿題・フォローアップ事項)
- 🎤市政報告会DB → その地区の「議会で取り上げる課題」「主な意見・要望」
- 🗂プロジェクト・プラットフォーム → 関連PJの直近経緯
- 📝市民意見リスト → その地区・団体の未解決の声
ヒットした場合のみ、予定の下に└ 前回宿題: 〜/未解決の声: 〜を1〜2行添える(リンク付き)。ヒットなしは何も出さない(ノイズ禁止)。
§4 要チェックメール(Gmail 1call)
search_threads(newer_than:2d・未読または要返信らしきもの)→ 重要3〜5件を1行ずつ(送信者・件名・要アクション)。議会事務局・市役所・市民からのものを優先。
§5 タスク(Bash 2call・Notion不使用)
td.py morning→ 3ブロック(🔴期限超過/🟡本日/🟢今週中)を全件表示(件数絞り込み禁止・[[feedback_ohayo_task_3block_display]])- 増分監査(v3変更):
td.py auditの各指標件数を~/.claude/projects/-Users-kusakawatakuya/ohayo_state.jsonの前回値と比較し、前回比の増減で表示(例:「期限超過 92件(+3)」)。増分が +5 以上の指標のみ⚠️を付け、task-audit起動を提案。絶対値の常時🚨表示は廃止(オオカミ少年解消)。表示後、今回値をohayo_state.jsonへ保存(last_audit_date含む)。
📥 Inbox棚卸し(2026-09-05新設・必須・Bash 1call)
⚠️ **この節は2026-09-08・09-09・09-10と3日連続で飛ばされた。**原因は §0 の項目に入っていなかったこと(自己点検に引っかからなかった)。2026-09-10に14項目目として独立させた。飛ばしたら「⚠️ 1件未実行」を必ず出すこと。**一覧を出して「振り分けますか?」と文章で聞くのは実行ではない。**AskUserQuestion で選択肢を出すまでが1セット。
完了したら
ohayo_state.jsonのinbox_swept_dateに当日日付を書く(0件で終えた日も書く)。翌朝この値が前日でなければ、ブリーフィング最上部に🚨 昨日のInbox棚卸しが未実行(最終実施 YYYY-MM-DD)を出す。
スマホからの一次保存先は Todoist Inbox(考えずに放り込む場所)。朝ここで振り分けて空にする。td.py list Inbox を1回実行し、0件なら ✅ Inbox空 の1行で終える。
聞き方=「振り分け先×期限」の表を1枚出し、草川が行ごとに直す(2026-09-15草川指示・恒久)。AskUserQuestionで振り分け先だけを1件ずつ聞く方式は廃止(期限が抜け、昨日期限のまま移動→期限超過に埋もれた)。
- 先に
td.py nodueとtd.py morningで各件の現在の期限を確認し、「スマホ投入で昨日の期限が付いている」等を表の前に1行で書く - 表の列=
Inbox|振り分け先|期限案。関連するメモ(同じ議会論点など)は1行に束ね、「既存タスクへコメント転記して閉じる」を振り分け先に使ってよい - 期限案は必ず全行に入れる(今日・明日、または突合前の仮日付)。明後日以降の期限は設定前にカレンダー突合(task-add手順)すると添える
- 草川の返事は「〇〇は今日確認」「△△は質問メモにも」のような自由文で来る。返ってきた行だけ反映し、返事が無かった行だけを最後に1問で聞き直す
- 期限の反映:今日・明日は
reschedule-tasks、明後日以降は_verified.json→突合。台帳行はyobo.py add --due
振り分け先の選択肢(表に書く値):
- 台帳へ →
python3 ~/.claude/scripts/yobo/yobo.py add --t 件名 --s 相談者 --a 相手先 --na 次アクションの後td.py done <id>(Todoist側は完了で閉じる・複製を残さない) - 箱へ →
td.py mv <id> <PROJECT名>(🏛議員活動/📝議会(会期別)/🎪地域・イベント/🗳選挙2026/📣発信/🏡家族・プライベート/🗂構想バックログ、またはその子)。期限が要るものは task-add の突合へ - 捨てる →
td.py rm <id> - 残す(今日中に自分で触る)→ 何もしない
判定の物差しは1問だけ=「終わったら誰かに報告するか?」→はい=台帳/いいえ=Todoist。件名の先頭が「要望:」なら台帳を第一候補に出す。相談者名がある件は台帳へ移した時点でTodoist側から氏名が消えるようにする(done で閉じる)。
🗓 【作業】枠 × Todoist期限の突合(2026-08-11新設・必須)
task-add は登録時に【作業】枠を作るが、その後の期限変更・新規登録を追わない。放置するとカレンダーが「枠を作った日のスナップショット」に化ける。2026-08-11に翌日分を実測したところ、幽霊枠4本・枠なし6件・時間衝突1件が同時に出ていた。
§3で取得済みの本日のカレンダーと、§5-1の td.py morning(本日期限ブロック)を突き合わせ、ズレだけを出す。ゼロなら ✅ 枠と期限は一致 の1行で終える(一致リストを並べない)。
- 👻 幽霊枠 — 本日に【作業】枠があるのに、対応するTodoistタスクの期限が今日でない(枠のdescriptionの「Todoist期限」は作成時の値なので信用しない。必ずTodoist側を正として引き直す)。→「枠を消す/期限を今日へ戻す」を1件ずつ選択式で聞く。
- 🕳 枠なし — 本日期限なのに、【作業】枠にも束ね枠の中身リストにも出てこない。→ 新規枠を作る前に、必ず既存枠への相乗りを先に提案する。
- ⚔️ 衝突 — 【作業】枠が実アポ(会議・来客・現地・議会公務)と時間で重なっている。→ 動かすのは常に【作業】側。
- 📆 日ズレ — 枠の中身に書かれているタスクのTodoistの期限日が、その枠の日と違う。→ どちらかに揃える。原則は期限日を枠の日へ動かす(そこで実際にやるのだから)。動かせない事情(県案件で催促間隔を長く置く等)があるなら、逆にその行を枠から外す。
- 👥 二重掲載 — 同じタスクが2つ以上の枠の中身に出ている。→ 期限日と同じ日の枠に残し、他から消す。
「終日枠に出る日」と「枠で対応する日」は必ず一致させる(2026-08-12 草川指示)。Todoist同期カレンダーの終日項目は期限日に出るので、ここがズレていると「8/18の終日枠に出ているのに実際の作業は8/13の枠」という状態になり、どちらを見ればいいのか分からなくなる。前倒しで片付けるつもりなら期限日ごと前へ動かす。2026-08-12の実測では、束ね枠(催促A/B等)を作った日のスナップショットが残っていたせいで日ズレ6件・二重掲載2件が出ていた。
枠の中身にあるのにTodoistにタスクが無い行も同じ扱いで拾う。2026-08-12に「【木下報告会】防災訓練・避難所解説の協力」がこれに該当した(枠のリストには載っていたがタスクが存在せず、終日枠にも出ないので誰も気づけない状態だった)。見つけたらタスクを作るか、行を消すかを1問で聞く。
判定はタイトルだけで済ませない。「結果待ち催促A/B」「役所連絡タイム」「夜の連絡タイム」「現地ルート」のような束ね枠は、中身がdescriptionにしか書かれていない。descriptionを開かずに突合すると、束ねられている件を全部「枠なし」と誤検出し、逆に束ねから漏れた件を見逃す。
置き場所を決めるときの制約:
- @役所 → 市役所は17:00終業・12:00-13:00は昼休み。この外に置いた枠は電話が繋がらない。
- @夜電話 → 18時以降。店舗・事業者への「出向く」用件を夜枠に入れない。
- @机上 → 早朝5:00-6:30が唯一安定して空く帯([[feedback_early_morning_desk_band]])。ただし机上作業限定で、電話・役所・現地は不可。
- 15:00-18:30は挨拶回り優先枠([[feedback_greeting_rounds_time_reserve]])。作業ブロックで埋めない。
束ね枠に相乗りさせたら、枠のタイトルの件数(N件)も更新する。中身だけ増やすと、翌朝の突合で「4件」と書かれた枠に7件入っている状態になり、容量超過が見えなくなる。想定所要の合計が枠の長さを超えるときは、descriptionの末尾に ※⚠️ 合計N件/M分。押したら〇〇へ送る と逃がし先を明記する。
§6 今朝のニュース+過去発言grep(Notion 1fetch+Bash 1call・v3.1でクエリ全廃)
- 📰今朝のニュースダイジェスト(page
391cf503-a68f-8194-be35-fec5aede8a5e)を notion-fetch 1回。収集Routine v3.1が毎朝6時に本日分へ全置換している固定ページで、新規・続報・dedup判定ログ・活用フックが全部入っている。ニュースDBへのクエリは一切しない。 - ダイジェストの内容を亀山関連度順でチャット表示(
・[★4] タイトル(出典)→ 展開: 演説形式)。続報があれば「続報: 案件名+正ページリンク」も表示。 - Routine死活判定: ダイジェストの見出し日付が今日でない →
🚨 ニュース収集Routineが今朝動いていません(https://claude.ai/code/routines/ で確認)。ダイジェストに🚨行があればそのまま表示。 - 過去発言連動: 上位3件のキーワード(+草川語彙の言い換え)で
grep -ril ~/.claude/agents/knowledge/kusagawa_archive/{01_council,02_publications,03_themes}/→ ヒットファイル名+関連1行。ニュースと自分の過去発言が繋がる時だけ表示。
§7 議会・選挙カウントダウン(v3新設・Notion 1call)
- 選挙: 2026-10-25投票日まで残り日数・告示日(10-18想定)まで残り日数を date計算で表示。
- 議会: notion-search「議会会期ハブ 2026」1回で次回定例会の会期・通告書締切を取得 →
🏛 9月定例会まで◯日/通告締切まで◯日(一般質問prep: 未着手/進行中)。取得できなければ「次回=9月定例会(日程未取得・会期ハブ要更新)」と1行。締切21日前を切ったら⚠️付きで general-question-prep 起動を提案。
§8 発信テーマ提案(毎朝常時・Notion 2call)
[[feedback_ohayo_content_proposal_always_show]](毎朝必出力・トリガー型化禁止)を継承しつつ軽量化:
- 材料 = §6のニュース+grep結果+🎯政策・質問ネタDB(ds
collection://42716725-fece-497f-9782-705076539de4・調査中上位)1クエリ。notion-query-data-sources SQLモード(応答約3K字・2026-09-15実測):
フォールバック(SQL枠切れ・エラー時): rows modedata_source_urls: ["collection://42716725-fece-497f-9782-705076539de4"] SELECT "ネタ名","分野","優先度","状況","時間軸", substr("次アクション",1,60) AS next_action, date("更新日") AS updated FROM "collection://42716725-fece-497f-9782-705076539de4" WHERE "状況" IN ('調査中','質問案','提出/通告') ORDER BY CASE "優先度" WHEN '高' THEN 0 WHEN '中' THEN 1 ELSE 2 END, "更新日" DESC LIMIT 8{"mode":"rows","data_source_url":"collection://42716725-…","filter":{"type":"group","operator":"or","filters":[{"type":"property","property":"状況","propertyType":"status","operator":"status_is","value":[{"type":"is_option","value":"調査中"},{"type":"is_option","value":"質問案"},{"type":"is_option","value":"提出/通告"}]}]},"sort":[{"property":"更新日","direction":"descending"}],"limit":8}(全列が返る=約7K字。limitは10以下厳守・100にすると8.6万字)。旧view?v=2d912401-…は「受け付け(未整理)」ビュー(収集/未整理)で調査中ではないので使わない。 - 重複除外: 📣SNS投稿管理DBを notion-search(data_source_url=
collection://1bd98deb-624f-402c-aeb3-bdaa4782b389・直近テーマ語で1回)で突合(SNS DBはviewが無いためviewクエリ不可・SQLは禁止) → 既発信テーマは除外 or 新規角度のみ([[feedback_ohayo_duplication_check]])。 - 出力: 🎤街頭演説3案(A深掘り/B共感/C攻め・テーマ単位・本文は生成しない)+📝ブログ・SNSテーマ2〜3本(レーン付き)。分野は5ドメイン分散・選挙文脈は引っ込める([[feedback_street_speech_topic_diversity]]他)。
- トリガー条件成立時のみ末尾に「💫 今日はフルパッケージ作る?(daily-content-generator)」を1行(自動連結禁止・[[feedback_ohayo_daily_content_generator_prompt]])。
§9 市民意見フォーム新着表示(2026-07-25〜 夜間form-intakeジョブの結果表示・ローカルRead 1回)
取込処理本体は夜間launchd com.kusagawa.form-intake(3:30)=form-intakeスキルへ移管済み(stateは従来と同じ iken_poller_state.json を共用)。朝は結果表示のみ:
~/.claude/scripts/form-intake/_form_status.jsonをRead。dateが今日(=今朝3:30実行分)→new_count0件なら「📮 ご意見箱: 新着なし」1行。1件以上なら「📮 ご意見箱 新着N件」として items の各行(行ID・地区・緊急度・1行要約・NotionURL)を表示。urgent: trueがあれば⚠️付きで最上部。末尾に「返信案が必要なら『◯番の返信案作って』(→ ikenフロー)」を添える。
タスク化候補も同時提示(2026-07-25追加・表示だけでは声が落ちる穴の締め): 対応アクションが読み取れる新着には、Todoist登録候補(内容・登録先プロジェクト案・期限案=今日+3日)を箇条書きで添え、「登録するものを選んでください(全部/番号/不要)」→草川承認分だけtd.py addで登録。相談者がいて市(県・警察・自治会)と動く案件は Todoist でなくpython3 ~/.claude/scripts/yobo/yobo.py addで市民要望管理台帳へ(2026-09-05〜・「〇〇地区 市民相談」箱は全部アーカイブ済)。Todoist登録は草川自身の議会・政策・イベント作業だけ(🏛議員活動)。緊急度高は期限=今日〜明日を提案。dateが今日でない・ファイル無し・_pipeline_status.jsonのform_intakeキーがerror or updated 26h超 →🚨 ご意見箱取込ジョブが動いていません(launchctl list | grep form-intake 確認)→「フォーム取り込んで」で手動実行を表示。ohayo内でシート直接ポーリングはしない(手動form-intakeに一本化・二重登録防止)。
§9b 市民要望管理台帳の⚠要対応(2026-09-05新設・必須・ローカル1call)
市役所対応の市民要望はTodoistでなくGoogleスプレッドシート「市民要望管理台帳」で管理している([[project_yobo_sheet_citizen_requests]]・OPERATIONS.md【B】例外節)。朝は⚠だけ読む:
python3 ~/.claude/scripts/yobo/yobo.py alertを1回実行(Apps Script経由・数秒)。
続けてpython3 ~/.claude/scripts/yobo/yobo_mirror.pyを1回実行(2026-09-07〜・台帳の期限3日以内+期限超過+「相談者に報告」をTodoist 🏛議員活動/🗂台帳フォロー(自動)へ写す。Todoist「今日」が唯一の入口。KY-タスクの完了は台帳に戻らないので、草川が「KY-xxx 終わった/報告した」と言ったらyobo.py update/doneで台帳を更新=ミラーは自動で閉じる)。- 出力をそのまま貼る(先頭行=件数のステータス別内訳/■相談者に報告 → ■期限超過 → ■滞留14日以上 の順)。「相談者に報告」(答えは来ている)は報告漏れ直結なので最上段で目立たせる。⚠が20件を超えるときは各■の先頭5件+「…他N件(
yobo.py list --alert)」に畳む。 - 進捗の更新は草川が言った分だけ
yobo.py update KY-xxx --st 返事待ち --asked today/--reported today/yobo.py done KY-xxx。勝手にステータスを動かさない。 - 通信エラー・
bad tokenのときは「⊘ 台帳に接続できず(config.json/Web App URL確認)」1行で先へ進む(リトライ1回まで)。 - 台帳の案件を Todoist に複製しない(二重管理の再発防止)。相談者名は台帳側にだけあるので、チャットにはNo+件名+相手先までにとどめる。
§10 シグナル欄(軽量・各1call以内)
- 📡 policy-radar: 🎯政策・質問ネタDBは notion-query-data-sources SQLモードの集計1回(応答約250字・2026-09-15実測)で状況別件数と🆕/🔄(ネタ名の先頭絵文字)を数える:
SELECT "状況" AS s, COUNT(*) AS n, SUM(CASE WHEN "ネタ名" LIKE '🆕%' THEN 1 ELSE 0 END) AS new_n, SUM(CASE WHEN "ネタ名" LIKE '🔄%' THEN 1 ELSE 0 END) AS upd_n FROM "collection://42716725-fece-497f-9782-705076539de4" GROUP BY "状況"
(data_source_urls=["collection://42716725-fece-497f-9782-705076539de4"]。9/15時点: 収集77/未整理48/調査中139(🆕60・🔄7)/質問案34)。行を取って手元で数える方式は禁止(調査中だけで100行超・rows/viewとも6〜9万字でhas_more)。SQLが枠切れ・エラーなら件数は出さず下記の⊘行へ。🎯政策候補DBはnotion-search(data_source_url指定・「承認待ち」)1回。取得不能なら「⊘ radar件数取得不可(月曜はGmail下書き【週次policy-radar】で代替確認)」1行 → 件数のみ(月曜=weekly実行後・毎月2日=monthly実行後の文言は従来通り。Routine: weeklytrig_01MyKkdatWADfmAdUgB3UDu7/monthlytrig_019LPFjUFu9anWC53UFJCavK)。0件なら1行。 - 📥 未分類インテーク: notion-fetch
391cf503-a68f-8191-b218-e80fdc7aedeb→ 未チェック行数を「📥未分類 N件」表示。3件以上で「棚卸ししよ」を添える(smart-intakeの締めループ)。 - 📂 Drive新規資料: §2で読んだ昨夜のまとめの「Drive新規N件」をそのまま転記(追加クエリしない。サマリに無い場合のみ「⊘ oyasumi未実行のため不明」1行)。
- 🌐 全体地図チェック(毎月1〜3日のみ): 「🌐Notion全体地図」の last_edited が60日超なら「地図が古い→月次棚卸し推奨」1行。
- 📷 写真ストック月次整理(毎月1〜3日のみ・ローカル1call): Drive
📷写真ストック/_state.jsonのlast_collectedが当月より前(またはキー無し)なら「📷 今月の写真ストック整理がまだ→『写真ストック整理して』で回収」1行。Notion呼び出し不要(ローカルRead1回のみ)。
§F ダッシュボード更新(3セクション限定・Notion 2〜4call)
対象: 🌅朝のダッシュボード page_id: 722beb9e9827421aa5dbbef67c1c4688
| セクション | 内容 |
|---|---|
## 📅 今日のスケジュール |
§3の予定(コンテキスト行含む)・本文全置換・見出しに当日日付 |
## 🎯 今日のフォーカス |
最重要3点+議会/選挙カウントダウン1行・本文全置換 |
## ✅ 今日のタスク |
§5の3ブロック・本文全置換 |
- 1セクション=1 update操作・3操作を順に実行 → 最後にfetch1回でまとめて検証。失敗セクションのみ1回だけ再試行。
- 上記3見出しと
## 📚 情報ハブ一覧・## 📌 クイックリンク・## 📔 昨夜のまとめ(oyasumi管轄)以外の旧セクション見出し(🗞️/🌐/🔍/📂/📋/🤝/🤖/🗳️選挙進捗 等)を見つけたら空置換で削除(v2残骸の掃除・通常は初回のみ)。
最終出力(チャット・この順で)
締める直前に td.py list Inbox をもう一度叩き、0件(または草川が「残す」と言った分だけ)であることを確認してから出力する。 残っていれば §5 の Inbox棚卸しに戻る。ここを通さずに最終出力を書き始めない。
🚨(あれば最上部: パイプライン/Routine異常)
📥 昨夜の取込: …
📔 昨夜のまとめ(3-5行)
📅 今日の予定(+└コンテキスト行)
📬 要チェックメール(3-5件)
✅ タスク: 🔴期限超過… 🟡本日… 🟢今週中…(+増分監査1行)
🗓 枠×期限の突合: 👻幽霊枠… 🕳枠なし… ⚔️衝突…(ズレゼロなら「✅ 枠と期限は一致」1行)
🗞️ 今朝のニュース(活用フック付き)+🔍過去発言連動
🏛🗳 カウントダウン(議会/選挙)
🎤 街頭演説3案+📝発信テーマ
📋 市民意見(あれば)
📋 Todoist提案の滞留 + 🗑 無応答で退避された分(pending_status.py・cleanなら省略)
📡/📥/📂 シグナル欄(各1行)
(💫フルパッケージ提案・条件成立時のみ)禁止・注意(v2から継承する恒久ガード)
- 「亀山」のtypo(亜山・亵山)絶対禁止。日本語は直接書く(unicode escape禁止)。
- ニュース・iJAMP・過去発言・Drive資料・市民意見をダッシュボードに書かない(チャットのみ)。
- 旧DB(292cf503系タスク/PJ・354432ec受付BOX・🗄️旧アーカイブ配下すべて)へのクエリ・リンク掲載禁止。
- 発信テーマの提案のみ・本文生成はしない(生成は各エージェント/スキルへ誘導)。
- 燃費: 目標60〜80K。API呼び出し目安 = Notion 10〜12・Bash 4・Calendar 1・Gmail 1〜2・Sheets 3(意見ゼロ時は読み1回)。これを大きく超える追加取得はしない。
📌 恒久ガードルール(MEMORY.mdから移設 2026-07-04)
- MCPツールが継続シグナル(Notion
has_more: true/DrivenextPageToken/next_page_token/件数がpageSizeぴったり)を返したら必ず追加クエリで全件取得。「無い」と判定する前にページング全件・キーワード変奏・想定外フォルダを確認する(詳細: memory/feedback_ohayo_oyasumi_task_db_query.md) - 発信テーマ提案の公選法ガード: 投票日(2026-10-25)まで30日以内は政策論型優先・7日以内は実績報告型に調整。「投票してください」等の直接依頼表現はテーマ提案段階でも禁止(詳細: memory/feedback_ohayo_v21_speech_blog_themes.md)
- 期限なしタスクは§5の3ブロックに構造的に表示されない盲点がある。audit増分の「期限なし」指標で監視し、タスク登録時は期限必須(既定=今日+3日)・増加時はtask-auditで棚卸しする(詳細: memory/feedback_ohayo_deadline_null_blindspot.md)
📌 DB統一override(2026-07-05・本文の旧記述より優先)
- 🎯政策候補DB(ds
6f1895ac-/ page b9f8d42a)は凍結済み・新規書込禁止。🗄️旧アーカイブ内に参照専用で保管(過去分の参照・引用はOK)。 - 政策ネタ・一般質問ネタの登録/更新はすべて「🎯政策・質問ネタDB(統一パイプライン)」1本:data_source
42716725-fece-497f-9782-705076539de4/ pagecb47d25e30b14b61b39f56254bf9432a(🎯政策・質問ハブ=34bcf503-819e配下)。 - 統一DBの使い方:
状況=収集→未整理→調査中→質問案→提出/通告→実施→完了/時間軸=議会直近(3か月以内の議会論点)・中長期(旧政策候補相当)・観察/ネタ元に「市政報告会・政策スキャン・AIインタビュー・地域訪問」追加済み。 - 本文中の「政策候補DBへ保存」は「統一DBに時間軸=中長期で保存」と読み替える。凍結DBの案件を再開する時は、その1件だけ統一DBへ昇格させる。
📌 朝の市民意見候補 承認フロー(2026-07-05新設)
昨夜のデイリーサマリに「🎙️ 意見候補(明朝承認待ち)」がある場合、ブリーフィングのシグナル節に件数+一覧を表示し、草川の承認(全部/番号指定)を得てから📝市民意見リスト(c2c34bd8)へ一括登録する(経路=会議・報告会議事録)。登録後はデイリーサマリの候補行に「✅登録済」を追記。
📌 ご無沙汰アラート(2026-07-05新設・毎朝必須)
ブリーフィングに「🔔 ご無沙汰アラート」節を設け、人と地域の両方について「最近会えていない・行けていない先」を今日の空き時間とセットで提案する:
(2026-09-15改定: notion-query-database-view 廃止に伴い notion-query-data-sources SQLモードへ。ビュー自体=後援会員DB 15deb49eddc24e30a89185a932d16ac5?v=394cf503a68f81e581fd000c12be9b4d「🔔ご無沙汰順」/自治会DB 561a63da2724464e90de5132e24f4907?v=394cf503a68f8130a124000c2146ac66「🔔ご無沙汰地域順」はNotion上の目視用に残すが、ohayoからview mode・fetchで取らない=全列+住所等の個人情報ごと数万字が返るため。SQLは必要列だけ・約1K字)
- 人: 👥後援会員DB(ds
collection://04cc3a1c-f59a-409d-8406-ff4de19eea45)をSQL 1回(応答約1.3K字):
→ 上位3名を候補に(前日提案済みはスキップして次点)。住所・電話・メール・接触履歴の列はSELECTしない。チャットには氏名+地区+最終接触日だけ。SELECT "氏名","地区","重要度","再訪要","date:最終接触日:start" AS last_contact, url FROM "collection://04cc3a1c-f59a-409d-8406-ff4de19eea45" WHERE ("重要度" IN ('S','A') OR "再訪要"='__YES__') AND COALESCE("打診ステータス",'') NOT IN ('離任','辞退') AND "氏名" NOT LIKE '【統合済%' AND ("date:最終接触日:start" IS NULL OR date("date:最終接触日:start") < date('now','-30 day')) ORDER BY CASE "重要度" WHEN 'S' THEN 0 WHEN 'A' THEN 1 ELSE 2 END, CASE WHEN "再訪要"='__YES__' THEN 0 ELSE 1 END, COALESCE("date:最終接触日:start",'0000') LIMIT 10
フォールバック(SQL枠切れ・エラー時): rows modedata_source_url=同上・filter=重要度 enum_is [S,A]・sort=最終接触日 ascending・limit:10(全列が返るので10を超えない)。 - 地域: 🏘️自治会別訪問管理DB(ds
collection://996b1d15-2454-4667-9702-05d6d0faa75c)をSQL 1回(応答約0.6K字):
→ 更新が最も古い自治会の上位3件を候補に。SELECT "自治会名","地区","更新日","date:訪問完了日:start" AS visited,"市政報告会開催済" AS held,"関係性温度" FROM "collection://996b1d15-2454-4667-9702-05d6d0faa75c" WHERE COALESCE("地区",'') NOT IN ('市外') AND COALESCE("訪問予定月",'') <> '対応外' ORDER BY "更新日" ASC LIMIT 5
フォールバック: rows mode・filter=訪問予定月 enum_is_not 対応外・sort=更新日 ascending・limit:5。
どちらも失敗したら「⊘ ご無沙汰アラート取得不可(SQL枠/接続)」1行で先へ進む。 - 空き時間マッチング: 当日のGoogle Calendarの空き枠(60分以上)を特定し、候補の地区と移動距離感を踏まえて
「🔔 最近◯◯さん(△△地区・最終接触M/D)と会えていません。今日の14:00-15:30が空いています——お茶がてら顔を出しては?」
「🔔 □□自治会はM/D以来触れていません。18:00の街頭演説の前に立ち寄り候補です」
の形で最大2〜3提案(押し付けない・断定しない・毎日同じ相手を連呼しない:前日提案済みは翌日スキップ)。 - 草川が「入れて」と返したら該当をGoogle Calendarに登録し、実行後の記録は「記録:〜」(nichijo)で締めてもらう。
📌 逆算チェック(2026-07-09新設・2026-08-20 自動実行化)
逆算チェックは 毎週月曜6:30 の launchd(com.kusagawa.gyakusan)が単独で実行し、結果を ~/.claude/scripts/gyakusan/_gyakusan_status.json に残す。ohayo は自分で Step を回さず、このファイルを読んで表示するだけにする(月曜にohayoを回さない週があっても準備漏れが埋もれないようにするため。2026-07〜08は月曜のohayoが30日で1回だけで、実質止まっていた)。
- ファイルを読み、
generated_atが7日以内なら最終出力の末尾に「🧮 逆算チェック(時点)」節を追加する。曜日は問わない。 itemsを上位5件まで表示し、totalが5を超えるなら「残り件は『逆算チェック』で」を添える。total: 0なら「🧮 逆算チェック: 漏れなし」の1行。- ファイルが無い、または
generated_atが7日より古いときは「🧮 逆算チェック: 先週分が未生成(launchctl list | grep gyakusanで確認)」の1行を出す。 - Todoist登録は従来どおり草川の返答があった分のみ。勝手に登録しない。
- その場で回し直したいときは「逆算チェック」と言えば gyakusan スキルが直接動く(従来どおり)。