WORKS 設定資産の棚卸し

スキル・CLAUDE.md・自動化 全設定一覧

モデル切替からHTMLプレビューの配色ルールまで、worksで運用している設定資産 全218項目(2026-07-07 時点)。

🔒 内部用 — 裏側情報を含む。視聴者シェア版は選別後に別途作成(やること/設定シェアサイト_構想)
GLOBAL — 全プロジェクト共通方針

モデル運用4

Fable 5.1 の使用場面(重いタスク限定)~/.claude/CLAUDE.md

Fable 5.1は「真価を発揮する場面」=重いタスク4類型に限定して使う。

該当基準は①アーキテクチャ設計・大規模な設計判断、②コードベース全体の監査/大規模移行・modernization、③複雑なバグの根本原因調査、④長時間の自走を要する作業の4つ。これらに該当しないタスクではFable 5.1を起動しない、と明示的に禁止されている。

heavy-taskサブエージェントへの委譲ルール~/.claude/CLAUDE.md

重いタスクは専用サブエージェント heavy-task(model: claude-fable-5-1)に委譲してから実行する。

「重いタスク」(アーキテクチャ設計・全体監査・大規模移行/modernization・複雑バグ調査・長時間の自走を要する調査/設計)は、直接実行せず専用サブエージェント heavy-task に委譲する。heavy-task の model は claude-fable-5-1。メインセッションはOpus 5のまま維持し、Fable 5.1は必要時のみ呼び出す二層構成。ANTHROPIC_DEFAULT_*での上書きは禁止。

ultracode(動的ワークフロー)の方針~/.claude/CLAUDE.md(モデル運用方針節に統合・2026-08-22)

ultracodeはセッション全体に適用せず、有効な単発タスクのみプロンプトにキーワードを付けて起動する。

セッション全体をultracodeにすると全タスクにワークフロー層が適用され消費が膨らむため禁止。動的ワークフローが本当に有効な単発タスクのときだけ、プロンプトに ultracode キーワードを付けて起動する。ワークフロー完了後は通常作業に戻す。

既定モデル = Opus 5(作業レーン一本化)~/.claude/CLAUDE.md

全プロジェクト共通の既定モデルは Opus 5(opus[1m]・1M context)。/model の「既定として保存」は使わない。

settings.json の共通部分は model:"opus[1m]"・env:{}(正本= works/Claude設定同期/settings_shared.json・乖離は SessionStart hook が警告)。軽作業はその場で /model sonnet。2026-07-25の「作業レーン一本化」は2026-08-22に改定され、実装は /codex 委譲(GPT-6 Astra・codex_lane.sh 固定・2026-09-05〜)が第一候補(設計=Fable 5.1/検収=Claude の3役体制)になった。

開発方針2

ハーネスエンジニアリング(開発方針)~/.claude/CLAUDE.md

品質は「モデルの記憶や注意力」ではなく「環境と仕組み」に担保させ、コードを書く前にフィードバックが自動で返る状態を先に作る。

具体則は4つ: ①新規プロジェクト・新機能の着手時は実装より先に検証ループ(テスト・リンタ・型チェック・ビルド・起動確認)を整備し、検証手段がないまま実装を積み上げない、②同じ指示・訂正の繰り返しに気づいたらCLAUDE.md/スキル/hooks/settingsへの恒久化を提案、③環境の摩擦(曖昧な手順・壊れたビルド・毎回の権限プロンプト・手作業前提フロー)は回避せず環境側の修正を優先、④プロジェクト固有のハーネスは各プロジェクトのCLAUDE.mdに書き、グローバルには原則のみを置く。

プラン立案時の必須ルール(plan mode/要件定義時)~/.claude/CLAUDE.md

プラン作成時は機能実装に加えて「ハーネス整備」「ループ設計」「グラフ接続」の3フェーズを必ず独立ステップとして含める。

①ハーネス整備フェーズ(実装より前): 検証ループを動く状態にする/.claude/settings.json の権限・hooks 整備/プロジェクトCLAUDE.mdへの検証コマンド記録。②ループ設計フェーズ(運用があるプロジェクトのみ): デプロイ・動作確認・ログ観測の手順定義と繰り返し作業の自動化明記。③グラフ接続フェーズ(正本になり得る文書・公開物・資産を生むプランのみ・2026-08-22追加): 正本(SSOT)の置き場を1本宣言し、該当レジストリ/設定ハブへの登録を完了条件に含める(該当なしならその旨一言)。

運用方針2

ループエンジニアリング(運用方針)~/.claude/CLAUDE.md

運用・改善作業は「実行→観測→修正」のループとして設計し、1回きりの修正で完結させない。

具体則は3つ: ①修正・変更を入れるときは効果を観測する手段(ログ・メトリクス・検証コマンド・確認手順)をセットで用意・明記する、②同じ形の作業が繰り返されるなら自動化(hooks、cron/スケジュール実行、/loop、スクリプト化)への昇格を検討・提案する、③失敗や手戻りが起きたら個別対処に加え「ループのどこが欠けていたか(観測不足か・検証不足か・手順の曖昧さか)」を一言添える。

蓄積ルール: 設定ハブへの統合~/.claude/CLAUDE.md

新しく作った/初めて使った仕組みは、その場で /hub-sync を呼んで設定ハブへ登録する。

2026-08-22 の CLAUDE.md 再構成で「構造方針: グラフエンジニアリング」節の末項に統合(ルール自体は不変・2026-07-07指示)。新しく作った/初めて使ったスキル・設定・hooks・自動化・配布HTML・外部リソースはその場で /hub-sync。漏れ検出= /hub-sync check。

開発原則1

グラフエンジニアリング(構造方針)~/.claude/CLAUDE.md(構造方針節・2026-08-22新設)

プロジェクト・文書・公開物を「正本→適用先」の参照グラフとして管理する第3の開発原則。ハーネス・ループと並ぶ3原則の1つ。

①正本(SSOT)を1本に決めて宣言(二重管理は正本1本+参照へ)②参照はレジストリ/カタログとして機械可読に張り、機械検査(生存・到達性・登録漏れ検出)をセットにする ③作った瞬間に登録(作りっぱなし禁止)④共通の登録先=設定ハブ(/hub-sync)。定義の初出= works 収益化プラットフォーム構想_20260807.md §3(公開面レジストリ・道具カタログ・村テーマのエッジ検査が実例)。2026-08-22 に原則の正本をグローバル CLAUDE.md へ移管。

WORKSPACE — worksの構成・置き場・チェックリスト

構成保護3

変更禁止: トップレベル制作フォルダ名/Users/senao/Downloads/works/CLAUDE.md (変更禁止セクション)

Blog_RoutineLabo・Blog_AIの教科書・Claudecode 動画編集・ショート動画作成・X Post・YouTube自動投稿・SNS自動投稿などの制作フォルダ名は変更・移動禁止。

各スキル・youtube_playlist.py・cost_config.json・.claude/verify-works.sh 等がフォルダ名を直書き参照しているため、改名するとスクリプト/スキル/OpenClaw指示書/別マシンが壊れる。README.mdの制作パイプライン表にも「変更禁止 → 理由はCLAUDE.md」と明記されている。

変更禁止: Drive symlink 7本/Users/senao/Downloads/works/CLAUDE.md (変更禁止セクション)

「今回の収録動画」「完成動画(アップロード)」「投稿画像」「サムネイル資料」「今回のアウトプット」「OpenClaw設定」「OpenClaw作成データ」の7 symlinkは名前もリンク先も変更禁止。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

3台のMacで同じGoogle Driveパスを共有する前提のメディア受け渡しレーン。役割は 今回の収録動画=/work-startの入口、完成動画(アップロード)=完成動画置き場、今回のアウトプット=collect-output.shのジョブ別集約先、OpenClaw系=受付・通知係との受け渡し。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

変更禁止: Blog_RoutineLabo配下の特殊フォルダ3つ/Users/senao/Downloads/works/CLAUDE.md (変更禁止セクション)

収録データ/・ショート動画返信/・ショート動画概要欄/ は空でも削除・移動しない。

収録データ/ はblog-create系の収録コピー先で空でも削除禁止。ショート動画返信/ はinstagram_auto_dmのsync_keywords_from_md.pyがDEFAULT_MD_DIRとして読むため移動不可。ショート動画概要欄/ は2026-07-06監査で実行時参照無しと確認済みだが、当面は保護継続・移動しない。

置き場2

ファイルの置き場ルール(5分類)/Users/senao/Downloads/works/CLAUDE.md (ファイルの置き場ルール)

TODO=やること/、設計書=ドキュメント/、バックアップ=_archive/、戦略=運用戦略/、済んだ収録ジョブ=下準備/<サイト>/_済み/ に置く。

TODO・作業メモ・引き継ぎは やること/ に「<トピック>_<内容>_YYYYMMDD.md」形式で。設計書・手順書・テンプレは ドキュメント/(全体設計書.htmlと作業ログ.htmlの置き場)。バックアップ・凍結物は _archive/<元の相対パス>/ へ置き、.bakを作業フォルダに残さない。戦略ドキュメントは 運用戦略/ に置き、追加したらREADMEの一覧表に1行追記する。

命名規則(README補足)/Users/senao/Downloads/works/README.md (命名規則セクション)

作業ドキュメントは<トピック>_<種類>_YYYYMMDD.md、収録ジョブはYYYYMMDD_<ツール名>、_始まりフォルダは作業対象外を意味する。

作業ドキュメントの種類は 提案/実装/引き継ぎ/作業メモ/議論メモ(例: ショート宣伝強化_提案_20260702.md)。収録ジョブIDは下準備・収録動画・ブログ記事フォルダ共通の背番号。「_」始まりフォルダ(_archive・_済み・_テンプレ)はwork-start等が無視する規約。

スキル運用1

スキルの正本と集約(sync-commands.sh)/Users/senao/Downloads/works/CLAUDE.md (スキルの正本と集約)

スキルの正本は各プロジェクトの.claude/commands/で、rootの.claude/commands/は集約コピー。編集後は bash .claude/sync-commands.sh で反映する。

サブフォルダ側のスキルmdを編集したら bash .claude/sync-commands.sh でrootへ反映(スキルmd編集時はhookが自動実行)。root専用スキル(work-start・youtube-publish等、元ファイルが無いもの)だけはrootを直接編集する。

終了チェック6

終了チェック0: ★現在地の更新(最優先)/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目0)

作業終了時は最優先で やること/_現在地.md を更新する(🔥次にやることTOP3/進行中の作業表/回すループ/完了項目の削除)。

_現在地.mdはセッション開始時にhookが自動でコンテキストへ注入する「単一の再開入口」。トークン上限が近い・作業を中断するときは、他のチェック項目より先に✍️中断メモ欄へ「何をしていた/どこまで/次の1手」を書いて即コミットする。2026-07-05導入。

終了チェック1: 成果物の集約(collect-output.sh)/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目1)

動画・画像などのメディア成果物は bash .claude/collect-output.sh <ジョブID> <工程名> <コピー元...> で 今回のアウトプット/(Drive)へ集約する。

Air・mini・スマホから確認できる状態にすることが完成条件。今回のアウトプット/ はDrive symlinkのジョブ別集約先。

終了チェック2: 工程ログ追記(作業ログ.html)/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目2)

ドキュメント/作業ログ.html のWORKLOG配列の先頭に1エントリ追記する。

エントリ形式は { date, area, title, status: "done|wip|hold", items: [], next: "" }。残タスクがあればnextに書く。追記位置は配列の末尾ではなく先頭。

終了チェック3: 分身AIへの蓄積/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目3)

作業で出た「考え方・戦略・判断基準」の気づきがあれば 分身AI/04_学びログ/2026.md に日付つき1行で追記する。

将来のSenao Botの学習素材とするための蓄積。気づきが無ければスキップ可の唯一の任意項目。

終了チェック4: コミット&プッシュ+ハンドオフ文書/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目4)

意味のあるメッセージで git commit → git push origin main し、長期作業ではフェーズ区切りごとに やること/ の進捗ハンドオフ文書を先に更新する。

ハンドオフ文書にはフェーズ状況表・ユーザー待ち・▶再開手順・回すべきループを書き(例: やること/動画編集自動化_進捗ハンドオフ_20260705.md)、突然停止しても「ハンドオフを読む→verify系ループ→続きから」が成立する状態を保つ。個別ハンドオフを作ったら_現在地.mdの進行中の作業表からリンクする(_現在地=全体入口1画面、個別ハンドオフ=詳細の2層)。auto-sync hookが保険で動く(開始時pull ff-only/毎ターン未pushの自動push/終了時自動commit+push)が、hookのメッセージは「auto:」なので手動の意味のあるコミットが基本。

終了チェック5: 構造変更時のドキュメント更新/Users/senao/Downloads/works/CLAUDE.md (作業セクション終了チェックリスト 項目5)

フォルダ構成など構造を変えた場合のみ、ドキュメント/全体設計書.html と root README.md を更新する。

毎回ではなく構造変更時限定の条件付き項目。全体設計書.htmlはプロジェクト全体像をブラウザで見る文書、README.mdは全体マップ。

検証1

検証コマンド(verify-works.sh)/Users/senao/Downloads/works/CLAUDE.md (検証セクション)

構成をいじった後は bash .claude/verify-works.sh で配線の全数検証(スクリプト実在/symlink/スキル同期ドリフト/launchd)を回す。

移動・改名後は bash .claude/verify-works.sh "<旧パス名>" で旧パスの残存参照も同時検索する。bash .claude/sync-commands.sh はスキル集約の同期(正本→root反映)。旧daily-pipeline.shは2026-07-06に_archive/.claude/へ退避済みで、定常ループ(トレンド/維持率/コスト)はSessionStartのloop-catchup+launchdで自動実行(.claude/launchd/README.md参照)。

デザイン1

HTMLの配色(暖色パレット共通デザイントークン)/Users/senao/Downloads/works/CLAUDE.md (HTMLの配色セクション・2026-07-07指示)

worksで作るHTMLは基本ライトテーマの暖色パレット(パーチメント地+アンバーゴールド+ティール)で統一し、ダークのGitHub風配色は使わない。

トークン値: --bg:#f6f2e9(パーチメント地)/--surface:#fffdf8/--surface-2:#f0ead9/--ink:#241f18/--ink-soft:#5c5346/--ink-faint:#8a7f6d/--line:#e2d9c6/--line-soft:#ece4d4/--accent:#b9791a(アンバーゴールド主アクセント)/--accent-ink:#8a5a10/--accent-bg:#f6e7cd/--teal:#2f6f68(副色・見出し/リンク)/--code-bg:#26221b/--code-ink:#ece3d2/--shadow: 0 1px 2px rgba(40,32,18,.05), 0 8px 30px rgba(40,32,18,.06)/--radius:14px。フォントは--font-jp(Hiragino Kaku Gothic ProN等)と--font-mono(SFMono-Regular等)。コードブロックだけ暗背景+明文字、ゴールド+ティールの2色アクセントを守り、紫/青の原色は避ける(使うなら沈んだトーン)。見本= 下準備/Routine Labo/20260703_Fable5準備5選/LINE配布_Fable5重タスクプロンプト完全版.html

環境2

.env(秘密キー)運用/Users/senao/Downloads/works/CLAUDE.md (その他) / README.md (直下の中央ファイル)

秘密キーは中央 .env(パーミッション600)と各プロジェクトの .env に置き、ファイルへの直書きは禁止。

2026-07-04に.gitignore監査済み。キー名の一覧はAPI_CATALOG.md(値は書かない)、キーの地図は.env.example(コミット可)。非秘密の運用パラメータは共通設定.mdに置く。

Python venvの2つの注意点/Users/senao/Downloads/works/CLAUDE.md (その他)

Playwright系(note/X記事投稿)のvenvはPython 3.12固定、Blog_RoutineLabo/AI_prompt(Auto)は ./venv/bin/python3.14 を直接叩く。

Playwright系は3.14だとドライバが落ちるため3.12固定。AI_prompt(Auto)のvenvはactivateが破損しているため、activateせず ./venv/bin/python3.14 を直接実行する。

SKILLS — スラッシュコマンド全量

司令塔/運用3

/output-approveroot直接編集

今回のアウトプット(hub)の成果物をユーザー承認後、下流へ複製配布して/blog-finishまで自動続行する承認ゲートスキル。

引数=ジョブID(省略時は最新フォルダ)。鉄則=hubの生成物は絶対削除しない(配布は常に複製・hub=バックアップ兼正本)。質問はStep1の1回に集約。承認済みショートは/youtubeshort-publishへも連鎖可。

/work-startroot直接編集

「今回の収録動画」の収録素材(本編1+SNS3)から①ブログ②本編カット(/video-cut)③ショート④Xレビュー予約を一括実行する日次投稿パイプラインの司令塔。

引数=省略で全部実行、"blog"/"cut"/"short"/"xreview"で部分実行、動画名指定可。frontmatterでmodel: claude-opus-4-8に固定(2026-07-03方針)。冒頭Step0で全質問を聞き切り、以降ゴールまで追加質問なしで自動進行。

/self-preview(グローバル)~/.claude/commands/self-preview.md(3台配布=Claude設定同期)

HTMLセルフプレビュー(自分専用ギャラリー)へ同期・アップする。引数にHTMLを渡すとそのファイルを日付つきで追加してから同期。

どのプロジェクトからでも実行可。内部でpublish_gallery.shを呼び、ドキュメント/設定ハブ/HTMLプレビュー/下準備/スライドを全量同期して閲覧URL(gallery-2qc906haso.pages.dev)を返す。固有名サニタイズ+漏れ検査ゲートつき。

ブログ5

/blog-createBlog_RoutineLabo/.claude/commands/blog-create.md

文字起こし→ファクトリサーチ→記事→SEO→WP下書き→スクショ自動生成→★画像実挿入(STEP4.7・2026-07-17)まで一括。ユーザーは画像入り下書きを確認するだけ

引数=トピック名(例 DomoAI)または空(動画名から自動推測)。SNS発信用コンテンツは含まず、YouTube URL確定後の/blog-snsに委ねる。エラー時はその時点で停止・報告。

/blog-create-site2Blog_AIの教科書/.claude/commands/blog-create-site2.md

AIの教科書(AI図鑑)ブログの記事作成第1段階(文字起こし→記事→SEO情報)を一括実行する。

00_一括実行.mdの「第1段階」に準拠。文字起こしは cd "AI_prompt(Auto)" && python blog_transcribe.py、記事は01_記事作成プロンプト.mdに従いGutenberg(Sangoテーマ)形式で生成。

/blog-finishBlog_RoutineLabo/.claude/commands/blog-finish.md

画像入り下書きの仕上げ第2段階: 差し替え検出→誤字/リンク/採点→WP更新→アイキャッチ→note/X下書きまで揃えて停止(公開は/blog-publish・2026-07-17改定)

引数=記事フォルダ名(例 20260409 DomoAI)または空(Blog_RoutineLabo直下のYYYYMMDD最新フォルダ自動検出)。対象は*記事完成.md。X/note自動投稿・採点・アフィリエイト誘導文まで含む第2段階。

/blog-finish-site2Blog_AIの教科書/.claude/commands/blog-finish-site2.md

AIの教科書ブログの記事仕上げ第2段階(画像プレースホルダー変換→誤字チェック→以降の仕上げ)を一括実行する。

前提=/blog-create-site2完了+投稿画像/AIの教科書/今回の差し込み画像/に画像配置。画像変換は blog_image_automation.py <記事> step3。最新記事フォルダを自動検出。

/blog-publishBlog_RoutineLabo/.claude/commands/blog-publish.md

ユーザーの「公開して」でWP+note+X記事の3本を一括公開し、アーカイブ・メディア片付け・R6再生成まで行う第3段階(2026-07-17新設)

公開前に画像差し替えを再検出(--replace-changed)。note=note_publisher --publish-draft / X=x_publisher --publish-draft(Playwright・失敗時は下書き無傷で手動公開に切替)。WP=REST status=publish(--passwordで保護公開可)。

本編動画10

/edit-mainClaudecode 動画編集/.claude/commands/edit-main.md

画面収録から本編動画(ジェットカット+字幕+Bロール付き)を焼き込みレンダリングまで生成する。

引数=入力動画パス。input/存在確認→npm install→.envのOPENAI_API_KEY/GEMINI_API_KEY確認→config/bgm/からBGM選択質問→レンダリング。

/review-transcriptClaudecode 動画編集/.claude/commands/review-transcript.md

入力動画の文字起こしを手動修正するための編集ファイル(transcript_edit.md)を生成・案内する。

引数=入力動画パス。無ければnpm run preprocessで生成。角括弧[#番号 開始-終了]の変更・行の追加/削除/並び替えは禁止(テキスト部分のみ編集)。修正完了後は/edit-mainへ。

/scriptroot直接編集

テーマを渡すと横断リサーチ+SEOキーワード設計+知見ベースの壁打ちを経て台本を作り、そのまま台本プレビューのWeb公開と解説スライドまで自動で仕上げる。

引数=[routinelabo|aibook]<ツール名/ねらい>。keyword_researchの無料サジェスト+/deep-researchでKW確定→SEO設計.mdに記録し下流(blog-create/概要欄/目次)と表記統一。納品=①台本.md ②スライド生成プロンプト.md ③台本プレビュー.html+視聴者公開版(GitHub Pages公開)④解説スライド(スライド制作/へ)。★2026-07-26から③④は確認を挟まず毎回自動生成する(MP4書き出しだけ確認)。②③④には裏側の都合(CTA/LINE導線等)を含めない。 ★2026-08-27改定: (1)ナレーション付き解説動画(MP4)を廃止=生成もアップロードもしない(旧=YouTube限定公開→ブログ冒頭へ埋め込む運用も枠ごと終了・/blog-finish STEP9.43も廃止)。(2)既定デッキに手描き図版を入れない=手描き図版の行き先は台本プレビューと収録用スライドの2つだけ。納品物は5点→4点(自動再生HTML/クリック送りHTML/PDF/★収録用スライド)。

/video-archiveClaudecode 動画編集/.claude/commands/video-archive.md

output/edit/<name>/の編集素材一式(jetcut.mp4+SRT+timeline.xml+markers+broll等)をzip化して別PCへ持ち出せるようにする。

引数=入力動画またはbasename。npm run archive -- で実行、出力=output/edit/<basename>.zip。/video-export-edit未実行なら先に案内して停止。元フォルダは削除しない。

/video-cleanupClaudecode 動画編集/.claude/commands/video-cleanup.md

指定動画のwork/<name>/キャッシュを削除する(output/は保護)。

npm run cleanup -- で実行し削除容量を報告。再処理時はWhisper/Bロール生成のAPIコストが再発生する旨を案内。output/配下や他動画のwork/は絶対に削除しない。

/video-cutClaudecode 動画編集/.claude/commands/video-cut.md

本編カットを1コマンドで完全自動化(無音/非発話/フィラー/AI判断カット+テロップ校正→Premiere直行の非破壊マルチクリップFCP XML)する。

引数=input/xxx.mp4。停止はStep1.5の冒頭一括質問(AskUserQuestion 1回3問)とStep4dのナレーション提案時のみ。テロップテーマ制(config/style.jsonのtelop.themes・既定tech_navy)。出力=output/edit/<name>/(timeline.xml/subtitles.srt/markers/cut_report.md等)。要OPENAI_API_KEY(Whisper)。

/video-export-editClaudecode 動画編集/.claude/commands/video-export-edit.md

Premiere Pro/Filmora等の編集ソフト用に、焼き込みなしの素材セット(カット動画+SRT+FCP XML+マーカー)を出力する。

引数=入力動画パス。npm run export-edit -- で実行。/video-finish(焼き込み版)とは独立。transcript_edit.mdの手動修正が反映される。

/video-finishClaudecode 動画編集/.claude/commands/video-finish.md

2段階ワークフローのStep2として、テロップ修正後の動画をジェットカットから本編レンダリングまで一気に完走させる。

引数=入力動画パス。前提=work/<name>/transcript.jsonとtranscript_edit.md(/video-start済み)。編集が一切無い場合のみ1度確認。BGM選択を挟む。

/video-listClaudecode 動画編集/.claude/commands/video-list.md

work/とoutput/にある全動画の処理状態(preprocess/jetcut/broll進捗・完成物有無・キャッシュ容量)を一覧表示する。

npm run listを実行して結果を表示・補足。クリーンアップしたい動画があれば/video-cleanup <name>を案内する。

/video-startClaudecode 動画編集/.claude/commands/video-start.md

2段階ワークフローのStep1として、文字起こしを実行しテロップ確認用ファイルを生成して停止する。

引数=入力動画パス。input/存在確認→.envのOPENAI_API_KEY/GEMINI_API_KEY確認→preprocess実行。ユーザーがtranscript_edit.mdを修正後、/video-finishへ進む前提。

ショート5

/edit-shortClaudecode 動画編集/.claude/commands/edit-short.md

画面収録からGeminiがハイライトを選び9:16縦型ショート動画を1〜数本生成する。

引数=<動画パス> [本数](省略時2本)。npm run short -- で実行、preprocess/jetcutはキャッシュ再利用。出力=output/shorts/<name>_short*.mp4、選定理由はwork/<name>/highlights.jsonから提示。

/food-talkroot直接編集(root専用・旧AI Food Talk由来、実働はショート動画作成/のTopView i2v)

食材名を渡すと擬人化3D野菜キャラが解説する10秒×3のAIフードトーク風ショート動画を生成する。

引数=食材名。.claude/skills/food-talk.mdのフローに従い、台本承認で1回だけ停止→承認後はキャラ画像3枚→Avatar4リップシンク3本→ffmpeg結合まで全自動。30秒結合版+個別クリップを出力。

/promo-shortショート動画作成/.claude/commands/promo-short.md

本編動画を宣伝するTTSナレーション付きダイジェストショート(形式H・30〜40秒・9:16)を半自動生成する。

TTS=scripts/tts.py(topview text2voice 0.1cr/件)、Bロール=GPT Image静止画+Ken Burns基本+見せ場のみSeedance i2v、組み立て=scripts/promo_assemble.py(純ffmpeg)。コスト目安≈5cr+画像$1弱。固定トップタイトルカード標準。

/short-videoショート動画作成/.claude/commands/short-video.md

Pixar風3Dキャラ等が日本語解説する30秒ショートを半自動生成する主力パイプライン(主に形式A/G担当)。

台本前にAskUserQuestionで形式を必ず確認: A=Avatar4通常(≈5.3cr)/G=ハイブリッド/B=フードトーク(→/food-talk)/C=ティーザー(make_teaser.py)/H=ナレーション宣伝(→/promo-short)。形式G/HはBGM+SE既定ON(scripts/audio_fx.py)。入力=テーマまたは本編動画の2モード。

/topview-short-videoショート動画作成/.claude/commands/topview-short-video.md

Topviewを使いPixar風3Dキャラが日本語解説する30秒ショートを半自動生成する(旧来版パイプライン)。

入力=テーマ入力モードA(Web検索で3選自動選定)または本編動画モード。ショート動画作成/配下がカレントディレクトリ前提(ルートから呼ぶ場合は cd "ショート動画作成" が必要)。

YouTube公開9

/make-tocroot直接編集

完成YouTube動画から実測タイムスタンプ付きの目次(チャプター)を生成する(Routine Labo/AIの教科書両対応)。

引数=[routinelabo|aibook][動画ファイル名(省略可)]。入力=完成動画(アップロード)/のサイト別サブフォルダ、サイト未指定時はどちらに動画があるかで自動判定。目次.mdを同フォルダに保存。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

/video-descriptionClaudecode 動画編集/.claude/commands/video-description.md

編集済み文字起こしからYouTube概要欄(タイトル案3つ+概要文+章立て+ハッシュタグ+タグ)を生成する。

引数=入力動画パス。前提=work/<name>/transcript.jsonとcut_plan.json(無ければ/video-start・/video-finishを案内)。npm run youtube -- で実行、Geminiが生成し出力=output/edit/<name>/youtube.md。

/video-embedBlog_RoutineLabo/.claude/commands/video-embed.md

公開したYouTube本編動画をWordPress記事とnote記事の両方へ1コマンドで埋め込む(Routine Labo専用)。

引数=記事フォルダ名/YouTube URL/空(最新自動検出)。差し込み先はタグ情報.md・R6_記事インデックス.mdから自動取得。WP=REST更新、note=note_auto_publisher/note_video_embed.pyのブラウザ操作。note URLは初回タイトル照合で自動取得し索引に保存。

/youtube-desc-site2Blog_AIの教科書/.claude/commands/youtube-desc-site2.md

AIの教科書の記事に対応するYouTube構成案・概要欄(VSEOタイトル3案ほか)を作成する。

対象=指定フォルダまたは2026 ブログ記事/内の最新フォルダ。記事完成.md・文字起こし.md・タグ情報.mdを読み込み、AI_prompt(Auto)/03_YouTube_SEO情報.mdのルールで生成。タイトルは40〜60文字。

/youtube-publishroot直接編集

完成動画から実測目次生成→概要欄埋め込み→YouTube非公開アップまで一括実行し、公開後は/blog-sns→/video-embedへ自動連鎖する。

引数=[routinelabo|aibook][動画ファイル名(省略可)]。/make-tocと/youtube-uploadの合体。チャプターは手元mp4からGroq Whisperで実測(アップ前に目次確定)。公開・予約は人間がYouTube Studioで行う。

/youtube-thumbnailroot直接編集

本編動画やタグ情報から太線アニメイラスト調のYouTubeサムネ(16:9)を感情5パターン自動生成する。

エンジン=Codexサブスク枠(ai_image_codex.py・API課金なし・2026-07-11切替。失敗時はGPT Image 2.0へ自動フォールバック・AI_IMAGE_CMDで切替可)。既定デザイン=design4(感情訴求型)・--design Nで切替。実体=サムネイル資料/プロンプト参考/thumbnail_generator.py、検品=thumb_verify.py。キャラは毎回ローテーション(--charで前回と別キャラ指定)。

/youtube-uploadYouTube自動投稿/.claude/commands/youtube-upload.md

完成動画をタイトル・概要欄・タグ・サムネ付きでYouTubeへ非公開(private)アップロードする(公開はStudioで人間が実施)。

引数=完成動画パス(任意・未指定なら完成動画(アップロード)/等から確認)。実体=YouTube自動投稿/youtube_upload.py、メタ情報はYouTube構成案・概要欄.mdから自動抽出。鍵は~/.config/youtube-upload/(Drive同期外)に配置済みが前提。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

/youtubeshort-publishroot直接編集

縦型ショートをYouTubeショート(即時公開)+TikTok(受信箱下書き)+Instagramリール(即時公開)へ同時アップし、公式LINEキーワード自動返信も有効化する(Routine Labo専用)。

引数=動画ファイル名(省略時は完成動画(アップロード)/ショート動画/直下の最新)。YT=youtube_upload.py --shorts --privacy public、TikTok=SNS自動投稿/tiktok_upload.py、IG=wp_video_upload.py+instagram_reels_upload.py --mode url、LINE=register_keyword.py(Step4.7)。YT/IGは即ライブなのでStep3.5でタイトル/概要を必ず目視。通常は/output-approveが承認済みショートを配置してから呼ぶ。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

動画素材の自動片付け(cleanup-editor-package.sh).claude/cleanup-editor-package.sh / .claude/commands/youtube-publish.md Step 7.5

本編公開+X共有が済んだジョブの重い動画素材(編集者パッケージ・完成版mp4・収録元動画)を機械判定つきで削除し、1回あたり15〜25GBを回収する。

2026-08-18ユーザー指示で新設・同日拡張。works全体で動画素材が重複しており、hubは1ジョブ14〜17GB、収録元動画は3箇所(今回の収録動画/・Claudecode 動画編集/input/・記事フォルダ/)に複製されていた。/youtube-publish の自動連鎖の最後(Step 7.5)で実行し、①本編が公開済み ②X共有済み(pending_reportと同じTypefully照合・aibook回は免除)③07に完成mp4かマーカーがある の3条件を機械判定して、1つでも欠ければ理由を出して消さない。消すのは(a)編集パッケージzip+02_本編カット (b)07の完成版mp4(本人SSD+Drive Step6.9の二重バックアップあり)(c)収録元動画3箇所。01_ブログ・03_ショート・04_Xレビュー・05_サムネ・08_スライドは触らない。★消す前に必ず 07_本編アップロード/_公開済み.txt を書く(公開URL・削除日・消したファイル一覧)。これが制作ラインボードの「本編カット完了」判定の根拠(factmap pipeline.json の final_archived)で、マーカー無しでmp4だけ消すと公開済みジョブが完了棚から一斉に出戻る(8/18に18ジョブで実発生)。mp3・segments.json・文字起こし.mdは必ず残るので、映像の再編集はできないが内容の再利用は可能。既定はdry-runで --apply が要る。過去分は --sweep、Typefully履歴が遡れない回は --stale-days 21。例外は --keep-master / --keep-source。2026-08-18の実行で合計246GBを回収した。

SNS/X7

/blog-snsBlog_RoutineLabo/.claude/commands/blog-sns.md

YouTube本編URL確定後に、ショート概要欄・返信テンプレ・SNS共有投稿・Discord/LINE更新メッセージを1ファイルにまとめて生成する第3段階スキル。

引数=フォルダ名または空(最新フォルダ自動検出。/blog-finishアーカイブ後は年別フォルダも検索)。/blog-create→/blog-finish→YouTube投稿→本スキルの流れの最終段階。Discord Webhook自動投稿(STEP2.8)も連動。

/x-mediaX Post/.claude/commands/x-media.md

X投稿の1投稿目に載せるメディア(動画>画像)を参照元URLから解決して添付するまでの正本。Xスキル全部がここを参照する。

2026-08-30新設(本人指示=「参照したURLの元の動画がそのまま1投稿目に載っている状態にしたい」)。候補URLは公式アナウンスのXポスト→公式ブログ/プロダクトページ→記事URLの順に並べて source_media.py へ渡す(記事URLだけだと静止画にしかならない)。取れたら typefully_post.py に --media と --require-media(1投稿目にメディアが無ければ下書きを作らずに落ちるゲート)、元ポストを丸ごと見せる回は --quote(引用リポスト)。403でHTMLが取れないページは brightData の scrape_as_html でメディアURLだけ拾って直接渡す。取れなかった回はテキストのみで出すが理由を最終報告に明記する。観測=--audit の first_post_no_media(run-xguard が保存しセッション開始hookが警告・無人レーンはシェル自身が件数を数える)。旧: 同じルールをXスキル5本へ複製していたが、正本1本+参照へ寄せた。

/x-postX Post/.claude/commands/x-post.md

海外のX投稿を取得して日本語に翻訳・再構成し、Typefullyに下書き保存する。

引数=XポストURL(翻訳モード・FxTwitter APIで取得)またはテキスト(独自投稿モード)。引用リポスト風コメントは言い切り/インフルエンサー調のスタイルルールあり。 2026-08-30改定: Step4で source_media.py を呼び、元ポストの動画(無ければ画像)を必ず1投稿目へ添付する(「XのURL埋め込み表示に任せて省略してよい」は廃止)。元ポストを丸ごと見せる回は --quote。

/x-researchX Post/.claude/commands/x-research.md

AI業界の最新ニュースをリサーチし、厳選3件を最適時間にTypefullyで予約投稿する(毎日午前4時タスク想定)。

引数=キーワード(任意・例 "OpenAI")。Bright Data MCPでXの実エンゲージメント上位5件を実数ベースで取得(未接続時はWebSearchのみ)。Typefully Creatorプラン・1日3件がアルゴリズム最適値。 2026-08-30改定: Step3.5を新設し、公式Xポスト→公式ブログ→記事URLの順で source_media.py に渡して1投稿目の動画を解決する(文章だけの投稿は理由を明記する例外扱い)。

/x-sns-shareX Post/.claude/commands/x-sns-share.md

ブログ・YouTubeのSNS共有投稿mdを読み取り、翌日の最適時間帯にTypefullyで予約投稿する。

引数=SNS共有投稿のmdパス(例 SNS共有投稿/20260331 YouWare.md)または空(フォルダ内最新を自動選択)。SNS共有投稿作成.mdのテンプレ形式(タイトル+✅ポイント)前提。

/x-tool-reviewX Post/.claude/commands/x-tool-review.md

音声入力テキストからツール紹介文を作り、30-40秒ショート動画付きでX/Threadsに投稿する。

引数=ツール名と機能説明(音声入力テキスト)。動画は X Post/動画アップロード/ 直下の.mp4/.movを自動検出。Web検索でツール情報を補完し統一スタイルで作成。

/blog-sns-embedBlog_RoutineLabo/.claude/commands/blog-sns-embed.md

本編公開後の後工程 /blog-sns(SNS発信用生成)→ /video-embed(WP+note埋込)を1コマンドで連続実行するラッパースキル。

引数=記事フォルダ名/本編URL/空(最新自動)。本編URLをStep0で1回だけ確定し二重に聞かない。本編が非公開ならSTEP1(SNS発信用生成)のみで停止→公開後の再実行でSTEP2が冪等に進む。/blog-sns・/video-embed本体は壊さず順に呼ぶだけ。/youtube-publish Step6の自動連鎖と同内容の手動入口。

メンバーシップ3

/ai-weeklyBlog_メンバーシップ/.claude/commands/ai-weekly.md

メンバー限定「AI週報」の台本とスライド資料を、直近1週間のAIニュースのDeep Researchから一発生成する。

引数=[配信日YYYY-MM-DD省略可][実使用ツール(🟢用・任意)]。Bright Data MCP主軸の5観点並行調査→Blog_メンバーシップ/週報/<配信日>/に①台本②スライド資料を出力。週報_フォーマット.md準拠、🟢実体験/🟡ニュースの2モード・出典付き・盛らない。

/member-pickBlog_メンバーシップ/.claude/commands/member-pick.md

メンバー週次配信コーナー②「今週の当たり」の台本とスライド資料を🟢実体験ベースで生成する。

引数=<ツール/プロジェクト名> | <なぜ良かったか(任意)>。型=前の困りごと→見つけた→どう変わった→誰に効く。🟢は実際に使ったものだけ・盛らない・機微情報は出さない。週次メンバー配信フォーマット.md準拠。

/pro-revenueBlog_メンバーシップ/.claude/commands/pro-revenue.md

ビジネスAIプラン(¥5,400)限定「開発と収益化」シリーズの台本+スライドを、自作プロジェクトのread-only調査から生成する。

引数=<プロジェクトのフォルダパス(必須・例 /Users/senao/VideoEditor)>[回番号][配信日]。出力=Blog_メンバーシップ/プロ限定_開発と収益化/第NN回_<名>_<日付>/。機微情報は出さない・未公開数字は「設計値」明記。

その他1

/share-htmlroot直接編集

自己完結HTMLを公開URL(視聴者=yt-share/GitHub Pages・メンバー=Cloudflare Pages)にして共有リンクを返す。

引数=--target <yt|member> <HTMLパス> [slug]。実体=共有ページ/publish_share.sh。★2026-08-18: member の出力先を Cloudflare Pages(routinelabo-member・ソース非公開)へ移行し、公開と同時にメンバーの書庫へ自動掲載されるようにした。slugにはランダム文字列を付与。業者向けは別コマンド bash 共有ページ/publish_vendor.sh pr-<vendor> <html>(案件ごと独立)。公開前に裏側情報の有無を必ず目視確認。

SNS発信1

/x-highlight-share(本編ハイライト→Xシェア)X Post/.claude/commands/x-highlight-share.md

本編動画の文字起こし(segments.json)から見どころを選び、編集済みダイジェスト(右上トピックテロップ+下部テロップ+ポップアップ強調ワード+挟みカード・30〜40秒×2〜3本)を合成してXシェア投稿としてTypefully予約する。X用の別撮り動画を廃止(2026-07-25導入・同日v2化)。

合成エンジンは X Post/scripts/highlight_digest.py(1920x1080/30fps・仕様JSON駆動・尺と範囲の検証・ffprobe全数検品・チェックフレーム自動出力・別本編の上書きガード・--dry-run)。見どころ選定は「映像が動くデモ場面だけ」(料金表・スライド説明はNG=2026-07-25ユーザー裁定)で、候補フレームを目視確認してから仕様JSONを書く。素の無編集切り出しはhighlight_clips.py(特殊回のみ)。/work-startはSNS動画0本の回に自動でこのモードへ分岐。

コスト管理1

/cost-dashboard — コストダッシュボードを開く.claude/commands/cost-dashboard.md

コスト管理ダッシュボード(ライブ更新サーバ)をワンコマンドで起動してブラウザで開くスキル。

二重起動チェック→serve.pyをnohupでバックグラウンド起動→起動待ち→open。完了報告に実測値サマリ(OpenAI/Anthropic当月実請求・Codexサブスク枠消費・TopView残クレ等)を添える。引数stopで停止。2026-07-11作成。

スキル8

bizai-next.claude/commands/bizai-next.md(works root専用)

ビジネスAI講座(メンバー限定シリーズ)の次回テーマ提案エンジン

台帳(Blog_メンバーシップ/_ビジネスAI台帳.md)を各回フォルダ・git活動・戦略カレンダーの事実から再生成し、4本柱のバランスと予告の回収を優先して次回候補3本を理由付きで提案する。台帳は手で書かないリコンサイラ型。2026-08-05新設。

秘密基地テーマ(統一デザインシステム)+ /base-theme共有ページ/秘密基地テーマ/(README.md=正本・tokens.css)+ .claude/commands/base-theme.md

ルーティンラボの販売面(LP・サイト・配布HTML)の統一デザイン。テック・ミニマル=ライト地×黒タイポ×ヘアライン×ブルー#2563EB 1色×暗部は実物だけ。カバー画像プロンプト正本・LP型・トーン・禁止事項を1冊に集約。

2026-08-23制定(旧・村テーマ=SANGO可愛い系は同日廃止し_archive/へ退役。/village-themeはリダイレクトのみ残置)。参考実測=codexbar.app/Linear。SSOT宣言(プロダクト一覧の正=道具カタログ.json)・公開ゲート(ng_check/dist罠)・公開面レジストリ登録義務まで記録。実装リファレンス=秘密道具 _build_catalog.py。

/content-review(発信分析・改善提案).claude/commands/

各PFの実測レポートを束で読み、改善提案レポートを司令室に生成する。週1自動(loop-catchup)+手動可。

生成先=司令室/data/改善提案_YYYYMMDD.md。実測数値の引用のみ・データなしは⚪未計測で正直表示(狼少年防止)。

/bunshin-sync(分身AI選別昇華).claude/commands/

受信箱に自動で溜まった学び候補を選別し、本人確認後にのみ学びログ/考え方へ昇華する(Maker-Checker)。

収集は_bunshin_intake.py(週次自動・作業ログ/裁定コミット/勝ちテーマ)。核の03_考え方はAIが勝手に書き換えない=2026-08-08裁定。

/auth-doctor(認証の健康診断).claude/scripts/auth_doctor.py + commands/auth-doctor.md

YouTube OAuth・Studio/noteプロファイル・IG/Typefully/GSC/GA4/GAS/Discord・FDA・sync/ainews鮮度を11項目診断し健全性.jsonへ。実プローブ込み・秘密値は書かない。

quick=open.shが毎回/フル=/auth-doctor。司令室🩺健全性タブに表示。切れる前に気づく仕組み。

/verify(works構成の全数検証).claude/scripts/verify_all.sh + commands/verify.md

verify5本(works/context-guard/parallel/slide-tools/machine-setup)を一括実行し、失敗項目だけ提示。結果は司令室の健全性タブへ。

verify_status.jsonに記録。5本の起動が人の記憶頼みだった穴を塞ぐ。

/session-close(終了チェックリスト一括).claude/commands/session-close.md

root CLAUDE.mdの作業セクション終了チェックリスト0〜5(_現在地更新・残タスクマップ・作業ログ・分身AI受信箱・commit+push・pending確認)を1コマンドの実行台本に。

毎セッション必発の2大手作業(_現在地・作業ログ)を確実化。新スクリプトなし=既存配線を束ねるだけ。

/ainews(日次AIニュース動画パイプライン)X Post/.claude/commands/ainews.md

毎朝6:45のX投稿用AIニュース動画を前夜に一括生成する司令塔。Bright Data収集→選定3-5本→ファクト表→ポッドキャスト台本→動画→X本文→Typefully予約→KV登録まで9ステップ。

初週はapprovalモード(予約前にユーザー確認)、軌道後はauto(Discord事後通知)。公開とLINE反映はクラウド側(Typefully+CF Worker cron)でMacスリープに耐える設計。共有状態=KV ainews_schedule。安全網=loop-catchup ainews-url・監視=watchdogチェック8。

プロジェクトスキル(MusubiProject)1

musubi-illust(むすびスタイルのイラスト安定生成)MusubiProject/.claude/skills/musubi-illust/

地域プロジェクトの資料・スライド用イラストを「和紙地・赤い結び紐・手描き水彩風」のブランドスタイルで安定生成するプロジェクトスキル。生成はCodex CLI(ChatGPTサブスク枠のGPT Image 2.0)経由でAPI課金なし。

Manus製skillの構造化プロンプト設計(画角→主題→モチーフ→共通スタイル句)を codex_image.sh 経路に翻案。参照画像(-r)でキャラ・画風の一貫性を維持し、生成→目視検証→デザインDB(08_デザインDB/)へ蓄積のループを規定。既存キャラ(©付き)はAI描き直し禁止で原画像を切り出し再利用。スタイルの正典は 08_デザインDB/スタイルガイド.md。

外部AI連携2

/codex — Codexへのタスク委譲~/.claude/commands/codex.md

(2026-08-22フル復活・2026-09-05 GPT-6 Astra 化)Codex CLI への委譲スキル。定型・軽量〜中量の独立タスクと、重いプロジェクトの実装レーン(設計=Fable 5.1/実装=GPT-6 Astra/検収=Claude)に使う。入口はラッパー codex_lane.sh。

2026-07-25に一度廃止(Opus 5へ一本化・画像生成のみ残す)→ 2026-08-22の本人裁定でフル復活。委譲4条件(自己完結・verifyで機械検証可・works固有ルール判断なし・高リスク領域でない)・1ステップ=1委譲・打ち切り基準(差し戻し2回/ハング)・記録ルールの正本はスキル本体(~/.claude/commands/codex.md)。検収と git commit/push は常に Claude 側(Maker-Checker・作者senao固定)。ChatGPTサブスク枠=API課金なし。 ★2026-09-05: 実装モデルを gpt-5.6-sol → gpt-6-astra(effort xhigh 固定・本人裁定)へ切替。実行は ~/.claude/scripts/codex_lane.sh 経由のみ(-m でモデル固定・固定前文=git禁止/秘密情報禁止/実名禁止/verify自走・ハング監視・報告JSONスキーマ・禁止語検査・台帳 --stats・--resume で同スレッド差し戻し)。粒度は 1ステップ=1委譲が既定で、プランに Codex可(ブロック) と明記した連続ステップはブロック委譲可。枠切れ(rc 75)・ハング(rc 124)は自動切替せず止めて報告。Codex CLI 0.153.1 以上。

/codex-image — サブスク枠での画像生成~/.claude/commands/codex-image.md

「画像をN枚生成して」でCodex CLI(ChatGPTサブスク枠・API課金なし)から画像生成するグローバルスキル。

本体は ~/.claude/scripts/codex_image.sh(枚数・保存先・プロンプト指定)。1枚ずつcodex execで生成し、~/.codex/generated_images/ から新規pngを自動回収して保存先へコピー、パスを返す。複数枚時はバリエーション指示を自動付与。GPT Image 2.0のAPI課金(≈$0.19/枚)の代替。2026-07-11作成・2枚生成E2E検証済み。

経営・収支1

/pl-sync.claude/commands/pl-sync.md

司令室💹収支タブの実測データ更新(銀行明細PDF全転記+サブスク台帳の公式価格再調査)

銀行実測.json(rows/monthly/recurring/findings)とサブスク台帳.json の生産者スキル。明細PDFは冪等マージ・PayPalまとめ引出は案件突合に使わない(通知メール全件来ない実証済み)。目安=銀行月1・台帳四半期

資料作成1

/html-slide~/.claude/skills/html-slide/

アニメ付きHTMLスライド(1920×1080・HTML1ファイル)を一撃生成し、確認後にMP4へ書き出すスキル。

テンプレ(assets/template.html)のCSSクラスとJSエンジンは無改変で、スライド要素だけ差し替えるのが原則(__seek/__total/__ready の契約を壊すとMP4書き出しが死ぬ)。★2026-07-26の3層ルール=公式サイトの実スクショ+Codex GPT Image 2.0の生成図版+HTML/CSSで実装した動くグラフ を必ず混ぜ、数字は静止画にしない。配色は題材自身の色に寄せる(既定の紫グラデは全体デザイン方針に反するため使わない)。出力先=スライド制作/<YYYYMMDD_テーマ>/。検証=verify_slides.mjs で全枚数のはみ出し・総高を自動判定。

進捗管理1

/task-map — 制作ライン残タスクマップを即時表示.claude/commands/task-map.md

全テーマ×12工程の残タスクと次の一手を、その場で再判定して1行/テーマ表示する手動コマンド。セッション開始時の自動表示と同じマップの即時版。

regen-factmap.sh(120秒dedupe)→board_digest.py の順に実行して出力をそのまま貼る。CLAUDE.mdチェックリスト0.5により、制作ライン系の工程が1つ終わるたびに完了報告へも自動で貼られる。

運用自動化1

/hub-sync — 設定ハブ同期スキル~/.claude/skills/hub-sync/SKILL.md

設定ハブへの登録・更新・漏れチェックをスキル1回で完結させる。

2026-07-25作成。追加/更新モードで初出判定(grep)→JSON2ファイル追記→ビルド2本実行→報告まで自己完結。check モードで実在する skills/commands/agents/hooks/scripts とハブ登録の差分を検出する。『作りっぱなしでハブから漏らさない』蓄積ルールの実行手段。

AUTOMATION — hooks / launchd / スクリプト / 公開システム

hooks15

SessionStart hook: auto-commit-push.sh pull/Users/senao/Downloads/works/.claude/hooks/auto-commit-push.sh(設定: .claude/settings.json)

セッション開始時にGitHubから最新をfast-forwardのみで自動pullする。

トリガーはSessionStart(timeout 30秒)。`auto-commit-push.sh pull` として実行され、mainブランチ以外・マージ/リベース中・gitリポ外では何もしない安全装置つき。失敗しても常にexit 0でセッションをブロックしない。

SessionStart hook: _現在地.md 自動注入/Users/senao/Downloads/works/.claude/settings.json(inlineコマンド)

セッション開始時に「やること/_現在地.md」をcatしてコンテキストへ自動注入する。

トリガーはSessionStart(timeout 10秒)。`$CLAUDE_PROJECT_DIR/やること/_現在地.md` が存在すれば「🧭 作業再開ポイント」ヘッダ付きで全文出力し、単一の再開入口として機能する。作業終了チェックリスト項目0でこのファイルを更新する運用とセット。

SessionStart hook: check-symlinks.sh/Users/senao/Downloads/works/.claude/hooks/check-symlinks.sh

セッション開始時にworks内の全symlinkの生存を確認し、切れている時だけ警告を出す。

トリガーはSessionStart(timeout 20秒)。findで.git/node_modules/venvを除く全symlinkを走査し、リンク切れがあれば「⚠⚠⚠ symlink切れを検出」とリンク先つきで出力。Drive側フォルダ誤削除で7本切断されたインシデント(2026-07-05)を契機とした観測ループ。

SessionStart hook: loop-catchup.sh(アンアクロン式)/Users/senao/Downloads/works/.claude/hooks/loop-catchup.sh

セッション開始のたびに鮮度切れの定常ループ(trend/retention/costs)だけをバックグラウンド実行する。

トリガーはSessionStart(async・timeout 30秒)。trendは今日のレポートが無ければ実行など鮮度判定つきのanacron方式で、launchdがTCC未付与で動けない環境でも「Macを開いた日は必ずループが回る」主経路。launchdは無人日カバーの補完扱い。

SessionStart hook: idle-sessions-remind.sh(開きっぱなしセッション検知)/Users/senao/Downloads/works/.claude/hooks/idle-sessions-remind.sh + .claude/scripts/idle_sessions.py

起動後6時間を超えた他のClaudeセッションを、本体+MCPサーバの占有メモリつきで一覧表示する。該当ゼロなら何も出さない。

導入契機は2026-08-04、works で9セッションが31時間開きっぱなしになり、本体とMCPサーバで約7.7GB・35プロセスを占有していたこと(人間が気づく手段が無かった)。判定は ps の etime で起動後経過を測り、しきい値超のものだけ拾う。自分自身は祖先をたどって除外する。あわせて transcript(*.jsonl) の最終更新から「最終活動」を出すので、長く開いているだけで実は作業中なのか、本当に放置なのかがその場で分かる。日本語パスは macOS の正規化差(NFD/NFC)でディレクトリ名の dash 数がズレるため両方の綴りを試す。自動killはせず、まとめて閉じる kill -TERM のコマンド例を出すだけに留める(終了は人間の一声で/SessionEnd hook が未コミット分を自動 commit&push する)。しきい値は環境変数 IDLE_HOURS で変更できる(既定6)。

PostToolUse hook: post-edit-sync-commands.sh/Users/senao/Downloads/works/.claude/hooks/post-edit-sync-commands.sh

Edit/Writeでスキルmd(*/.claude/commands/*.md)を編集した直後にsync-commands.shを自動実行してroot集約へ即反映する。

トリガーはPostToolUse(matcher: Edit|Write、timeout 60秒)。正本(プロジェクト側)編集→sync自動実行、root集約コピーを直接編集した場合は「次のsyncで上書きされて消える」警告を出す。対象外ファイルの編集では即終了する軽量設計。

Stop hook: auto-commit-push.sh push-only/Users/senao/Downloads/works/.claude/hooks/auto-commit-push.sh

毎ターン終了時に未pushコミットがあればGitHubへ自動pushする。

トリガーはStop(async・timeout 60秒)。`auto-commit-push.sh push-only` で未pushコミットの有無だけ確認してpushする。コミット作成は行わないため、意味のある手動コミットが基本という運用と両立する。

SessionEnd hook: auto-commit-push.sh full/Users/senao/Downloads/works/.claude/hooks/auto-commit-push.sh

セッション終了時に未コミット変更を「auto:」で自動commitしてからpushする(反映忘れの最終保険)。

トリガーはSessionEnd(timeout 90秒)。`auto-commit-push.sh full` として実行。機械的なコミットメッセージになるため、あくまで保険であり手動の意味あるコミットが優先という位置づけ。なお .claude/settings.json にはhooksのみで、permissionsセクションは定義されていない。

sync-claude-config.sh(共通設定の自動追随・SessionStart)~/.claude/hooks/sync-claude-config.sh(配布=Claude設定同期/home_dot_claude/hooks/)

二次機は配布物とのズレを検出して共通設定を自動適用。母艦はファイル群の取り込み漏れを警告し、settings の共通部分は正本へ自動復元する。揃っていれば完全に無言。

「母艦で設定を変えたら、他Macはpullだけで揃う」を成立させるための最後の一手。二次機(マーカーあり)=CLAUDE.md/コマンド/エージェント/スクリプト/hooksのズレを数えてapply.shを自動実行+共通settingsをマージ。母艦=ファイル群は正本なので自動適用せず警告のみ。★2026-08-22追加: settings.json の共通部分だけは母艦でも merge_settings.py で正本(settings_shared.json)へ自動復元する(/model の「新規セッションの既定として保存」が model を書き換え、既定が Fable 5=Opus比2倍のまま新セッションが立ち上がる事故が同日4回再発したため。settings の正本はマシンを問わず settings_shared.json)。毎セッションのノイズを出さないため、作業が無いときは何も出力しない。2026-07-28新設。

PreToolUse hook: image-read-gate.sh(画像の原寸Read防止)/Users/senao/.claude/hooks/image-read-gate.sh

画像をReadしようとすると原寸を止め、長辺1000pxに縮小したJPEGへ自動誘導する全プロジェクト共通ゲート(実測20.1倍削減)。

導入契機は「フォルダを開いた瞬間に Context limit reached で何もできない」の再発(2026-07-25)。実測すると最大セッション97MBのうちReadが81.7MB=84%を占め、その中身は画像の原寸読み込み(平均320KB/件・同じ画像を3回読んだ例あり)だった。トリガーはPreToolUse(matcher: Read)。画像拡張子かつ120KB超なら sips で長辺1000px・JPEG q60 の縮小版を ~/.claude/imgcache/ に作り、denyしてそのパスを案内する。キャッシュキーは パス+mtime+サイズ のハッシュなので、画像を更新すれば作り直される。同一セッションで同じ画像を読み直そうとした場合も既読台帳(.seen-<session_id>)で止める。縮小版そのもの・小さい画像・非画像・Read以外のツールは素通しで、変換失敗時は原寸のまま通す(セッションを止めない設計)。原寸が必要なときは CLAUDE_IMG_GATE=off、閾値は CLAUDE_IMG_MAXDIM / CLAUDE_IMG_QUALITY / CLAUDE_IMG_MIN_BYTES で調整。実サムネ10枚での実測は 21.4MB→1.06MB。

SessionStart/Stop hook: session-size-warn.sh(セッション肥大警告)/Users/senao/.claude/hooks/session-size-warn.sh

セッションが8MBで注意・16MBで「/clearして」と警告する。肥大に気づけないまま次回起動で詰むのを防ぐ観測ループ。

導入契機は、巨大セッションが3日間(07-08〜07-11・94発話)育ち続けて97MBに達し、次に開いた瞬間に上限到達していたこと。トリガーはSessionStart(復元されたセッションが既に大きい場合の事前警告)とStop(ターンごとの監視)の両方。transcript_pathの実バイト数に加え、積まれている画像の枚数とMBも数えて併記するので、肥大の主因が画像かどうかがその場で分かる。閾値は CLAUDE_SESSION_WARN_MB / CLAUDE_SESSION_CRIT_MB。ついでに1日1回だけ ~/.claude/imgcache/ の14日超のキャッシュと3日超の既読台帳を掃除する(キャッシュが無限に溜まらないように)。存在しないパス・壊れた入力では黙ってexit 0。

SessionStart hook: session-mine-sweep.sh(地雷セッション自動隔離)/Users/senao/.claude/hooks/session-mine-sweep.sh

セッション開始のたびに「16MB超×24時間以上更新なし×現在セッション以外」の巨大トランスクリプトを _archive_transcripts/ へ自動退避する。resumeした瞬間のContext limit即死を根絶する最後の層。

導入契機は2026-07-25夜のContext limit再発。解剖の結果、画像ゲート・肥大警告のhook自体は正常で、原因は「対策配備前に育った16MB超の残骸セッションのresume」だった。前回の隔離は手動かつ『16MB超×3日以上前』条件だったため当日〜前日の地雷が残った。→ SessionStartで毎回自動掃除に昇格(初回手動で6本200MB隔離・97MBの元凶含む)。復元は mv で戻すだけ・無効化は CLAUDE_MINE_SWEEP=off。検証は verify-context-guard.sh(ドライラン5ケース含む28項目)。

ainews Worker cron(LINE自動更新・Mac非依存)Blog_RoutineLabo/line_auto_reply/src/index.js(scheduledハンドラ)

毎朝06:50-07:35 JSTにCF Worker cronがTypefully APIから公開ポストのx_published_urlを取得し、LINEキーワード『今日のAIニュース』を自動更新。取れない朝はプロフィールURLへフォールバックしボタンを死なせない。

Phase0実測でTypefully published draftにx_published_urlフィールドが実在することを確認して採用。手動発火=POST /admin/ainews/tick(x-admin-key)。E2E検証済(実URL反映を確認)。

claude-md-autosync.sh(~/.claude編集の配布物自動コピー・PostToolUse)~/.claude/hooks/claude-md-autosync.sh(配布=Claude設定同期/home_dot_claude/hooks/)

~/.claude の CLAUDE.md・commands/agents/scripts/hooks を Write/Edit した瞬間、works の配布フォルダ(home_dot_claude)へ自動コピーする。pull-from-home.sh の叩き忘れ対策。

PostToolUse(Write|Edit) hook。対象パス(~/.claude/CLAUDE.md と commands/ agents/ scripts/ hooks/ 配下)のときだけ pull-from-home.sh を実行して配布物へ取り込む。二次機(.works-secondary あり)では動かない=母艦が正本で、二次機のローカル編集を配布物へ逆流させない。rm によるファイル削除では発火しないため、削除の配布は手動 pull-from-home.sh。2026-07-28導入。

office-statusline-capture.sh(サブスク枠実測の記録・statusLine)~/.claude/hooks/office-statusline-capture.sh(statusLine・母艦)

Claude Code statusLine の公式 payload から rate_limits(Pro/Max サブスク枠の実測%・5h/週間窓)を ~/.claude/office_usage/ へ記録する。

AIオフィスの status_board がこれを読み、Claude ゲージを「推定ペース」→「実測枠%」へ格上げする。OAuth トークンには一切触れない(statusLine 公式仕様の範囲)。どんな失敗でも exit 0・stderr 沈黙で statusLine 表示を壊さない設計。処理は python3 1回起動のみに抑える。

launchd7

launchdジョブ: trend(トレンド収集)~/Library/LaunchAgents/com.senao.works.trend.plist(実体: ショート動画作成/トレンド収集/trend_scout.py、配線: .claude/launchd/install.sh)

毎朝07:00にtrend_scout.pyで日次トレンドレポートを生成する。

run-job.shラッパ経由で実行され、ログは .claude/launchd/logs/trend.log、非0終了時はnotify.shでDiscord警告。~/DownloadsのTCC保護のため /bin/bash へのフルディスクアクセス付与が有効化条件(未付与だとOperation not permitted)。手動発火は `launchctl kickstart -k gui/$(id -u)/com.senao.works.trend`。

launchdジョブ: retention(ショート維持率)~/Library/LaunchAgents/com.senao.works.retention.plist(実体: 維持率観測/retention_report.py)

毎週日曜08:00にretention_report.pyでショート維持率の週次レポートを生成する。

run-job.sh経由でlogs/retention.logへ記録・失敗時Discord通知。launchdはMacスリープ中は発火せず起動後に持ち越し実行(cronと違い取りこぼさない)。TCC未付与時はSessionStartのloop-catchup.shが代替経路。

launchdジョブ: costs(コスト集計)~/Library/LaunchAgents/com.senao.works.costs.plist(実体: コスト管理ダッシュボード/collect_costs.py)

毎月1日09:30にcollect_costs.pyで全API課金の月次集計を実行する。

run-job.sh経由でlogs/costs.logへ記録・失敗時notify.shでDiscord警告。Python標準ライブラリのみで動く設計(venv不要)。登録/更新は `bash .claude/launchd/install.sh`(冪等)、解除は `--uninstall`。

launchdジョブ: watchdog(ループ鮮度番犬)/Users/senao/Downloads/works/.claude/launchd/watchdog.sh(plist: com.senao.works.watchdog)

毎日09:00に全ループの鮮度・symlink・git未push・本編差し込み漏れを監視し、異常時のみDiscordへ通知する。

「実行」と「実行されなかったことの観測」を分離する番犬。監視7点=①今日のtrendレポート有無 ②retentionが8日以内 ③cost_data.jsonが32日以内 ④symlink切断(check-symlinks.sh) ⑤origin/mainより先行の未pushコミット ⑥YouTube公開済なのにWP/note未埋込の記事(embed_gap_check.py) ⑦AI Office常駐ヘルス(:4780死活・実データカナリア・中継/status鮮度・crash-loop・python3実体消失/2026-07-11新設)。正常時は無音、手元実行は `bash .claude/launchd/watchdog.sh`。実行はSessionStartのloop-catchupが「今日未実行なら」自動代行(launchdはFDA待ちの補完)。

run-job.sh(launchd共通ラッパ)/Users/senao/Downloads/works/.claude/launchd/run-job.sh

全launchdジョブの共通ラッパとして、ログ追記と失敗時のDiscord通知を保証する。

使い方は `run-job.sh <ジョブ名> <作業dir> <コマンド...>`。出力を .claude/launchd/logs/<ジョブ名>.log に追記し、非0終了なら .claude/scripts/notify.sh でDiscordへ警告(サイレント失敗の撲滅)。launchdの最小PATH問題対策でhomebrewをPATH先頭に追加する。

notify.sh(共通Discord通知)/Users/senao/Downloads/works/.claude/scripts/notify.sh

全ループ・hook・launchdジョブから呼ばれる共通のDiscord警告通知スクリプト。

使い方は `bash .claude/scripts/notify.sh "⚠️" "本文"`。DISCORD_WEBHOOK_URLは環境変数>中央.envの順で解決し、通知自体の失敗では絶対にブロックしない(常にexit 0)。2026-07-06ループ監査で「失敗が人間に届く経路ゼロ」と判明したことを受けて新設された観測の脚。

launchd cctunnel(スマホからの入口・常駐).claude/launchd/install.sh

cloudflared tunnel run をKeepAliveで常駐させる。資格情報は ~/.cloudflared/config.yml の credentials-file(plistにも.envにも秘密を書かない)。

2026-08-22 に Access 越しで開通(ホスト名の正本は ~/.cloudflared/config.yml と公開面レジストリ。ここには書かない)。config.yml が無い/cloudflared 未導入なら登録をスキップする。通すのは 127.0.0.1:8890 だけで、他ホスト名は http_status:404。Mac再起動後も自動復帰するが、★母艦Macが起きている間しか開かない(AC接続ならスリープしない設定)。ログ= ~/Library/Logs/senao-works/com.senao.works.cctunnel.launchd.log。★CC_TUNNEL_TOKEN 方式は使っていない(phase3_check.sh が『未設定』と誤報していたのを2026-08-22に修正)

スクリプト10

verify-works.sh(配線の全数検証)/Users/senao/Downloads/works/.claude/verify-works.sh

構成変更後に手動実行し、パイプラインが呼ぶスクリプト・symlink・スキル集約の健全性を一括検証する。

旧DRY_RUN daily-pipelineの後継。チェック内容=①中核スクリプトのマニフェスト全数 test -e ②Drive symlink 7本の生存(check-symlinks.sh流用)③スキル集約ドリフト等。使い方は `bash .claude/verify-works.sh`、移動・改名後は `bash .claude/verify-works.sh "旧パス名"` で残存参照も検索できる。

sync-commands.sh(スキル集約同期)/Users/senao/Downloads/works/.claude/sync-commands.sh

各プロジェクトの .claude/commands/*.md(正本)をroot直下の .claude/commands/ へ集約コピーする。

正本は各プロジェクト側で、rootは生成先(元ファイルは一切書き換えない)。各コピー先頭に `<!-- 集約元: <相対パス> -->` を付与し、frontmatterがある場合は終了---直後に挿入。root専用スキル(元がないもの)は削除しない。手動実行のほか、post-edit-sync-commands.sh hookから自動実行される。

collect-output.sh(成果物集約)/Users/senao/Downloads/works/.claude/collect-output.sh

作業セクション終了時に成果物を「今回のアウトプット/<ジョブID>/<工程>/」(Drive)へ集約コピーする。

使い方は `bash .claude/collect-output.sh <ジョブID> <工程サブフォルダ> <コピー元...>`。元の保存先は残したままコピーし、Air・mini・スマホから確認できる状態にするのが完成条件。ユーザー確認・公開後に手動削除する運用。

distribute-output.sh(承認後の複製配布)/Users/senao/Downloads/works/.claude/distribute-output.sh

/output-approveスキルの実体として、承認済みhub「今回のアウトプット/<ジョブID>/」から下流フォルダへ成果物を複製配布する。

hub側は絶対に削除しない(複製のみ・バックアップ扱い)、配布先の既存ファイルは上書きしない(手動差し替えが常に勝つ・冪等)が2大原則。配布内容=①差し込み画像→投稿画像/<サイト>/今回の差し込み画像/ ②サムネ→アイキャッチ画像/ ③アップ用JPG→完成動画(アップロード)/<サイト>/(youtube-publishのサムネ自動検出が拾う)。【★2026-07-17: 完成動画(アップロード)はレガシー化→hub 今回のアウトプット/<JOB>/07_本編アップロード(本編)・03_ショート(ショート)直読みへ移行】

プロジェクト×スキル マップ(_scan_skills.py)共有ページ/設定ハブ/_scan_skills.py

Mac内の全プロジェクト(works各サブ/~project配下/グローバル/公式スキル/プラグイン)の.claude/commandsを決定的に走査し、どのプロジェクトで何のスキルが使えるかをdata/スキルマップ.jsonに書き出す。

_build_site.pyがビルド前に毎回自動実行するため、他プロジェクトでスキルが登録されると次のビルドで設定ハブの🗺️セクションに自動反映される。node_modules/venv等は除外・深さ3制限。regen-hub.sh(Stop/SessionStart hook)で無人更新。2026-07-07新設。

AIオフィス(Claude Codeセッションのライブ可視化)~/project/develop/20260714 - ai-office/(server/office_server.py・ui/office_page.html・office_config.json・verify.sh)

このMacの全Claude Codeセッションを「AI社員が働くドット絵オフィス」としてライブ表示するローカルサーバー(ゲームUI)。背景とプロジェクト固有キャラ11体はGPT Image 2.0製。1セッション=1社員が入口から出社してデスクへ歩き、作業中は吹き出し・放置で休憩ラウンジへ移動。キャラをクリックするとRPG風会話ウィンドウで「いまの作業・未回答の質問・承認待ちの可能性・直近の報告」を話してくれて、✅承認/🛑停止/📝報告のクイック返答や📨指示ポストでそのセッションに指示を届けられる。

起動= python3 "~/project/develop/20260714 - ai-office/server/office_server.py" → http://localhost:4780(UI=office_page.html・再起動なしで編集反映)。3カラム=指示センター(送信履歴・配達状況)/オフィス/社員詳細+フィード。データ源=~/.claude/projects/*.jsonl末尾解析(読み取りのみ)。承認待ち推定=最終イベントがtool_useのまま75秒超。指示配達=office_inbox+グローバルStop hook(asyncRewake)。アセット再生成=assets_gen.py(gpt-image-2・スプライトはマゼンタ背景→PILクロマキー透過)。キャラ割当=office_config.jsonのsprite。標準ライブラリのみ。

端末間同期 運用リファレンス(Pro / Air / mini)共有ページ/HTMLプレビュー/20260720_端末間同期_運用リファレンス.html

3台のMacでworksをズレなく回すための、pull/pushの型・hookの自動範囲・トラブル対処・初回セットアップを1本にまとめた運用リファレンス。

「始める前にpull、離れる前にpush、同じフォルダを2台で同時に開かない」を鉄則に、日々の3コマンド/auto-sync hookが肩代わりする範囲と唯一の穴(作業中のファイルはセッションを閉じるまでコミットされない)/台を移るときの手順/~/.claude共通設定は母艦→Air・miniの一方向であること/症状別トラブル対処/gitで流れない3レーン(メディアはDrive・秘密は移行キット)/新しいMacの初回セットアップ4ステップを収録。旧・端末間同期_手順(20260707)、端末間Git同期の基本ループ(20260712)、端末同期コントロールパネル(20260712)の3枚を統合したもので、旧3枚は_archiveへ退避済み。

verify-context-guard.sh(コンテキスト肥大ガードの検証)/Users/senao/Downloads/works/.claude/verify-context-guard.sh

画像Readゲートと肥大警告が期待通り動くかを17項目で検証する。ゲートを触ったら必ず回す。

検証内容=①大きい画像をdenyし縮小版を実際に生成・削減倍率を表示 ②縮小版の再Readは素通し(無限ループ防止) ③同一セッションの重複Read阻止 ④小さい画像・テキスト・Read以外のツールは素通し ⑤CLAUDE_IMG_GATE=off で無効化できる ⑥壊れた入力でもexit 0 ⑦警告の2段閾値(8MB/16MB) ⑧settings.jsonへの配線とJSON妥当性 ⑨現況の実測(projects総量・imgcache・16MB超セッション数)。テスト画像はスクリプト内でPNGを生成するので外部素材に依存しない。実行は `bash .claude/verify-context-guard.sh`。この検証で、macOSのtrが \x01 を文字クラス扱いしてパスを壊しゲートが全素通しになるバグを配線前に発見できた。

解説資料の3導線ビルダー(_build_解説資料一覧.py)共有ページ/HTMLプレビュー/_build_解説資料一覧.py

台本の視聴者公開版HTMLを記事フォルダへ自動ひも付け(--resolve --write でタグ情報.mdの【解説資料URL】に記録)し、マイページLPの解説資料一覧ブロックを再生成する。

タイトル語の重なり+日付近接(MIN_SCORE=2 / MAX_DAY_GAP=7 / 別サイト除外)で推定。一覧に出るのはタグ情報に記録されたものだけ=LINE特典・プロンプト集は載らない。公開は publish_share.sh --target yt。/youtube-publish Step 6.6 から呼ぶ。

LINE「最新情報」の3点セット更新(update_latest_keyword.py)Blog_RoutineLabo/line_auto_reply/scripts/update_latest_keyword.py

リッチメニューの最新情報ボタン(キーワード=最新)の返信を、最新回の🎥動画・📝ブログ・📄解説資料の3点セットへ自動更新する。

最新動画のvideoIdからタグ情報.mdを逆引きして同じ回のブログと解説資料URLを引く(article_of_video)。記録が無ければ行を落として従来形式に退避。ブログだけ先行公開で回がズレたら末尾に『もっと新しい記事』を1行添える。/youtube-publish Step 6.7・/blog-sns STEP2.75 から毎回実行。

公開システム9

メンバーの書庫(メンバー限定面・Cloudflare Pages)/Users/senao/Downloads/works/共有ページ/メンバー書庫/(publish.sh・_build_library.py・data/書庫メタ.json/サイト実体: ~/project/senao-member-cf)

メンバー限定資料の置き場と索引。Cloudflare Pagesへ直接アップロードするのでソースが公開されず、URL秘匿が実際に機能する。

2026-08-18に GitHub Pages から移行。旧 member-share は public リポだったため、リポのファイル一覧から全slugが匿名で辿れ、会員向け資料に匿名到達できていた(実測)。移行後はルートを案内スタブのままにし、一覧はランダムslugの書庫ページだけに置く。書庫は実ファイル走査+メタJSONで生成し、未登録ファイルも「その他」へ自動掲載=載せ忘れを構造的に作らない。配布物のzip・共有リンク・パスワードは書庫に置かず、配布の実体はDiscordの配布物チャンネルに寄せる。実行= bash 共有ページ/メンバー書庫/publish.sh(書庫再生成→ng_check→ルートがスタブか確認→デプロイ)。

yt-share(視聴者向けHTML公開)/Users/senao/Downloads/works/共有ページ/publish_share.sh(リポ: senao-routine/yt-share、clone: ~/project/senao-yt-share)

YouTube視聴者向けの自己完結HTML(プロンプト配布等)をGitHub Pagesの公開URLで配る。

実行は `bash 共有ページ/publish_share.sh --target yt <html> <slug>` またはスキル `/share-html --target yt`。URLは `https://senao-routine.github.io/yt-share/<slug>.html` で配布前提の完全公開。載せるHTMLは画像data URI等の自己完結が前提で、公開取り消し後もキャッシュに残り得るため機密は載せない。

member-share(凍結・旧メンバー面)/Users/senao/Downloads/works/共有ページ/publish_share.sh(リポ: senao-routine/member-share、clone: ~/project/senao-member-share)

2026-08-18に凍結。過去に案内したURLを配信し続けるためだけに残しているアーカイブ。新規の追加はしない。

public リポ(GitHub Pages無料枠の制約)だったため、リポのファイル一覧から全slugが匿名で見え、URLのランダム性による秘匿が成立していなかった。現行の置き場は『メンバーの書庫(メンバー限定面・Cloudflare Pages)』。README のURL一覧は削除済み。

vendor公開(業者向け・Cloudflare Pages案件別)/Users/senao/Downloads/works/共有ページ/publish_vendor.sh(デプロイ一時フォルダ: ~/project/cf-vendor/<project>/)

業者向け台本共有を案件ごとに独立したCloudflare Pagesプロジェクトへデプロイし、他業者から存在が見えない構造で配る。

実行は `bash 共有ページ/publish_vendor.sh pr-<vendor> <共有用HTML>` → `https://pr-<vendor>.pages.dev/`(wranglerアカウント=routinelabo_senao・無料)。GitHub公開リポだとアカウントのリポ一覧で「複数社とPR中」がバレる+git履歴は消えないため、案件ごと完全分離を構造で担保(削除は任意: `wrangler pages project delete pr-<vendor>`)。業者向けは必ず裏側なしの共有用版にしつつPR/提供表記は残す(景表法/ステマ規制)。初弾実績=pr-hi3d。

HTMLプレビュー化プロンプト(視聴者配布 + CLAUDE.md/hook自動化)共有ページ/HTMLプレビュー/20260708_ClaudeCode_HTMLプレビュー.html(公開: senao-routine.github.io/yt-share/20260708-claude-code-html-preview.html)

作業やプロジェクト全体の状態を、Markdownの長文でなく1枚のHTMLダッシュボードに書き出させるプロンプト2種と、それをCLAUDE.md+Stop hookで毎回自動化する型。20260707視認性HTMLプレビュー動画の視聴者プレゼント。

①タスク完了→HTML(チャット貼付) ②プロジェクト全体→HTML(一撃)の2プロンプト+レベル1(CLAUDE.mdに数行)/レベル2(regen-preview.sh=120秒ガード・常にexit0のStop hook自動再生成)。実配線のregen-board.shを汎用化。works共通パレット・4タブ・全プロンプトにコピーボタン。publish_share.sh --target yt でGitHub Pages公開。

/html-report(グローバルスキル・全プロジェクト共通)~/.claude/commands/html-report.md

worksの共通デザイン(暖色ライトテーマ)で自己完結HTMLレポートを一発生成するグローバルスキル。テーマCSSを埋め込み済みでworks以外のプロジェクトでも同じ見た目で動く。

引数=レポートのテーマ/対象/空。:rootトークン(パーチメント地+アンバーゴールド+ティール)と部品CSS(カード/kicker/表/状態バッジ/進捗バー)を雛形として内包。外部CDN/フォント禁止・自己完結・レスポンシブ。works内はHTMLプレビュー運用+設定ハブ統合に従い、他プロジェクトはreports/へ。正本パレット=共有ページ/HTMLプレビュー/_デザインサンプル.html。

Kitto — 道具カタログ(旧: セナオの秘密道具)/Users/senao/Downloads/works/共有ページ/秘密道具/(README.md・_build_catalog.py・verify.sh・publish.sh)

道具カタログJSON1枚から公開ポータル(カタログ+道具LP)を生成し、8項目の公開前検証を通してからCloudflare Pagesへデプロイする。

SSOT=data/道具カタログ.json → _build_catalog.py → site/ → publish.sh。status(available/coming/draft)で公開範囲を制御し、書き忘れ・タイプミスは既定で非表示に倒れる。verify.sh がデータ整合・ビルド・リンク整合・draft漏れ・ng_check・紋切り型CSS禁止・noindex混入を検査し、all greenでなければ publish.sh がデプロイを中止する。出力先を dist/ にしないこと(ng_check.sh は --exclude-dir=dist のため無検査で公開される)。公開先= routinelabo-tools.pages.dev → tools.routinelabo.com。

公開リポREADME一覧自動生成 (_build_share_readmes.py)/Users/senao/Downloads/works/共有ページ/HTMLプレビュー/_build_share_readmes.py(publish_share.sh末尾で自動実行)

yt-share / member-share の README.md に「どのURLを叩けば表示されるか」の一覧(公開日・タイトル・URL)を自動生成してcommit&pushする。

各公開リポの*.htmlを実スキャンし、タイトル(titleタグ)と公開日(git初回コミット)つきの表を生成。publish_share.sh実行のたびに公開リンク台帳と一緒に最新化されるので作りっぱなしにならない。コミット作者はsenao固定(公開ポリシー準拠)。 ★2026-08-18: member-share は凍結モードになり、URL一覧を書かない(public リポに限定資料の入口を置かないため)。yt-share のみ一覧を生成する。

司令室サーバの公開ガード(既定拒否+Access JWT検証)ドキュメント/司令室/serve.py

公開モードでは全リクエストにCloudflare Accessの認証を要求し、機微データ(data/・/line/・収支/作業ログ/案件タブ)はadmin限定。身元はJWT署名で検証する。

2026-08-18の監査で、旧実装は/api/だけを認可しており未認証で案件台帳(報酬)・銀行実測(178取引)・GAS ownerトークンが取得できることを実測。既定拒否へ変更し、Cf-Access-Authenticated-User-Email(詐称可能)ではなくCf-Access-Jwt-AssertionをJWKSで検証する方式にした。公開モードでCC_ACCESS_TEAM/AUDが未設定なら起動を拒否(fail-closed)。検査= ドキュメント/司令室/verify_cc.sh の5〜5.7節

3台同期2

秘密情報の1Password同期(secrets-sync)Claude設定同期/secrets/(manifest.tsv + secrets-sync.sh)+ .claude/hooks/secrets-sync-hook.sh

APIキー・OAuthトークンの正本を1Passwordの金庫に置き、各Macの .env / json をそこから生成する。キーを足したら母艦で push → 他Macは Claude Code を開くだけで揃う(AirDropキットは新規Macの初期化専用に降格)。

materialize方式=.envを読む既存スクリプトは一切改修しない(.envが生成物になるだけ)。金庫に _index.json(全itemのsha256)を1本置き、まずそれだけ取って差分itemのみ転送=差分ゼロなら通信1回。何が秘密でどこに置くかは manifest.tsv だけが知っている(secrets-sync も make-secret-kit も同じ表を読む=二重管理を作らない)。pullは『ローカルの方が新しければ触らない』(--forceで上書き)・上書き前に ~/.migration_bak/ へ退避。dir型はtar.gzで1ドキュメント化し、キャッシュ類はexclude列で除外(誤差分の警告が出続けるのを防ぐ)。未サインイン・op未導入・ネット断は完全に無言でexit 0。2026-08-16作成。 ★2026-08-20追記: 権限の見張りを status に常設(内容ハッシュでは緩い権限を絶対に検出できないため)。chmod サブコマンドで 600/700 に締める(内容は触らないので金庫との差分は増えない)。dir型の展開は chmod -R をやめ find で dir=700 → file=600 の順に締める(chmod -R 600 <dir> はディレクトリから x を奪って中身へ降りられず静かに失敗し、実測でOAuthトークン4件が644のまま3台へ配られていた)。op 呼び出しはすべて </dev/null(アカウント未設定の機で『手動で追加しますか?[Y/n]』の対話に入りSessionStart hook ごと固まるため。2026-08-20 mini で実発生)。

二次機セットアップの1コマンド化(setup-secondary.sh).claude/setup-secondary.sh(手順の全文= ドキュメント/新マシンセットアップ.md §D-1)

移行済みのAir/miniに1Passwordレーンを後から通す冪等な台本。母艦誤爆ガード → op導入 → アプリ連携の確認 → 二次機マーカー → git pull → apply.sh → 金庫から秘密をpull → 他機パス混入の点検 → verify-machine-setup で合否判定まで1コマンド。

母艦で流すと office-inbox-wait hook の指紋を見て問答無用で停止する(母艦に二次機マーカーを置くと金庫の内容でローカルの秘密を上書きし始めるため。--yes でも解除されない)。3/7 のアプリ連携だけが人手で、未了なら手順を出して停止=再実行で続きから。op account list で未設定を先に判定し、'op account add' の手動追加は毎回パスワードが要り無人同期が回らなくなるので明示的に止める。点検は $HOME 以外の /Users/* 参照を数えるだけで中身は出さない。2026-08-20作成(mini・Air で実適用)。

Discord運用1

Discordサーバー3ゾーン運用(Claude受託)ドキュメント/Discordサーバー/README.md + discord_setup_channels.py

だれでも/スタンダードAIプラン以上/ビジネスAIプラン限定の3カテゴリ×9ch。YouTube連携tierロールで自動ゲート・解約で自動剥奪。運用はClaudeが口頭依頼で投稿代行。

bot=senao-setup(管理者保持・表示名ルーティンラボ運営)。お知らせ3chは読専。招待は無期限リンク1本運用で、埋め込み前にDiscord公開APIで expires_at:null を検証するルール。

LINE運用1

LINEリッチメニュー3ボタン+マイページLPBlog_RoutineLabo/line_auto_reply/scripts/setup_richmenu.py + 共有ページ/HTMLプレビュー/20260717_マイページLP.html

公式LINEのメニュー=最新情報(赤)/メンバーシップ(Discord紫)/マイページ(琥珀)。マイページは全コンテンツLP(GPT Image 2.0ヒーロー画像入り・yt-share公開)へ直行。

LP=https://senao-routine.github.io/yt-share/routinelabo-mypage.html(YouTube2ch・ブログ2サイト・note・X・Instagram・TikTok・Bluesky・Discord・メンバーシップ・お仕事依頼を集約)。タップはWorkerがKVへ月次計測し scripts/funnel_report.py でLINE→Discord→メンバー化のファネルを一括集計。返信は全てreply=無料無制限。

MCP/自動化1

AI Office MCPサーバー (mcp_office.py)~/project/develop/20260714 - ai-office/server/mcp_office.py(登録: claude mcp add --scope user aioffice)

他のClaude Codeセッションやツールから AI Office を操作する自作MCPサーバー(stdio JSON-RPC・標準ライブラリのみ)。ツール=office_status(全セッション要約)/office_instruct(指定セッションへ指示投函)。

MCP SDKを使わず標準ライブラリで stdio JSON-RPC を手書き(server/=stdlib縛りの価値を守る)。office_server を import して office_json/post_instruction を再利用・ネットワーク非開放・stdout純度厳守・EOF exit0・version交渉4版。OpenClaw連携用に中継Workerへ RELAY_POST_TOKEN(投函/状況取得のみ)+tools/office_send.py(HMAC署名CLI)。検証=verify.sh ▶11+test_mcp_office。設計WF4体+敵対的レビューWF28体→23所見修正で堅牢化。

OpenClaw運用1

取り込みハーネス(海外事例の消化ループ+adoption_guard)~/.openclaw/workspace/ops/manifest/adoption_backlog.md ほか

海外トップユーザーの仕組みを1周1件・検証つきで取り込むバックログ+毎朝の不変条件ガード。

構成: ①adoption_backlog.md(取込項目の状態管理・company-loopが毎周次の1件を取る)②adoption_guard.py(メール禁止ブロックのルーティング突合・main文字数上限・gatewayメモリ・bot再接続ループ検知をhealth_checkに毎朝配線)③department_agents_template.md+add-department.md(部門増設のテンプレと手順書)。人間可読の記録=~/Downloads/OpenClaw作成データ/取り込みハーネス/

X運用1

X投稿台帳 x_ledger.py(Typefully 同期・出所判定・週1の指標取得)works/X Post/scripts/x_ledger.py(SSOT= X Post/data/x_post_ledger.jsonl)

2026-09-06 WS-A 新設。Typefully の全 draft を ¥0 で台帳化(1行=1 draft)し、出所(どのスキルが作ったか)を id→URL→枠の順に判定、Bright Data の views 取得は週1・公開3〜10日の投稿だけに絞る。

サブコマンド= collect(増分同期+attribute+merge-metrics)/attribute/merge-metrics/--metrics [--dry-run]/--check [--offline]/--selftest(F1〜F7)/--summary。作成側は typefully_post.py --source <スキル名>(ainews は typefully_schedule.py)がスタブ行を先に残し、collect が API の真値で上書きしつつ出所を保持する。本線= 毎朝 run-kpi.sh「X台帳」、救済= loop-catchup(xledger 日次・xledger-metrics 週1)。x_slot_stats.py --collect は廃止(案内して exit 2)。受入ゲート= bash 'X Post/scripts/verify_x_ledger.sh'(Claude が書く Maker-Checker・Codex は編集禁止)。実装は GPT-6 Astra へブロック委譲(A-1→A-2・497秒・rc0)。

hooks・自動化2

制作ライン残タスクマップ(セッション開始時の自動表示)ドキュメント/制作ライン/factmap/board_digest.py

Claude Code起動時に、進行中の全テーマ×12工程の残タスクを1行/テーマ(進捗バー+次の工程+実行コマンド)でセッションへ自動注入する。factmapのboard_data.jsonを読むだけの表示専用スクリプト+SessionStart hook。

hookは regen-board.sh を先に同期実行して鮮度を確保(120秒dedupe・二次機ガードは既存を再利用)。既存の「発信の未完了(pending_report)」表示とは役割分担(新マップ=12工程俯瞰/pending=発信5点のライブ実測)で併記。異常時は無出力・exit 0でセッションを止めない。

進捗ボード判定エンジンのconfig外部化(pipeline.json)ドキュメント/制作ライン/factmap/pipeline_engine.py

12工程の判定ロジックをコード直書きからpipeline.json(exists/read/参照+式+detailテンプレ)へ完全データ化。工程追加・判定変更が設定編集だけになり、視聴者配布キット(task-map-kit)の心臓部を先行ドッグフーディング。

golden_check.py=新旧実装の判定突合ハーネス(旧実装コピーを同時実行して比較=並行セッションのファイル変化に影響されない)。transitions.jsonl=工程遷移ジャーナル(停滞⏳/前回差分✅/リードタイムの時系列源)。pipeline.json を編集するだけで判定が変わる(エンジンは工程名を知らない)。

コスト可視化2

TopViewクレジット statusLine常時表示~/.claude/scripts/topview_statusline.sh + credits_statusline.sh + ~/.renoise/previous-statusline.json

ターミナル下部にRenoiseと並べてTopView残クレジット(🎬)を常時表示。キャッシュ即応答・30分毎バックグラウンド更新でstatusLineを固まらせない。

Renoise video-makerプラグインのprevious-statusline合成機構に差し込む最小構成。残高取得=topview-skill user.py --json credit。ロック死骸は2分で自動除去。★2026-08-15: 合流点 credits_statusline.sh を新設し、TopViewとOpenRouterを1行に並べる形へ(previous-statusline.jsonの向き先も合流点に変更)。注意: user.pyのremainCreditはプラン分のみの場合あり(Web表示が正)。

OpenRouterクレジット statusLine常時表示~/.claude/scripts/openrouter_statusline.sh + credits_statusline.sh(合流点)

TopViewと同じ行にOpenRouter残高(🔀)を常時表示。残$3未満で黄⚠・$1未満で赤⚠。前払い式で尽きると生成が止まるため、使う前に気づける状態にする。

取得=GET /api/v1/key(通常の推論キーで読める。limit_remaining・usage_monthly・limit)。limit=nullは『上限なし』であって0ではないので、その場合だけ /api/v1/credits の total_credits-total_usage を残高に使う。キーは中央.envのOPENROUTER_API_KEY(WORKS_ENVで差し替え可・出力にもキャッシュにも出さない)。credits_statusline.shが複数枠を' | 'で1行に合流させる=枠が増えてもSOURCESに1行足すだけ。壊れた応答でキャッシュを潰さない/キー無しは無出力+exit 0。手動確認= openrouter_statusline.sh --refresh。2026-08-15作成。

コスト管理1

コスト管理ダッシュボード ライブ実測(serve.py+公式請求API)コスト管理ダッシュボード/serve.py

AI/APIの消費をリアルタイム表示するローカルサーバ。45秒毎に成果物再走査・5分毎にAPI実測、ブラウザ自動リロード。

python3 serve.py で起動(127.0.0.1のみ・ネット非公開)。★2026-07-11拡張=①OpenAI/Anthropicの当月実請求をAdmin APIで実測(OPENAI_ADMIN_KEY/ANTHROPIC_ADMIN_KEYを中央.envへ・未設定時は案内表示) ②Codexサブスク枠の消費量実測(当月画像枚数・本日実行回数) ③TopView残クレ・TinyPNG当月枚数は従来通り実測。日次スナップショットはlaunchdジョブcostsが継続。

ショート動画1

HFアバターパイプライン(ショート・スタイル3の¥0レーン)ショート動画作成/hyperframes_senao_poc/

Avatar4口パク(≈5.3cr・15〜25分)をHyperFramesで完全置換。音声RMS→母音5口形の変化点をGSAPタイムラインへベイクし、23.5秒を約22秒でローカルレンダ。

voice.wav→純Python RMS解析(mouth_timeline.json)→build_composition.pyがindex.html生成(口パクset146点・ポーズ3段切替・ケンバーンズ背景・ネイティブキネティック字幕)→npm run render→BGM/SE合成+速度診断。声はtts.py --engine topview(0.1cr)、ElevenLabsはengine枠予約済み。実例=hub KimiK302『試作_アニメせなお版_HF版.mp4』。

スマホ連携/自動化1

AI Office QRペアリング (vendored segno)~/project/develop/20260714 - ai-office/tools/qr_gen.py+tools/vendor/segno/

スマホペアリングのQRコードを信頼ライブラリsegno(vendored・pip不要)でサーバー側生成。手書きエンコーダの『壊れQR』リスクを回避し、中継設定済み時のみ描画。

office UIの『📱スマホ連携』でpair_urlをQR画像化。segnoのencoder+constsのみvendorしてclone即動作を維持しつつ正しいQRを保証。qr_gen.pyがpayloadをstdinで受けてSVG生成(ps露出回避)、office_serverはsubprocessで呼び出しstdlib純度を保つ。matrix KATでピン・256px。同フェーズP6でbg軽量化(2.7MB→0.9MB)・history flock・relay_agent常駐化(P4.5)も実装。

ハーネス5

verify_ui.py(ボードUIを実ブラウザで測る)ドキュメント/制作ライン/tools/verify_ui.py(verify.sh の ui 段)

Playwrightで幅390〜1440pxの全ビューを実測し、横はみ出し・見出しの食い込み・JSエラー・上部固定・実態突合・フィルタの出し分けを機械で確かめる。

CSSを読むだけでは崩れは分からないので実データ・実幅で測る。2026-08-03に「見出し行が先頭データ行に食い込んでいないか」を追加(横はみ出しだけ見ていたため📊集計の57px重なりを緑のまま通した実害があった)。あわせて「実態の突合が全滅していないか(日本語タイトルのNFC正規化を1箇所忘れると0枚になるが見た目では気づけない)」「凡例が既定で閉じているか」「そのビューで効かないフィルタが出ていないか」「⟳更新ボタンがあるか」も実測する。

Premiere CEPパネル+ファイルIPCブリッジproject/develop/20260712 premierePlugin (cep/, scripts/ppro-eval.py)

CLIやAIエージェントからPremiere Proを操作するためのCEPパネル+ジョブファイルIPC。ExtendScriptをファイル経由で送り実行結果を回収する。

runs/ipc/jobs にジョブJSONを置くとパネルが500ms間隔で拾い evalScript を実行、results に結果を書く。ホストJSXは manifest ScriptPath ではなくパネルからの evalScript 注入方式(ScriptPath はエンジンごと死ぬ罠を実機で確認)。reloadHost ジョブで Premiere 再起動なしにホストコードを更新できる。

Premiere AI編集プラグイン検証ハーネスproject/develop/20260712 premierePlugin (pipeline/tests, scripts/postedit-check.sh)

TTS合成で正解ラベル付きテスト動画を生成し、無音/フィラー検出の precision/recall を常時計測できる観測ループ。編集後hooksで ruff/tsc を自動実行。

say(Kyoko)+ffmpegでフレーズ単位合成→境界時刻をラベルJSONに記録(gen_fixtures.py)。senao-pipeline evaluate でP/R/F1を計測。fixture3本(トーク/BGM入り/実況風)でF1=1.0を確認してから実素材へ。.claude/settings.json のPostToolUse hookが *.py→ruff、*.ts→tsc を編集直後に回す。

CEPパネルCDPデバッグツールproject/develop/20260712 premierePlugin (bridge/scripts/panel-cdp.mjs)

CEPパネルのCEFデバッグポート(8088)にNode標準WebSocketで接続し、パネルJSを外から評価・リロードする開発ツール。

cep/.debug でポート開放→ /json からターゲット取得→ Runtime.evaluate。location.reload() でパネルのホットリロード、DOM検査、パネル内部状態の確認ができる。スクリーンショット権限が無い環境でもパネルUIの検証が可能。

review-gate.sh — commit 前の Maker-Checker 強制(実装者と別モデルの検証マーカー)works/.claude/hooks/review-gate.sh(PreToolUse: Bash・works の settings.json に配線)

2026-09-06 新設。staged 50 行以上か新規スクリプトを含む git commit を、実装者と別モデルの検証マーカー(codex_lane.sh --review の pass か --accept)が『この HEAD の上で・対象ファイルの最終更新より後に』無ければ exit 2 で止める。

根拠= ~/.claude/CLAUDE.md ループエンジニアリング節の割当表(Astra 実装→Claude 検収/Claude 実装→Astra レビュー/設計→本人+任意で Astra/機械検証は生成役に依存しない)。AI は自分の生成物の採点を甘く見積もるため、機械検証に加えて別モデルの目を commit 前の門にする。免除= 小さな commit・REVIEW_GATE=off(理由を commit message に)・hook 経由の auto-commit(Bash ツール外)。マーカー後に対象ファイルを変えると取り直しを要求。実地テスト= 無マーカー→rc2/--accept 後→rc0/再変更→rc2/免除→rc0。

ブログ公開ライン2

ブログ差し込み画像のNGワード自動モザイクBlog_RoutineLabo/AI_prompt(Auto)/blog_mosaic.py(NGルール=Claudecode 動画編集/config/ng_patterns.*とSSOT共用)

差し込みスクショに映り込んだ本名・メール・APIキー・ホームパス等をmacOS Vision OCRで検出し、WPアップ前に自動ピクセル化。動画編集のモザイク機構と同じNGリストを共用(禁止語の追加はng_keywords.txtに1行で両方に効く)。

blog-create STEP4.6(アップ前ゲート)と blog-finish STEP6.3(差し替え反映前)で毎回実行。原本=_スクショ作業/mosaic_backup/・検出=mosaic_report.json(秘密全文は書かない)・hub同名コピーも自動同期(sha一致のみ=別ジョブ上書き防止)。--check=検査のみ(ヒットでexit 2)。2026-07-23導入・敵対的レビュー7バグ修正済み・fixture機械証明(モザイク後は再OCRで不検出)つき。

ブログ差し込み画像の公開前ゲート(章ズレ・トークン残り検出)Blog_RoutineLabo/AI_prompt(Auto)/blog_image_upload.py(prepublish_image_guard)+ blog_screenshot.py verify(両サイトでバイト同一)

画像を差し込んだ本文をWordPressへ書き戻す直前に機械検査し、①素のプレースホルダー残存 ②同じスクショ枠の二重掲載 ③altに生HTML混入 の3種でブロックする。章と画像の中身が合っているかは verify が出す「章↔画像の対応表」を目で見て確かめる。

update_wp_draft_content() を通る全経路(--from-wordpress/--replace-changed/wordpress_auto_post)で効く。imgが0件の本文=差し込み前は検査しないので既存フローは素通り。逃がすときだけ BLOG_IMAGE_GUARD=off。重複判定は …-imagesN の自動差し込み枠だけが対象(手貼り素材の意図的な再掲まで止めると過去記事の書き戻しが落ちるため・493投稿の実測で決定)。lintとverifyは対象が逆=lint:差し込み前の採番/verify:差し込み後の実画像(--httpでURL生存も)。2026-09-04導入。根拠=スクショPNGを1..9へ詰め直したのに記事側が13枠のままで章と画像がズレ、4枠が素のトークンのまま下書きに残った実害(GLM-5.3-Flash記事)。

プロジェクト1

ai-taiken-lab(体験授業プラットフォーム)~/Downloads/20260819 AI体験/ai-taiken-lab

生徒がローカルLLMと壁打ちしてHTMLアプリを作る教室用プラットフォーム(Phase 0〜5 実装完了)

AI推論は先生のMac上の LM Studio で完結し、インターネット非依存。構成: 生徒UI(Preact/8787)・生成HTMLのプレビュー配信(8788・不透明オリジン+CSP+署名URL)・先生ダッシュボード(8790・localhost専用の別インスタンス)・クレジット台帳・直列ジョブキュー。当日運用は bench-llm(速度実測)/ quality-eval(プロンプト追従性の品質ゲート)/ rehearsal(仮想生徒の負荷テスト)/ preflight(起動チェック・QR生成)と docs/RUNBOOK.md。検証は verify 一発(lint→型2系統→unit 225→integration 111→build→E2E 14)で、テストは全てモックLLMで完結し LM Studio 不要。各フェーズで独立エージェントによる敵対的レビューとテスト作成(Maker-Checker)を回し、SSEの本文二重化・前授業のCookieが通る・検査NG時の返金だけで終わる等の欠陥を修正済み。

プロジェクトハーネス2

Cinerec 検証ハーネス(画面収録アプリ)~/Downloads/20260805 画面収録App

Mac専用画面収録アプリ Cinerec の検証ループ一式

Scripts/{verify,smoke,dev,logs,perf}.sh(SwiftFormat lint→SwiftLint→swift test→xcodebuild の一括検証、起動スモーク、ログ追尾、CPU/メモリ計測)+ .claude/settings.json(権限allowlist・Swift編集後に swiftformat/swiftlint を自動実行する PostToolUse hook)+ XcodeGen 構成。設計書は docs/ARCHITECTURE.md、手動チェックリストは docs/CHECKLIST.md。

VyondApp ハーネス一式~/project/develop/20260823 VyondApp/{.claude/, .githooks/, .github/workflows/, CLAUDE.md}

解説アニメ動画ツール VyondApp の検証ハーネス。post-edit hook(変更ファイルのみ Biome+tsc/ruff、失敗 exit2 差し戻し)、SessionStart hook(docs/ハンドオフ.md の現在地を見出しで注入・鮮度も表示)、pre-commit(author=senao 検査+verify:fast)、pre-push(送る commit を git archive で展開して ng_check+フル verify)、GitHub Actions(push=ubuntu で verify:fast/nightly=macOS でフル verify/probe 入力で赤の検証)。

「緑」の定義= pnpm verify exit 0(lint/types(テストも型検査)/test/build/assets/scenario/render/visual の8層・fast は実測20秒)。golden シナリオ→Remotion レンダ→白コマ全走査+画素差分の機械検証ループ。層の境界(compiler の純度・engine の決定論・全テンプレのレンダ網羅・フック契約)も検査で守る。2026-09-02: pre-push は作業ツリーでなく送る commit だけを検査する方式へ(gitignore 済みのローカルログで恒久ブロックされていた)。生成レポートは director/report-paths.ts の関門で絶対パスを相対化(ホームディレクトリ名=禁止語の混入防止)。ローカルの git hooks が正で CI は保険。規約と SSOT 宣言はプロジェクト CLAUDE.md が正本。進捗= docs/ハンドオフ.md。

プロジェクト(自動運用)1

競艇AI予想分析システム~/Downloads/20260807 競艇分析システム

競艇の全レースをLightGBMで予想し期待値ベースの買い目を提示する個人プラットフォーム。launchd 3バッチ+Cloudflare Workers配信で全自動運用

公式データ10年分(59万レース)をSQLiteに蓄積し、LightGBM×2(前日/直前)→Harville式→isotonic補正→EVフィルタで予想生成。検証ループ: make verify(240テスト)/verify-data(品質6種)/二層バックテスト(HOLDOUT凍結)。運用: 朝6:10/日中5分毎/夜21:30のlaunchd+失敗時macOS通知+事後検証画面での全件実績公開。Cloudflare KV+Workers(JS評価器・パリティ検証済み)でスマホ配信

並行運用1

job-lock.sh(並行レーン排他).claude/job-lock.sh + .claude/scripts/job_lock.py

複数ターミナルで別ジョブの /work-start を同時に回すためのレーン排他。共有スロットを触る危険区間だけ直列化する(transcribe/chrome/git/rotation の4レーン)。

fcntl.flock ベース(macOSにflockコマンドが無い+プロセス異常終了時もカーネルが必ず解放=stale lockが原理的に残らない)。使い方= job-lock.sh <レーン> -- <コマンド>。--register/--unregister で稼働中ジョブを宣言し、他セッションのSessionEnd自動コミットが add -A の巻き込みを避ける。--active で稼働中ジョブ一覧(死んだPIDは自動掃除)。ロック実体= .claude/locks/(gitignore済)。2026-07-27新設。

共有・可視化1

むすびプロジェクト 公開プレビューサイト(URL可視化パイプライン)MusubiProject/07_公開プレビュー/(保管リポ: senao-routine/musubi-support-project)

クライアント案件の分析・ToDo・総合資料・ダッシュボードを、GitHubプライベートリポ保管+Cloudflare Pages閲覧(推測困難URL+noindex)でURL共有できるようにする仕組み。

works「HTMLセルフプレビュー」と同方式を個別プロジェクトへ横展開した初例(2026-07-10新設)。_build_preview.py がMarkdown→共通デザインHTML変換・固有名サニタイズ・漏れ検査ゲート(NGならexit 2で公開中断)・index/README/_headers生成まで行い、publish_preview.sh がgit push(作者senao固定)とwrangler pages deployを実行。Stopフック sync-musubi-preview.sh が状態ハッシュ比較で変更時のみ自動同期する。閲覧URLをLINEでクライアントに送るだけで資料を一緒に確認できる。

凍結ゲート1

公開ゲート(ng_check + publish/artifact-gate + pre-push)~/.claude/scripts/ng_check.sh ほか hooks/githooks

公開系操作(push・deploy・Artifact公開)の直前に禁止語チェックを機械的に強制する3層ゲート。

2026-07-25構築。禁止語リストを private/ngwords.txt に分離し、検査を ng_check.sh に一元化。(1) PreToolUse hook publish-gate.sh が push/deploy系コマンドを検知して事前検査、(2) artifact-gate.sh が Artifact 公開前にファイルを検査、(3) core.hooksPath の pre-push が作者名(senao)と禁止語を最終検証。gitリポジトリ外では巨大ディレクトリ走査を回避する安全弁付き。プロンプト指示だった公開ポリシーを『エージェントが書き換えられない凍結ノード』へ昇格させた実装。

分析・品質ゲート1

ヒットパターン運転台ショート動画作成/維持率観測/(theme_insights.py・hit_pattern_inject.py・competitor_scan.py・atari_reflow.py)+ scripts/script_lint.py + .claude/hooks/script-gate.sh 他

テーマ別ヒットパターン分析を毎回の台本へ機械注入し、lintとhookで強制する仕組み(2026-08-23導入・同日第2弾で司令室📊統合+トレンド×勝ちパターン掛け算)

本編375本の全数をテーマ×見せ方で週次分析(cache専読)→ /script Step 1.7 で台本§0へ機械書き込み → 競合スキャンの事実表からずらしを壁打ちで設計 → mark.sh 台本OK の瞬間に lint でブロック → 公開7日後の実測を当たり狙い・学び.md と知見ベース02へ決定論で自動還流。導入根拠=指示文だけのルール(旧Step1.7)は実行率0%だった実測。正本=reports/*_theme_insights.md と data/theme_map.json。 第2弾: JSONをSSOTに司令室📊⑩でテーマ別成績・法則・データリネージ(どの情報→どの結論)を常時表示。毎朝4時のアイデアレーダーに自チャンネル実測(insights・N本目照合)を機械注入し、企画案に見せ方タグとずらし案を必須化。企画の2ルート(トレンド起点×オリジナル性/資産起点×SEO)をCLAUDE.mdに恒久化。

制作ツール2

収録用PPTXの生成と検証(make_pptx / verify_pptx)works/スライド制作/_tools/make_pptx.py ・ verify_pptx.py

解説スライドの shots/*.png から、収録中に画面へ出す PowerPoint を作る。依存追加なし。

2026-08-18導入。台本もスライドも毎回できているのに、収録で出す資料だけ別途作り直していた(PowerPoint形式が無かったのが直接の理由)。検証ツールが全デッキで吐いている 1920×1080 の shots/slide-NN.png を1ページ1枚で全面配置する=見た目がHTMLと完全一致。1920×1080 は PPTX の16:9(12192000×6858000 EMU)と一致し 6350 EMU/px で割り切れるため歪みゼロ・余白ゼロ・実効144dpi。python-pptx はこのMacの10インタプリタ(homebrew 3.14 / system 3.9.6 / works配下venv 8本)すべてで未インストールで、入れるにはネットが要る=3台へgitで配る前提が崩れるため、標準ライブラリの zipfile と文字列XMLだけで OOXML を書いている。生成は決定的(固定mtime・固定zip順)で --check により冪等性を検証できる。検証は生成役と分けて verify_pptx.py が担当=自己検査11項目(型宣言・rels解決・r:embedの所属・枚数・id規約・全面配置・★shotsとのsha256一致・孤児画像・ノート行の一致)+ --soffice で LibreOffice に実際に開かせてPDF化しページ数と用紙サイズを見る。実測=16枚/9.3MB/画像バイト一致/soffice PDF 16ページ 960×540pt。PowerPointの「修復が必要」ダイアログだけは自動検出できないので、雛形を変えたときに1回だけ人が開いて確かめる。生成物はgit管理外(追跡済みshotsの複製・1本9MB)=3台へは hub 08_スライド 経由で届く。 ★2026-08-27: 既定デッキから手描き図版を外した改定により、収録用スライドが納品物の主役になった。make_fullbleed_deck.py の pages.json が point/say/sec を受けるようになり、クリック送りHTMLのノート帯(Nキー)に論点チップ・言い切る一言・累計尺が出る(PPTX側は従来どおりノートなし)。

スライドPNGのブログ差し込み(blog_slide_images)works/Blog_RoutineLabo/AI_prompt(Auto)/blog_slide_images.py

解説スライドの要点3〜6枚を、記事の画像枠へそのまま入れる。

2026-08-18導入。同じ内容を動画とブログで解説しているのに、記事に入る画像は動画スクショだけで、図版・公式表スライドが記事に出てこなかった。新しい経路は作らず、既存の番号スロットに相乗りする=採番lint・NGモザイク・TinyPNG圧縮・WPアップ・alt付与・差し替え検出・note/X・公開後の片付けが全部そのまま効く(自作グラフのツールと同じ方式)。--list で「記事の枠×直前のH2」と「スライド候補(公式スクショ・図版に★)」を並べ、--map 枠番号:スライド番号 で配置する。スラッグは4系統で解決(残っているプレースホルダー/imgタグ/画像ファイル名/タグ情報のパーマリンク)=記事がどの段階でも動く。全部入れず要点3〜6枚に絞るのは、TinyPNGの無料枠が500枚/月(現状でも1記事13枚)で、モザイク検査が画像フォルダを全部OCRするため。7枚以上を指定すると警告する。素材の受け渡しは hub 08_スライド/shots(hub-init が集約)。※動画スクショの差し込みは既存ツールで全自動なので新規開発していない。

動画生成1

スライド解説動画プロジェクト(動くスライド×アバター)スライド制作/スライド解説動画/

参考X系の『動くスライド主役・キャラ脇解説』型をHyperFrames+senao03+Fish Audio自声で完全ローカル生成。シーンJSON→run_job.py 1コマンドで完成mp4(16:9)。

工程=シーン毎TTS(自声)→voice.wav結合+境界実測→RMS口パク→build_slidecast.py(クリーム×アンバーのカードポップ文法)→check→レンダ→BGM合成→jobs/<日付>/。44.5s動画をレンダ32秒・TopViewクレジット消費ゼロ。AI音声開示ヘッダー常設。次フェーズ=毎朝トレンド収集→3選シーンJSON→自動生成のcron化。初回実績=jobs/2026-07-25。

動画編集5

リップシンクキャラ量産パイプライン (character-pipeline)Claudecode 動画編集/tools/character-pipeline/

元絵1枚からGemini画像編集で口パク用スプライト一式(口なしベース+あいうえお+閉口+教卓前景+感情ポーズ)を半自動生成する手順とスクリプト。

画像編集AIの全体ジッタを前提に、顔上半分の位相相関で整列→差分連結成分の中央値自己較正で口だけ切り出す。背景は明色flood fill+囲まれ穴除去で透過化。aibook01(AIの教科書の先生キャラ・机の前景つき)をこの手順で制作。動画ごとのキャラ切替は work/<name>/character_choice.txt。検証は npm run verify:character と character-calib。 2026-07-10: 感情アクション対応=手上げ(口パク継続)/驚き(表情焼き込み)のポーズ差分も同手順で量産し、強調テロップのse(shock/impact)から自動発火する。

動画編集: カットA/B評価ハーネス(cut-ab)Claudecode 動画編集/scripts/11-cut-ab.ts

同一素材×パラメータプリセット4種でカット計画を比較し、メトリクス表+継ぎ目聴き比べmp4(seam_preview)を自動生成。2026-07-22にユーザー聴き比べでsmoother既定化。

npm run cut-ab -- <input> [--presets] [--seams 10]。currentプリセットが本番cut_plan.jsonと完全一致することをverify:cut-abで機械証明。config/ab-presets.json にプリセット定義。

動画編集: モザイク自動検出(mosaic)Claudecode 動画編集/scripts/12-mosaic.ts

画面OCR(macOS Vision・無料)×NGパターン/登録キーワードで機密文字列を自動検出→レビュー→焼き込み/Premiere非破壊パッチ両対応。適用後の再OCRで検出消失を機械証明。

npm run mosaic -- <input> → mosaic_review.md確認 → --approve。キーワード登録=config/ng_keywords.txt(1行1語)・個人分は.local(gitignore)。仕様=docs/specs/SPEC-10。

動画編集: 透かし+テロップ9アンカーClaudecode 動画編集/config/style.json (watermark)

チャンネル透かしを全動画に自動配置(既定=左上・焼き込み/Premiere Watermarkトラック両対応)。テロップも9アンカー任意位置化。

位置=watermark.position.anchor(9値+custom)。素材=config/watermark/。placement.tsが共通配置モジュール。

動画編集: キャラポーズ量産レーン(gen_poses)Claudecode 動画編集/tools/character-pipeline/gen_poses.py

pose_prompts.json駆動でキャラの同一人物ポーズ差分をGemini編集で量産。senao03は5ポーズ体制(hand_up/surprised/pointing/thinking/laughing)。発火はstyle.jsonのseToPoseに1行。

商品化フロー(買い手キャラ1枚→ポーズ一式)の実証済み。テロップ自然区切り(BudouX)・フィラー長音正規化も同プロジェクトで導入。

動画自動化4

本編カットの番組演出ゲート(program-gate)Claudecode 動画編集/scripts/12-program-gate.ts(npm run program-gate -- <name>)

🎬OP・📊スライド・📎インサート・📈リテンション・🏷トピックPNG の実在と整合を機械検査し、不足があれば止まるゲート。

editor_package.sh が内部で呼びハードフェイルするので、番組演出が欠けたまま編集者パッケージを作れない。オープニングは無音率まで検査する(閾値の正本=config/style.json の opening.maxSilenceRatio / maxSilenceRunSec)。意図的に省く回は work/<name>/program_gate_skip.txt に理由を1行書く(空ファイル不可)。2026-07-27〜28にオープニング等が3回連続で丸ごと欠落した事故の恒久対策として2026-08-22に新設。

番組演出の計画JSON下書き生成(plan-scaffold)Claudecode 動画編集/scripts/14-plan-scaffold.ts(npm run plan-scaffold -- <name>)

スライドのアンカー位置・定型インサートの発話検出・OP見どころ候補を機械算出して下書きJSONにする。

従来は slides_plan.json / inserts_plan.json / OPアンカーをAIが一から手書きしており、それが工程まるごと欠落の温床だった。transcript と cut_plan からカット後タイムラインへ写像した候補を work/<name>/plan_scaffold.json に出し、AIは選定と文言だけを埋める。

テロップ整文(フルテロップ一本化)Claudecode 動画編集/scripts/lib/telop-refine.ts+config/style.json の subtitles.refine

フィラー除去・読点→半角スペース・句点削除・1枚10〜20字を自動で行うテロップ整形ステージ。

BudouX の文節境界に乗せて除去するので「ですねこれは」の頭2字を削るような破壊が起きない。文末の「ですね」は丁寧表現として残し、文中の言いよどみだけ落とす。チャンク化の前にフィラー除去、後に句読点整形(句読点は切れ目ボーナスに使うため順序が重要)。検証=npm run verify:telop-refine(16項目)。2026-08-22にテロップをフルテロップ1構成へ一本化したのに合わせて新設。

style.json のJSONスキーマ自動生成(schema-gen)Claudecode 動画編集/scripts/schema-gen.ts(npm run schema:gen / schema:check)

検証で使っている zod スキーマから config/style.schema.json を機械生成し、エディタ補完を効かせる。

style.json の $schema が存在しないファイルを指しており補完もJSON検証も効いていなかった。手書きのJSON Schemaを別に持つと正本が2本になるので、verify/lib/style-schema.ts の zod から必ず生成する。verify:all に schema:check を配線済み。

可視化・常駐2

制作ラインボード(スプレッドシートDB×ポチポチ進捗管理)ドキュメント/制作ライン/

タスク管理スプレッドシートをDBのまま、セルタップで工程ステータスを更新できるWebアプリ(ローカル4799+GAS配信版でスマホ可)。GAS Web AppがAPI層で、外注編集者さん用の担当タスクページ(トークン付きURL)も同居。V4で列解決をヘッダー名方式にし、💰案件ビューを追加。

SSOT=既存シート(タスク管理+AIの教科書タブ)。書き込みは既存語彙ホワイトリストのみ受理し緑塗り#c5e0b4も自動再現するため、ダッシュボードタブのcountif数式や手動運用と完全共存。キーアドレッシング(番号+タイトルで書込直前に行を再特定)で並べ替え・行挿入と衝突しない。★V4(2026-08-02): 列番号のハードコードを全廃し、columns.json を正本にシート1行目のヘッダー名で実行時に解決する方式へ(GAS側は resolveCols_、CLI側は tools/colspec.py・正規化規則を一致させてある)。解決できない列はAPI応答から消え、ボードに赤い警告帯が出る=黙って隣の列を触らない。UI=ライン表11列(1024〜1440pxで横スクロール0)+💰案件ビュー(業者/費用/入金日/入金額/メモ・未入金アラート)+かんばん+📊集計+検索/フィルタ+undo+30秒ポーリング。🌱準備=ネタ→リサーチ→内容OK→資料作成→台本OK→撮影OK。検証=verify.sh(env→snapshot→columns→code→api→probe→sync→ui→clean)。起動=bash ドキュメント/制作ライン/serve.sh

OpenClaw Office(Mac mini の AI オフィス)~/Downloads/20260716_openclaw-office/(mini)

ai-office 派生。Mac mini の Claude Code セッションと OpenClaw 9部署を localhost:4780 でライブ可視化(R7実装)。

senao-routine/ai-office の Mac mini 派生プロジェクト。bridge/openclaw_bridge.py(launchd 60秒毎)が OpenClaw の oplog・cron 状態を Claude transcript 形式の合成 JSONL に変換し、サーバ無改造で9部署を社員として出社させる。X 下書き・YT コメントの承認待ちは❗吹き出しでライブ表示。常駐= com.senao.aioffice(:4780)+ com.senao.openclawoffice.bridge。検証= verify.sh + tests/test_bridge.sh。

司令塔/運用2

司令室 𝕏 X投稿タブ(予約盤・直近14日・週別×source・エンゲージ・健康ストリップ)works/ドキュメント/司令室/_xposts_tab.py(受入= verify_xposts_tab.sh・KPI= kpi/collectors/x_posts.py)

2026-09-06 WS-A 新設。X投稿台帳を読む司令室タブ。今日/明日の枠盤(同枠2件・持ち主不一致を alert)・直近14日表・週別 source 構成・枠別/source 別 views 中央値と Top10・日次 views(KPI_SERIES)・健康ストリップ。KPI 計器に x_posts_daily / x_views_daily を追加。

_analysis_tab.py と同じ流儀(_build_site を import しない・CSS 自前・トークン色のみ・border-left/グラデ禁止)。private_url は admin-only で包む。配線台帳に xposts タブを登録済み。撤退基準= x_ledger.py --metrics が3週連続0件なら x_views_daily を落とす(kpi/README.md)。

司令室の配線検査の強化+キャッシュ再生成の一本化(refresh_caches.sh・cc-wiring-remind.sh)works/ドキュメント/司令室/{_verify_wiring.py,refresh_caches.sh}・.claude/hooks/cc-wiring-remind.sh

2026-09-06 WS-A。stale が誰にも止められなかった穴を塞ぐ: 再生成チェーンを refresh_caches.sh に一本化(open.sh/serve.py REFRESH_JOBS/run-kpi.sh が同じ1本を呼ぶ)、配線検査にタブ単位の登録漏れ検出(tab_check)・.jsonl 対応・期限2倍超の severe を追加、SessionStart と 🩺 の両方で鳴らす。

実害(9/5 実測): ギャラリー18日・リポ一覧21日・仕組みグラフ21日・健全性13日の stale。原因= 毎朝の run-kpi.sh が _build_site.py しか回していなかった+aibook タブが配線台帳に未登録(ファイル名照合だけではすり抜け)+transitions.jsonl の登録漏れ。対策= refresh_caches.sh(素材更新のみ・ビルドと配線検査は呼び出し側)/_verify_wiring.py の tab_check()・severe(rc 不変)/cc-wiring-remind.sh(broken・生産者不在・未登録・stale×2 が1件でも3〜5行、健全なら無言・二次機では鳴らない)/_session_alerts() にも同じ検査を常設/配線台帳に aibook・xposts・transitions.jsonl を登録・verify_status.json の期限 10→30日。

司令室1

司令室 🎓ビジネスAIタブ(ロードマップ)ドキュメント/司令室/data/ビジネスAIロードマップ.json(正本)→ index.html の pane-bizai

メンバー限定シリーズ(ビジネスAI¥5,600)の今後の道筋を1画面に。第3回〜第12回の予定・4柱バランス・回収待ちの予告・配布物・バックログ

★正本は「今後の回」だけを持ち、配信済みは回フォルダ(Blog_メンバーシップ/{ビジネスAI講座,プロ限定_開発と収益化}/第NN回_*)の実スキャン=台帳と二重管理しない。足し方=AIに「ビジネスAIロードマップに◯◯を追加して」。配線台帳に登録済みで_verify_wiring.pyが検査する。次回テーマの提案は/bizai-next

品質ゲート1

出典URLの機械検査(source_lint)works/scripts/source_lint.py(呼び出し=共有ページ/publish_share.sh)

公開HTMLの「出典にURLが無い」を見つける。既定は警告のみで公開は止めない。

2026-08-18導入。本名・所属の漏れ検査は公開ゲートで強制されていたのに、出典URLは誰も見ていなかった。実測で解説スライドの出典行88件中URL入りは46件、しかも直近3デッキ(0/7・0/4・0/6)は0件=書き忘れではなく様式が「媒体名+取得日」だけに入れ替わっていた。検査=(A)figure内の公式系画像に出典+URLがあるか (B)スライドの出典行にURLらしき文字列があるか (C)取得日 (D)--check-url でHEAD 200確認。手描き図解(hero/fig*=図解:ルーティンラボ)は対象外。書式の正本=プレビューは『出典:<題>(YYYY-MM-DD 取得)+リンク(ドメイン表記)』/スライドは『出典:<媒体>(取得日)|ドメイン』。全gitプッシュに掛かる汎用フックには足さず、配布HTMLを送り出すスクリプトの noindexゲート隣に置いた=配布HTML1本にだけ確実に掛かる(汎用フック側を触ると全プッシュを巻き込む事故が過去にあったため)。--strict で exit 2 に切り替えられる。

外部AI連携1

codex_lane.sh — Codex 実装レーンのラッパー(GPT-6 Astra 固定)~/.claude/scripts/codex_lane.sh(3台配布=Claude設定同期)

2段ワークフローの実装レーンで codex exec を叩く唯一の入口。モデル固定(gpt-6-astra/xhigh)・固定前文・ハング監視・報告JSON・禁止語検査・台帳を1ファイル(bash+埋め込みpython3・stdlibのみ)で担う。 2026-09-06 追加: --review(GPT-6 Astra による独立コードレビュー・codex exec review)と --accept(Claude 検収の記録)でレビュー済みマーカーを書き、works の review-gate.sh が commit 前に照合する。

2026-09-05新設。使い方= bash ~/.claude/scripts/codex_lane.sh --cd <dir> --step <id> [--block] [--retry N] [--add-dir d] [--net] [--read-only] [--resume <thread_id>] "<依頼>"(--prompt-file / stdin - も可)。仕組み: ①codex --version ≥0.153.1 を確認 ②固定前文(書込範囲・git commit/push禁止・.env/auth.json禁止・実名/所属禁止・verify自走・JSON報告)+依頼文を stdin で渡す ③codex exec … -m <model> -c model_reasoning_effort=<effort> --json --output-schema -o で起動し、events.jsonl の無出力が --idle-sec(900) 秒/総時間 --max-sec(7200・block 14400) 秒でプロセスグループを強制終了 ④report.json(status/changed_files/verify/unfinished/notes)を検証し、実変更ファイル(git status 差分 or mtime)と突合、ng_check.sh で禁止語検査、stderr の枠切れ語を検知 ⑤台帳 ~/.claude/codex_lane_log.jsonl に1行追記(--stats で委譲数・成功率・差し戻し・秒・枠切れ/ハング集計=評価運用の裁定材料)。終了コード: 0=done かつ verify 緑/1=codex異常/2=差し戻し候補/3=禁止語/65=報告JSON不正/70=CLI古い/75=枠切れ(自動切替なし)/124=ハング。--resume は codex exec resume <thread_id> に切替え sandbox_mode を -c で固定(同スレッドに修正指示=文脈が続く)。--selftest は偽 codex で24項目(枠を消費しない)。実疎通 2026-09-05: 単発 20s・resume 20s ともに rc 0。 ★Maker-Checker: --review [--uncommitted|--base|--commit] は codex exec review を Astra で回し、指摘(severity/file:line/主張/根拠/直し方)を JSON で受け取り rc 0(pass)/2(high あり)。--accept は Astra 実装分の Claude 検収を記録。どちらも ~/.claude/codex_lane_reviews/<sha1(root)>.json にマーカー(HEAD・時刻・verdict)。--stats はレビュー/検収の件数も出す。

検証2

新モデル検証コース v1(比較プロンプト1枚)/Users/senao/Downloads/works/共有ページ/HTMLプレビュー/20260712_新モデル検証コース.html(私設ギャラリーへ自動同期)

新しいAIモデルが出たら、この1枚を開いて上から順にコピペして回すだけで比較検証が完了する固定コース。全プロンプトにコピーボタン付き。

8課題(基準線=2Dプラットフォーマー/主砲=2D仕様書→3D化・物理エンジン禁止/ラスボス=生WebGL2・次元ギミック/物理パズル/3Dオセロ+AI/弾幕STG性能予算/追従テスト)+スモークテスト(SVG汚染回避変種・エージェンティックペリカン・七角形20球)+信頼性テスト(ハルシネーション罠・反証圧力・指示追従7制約・報酬ハック検出・オーケストレーション)+日本語テスト+トークン家計簿+100点満点の採点ルーブリック+歴代モデル記録表。全課題共通ヘッダで window.__GAME / HUD / F1デバッグ描画を強制し、Playwrightで自動採点できる設計。運用ルール=プロンプトは一字一句変えない・ワンショット厳守・3回中央値。歴代=Opus 4.8→Fable 5→GPT-5.6→Grok 4.5。

解説資料ひも付けの回帰テスト(_test_解説資料一覧.py)共有ページ/HTMLプレビュー/_test_解説資料一覧.py

--resolve の誤マッチ防止テスト9件(正解ペア5件+マッチしてはいけない4件)。閾値を触ったら必ず回す。

実測で踏んだ罠を固定: MIN_SCORE=3では短いタイトルを取り逃す/MAX_DAY_GAP=10では別回に誤マッチ/サイト混在で別サイトの資料を拾う。

検証ハーネス8

verify-parallel.sh(並行安全の検証).claude/verify-parallel.sh

複数ターミナル並行運用が壊れていないかの全数検証19項目。ロックの直列化・kill -9後の解放・タイムアウトまで実測で確認する(設定のgrepだけの飾り検査にしない)。

A=排他レーン実測(直列化/レーン独立/異常終了解放/待ち上限)、B=収録データのジョブ別化(blog_transcribe --video のdry-run実測・他ジョブ動画を巻き込まない)、C=集約globのジョブ限定(session直指定・slug限定・同名上書き警告)、D=git auto-syncの並行対応(gitレーン・pull --rebaseリトライ・稼働中ジョブのadd -A回避をAUTOSYNC_DRY_RUNで実測)、E=char_rotationロック・chromeレーン、F=配線。verify-works.sh 7/7 からも自動実行。2026-07-27新設。

verify-machine-setup.sh(新マシンの受け入れ判定).claude/verify-machine-setup.sh

新しいMacのセットアップ合否を1コマンドで判定する。手順書を「読ませる」運用だと読み落ちるため、合否を機械判定に寄せた(exit 0/1)。

6項目=①禁止語リストの実在と権限 ②gh認証とリポジトリ可視性の取得(公開系ゲートの免除条件) ③クラウドストレージ互換シムとhubの実解決 ④settings.jsonの共通値(正本=settings_shared.jsonと突き合わせ・値を2箇所に書かない) ⑤~/.claudeと配布物の一致(両方向:適用漏れと取り込み漏れ) ⑥既存ハーネス3本の通し。★受け入れ条件を「禁止語チェックがクリーン」のような達成不可能な形にしない設計(実際にそう書いたら『禁止語リストを緩めますか』という提案を招いた)。2026-07-28新設。

check-drive-secrets.sh(クラウドに秘密を置いていないか).claude/check-drive-secrets.sh(番犬チェック4.5から毎日実行)

共有クラウドストレージ配下に秘密情報が置かれていないかを毎日検査する。検出はファイル名のみ通知し、中身は絶対に出さない。

秘匿ポリシーは秘密の運搬をAirDrop/USBのみに限定しているが、クラウドに置いたものは「消したつもり」で残り続ける(実際に移行キット24ファイルと、リポジトリ移行前の旧コピーに残る7ファイルを発見・削除)。記憶ではなく観測で押さえるため watchdog(毎日09:00・異常時のみ通知)に配線した。未同期の機では黙って抜ける=誤った「クリーン」を出さない。2026-07-28新設。

音声モデル検証アリーナ(常設ローカルアプリ)~/project/develop/20260731 AI音声モデル検証

新しい文字起こしAIが出るたびに、同じ音源を全モデルへ流してCER(文字誤り率)・固有名詞の再現・単語タイムスタンプの可否・話者分離・所要秒・コストを1画面で横並びに測るローカルアプリ。誤認識を赤、欠落を取消線、余計を黄で差分表示する。

bash serve.sh → http://localhost:8778。20260719 AIモデル検証(コード生成)の音声版で思想は共通=標準ライブラリのみ・runsは不変・verify.sh(14項目)で健康診断。レーン=gpt-transcribe/gpt-4o-transcribe-diarize/grok-stt(xAI)/whisper-1/whisper-local(whisper.cpp・$0)/echo。レーン追加は adapters/models.json に1ブロック。サンプルは tools/make_sample.sh で手持ち動画から切り出し、--draft-ref でローカルWhisperが正解の下書きを作る。正解を直したら tools/rescore.py で再採点(APIを叩き直さない)。★正解テキストの出所を meta.json の reference_source に記録し、あるモデルの出力由来なら『この正解は公平ではありません』と警告を出す=自己参照バイアスを仕組みで可視化。初日の実測でgpt-transcribeは単語タイムスタンプを要求すると400で弾かれること(字幕不可の実証)と、gpt-4o-transcribe-diarizeはchunking_strategy必須であることを確認済み。

PostToolUse hook: typecheck-changed.sh(voice-agent)project/develop/20260801 音声AIエージェント/.claude/hooks/typecheck-changed.sh(設定: 同 .claude/settings.json)

TypeScriptを編集した直後に、その編集ファイルが属するパッケージだけ型チェックし、失敗をその場でエージェントへ返す。

トリガーは PostToolUse(matcher: Edit|Write|MultiEdit)。stdin のJSONから file_path を取り、.ts/.tsx 以外は素通り。packages/<name>/ を切り出して該当パッケージでのみ `pnpm exec tsc --noEmit` を走らせるため、モノレポ全体を毎回検査せずに済む。型エラーがあれば内容を stderr に出して exit 2 で返し、エージェントが手で typecheck を叩かなくてもその場で修正できる(フィードバックループ)。hook 自体が本当にエラーを捕捉するかは、わざと型エラーを入れて exit 2 を確認して検証済み。

音声AIエージェント(voice-agent)の検証ハーネスproject/develop/20260801 音声AIエージェント/(pnpm workspace: shared / server / web)

ターミナルのコーディングエージェントと音声で会話しながら開発するアプリ。音声・API・ブラウザが無くても全経路を検証できるよう三重の土台を用意している。

`pnpm verify` が typecheck + lint(biome) + test(vitest) + build を一括で通すゲート。加えて (1) FakeAgent と `pnpm sim --fake` でネットワークもトークンも使わずに「指示→実況→権限確認→完了報告」の全経路を回せる、(2) jsdom + Testing Library でブラウザを開かずにUIの破綻を検出する、(3) 編集後の自動型チェックhook、の3層で品質を仕組み側に担保させている。実測にもとづく設計変更として、完了報告の要約をモデルに任せるとclaudeを1プロセス起動するぶん数秒の無音が入るため既定をルールベース(即時)に変更した。

AIモデル検証アリーナ(常設ローカルアプリ)~/project/develop/20260719 AIモデル検証

新AIモデルが出るたびに検証コースのお題をワンショット一括生成し左右比較するローカルアプリ。サブスク枠レーン(Claude/Kimi/Codex)で限界費用¥0。

bash serve.sh → http://localhost:8777。生成タブでお題(検証コースSSOTから自動抽出・13種)×レーン×回数を選び一気に生成、比較タブで左右2画面比較。レーン=claude -p / kimi -p / codex exec / 直API(キーで自動有効化)。公平性=共通ラッパーのバイト連結+sha証跡。verify.sh 9項目・echoフェイクレーンで¥0のE2E常設検査。教訓の恒久化: エージェント作業dirに自分のログを置かない/CLI子プロセスに.envキーを渡さない(API課金化け防止)。Kimi K3回の実機比較(2026-07-19)が初回データとして同梱。

phase3_check.sh(司令室の外部公開の進行状況)ドキュメント/司令室/phase3_check.sh

DNSSEC・ネームサーバ・メール(MX/SPF/DKIM)・既存公開面・トンネル・Access設定・外からの到達を実測し、『次の一手』を1行で出す。

★2026-08-22 に『✅ Phase 3 完了』を出して役目を果たした(以後は公開の健康診断として使う)。同日、実配線と食い違う判定を2件修正=①credentials-file 方式のトンネルを『CC_TUNNEL_TOKEN 未設定』と誤報 ②proxied ホストは CNAME を返さないのに CNAME だけ見て『DNSレコードなし』と誤報。スマホから司令室を開くためのCloudflare Tunnel公開(Phase 3)の進行管理。手順書の記憶ではなく現実を測る設計。★最重要は①DNSSEC: routinelabo.comはDNSSEC有効(DS TTL=86400)で、Squarespaceの『Use Custom Nameservers』はDNSSEC無効化とNS切替を同時に実行するため、そのまま切ると最大24時間サイトとメールが全停止する。手順書= やること/司令室公開_ゾーン移管手順_20260815.md

検証・ハーネス3

制作ラインボードの検証ハーネス(列ズレ・UI崩れの自動検出)ドキュメント/制作ライン/tools/

スプレッドシートの列構成が変わってもボードが黙って隣の列を読み書きしないよう、列の対応とUIの崩れを毎回機械で測る検証3本+日次同期の生存確認hook。

verify_columns.py=列key→列文字が一意に解決するかをgvizのヘッダーから検証(mark.sh・sync_board.py の書き込み前ガードにもなっている)。e2e_columns.sh --real=使い捨てタスクを1行足して全列に書き、GAS(JS)が返した列文字とCLI(Python)がヘッダーから解決した列文字を突合してから行を消す(別実装どうしの答え合わせ=列ズレの決定的検出)。verify_ui.py=Playwrightで390/768/1024/1280/1440pxを実測し、横はみ出し0・JSエラー0を確認(スクショ保存も可)。prep_cleanup.py=準備列に紛れ込んだ入金メモを承認制で入金額・メモ列へ移す(スナップショット+undo保存つき)。board-sync-health.sh=日次リコンサイラが2日連続で失敗したらセッション開始時に警告する(5日連続クラッシュに誰も気づかなかった反省から追加)。

司令室・配線台帳ハーネスドキュメント/司令室/data/配線台帳.json / _verify_wiring.py

全タブ×データ源×生産者×更新導線のSSOT+機械検査(broken/生産者不在/台帳未登録で検証が落ちる)

ビルド(配線チップ・🩺🔌配線)と検査が同じ台帳を読む=配線を増やすときは台帳に書かないと verify_cc.sh が赤くなる。逆方向検出で_build_site.pyが読むのに台帳に無いデータ源も検出。2026-08-15の配線監査(ワースト10)から構築

公式LINE合言葉の到達保証ハーネス(配布リンク死活・表記ゆれ・衝突検査)Blog_RoutineLabo/line_auto_reply/(scripts/check_reply_links.py・src/lib.js・scripts/register_keyword.py)

合言葉が届かない事故は no match=無返信で誰にも見えない。配布URLの日次死活検査+表記ゆれ吸収+部分一致衝突の登録時ブロックで、届いていない状態を機械が見つける。

2026-08-15に3種類の穴が同時に露見したため新設。①配布リンクの腐り=返信文の fable5-heavy-tasks.html が404のまま11日間配られ、友だちからの報告にも気づけなかった → check_reply_links.py が本番KVの返信文にある全URL(74本)を毎日実測し、異常なら 警告_リンク切れ.md を残す(loop-catchup.sh の line-link-check で日次・run-job経由でDiscord通知・verify-works.sh が警告ファイルの残存を検出)。負性テストと復旧テスト済み。②表記ゆれ=小文字の codex が keyword=Codex に当たらず無返信だった(html だけ小文字版を手で二重登録して凌いでいた) → lib.js の normalizeForMatch が大文字小文字・全角英数・語中の空白を吸収(回帰テスト5件追加・npm test 28件pass・deploy済み)。以後、表記ゆれ用の二重登録はしない。③部分一致の衝突=マッチは配列の先頭が勝つため、既存語を含む新しい合言葉は一生発火しない → register_keyword.py の overlap_check が登録を中断する(逆向き=短い語は警告のみ・--allow-overlap で強制可)。運用ルールは /blog-sns ①と /youtubeshort-publish Step4.7 に明記(合言葉は動画で連呼している呼び名そのまま・短すぎる一般語は避ける)。

素材管理1

Bロール素材ライブラリ(再利用→無料ストック→AI生成)スライド制作/素材ライブラリ/tools/lib.py(search --usage broll / stock / add --usage broll)

本編Bロールの画像・動画をキーワードとジャンルで台帳管理し、同テーマの回で使い回して生成コストを逓減させる仕組み。

台帳は既存の index.json 1本のまま(用途は usage 属性で持つ=「まず探す」が二重化しない)。調達は①ライブラリ再利用(¥0)→②無料ストック(lib.py stock=Pixabay/Pexels・商用可/表記不要のみ・取得と同時に出典URLとライセンスを台帳へ記録)→③AI生成、の順。本編への差し込みは work/<name>/broll_assets_plan.json → cut-apply が Broll トラックへ自動配線。APIキーは中央 .env の PIXABAY_API_KEY / PEXELS_API_KEY。

自動化21

制作ラインボード factmap(worksの実ファイルから12工程を自動判定)ドキュメント/制作ライン/factmap/(pipeline.json・pipeline_engine.py・build_factmap.py・board_digest.py・overrides.json)+ .claude/hooks/regen-factmap.sh

hubと記事フォルダの実ファイルだけを見て日次投稿パイプライン12工程の進捗を判定し、ターミナルの🏭残タスクマップと制作ラインボードへ出す。

2026-08-03に旧「進捗ボード」(静的HTML+SSEライブサーバー port 4788)を廃止し、判定エンジンだけをボード配下へ移設した(移設前後で判定が一致することは golden_check.py で機械確認)。再生成= bash .claude/hooks/regen-factmap.sh(120秒ガード・二次機はスキップ)/表示= /task-map。12工程中11工程は実ファイルで全自動判定、ショート公開のみ overrides.json に手動記録(done/skip/_archived)。transitions.jsonl が工程遷移の唯一の時系列(停滞日数・前回差分の根拠)。判定結果は tools/push_factmap.py がシートの隠しタブ _factmap へ日次送信し、ボードの🏭残タスクでシートの工程列と突き合わせて表示する(サムネ・本編カット・ブログ仕上げ・埋め込みなどシートに列が無い工程もここで見える/食い違いは⚠を出すだけで自動修正はしない)。pipeline_engine.py は works非依存の汎用エンジンで、task-map配布キット化の心臓部。

メール自動化 / gmail_draft.pyworks/メール自動化/gmail_draft.py

Gmailの下書きだけを作るスクリプト(送信APIは実装しない)。業者への納品報告・請求メールなど、内容を目視してから自分で送る用途。既存スレッドへの返信としても作れる。

認証はYouTube自動投稿と同じOAuthクライアントを流用(Cloudプロジェクトは共用)。トークンは ~/.config/gmail-draft/ に分離保存(600)。スコープは gmail.compose と gmail.readonly のみ。--reply-search / --reply-thread-id で threadId・In-Reply-To・References を引き継いだ返信下書きになり、--update-draft で作り直さず差し替えられる。--expect-from を付けると認証アカウント違いを検出して中断する(誤アカウント事故の防止)。2026-07-31 構築。

push_factmap.py(実ファイル判定をボードへ統合表示)ドキュメント/制作ライン/tools/push_factmap.py(日次: .claude/hooks/loop-catchup.sh)

worksの実ファイルから判定した12工程を、シートの隠しタブ _factmap へ送り、ボードの🏭残タスクでシートの工程列と突き合わせて見せる。

既定はdry-run・--apply で送信・--verify で読み戻し照合。送るのは board_task で突合できるジョブだけ(紐づかない行は誤表示の材料にしかならない)。送信前にペイロード全文を禁止語検査に通し、1件でも当たれば1行も送らない。_factmap はローカル事実の鏡=毎回まるごと置換で、タスク管理タブの工程列には一切触らない(シートを前進させてよいのは sync_board.should_write だけ)。ボード側では①12工程のミニ進捗②次の一手コマンド③シートと実態の食い違い⚠④実態が24時間以上古いときの鮮度帯 を表示する。検証= tools/test_push_factmap.py(GAS側の列順との一致も検査)。

theme_cleanup.py(テーマ・担当の表記ゆれ正規化)ドキュメント/制作ライン/tools/theme_cleanup.py + tools/theme_map.json

シートのテーマ列・担当列に増えた表記ゆれを、人が承認したマッピングどおりに正本語彙へ寄せる(承認制・undo付き)。

--plan が現況と「件数最多を正」のたたき台を theme_map.json に書き出す→人が確認・修正→--apply。提案を自動適用しない(意味の統合は人の判断。機械が決めると別物の対を静かに潰す)。マップに無い値・空欄・既に正本の値は触らない。--apply 直前に snapshot.sh を実行し旧値を undo JSON へ保存、--undo で全戻しできる。2026-08-03に76件を適用しテーマ16種→11種・担当は人名3名だけに。再発防止としてボードの🏷テーマ・👤担当チップから既存値を選べる入力にした(語彙をコードに焼かない=公開面に人名を出さないため)。検証= tools/test_theme_cleanup.py。

収益ボード(週次・プロダクト紐付け)ドキュメント/収益ボード/(collect.py・_build_board.py・data/収益データ.json)

コスト・制作に続く3枚目のボード=収入とファネル。Discord人数と発売待ち件数(product別)を自動収集し、プロダクトを道具カタログのslugで紐付けて表示する内部ダッシュボード。

週1ループ: collect.py→manual手入力(YT/LINE)→_build_board.py。売上はsalesに1行追記。カタログ外slugは⚠行で検知。メール台帳本体はroutinelabo-lp scripts/subs.py(PIIはgit外)。

司令室(3ボード統合サイト)+ /control-roomドキュメント/司令室/(_build_site.py・open.sh)+ .claude/commands/control-room.md

全ボード・資産・分析をサイドバー1画面で見る総合管理ダッシュボードv2。ホーム横断サマリー(ゲージ)+ボード7枚+資産6枚(プロダクト/公開面/サムネ/HTML資産/スキル/リポ/分身AI)+リンク。

v2(2026-08-08): サイドバーUI・発信分析タブ(/content-review週1自動)・スキルはClaude+Codex両走査・リポはリモート未設定警告・分身AIは受信箱方式(/bunshin-sync)。index.htmlはGASトークン入りでgit外。 v2.1(2026-08-12): 資産グループに🖼サムネ・📐HTML資産の2タブを追加(作った画像・HTMLを実物のまま見返せる。実体は _gallery.py)。

司令室ギャラリー(🖼サムネ・📐HTML資産タブ)ドキュメント/司令室/_gallery.py・_shot_html.mjs(open.sh が毎回実行)

これまで作ったサムネ・アイキャッチ・HTMLプレビュー・解説スライドを、司令室の2タブで実物のまま見返せるようにする仕組み。

2026-08-12追加。🖼サムネ= hub 今回のアウトプット/<JOB>/05_サムネ の5案をジョブ別に並べ、selected.txt を読んで「YouTube採用/アイキャッチ採用」の印をつける。ブログアイキャッチ(現行+_前回退避)も同居。📐HTML資産= 共有ページ/HTMLプレビュー を puppeteer(共有ページ/node_modules を借用・新規導入なし)で実スクショし、スライド制作は既存の shots/slide-01.png を流用して撮影コストゼロ。原本は触らず長辺520pxのJPEGを assets/g/ にキャッシュし、原本より新しい縮小版があれば作り直さない(初回のみDrive読みで3〜4分、2回目以降は差分だけ=1秒未満)。キャッシュと data/ギャラリー.json は git 管理外。作り直しは --rebuild。★実装上の罠: 今回のアウトプット・投稿画像は Drive への symlink なので、リンク生成で resolve() すると works の外に出て relative_to が失敗し原本リンクが全消えする。

HTMLセルフプレビュー (publish_gallery.sh)/Users/senao/Downloads/works/共有ページ/publish_gallery.sh(生成: HTMLプレビュー/_build_gallery.py・フック: .claude/hooks/sync-preview-gallery.sh)

各プロジェクトの自分用HTML(台本・設定・進捗・配布物)をGitHubプライベートリポ(senao-routine/html-self-preview)へ集約し、Cloudflare Pagesの推測困難URLでプロジェクト別×日付一覧のギャラリーを自動生成する。

取り込み元=worksドキュメント/設定ハブ/HTMLプレビュー/台本・下準備/スライド制作(_build_gallery.pyのSOURCES)。固有名サニタイズ+漏れ検査ゲート(禁止語が残るとexit 2で公開停止・公開ポリシー準拠)。①GitHubプライベートリポへcommit/push(作者senao固定)②Cloudflare Pages gallery-2qc906haso.pages.dev(noindex+推測困難URL)へデプロイ。Stopフックsync-preview-gallery.shが状態ハッシュ(--state)の変化時だけ自動実行・スキル/self-previewで手動即時反映も可(冪等)。

司令室 💡アイデア(アプリ構想台帳)ドキュメント/司令室/data/アプリ構想.json(表示= _build_site.py の tab_ideas)

作りたい/検討中のアプリ・ツールを、作る前の段階から置いておく台帳。

2026-08-12新設。🧰プロダクトと🌐公開面は『作り終えたもの』しか載らず、『作る前』の置き場が無かった。種→検討中→作りたい→作成中→公開済→見送り の6状態と size(S/M/L)・誰に・なぜ・どう作る・収益・次の1手 を1件1カードで表示。追加はJSONに1項目足して open.sh、またはAIに『アイデアに◯◯を追加して』。公開したら公開面レジストリと道具カタログへ昇格させ、ここは status=公開済 で履歴として残す。

アイデアレーダー(毎朝4時の投稿ネタ候補)+ /idea-radarショート動画作成/トレンド収集/idea_radar.py・司令室/serve.py・レーダー.html・_radar_adopt.py

毎朝4時にYouTube日本版/海外版・HN・Xの注目トピックを収集し、企画案2〜3本を生成して司令室📡に掲出。📌でネタ帳保存→/scriptへ。

v2(2026-08-15): ①収集を日本版(日本語タイトル必須)と海外版(英語圏)に分離(YouTube 4+4クエリ≈810u/日) ②data/レーダー履歴/へ日次アーカイブ=過去の収集が見返せる ③📌ネタ保存→data/ネタ帳.json(状態=未着手/台本化中/済・💡アイデアタブに一覧・/script進行コマンド付き) ④司令室サーバ(serve.py 8890〜)でレーダー.htmlが動的化=ブラウザ更新で最新・保存ボタン実動作。v1(2026-08-12)= launchd 04:00+catchup+watchdog三重配線・Maker-Checker検証。

司令室 💹収支タブ(サブスク一覧+経費×収益)ドキュメント/司令室/_build_site.py tab_pl()・data/サブスク台帳.json

収支1枚カード+サブスク台帳(Googleシート実払い×公式価格の実地調査)+要確認フラグ+API実請求内訳。

v2(2026-08-15): ユーザーのGoogleシート(サブスクリスト)をDrive連携で読み、14グループ並列の実地調査で公式価格・プラン・課金周期・料金ページURLを裏取り→data/サブスク台帳.jsonに統合(事業月額15+年額11+個人5+解約26)。経費=台帳事業計+API実請求(cost_dataと名前照合で二重計上回避)。要確認9件(DMM不明・Google One二重疑い・Claude値上がりの正体=消費税+円安・YT Premium iOS割高等の節約余地)をタブに常設。台帳更新=AIに「サブスク台帳を同期して」。

司令室 🕸仕組みグラフ(worksの関連を動的可視化)ドキュメント/司令室/_graph_scan.py・_build_graph_html.py(生成物はgit外)

スキル・スクリプト・データ台帳・タブ・hooks・定常ジョブ・公開面の参照関係を機械抽出し、依存ゼロの力学グラフGUIで可視化。

2026-08-12新設→08-15にv2大幅改善: 型アンカー重力で同型ノードが銀河状にクラスタ化・遠景に型の地名表示・曲線エッジ・ラベル間引き(常時=ハブのみ)・物理の沈静化(永久ドリフト廃止)・ハロー・初期全体フィット・ダブルクリックで全体表示。_graph_scan.py機械抽出→_build_graph_html.py。open.shが毎回再生成。

Typefully投稿の単一正本(typefully_post.py)X Post/scripts/typefully_post.py

X/Threadsの下書き・予約を作る唯一の入口。本文はプレーンテキストで受け取り、JSON化・メディアアップロード・保存後の読み戻し検証まで内蔵する。

2026-08-13新設。導入理由=スキルが `curl -d '{...}'` のJSONをエージェントに手書きさせていたため、改行が『バックスラッシュ+n』の2文字のまま公開される事故が4回起きた(08/06・08/11・08/12・08/13)。--post @file を並べるとスレッド、--media は既定で1投稿目に添付('2:path'で2投稿目)、--threads でThreads同時投稿、--publish-at はUTC(Z)記法のみ受け付ける。--slot digest|ainews で typefully_slot.py から空き枠を自動取得。入口でリテラルの改行エスケープを検出・修復し、保存後に下書きを読み戻して残っていれば作成した下書きを削除して異常終了する。--audit で予約済み・下書きを全ページ走査(GET /drafts は limit最大50でページング必須)、--fix で読み書き修復(settings や subscribers_only 等の付随フィールドを保ったまま text だけ差し替える)、--ack で公開済み事故に確認印。旧: 各Xスキルに散在していた生curl手順は全廃し、settings.local.json の allow も削除して deny を追加した。 2026-08-30追記: --quote で引用リポスト(元ポストをXがカード表示=再アップせず動画を見せられる)、--require-media で「1投稿目にメディアが無ければ下書きを作らずに落ちる」ゲート、--audit の first_post_no_media で1投稿目が文章だけの予約を公開前に一覧化(run-xguard.sh が状態に保存し、セッション開始hookが警告する)。

参照元URL→動画の解決(source_media.py)X Post/scripts/source_media.py

XポストURL・公式ブログ・記事URLから「X投稿の1投稿目に載せる動画(無ければ画像)」を取ってくる正本。Xスキル全部がここを呼ぶ。

2026-08-30新設(本人指示=「参照したURLの元の動画がそのまま1投稿目に載っている状態にしたい」)。導入根拠の実測=/x-research が作った投稿が7件連続で media 0件=文章だけだった(同時期の /x-highlight-share・/x-tool-review の投稿には全部動画が付いている。差は手順に --media があるかどうかだけで、そもそも元ネタURLから動画を取る手段が無かった)。候補URLを複数渡すと全URLをまず動画で探し、1本も無いときだけ画像へ降りる。XポストはFxTwitter APIで最高ビットレートのmp4(引用元にしか動画が無い形も辿る)、一般ページは og:video / twitter:player:stream / <video src>、m3u8はffmpegでmp4へremux、拡張子つきURLは直接ダウンロード(bot対策で403のページはBright Data MCPでHTMLだけ取ってメディアURLを渡す)。取得後は必ずffprobeで実測してXの制限(mp4/mov・512MB・10分・映像トラック)を満たすものだけ返す。YouTubeは既定で取りに行かない(--allow-youtube+yt-dlp)。--print-path でパスだけ返し、取れなければ終了コード3。 運用ルールの正本は /x-media スキル(このスクリプトはその実行エンジン)。

外部発信の本文エスケープ検査(text_guard.py)scripts/text_guard.py

外へ出る本文にリテラルの改行エスケープが混じっていないか検査する works共通の正本。Typefully・Discord・LINE・YouTube概要欄が同じ関数を使う。

2026-08-13新設。ng_check(本名・所属の漏れ検査)が publish-gate で強制されているのに、エスケープ崩れは誰も見ていなかった穴を埋めるもの。assert_clean(text,label) を送信直前に1行差すだけで効く。自動修復するのは改行系(\n・\\n・\r\n)だけで、\t と \r と \uXXXX と \" は警告のみ(`正規表現 \t で分割` のような正当な本文を壊さないため)。Windowsパス(C:\new\test)は正規表現でマスクしてから判定するので誤爆しない。配線済み=Blog_RoutineLabo/discord_notify.py の --text、ドキュメント/Discordサーバー/discord_post.py の --message、YouTube自動投稿/youtube_upload.py の --description、Blog_RoutineLabo/line_auto_reply/scripts/register_keyword.py の --reply-text、スライド制作/スライド解説動画/ainews/scripts/typefully_schedule.py。とくにLINE配信・Discord @everyone・動画に焼き込む字幕は送った瞬間に取り消せないので、入口ゲートだけが防御になる。

Xリテラル改行ガード(com.senao.works.xguard).claude/launchd/run-xguard.sh・install-xguard.sh・.claude/hooks/x-literal-guard-remind.sh

各公開枠の直前にTypefullyの予約済み・下書きを検査し、リテラルの改行エスケープを自動修復する。生成側と独立した最後の砦。

2026-08-13新設。スキル文書の『JSONを手書きするな』は指示でしかなく守られる保証が無いため、生成側と独立した検査層を置いた。毎日 05:50 / 06:50 / 07:20 / 11:20 / 11:50 / 18:50 / 19:20 に実行(枠の正本 typefully_slot.py の SLOT_SETS=07:00 ainews・07:10/12:00/19:00 OpenClaw・07:30/11:30/19:30 works の各10〜20分前)。当初は05:50と11:00の2回だけにしていたが、それだと19時台の枠が最大18時間ノーガードになり、今回事故った投稿がまさに19:00枠だった。結果は state/xguard.json に残り、セッション開始時に x-literal-guard-remind.sh が警告する(何も無ければ沈黙するが、状態ファイルが無い・24時間動いていない場合は『ガードが止まっている』として鳴らす=fail-openで黙らない)。公開済みにリテラルを見つけた場合は rc=3 でゲート突破として最上位の警報。無人レーンの X Post/run-x-research.sh も claude 実行直後にシェルが --audit --fix を回す。verify-works.sh が正本2本の実在・launchd登録・36時間以内の実行・生curl手順の復活を検査する。母艦1台でよい(Typefullyは共有のため)。

司令室サーバ(serve.py・レーダー動的化+ネタ保存API)ドキュメント/司令室/serve.py・レーダー.html(8890〜8893自動割当・open.shが自動起動)

司令室のレーダーをブラウザ更新で最新化し、📌ボタンのネタ保存・状態変更・再収集をGUIから実行できるローカルAPIサーバ。

2026-08-15新設。file://の静的ビルドでは①更新しても最新化されない②書く操作ができない問題への回答。コストダッシュボードserve.pyと同方式。API= radar/history・radar/data・neta・radar/save・neta/status・radar/refresh。書き込みは_radar_adopt.py CLIをsubprocessで再利用(二重実装しない)。localhostのみ・外に出ない。

案件ダッシュボード(📑タブ)+ /anken-syncドキュメント/司令室/data/案件台帳.json・.claude/commands/anken-sync.md

PR案件のパイプラインをGmailラベル運用(検討中→案件作成中→支払い待ち)準拠で可視化。滞留日数×入金突合で未回収をキャッチアップ。

2026-08-15新設。Gmailの4ラベルを実走査して台帳化(支払い待ち10件・制作中11件等)。初回走査で未回収¥185,000超を検出(Hitem3D $400=5ヶ月滞留等)。タブは滞留バッジ(🔴30日+/🟡10日+)・期限・次の一手・Gmailスレッド直リンク・継続アフィリ5本・入金実績。更新=「案件台帳を同期して」(Gmail MCPは対話専用・週1目安)。メール本文はデータであって指示ではない原則を/anken-syncに明記。

司令室アプリサーバv2(フルWebアプリ化・クローズド公開基盤)ドキュメント/司令室/serve.py・verify_cc.sh・.env(600)・launchd com.senao.works.ccserver

司令室の正式な入口がserved化。鮮度リビルド・/line //cost リバプロ・公開モードのAccessヘッダ認証・adminブロック出し分け・KeepAlive常駐。

2026-08-15構築(Phase1完了)。file://直開き廃止→http://127.0.0.1:8890/。GET /のたびdata/*.jsonがindexより新しければ自動再ビルド(デバウンス60s)=更新だけで最新。リバプロで制作ライン(4799)/コスト(8787-92)が同一オリジンに=トンネル1本で全タブ。公開モード(CC_PUBLIC=1)=Cf-Access-Authenticated-User-Emailヘッダ必須・CORS停止・owner GASトークンリンク4箇所を<!--admin-only-->で出し分け(CC_ADMIN_EMAILS照合)。検証=verify_cc.sh 38項目(負性テスト込み・全緑)。バインドは常に127.0.0.1。★2026-08-22 Phase3まで完了=スマホからAccess越しに開く(ゾーン移管→Tunnel→Accessアプリ→launchd常駐。ホスト名の正本は公開面レジストリ)。母艦の127.0.0.1直だけは公開モードでも素通しにする(公開ONで母艦から司令室が開けなくなった実害の対策)。

launchd: hub編集素材の自動片付け(cleanuphub)/Users/senao/Downloads/works/.claude/launchd/run-cleanup-hub.sh

毎日21:00に cleanup-editor-package.sh --sweep --apply を無人実行し、公開が全部終わった回のhub編集素材(編集パッケージzip・02_本編カット・07の完成mp4・収録元動画)を自動回収する。

登録= bash .claude/launchd/install-cleanup-hub.sh(母艦のみ・解除は --uninstall)。ラベル= com.senao.works.cleanuphub。3条件(本編公開済み/X共有済み=Typefully照合/07に成果物あり)を満たした回だけが対象で、欠けた回は理由つきで残る=判定は厳格なまま着手だけ無人化した。★--stale-days は無人ジョブでは使わない(X共有を照合できなかった回を『確認できないから消す』と機械に判断させないため。古い回を片付けたいときだけ人が明示的に --sweep --stale-days 21 --apply を叩く)。消した回は SessionStart hook(.claude/hooks/cleanup-hub-remind.sh)が名前つきで報告し、実行記録が無い/3日以上止まっている場合も警告する。残したい回は job_manifest.json に keep_source: true / keep_master: true(PR案件はこれを入れる)。状態= .claude/launchd/state/cleanup-hub.json、ログ= .claude/launchd/logs/cleanup-hub.log。2026-08-20導入(X共有が予約投稿のため『投稿が出たあとに人が気づいて叩く』運用が成立せず、CrossSession回で17GBが残り続けたのが契機)。

スライド型スタイル生成(make_slide_images / slide_styles.json)works: スライド制作/_tools/make_slide_images.py + slide_styles.json

収録用・解説用スライドの各ページを、ページ型のあるデッキとして Codex GPT Image 2.0 に生成させる。スタイルは slide_styles.json が正本(2026-08-28に11スタイルへ再整備)。

2026-08-27新設 → **2026-08-28に全面再整備**。定義の正本=`スライド制作/_tools/slide_styles.json`、解説=`スライド参考/図版スタイル仕様.md`、実物見本=`スライド参考/スタイル見本/<スタイル名>/images/`(各3枚)。翻訳の仕組み: deck.json(style/title/pages[])→ codex_image.sh(ChatGPTサブスク枠・API課金ゼロ)/参照は「そのスタイルの実物見本」+「直前ページ」を毎回 -r で渡して画風を揃える/出力は images/pNN.png + pages.json → make_fullbleed_deck.py → make_pptx.py。★**現在のスタイルは11個**(deck.json の style にこの名前を書く。日本語名が正式名で、英字は alias): **マテリアルデザイン**(白地×Google青 #4a86e8・文字 #333333・差し色ゴールド #FFD700・角丸カード+薄い影/alias: material・material-design・slide-material)/**youtube-pop**(極太の白フチ袋文字+パステル円のカラフルな絵文字風アイコン+黄色マーカー・light6:dark4/本人の実物準拠/alias: pop・bluedsign-nochar・illustrationmix-pro)/**tegaki** / **ホワイトボード** / **シンプル** / **ニュースペーパー** / **paper**(図鑑・博物)/**neon**(暗地ネオン)/ **イラストスタイル** / **グーグルスタイル** / **ブルーデザイン**。⚠ 第1版(8/27)は Manus の SKILL.md の文章だけで bluedsign-nochar / illustrationmix-pro / material の3つを起こし、出力が実物と違って差し戻された。第2版は**本人提供の実物スクショから design language を起こし、その実物を毎回参照に渡す**方式。⛔ 必須ルール: ①台本の論点と1対1で作り枚数を削らない ②新スタイルは --only 1 で1枚出して実物と見比べてから全体 ③生成後は verify_slide_images.py(機械検査)→ 全ページ1枚ずつ目視 → 数値を検証済みファクトと照合、が済むまで完成と報告しない。

自動化スクリプト1

make-secret-kit.sh(秘密情報キットの生成).claude/make-secret-kit.sh + .claude/kit-template/

gitに載せられない秘密情報だけを運ぶAirDropキットを1コマンドで組み立てる。受け側はinstall.sh 1行で配置・検証まで完走する。

レーン指定=send(秘匿ゲート+予約投稿の最小3点)/ full(制作系まで)。テンプレ(install.sh・README)はリポジトリ管理で秘密を含まない。install.shは二次機マーカー設置→配置(600/700)→既存を退避→git pull→共通設定の適用→受け入れ判定まで自動。手でコピーを並べる運用は新しい秘密が増えたときに漏れる(過去に新設プロジェクトの認証情報が丸ごと欠けた実例)ため、一覧をスクリプトに持たせた。2026-07-28新設。

設定1

コンテキスト保護の設定(cleanupPeriodDays・トランスクリプト隔離)/Users/senao/.claude/settings.json

トランスクリプトの自動掃除を有効化し、肥大した過去セッションを隔離庫へ退避して「開いた瞬間に上限到達」の再発を止める。

①cleanupPeriodDays: 30 を新規設定(従来は未設定)。②30日超のjsonl 484本・file-history 523本・残留pidfile 103個を削除。③さらに「16MB超かつ3日以上前」のセッション27本(1.33GB)を ~/.claude/_archive_transcripts/ へプロジェクト別に隔離した(削除ではなく移動・README同梱で復元手順あり)。結果 ~/.claude/projects は2.8GB→1.4GB、16MB超セッションは33本→6本(直近3日ぶんのみ)に。直近3日と16MB以下は残してあるので最近の作業は従来通りresumeできる。あわせて Claude設定同期/apply.sh が hooks を同期対象外にしていた穴を塞ぎ、3台へ配布できるようにした(settings.jsonへの配線は各Macで手動)。

設定同期1

settings_shared.json + merge_settings.py(settings.jsonの共通値配布)Claude設定同期/settings_shared.json ・ merge_settings.py

settings.json のうちマシン非依存な部分だけを正本化し、各Macへ自動マージする。APIキー・権限allowlist・ローカル固有設定は温存する。

配布対象=モデル運用(プランモードと通常モードの振り分け)・トランスクリプト保持日数・hooks配線・思考/努力レベル等。母艦専用hookは_home_only_hooksに列挙し、二次機では自動で外れる。--checkで差分だけ確認(書かない)。★モデル設定を対話コマンドで選び直すと別名に書き換わり、プランモードの自動切替が失われる事故があったため、値の正本を1箇所に集約して検証から突き合わせる形にした。2026-07-28新設。

資料作成1

スライド制作フォルダ(2系統・3層ルール)スライド制作/

スライド系の成果物置き場。①/html-slide型の資料スライド と ②slidecast(アバターが喋る解説動画) の2系統が同居する。

使い分け=喋らせないなら①(静かな資料スライド・本編差し込み/X投稿/配布)、アバターが解説する動画にするなら②(スライド解説動画/・news/topic/podcastの3形式)。①は/scriptが台本後に毎回自動生成する。①の3層ルール=公式の実スクショ(puppeteerで実取得・全枚に出典行)+生成図版(codex_image.sh・必ず直列・画像内に文字を描かない)+動くグラフ(fill/growH/count/countN)。基準実装と雛形(verify_slides.mjs・capture*.mjs)=20260726_ClaudeOpus5/。 ★2026-08-18: 納品物を4点→5点にした(収録用PPTXを追加)。あわせて検証スクリプトの正本を スライド制作/_tools/ に集約した(24デッキそれぞれにコピーが散っていて、はみ出し検査の対象セレクタを直しても新しいデッキにしか効かなかったため)。呼び出しはデッキのフォルダから node ../_tools/verify_slides.mjs(puppeteerをデッキ側から解決する)。出典行も検査対象に追加済み=出典にURLを足して長くなるとここで落ちる。 ★2026-08-27改定: 納品物を5点→4点にした(ナレ付き解説動画MP4を廃止・生成もアップもしない)。あわせて①既定デッキの3層を「公式の実スクショ+動くグラフ+タイポグラフィと部品」へ変更し、手描き図版を既定デッキから外した(図版は台本プレビューと収録用スライド専用)。収録用スライドが主役へ格上げされ、図版スタイルを6つへ拡張(warm/board/card+新規 mono=新聞活版・paper=図鑑標本・neon=暗地ネオン)。pages.json に point/say/sec を追加=収録画面のノート帯に「台本の論点」「言い切る一言」「ここまで m:ss / 全体 m:ss」が出る。

運用1

ネタ帳(投稿ネタの保存台帳)ドキュメント/司令室/data/ネタ帳.json(git追跡=貴重データ)

レーダーで見つけた良ネタの保存先。未着手→台本化中→済で管理し、/scriptへの進行コマンド付き。💡アイデアタブに常設。

2026-08-15新設。保存=📡タブの📌ボタン or「レーダーN番を採用」「トピックN(日本/海外)を保存」。過去日付からも保存可(--date)。台本へ=「ネタNを台本に」→/script routinelabo <タイトル>。アプリ構想.json(作りたいアプリ)とは分離。

配布/可視化HTML2

AI Office 進捗マップ(プロジェクト全体の可視化HTML)共有ページ/HTMLプレビュー/20260709_AIOffice進捗マップ.html

AI Officeプロジェクトの全体像と現在地を1枚で可視化(フェーズ進捗P0-P6・アーキテクチャ図・品質の仕組み・ユーザー操作待ち2件・次の一手)。

Mac全体のClaude Codeセッションをドット絵オフィスでライブ表示するAI Officeの進捗マップ。3レーンのアーキテクチャ図(Macローカル/Cloudflare中継/MCP予定)、敵対的レビュー累計112+体→70+所見修正の品質体制、P3実deploy・P4実loadのユーザー手順コード付き。デザインは_デザインサンプルの暖色パレット準拠。

サムネイルデザイン比較ページ(現役6スタイルの実物カタログ)共有ページ/HTMLプレビュー/20260718_サムネデザイン比較.html

thumbnail_generator.py の現役6スタイル(design1〜6・2026-07-19再編)を実物サムネ付きで比較する自己完結HTML。

2026-07-19ユーザー裁定のラインナップ再編(6スタイルに番号詰め)を反映。design1=太線2Dカートゥーン/2=クリック訴求型/3=アーティスト・デザイナー風/4=高密度サムネ(旧6)/5=アイキャッチ画像スタイル(旧7)/6=AIの教科書スタイル(旧8)。全スタイルのテスト生成(同一テキスト・girl05・Codex枠)とdesign2のGPT版エンジン比較、退役した旧design4(感情訴求)の実物アーカイブ2ジョブ分を収載。図版49枚・data URI自己完結。

配布物2

スライドキャストキット(配布キット+案内ページ)スライド制作/スライドキャスト配布キット/(zip=package.shで生成)・HTMLプレビュー/20260727_スライドキャストキット案内.html

キャラが喋る解説動画メーカーのメンバー限定配布版(¥690段・Discordロール配布)。スキル2本(/slidecast-setup・/slidecast)同梱・validate/packageの凍結ゲート付き

配布キャラ=ナナ(cast_a01)×レン(cast_b01)・番組キャラ/ボイス/自声は機械検査で配布禁止。キー無しverify合格→Fishキーで実生成。案内=member-share slidecast-kit-874osg

ブログ下書きキット(配布キット)Blog_メンバーシップ/ブログ下書きキット/(zip=scripts/package.shで生成)

収録した音声・動画1本を、自分の書き方でブログ記事にしてWordPressに下書きとして上げるメンバー限定キット(ビジネスAI¥5,600段・Discordロール配布)。スキル2本(/blog-draft・/blog-setup)同梱・validate/packageの凍結ゲート付き

解説回=ビジネスAI講座 第2回。中身=transcribe.py(Groq Whisper・25MB自動分割)+wp_draft.py(REST API・status=draft固定で公開しない)+CLAUDE.md.example(自分の書き方を書くテンプレ=キットの核)。課金ゼロで通せる同梱サンプルあり。上流の本番スクリプトはコピーせず新規に書き起こし=works固有の前提を持ち込まない。validateの7検査にworks内部名・本人のサイト/ユーザー名・シークレット・絶対パス・ng_checkを含む