本文へ移動
cccskills
無料GitHub で公開

run-ubm-journal

日次ジャーナルを作りたいとき、今日やったことを会話で振り返りながら Obsidian の Daily へ構造化したファイルを生成・再生成したいときに使う。

インストール方法を見る

含まれるファイル(9)

  • SKILL.md20.9 KB
  • assets/golden-sample.md14.0 KB
  • references/daily-habits.json5.2 KB
  • references/interview-map.md9.8 KB
  • references/output-format.md7.4 KB
  • references/principle-checklist.md7.3 KB
  • references/resource-map.yaml2.0 KB
  • scripts/build-journal-context.py46.9 KB
  • scripts/validate-journal-output.py34.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Pre-choice usable artifact execution

Purpose & Output Contractの最小の実成果物またはremote mutation previewをmain contextで作成する。effect別のparse/open・secret・irreversible・corrupt guardだけを実行し、現物path・digest・開き方またはpreview receiptを提示してからaccept-as-is/light/standard/detailedを記録する。accept-as-isはmutationを実行せずhandoff完了とし、後続sectionを実行しない。

Post-choice selected improvement execution

以下の既存workflow・goal-seek・評価・修正sectionおよびexternal mutation safety wrapperはlight/standard/detailedが記録されてsemantic_evaluator_startedへ遷移した場合だけ実行する。actual mutationはcanonical preview→hook-confirm→authorize→execute wrapperだけを通し、release/exhaustiveは別の明示eventを必要とする。

<!-- external-mutation-guard-cli:v1 -->

Canonical external mutation receipt flow (mandatory)

Never execute the external mutation argv directly. Replace every angle-bracket placeholder with the reviewed value from this run; the central CLI fails closed on missing/invalid values.

Resolve the guard plugin root once, before preview. An installed plugin cannot reach a sibling plugin as <plugin root>/.., so never guess that path:

python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/extract-plugin-root.py" skill-governance-adapters

Use the printed absolute path as <GUARD_PLUGIN_ROOT> in preview, authorize and execute (other Bash is blocked while the confirmation is pending, so do not resolve it again). If the resolver exits non-zero, stop without any external mutation and tell the user to install the skill-governance-adapters plugin.

python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" preview --project-root "$PWD" --entrypoint-ref "plugin:<PLUGIN_NAME>/skills/<SKILL_NAME>/SKILL.md" --target-scope "<TARGET_SCOPE>" --diff-summary "<DIFF_SUMMARY>" --side-effect-summary "<SIDE_EFFECT_SUMMARY>" --command-json '<MUTATION_ARGV_JSON>'

Present that official preview output to the user. Only the exact user reply printed by preview may trigger the registered hook-confirm producer. Then use the two returned receipt paths:

python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" authorize --project-root "$PWD" --preview-receipt "<PREVIEW_RECEIPT_PATH>" --confirmation-receipt "<CONFIRMATION_RECEIPT_PATH>"
python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" execute --project-root "$PWD" --authorization-receipt "<AUTHORIZATION_RECEIPT_PATH>" --command-json '<MUTATION_ARGV_JSON>'

Do not use an auto-approval flag or invoke the mutation command outside this receipt flow.

<!-- /external-mutation-guard-cli:v1 -->

run-ubm-journal

Runtime root contract

  • runtime_root_policy: host-skill-path を適用する。
  • Claude Codeでは CLAUDE_PLUGIN_ROOT をplugin rootとして使用する。
  • Codexではホストが提示したこの SKILL.md のabsolute pathから、plugin manifestを持つ祖先を上方探索して論理 PLUGIN_ROOT を解決する。
  • cwd からplugin rootを推測せず、literal placeholderをshellへ渡さない。各shell invocation内で解決済みabsolute pathを PLUGIN_ROOT に設定する。
  • prompts/ 配下はこのowner Skill契約を継承する。

その日の振り返りを会話で行い、$UBM_VAULT_ROOT/02_Configs/Daily/{YYYY-MM-DD}.md へ構造化された 日次ジャーナルを生成する。チェックリストを読み上げるのではなく、「今日は何をやりましたか」から 自然に会話を進め、返ってきた話をジャーナルの各セクションへ振り分ける。

Purpose & Output Contract

  • ゴール: 対象日のジャーナル1件が references/output-format.md の骨格で生成され、 validate-journal-output.py が PASS した状態。
  • 出力契約: 02_Configs/Daily/{YYYY-MM-DD}.md 1ファイル + バリデーション結果(PASS/FAIL)。
  • 境界: 入力=前回ジャーナル / 最新の週報・月報・期報 / 対話回答。出力=日次ジャーナル1件のみ。 週報・月報・期報そのものの更新は run-ubm-goal-setting へ委譲する(このスキルは読むだけ)。
  • フォーマットは器であって目的ではない: テンプレートの穴埋めではなく、その日やったことを 構造的にまとめることが目的。分類見出しはその日の実態に合わせて命名してよい。

End-to-End Flow

Phase責務実行体
Phase0-resolve対象日を確定し build-journal-context.py で番号・目標4階層・週報引き継ぎ・warnings を取得本 skill(Bash)
Phase1-open「今日は何をやりましたか」で対話を開き、事実を出しきる本 skill
Phase2-deepen気づき・うまくいかなかったこと・時間の使い方・お金の動きを掘る本 skill
Phase3-fill埋まっていない枠(感謝・禁止事項・タスク)と未確認の固定習慣を、週報の呼び水を使って補う本 skill
Phase4-compose収集内容を骨格へ整形し Markdown を組み立てるjournal-composer(Task)
Phase5-validatevalidate-journal-output.py で検証、違反があれば最大3回修正して保存journal-composer + script

所要時間目安: 5〜10分。

Phase0: 文脈解決(必ず最初に実行する)

python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/run-ubm-journal/scripts/build-journal-context.py" \
  --vault-root "$UBM_VAULT_ROOT" --date "{YYYY-MM-DD}"
  • 対象日は引数 $ARGUMENTS があればそれ、無ければ 今日(ファイル日付=見出し日付=振り返る日)。
  • journal_number をそのまま使う。番号を自分で数えない・推測しない。
  • warnings は対話の切り口として使う(例: 1年目標の期間満了、期報の期間ズレ、当日タスク未検出)。
  • existing_file.write_mode を必ず先に見る。ジャーナルは Write で全置換されるため、 ここを飛ばすと利用者の既存ファイルが消える。
    • new: そのまま新規作成して進む。
    • regenerate: 同じ日のジャーナルを作り直す。番号を維持し、更新であることを伝えてから進む。
    • blocked: Write せず停止する。 対象ファイルに別日の内容が入っている。 どうするか(別名で作る/既存を退避する/中止する)を必ずユーザーへ確認してから動く。

Phase1-3: 対話

references/interview-map.md の問い→セクション対応表に沿って進める。

  • 開き方: 「今日は何をやりましたか?」。列挙が出たら、時間をかけた順・人が関わった順に掘る。
  • 翌日以降の視点: 「昨日やったことで気づいたことはありますか?」で効果性の材料を取る。
  • 週報の呼び水: weekly_report.day_tasks を「今日はこれが入っていましたが、どうなりましたか?」 の形で提示する。丸ごと転記はしない。
  • 固定習慣(毎日必須): Phase0 の daily_habits(6項目: Gridノート / 23時就寝 / ストレッチ / 計画外の動画視聴 / ジャーナル / SNS投稿)は毎回必ず確認する。ただし頭から順に読み上げず、 Phase1-2 で自然に出た項目は拾って済ませ、Phase3 で残った分だけを2〜3問に束ねて聞く。 達成/未達のどちらであれ痕跡を残す。ただし H01 が見るのは各習慣の search_scopes が 指すセクションの中だけなので、interview-map.md の「落とす先」列のセクションへ書く (本文のどこかにあればよい、ではない)。痕跡ゼロは Phase5 で H01 違反になる。
  • 週次習慣目標: 週報の習慣目標4群は独立セクションにせず、会話から達成状況を推し量って 行動・時間・お金の各ジャーナルへ事実として織り込む(references/interview-map.md 参照)。
  • 目標セクションだけは自動: 1年/3ヶ月/1ヶ月/1週間目標と残日数は Phase0 の結果をそのまま使い、 ユーザーに確認を求めない。ただし warnings に期間ズレ・満了があるときだけ確認する。

Phase4-5: 整形と検証

  • journal-composer サブエージェントへ Phase0 の context JSON、対話内容、親が host-skill-path から解決した absolute PLUGIN_ROOT を渡し、Phase4の整形から Phase5の保存・検証・最大3回修復までを一つの write scope で所有させる。親は対話、保存可否、入力スナップショットを所有し、保存済みpathとvalidator receiptだけを受け取る。Task 内で PLUGIN_ROOT が未指定または absolute でなければ fail-closed で停止する。
  • journal-composer は保存後に必ず次を検証し、親へ path と最終 validator receipt を返す。親は同じファイルを再編集せず、receipt の exit 0 と対象 path / expected 値の一致で完了を判定する:
python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/run-ubm-journal/scripts/validate-journal-output.py" \
  --file "$UBM_VAULT_ROOT/02_Configs/Daily/{YYYY-MM-DD}.md" \
  --expected-number {journal_number} --expected-date {YYYY-MM-DD}
  • FAIL なら journal-composer が違反コードに従って修正し、最大3回まで再検証する。3回で収束しなければ違反を残したまま 完了扱いにせず、残件をユーザーへ報告する。

ゴールシーク実行

goal_seek.engine: inline / fork: inline とし、ユーザー対話と保存可否はmain contextが所有する。journal-composer は Phase4-5 の単一 writer/validator を Task で担い、親は receipt で完了を判定する。最大3周で未達なら残件を open_issues と handoff に記録し、完了扱いにしない。

親の 1 周回の実体は Phase1-3 の対話へ戻って不足を埋め、journal-composer を Phase4-5 へ再委譲することである。周回の発火条件は「保存された journal が original_goal に対して不足している」とmain contextが判断した場合に限る (例: 事実・数値・固有名詞の取りこぼし、当日の意思決定が言語化されていない)。周回ごとに intermediate.jsonl へ 1 行 append し iteration を進める。

composer 内の最大3回は同じMarkdownに対する機械違反の修復であり、親のgoal-seek周回とは別である。機械違反は対話で埋められない種類の失敗なので、composerが3回で収束しなければ親がPhase4を自動再起動せず、周回を消費しないままその時点で停止し、違反コードをユーザーへ報告する。

ゴールシーク配線

original_goal と対象日を progress に固定し、各反復を run-ubm-journal-intermediate.jsonl へ append する。各行は iteration/original_goal/current_goal_snapshot/delta_from_original/merged_directive_for_next/drift_signal を持ち、journal path / validator receipt は結果の観測値として併記する。次回は直前の merged_directive_for_next を必須入力とする。

ゴールシーク検証

共通 validator の検査範囲は intermediate.jsonl の required_keys、非空・全行不変 original_goal、original_goal_hash == hashlib.sha256(original_goal) である。journal本文・番号・日付は Phase5 の validate-journal-output.py、保存pathとreceiptの対応は親の完了判定が担い、共通validatorがそれらも検査すると扱わない。

python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/validate-inline-goal-seek-anchor.py" \
  "${CLAUDE_PROJECT_DIR:?caller project root is required}/eval-log/ubm-goal-setting/run-ubm-journal/goal-seek-progress.json" \
  "${CLAUDE_PROJECT_DIR}/eval-log/ubm-goal-setting/run-ubm-journal/run-ubm-journal-intermediate.jsonl"

Key Rules

  • 番号は決定論: journal_number はスクリプト値のみ。同日再生成時は番号を維持する。
  • 日付3点一致: ファイル名の日付・見出しの日付・振り返る対象日は常に同じ。
  • 数値は半角: 「25万円」ではなく 250,000。件数・日数・時刻も具体値で書く。
  • 精神論を書かない: 「頑張る」「意識する」は打ち手として不可 → 誰に・何を・いつまで・何件 へ。
  • 要約しすぎない: ユーザーが出した固有名詞・数値・時刻・相手の発言はそのまま残す。 1項目1事実に分解し、冗長な言い回しだけを削る。
  • 3小節を混ぜない: 「現状を確認する」に評価や改善案を書かない。事実/解釈/打ち手を分離する。
  • 継承値は書き換えない: 人生の究極目的・フェーズ別課題チェックシート・原理原則チェックシートは 前回から引き継ぎ、ユーザーが変更を申し出た項目だけ更新する。
  • 原理原則チェックシートは毎回出す: # 原理原則 チェックシート(11 設問)は省略・要約・抜粋をしない。 前回ジャーナルの状態をそのまま写し、対話で変化があったチェック状態だけを更新する。 前回に本ブロックが無ければ references/principle-checklist.md のテンプレートを未チェックで書き出す。 対話(Phase1-3)では読み上げない。11 設問を聞き取りに足すとジャーナル対話が倍の長さになって 毎日の運用が続かない。Phase4 の生成時に器として出すだけで要求は満たされる。

Gotchas

  • 保存先の書込許可: ubm-write-path-guard hook は vault 配下で 02_Configs/Daily/ を許可済み。 02_Configs/ の他のパスへは書けない(fail-closed)。
  • UBM_VAULT_ROOT 未設定: Phase0 が exit 2 になる。vault パスをユーザーに確認してから再実行する。 Phase0 の exit 2 は「引数不正・vault 解決不能・Daily 不在・daily-habits.json 破損」の総称なので、 stderr の 1 行目を必ず読んでから対処すること。
  • 週報が当日を含まない: 週をまたいだ直後は直近週報を参照する(covers_target: false の warning)。 1週間目標の残日数は 0日(期間終了・次週分の週報は未作成) と書く。
  • 1年目標の対応レポートは存在しない: 前回ジャーナルからの継承のみ。満了していたら対話で確認する。
  • フェーズ別課題チェックシートは本文の外: ## 【お金のジャーナル】 の後、レベル1見出しとして置く。
  • チェックシート2種を取り違えない: # フェーズ別 課題チェックシート(0→1 / 1→10 / 10→100)と # 原理原則 チェックシート(11 設問)は別ブロックで、どちらも - [ ] の塊なので見た目では区別できない。 順序は必ずフェーズ別 → 原理原則(ファイル末尾)。原理原則の本文に水平線 --- を入れると、 翌日の継承がそこで打ち切られて以降の設問が静かに消える。

Additional Resources

  • scripts: scripts/build-journal-context.py(番号・目標・週報引き継ぎの決定論解決)/ scripts/validate-journal-output.py(保存前バリデーション)。
  • references: references/resource-map.yaml(どの Phase でどれを開くかの索引。迷ったら最初に見る)/ references/output-format.md(骨格の正本)/ references/interview-map.md(問い→セクション対応)/ references/daily-habits.json(毎日固定の習慣6項目の正本。項目を増減するときはここだけを編集し、 keywords と search_scopes(H01 が検査するセクション)を必ず併記する。search_scopes を 書き忘れた習慣は検査不能として H02 違反になる)/ references/principle-checklist.md(# 原理原則 チェックシート 11 設問の正本テンプレートと出力規則。 設問を増減するときはこのファイルと validate-journal-output.py の PRINCIPLE_SECTIONS を同時に直す)。
  • assets: assets/golden-sample.md(バリデータ PASS の見本 / Few-shot)。
  • agents: journal-composer(plugin 直下 agents/)。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

app-excellence

無料日本語概要

アプリ・Webサービス・業務ツールの制作を、証拠分析→確定的な初稿→要件定義→体験設計→機能分解→実装→品質ゲート→リリース判定の手順ゲート制で進めるスキル。質問で要件を埋めるのではなく、依頼文・既存コード・資料・ログから最有力案を選び、動く成果物を先に出して差分で改善する。ユーザーが「アプリを作りたい」「ツールを作って」「〜を自動化したい」「システム化したい」「要件定義」「仕様を決めたい」「UI/UXを設計して」「体験を良くしたい」「機能を洗い出して」「MVPを決めたい」「品質チェック」「リリースしていいか判断して」などと言ったら必ず使用する。外部データの取込・マスタ・締め処理を伴う業務システムでは references/data-lifecycle.md も併用する。新規・既存を問わずアプリの制作・改善・リニューアルで使用する。

daishiman/harness-dev102026年10月11日 更新

app-orchestrator

無料日本語概要

Webアプリの準備→要件定義→設計→実装→公開→品質ゲートを実行する内部オーケストレーター。Claude Codeの /build-app /improve-app、Codexの $build-app / $improve-app から明示的に委譲された場合、custom agent起動時、または利用者が $app-orchestrator を明示した場合だけ使用する。一般のアプリ相談から暗黙起動しない。

daishiman/harness-dev102026年10月11日 更新

run-extract-blueprint が生成した章別ブループリントの忠実性を独立 context で評価したいとき、事実/推測区別と粒度と被覆を検証し draft_hash に束縛した PASS/FAIL verdict をローカル品質ゲート (C01 の周回内の受入判定・差し戻し) へ渡したいときに使う。

daishiman/harness-dev102026年10月11日 更新

assign-briefing-evaluator

無料日本語概要

確認点で利用者が見る深さを選んだあと打ち合わせ資料を作り手とは別の目で確かめたいとき、正確さ・言葉・見た目・シンプルさの指摘を資料の編集なしで受け取りたいときに使う。

daishiman/harness-dev102026年10月11日 更新

生成した handout 資料が初心者に伝わるか読みやすさレビューを依頼したいとき、独立 context のレビュアーから指摘と根拠つきの verdict を回収したいときに使う。

daishiman/harness-dev102026年10月11日 更新

Notion ページを描画する直前に粒度を検証したいとき、info-collector-agent ページと同等の section 充足度を section_canonical_map 基準で機械検証したいときに使う。

daishiman/harness-dev102026年10月11日 更新

daishiman のスキルをすべて見る

このスキルの問題を報告する