Imported from aokazaki-olp/libraries (
.claude/skills/obsidian-config/SKILL.md). Install upstream withnpx skills add aokazaki-olp/libraries --skill obsidian-config. Copyright stays with the author.
obsidian-config スキル
目的
このスキルは、AIがObsidian vault内、またはObsidianで後から開けるMarkdown保存先にファイルを読み書きする前に、保存先・ファイル名・vaultパスを一貫して決定するための基盤スキルである。
Obsidian vault内、またはObsidianで後から開けるMarkdown保存先にファイルを読み書きする前に、必ずこのスキルの手順で保存先を解決する。
このスキルは、ノート本文の整形、ログ本文の生成、Canvas作成、Bases作成などは行わない。
それらは別のObsidian操作スキルに委ねる。
基本方針
- ObsidianのCLIツールには依存しない
- ファイルの直接読み書きで完結させる
- Obsidianプラグインとは疎結合を維持する
- Templater、Dataviewなどのプラグイン構文は使わない
- AIが日時・タイトル・パスなどの値を直接計算して書く
- 既存ファイルを上書きしない
- 必要なフォルダが存在しない場合は作成する
- このスキルは保存先解決のための基盤スキルであり、ノート内容の設計は行わない
プロジェクトルートの定義
このスキルでいうプロジェクトルートは、AIエージェントが作業している現在のワーキングディレクトリを指す。
ユーザーまたは実行環境が明示的にプロジェクトルートを指定している場合は、それを優先する。
設定ファイルの読み込み
Obsidian操作の前に、プロジェクトルートの obsidian.json を読む。
想定する設定ファイルは以下。
{
"vault_path": "obsidian",
"log_folder": "ai/daily",
"log_filename": "YYYY-MM-DD-HHmm",
"log_title_max_chars": 20,
"timezone": "Asia/Tokyo"
}
各フィールドの意味
| フィールド | 意味 | デフォルト |
|---|---|---|
vault_path |
vault のルートパス | obsidian |
log_folder |
vault内、またはvault候補ディレクトリ内のログ保存フォルダ | ai/daily |
log_filename |
ファイル名の日時フォーマット | YYYY-MM-DD-HHmm |
log_title_max_chars |
ファイル名に付けるタイトルの最大文字数 | 20 |
timezone |
日時生成に使うタイムゾーン | Asia/Tokyo |
設定ファイルが使えない場合
obsidian.json が存在しない、または一部フィールドが欠けている場合は、以下のデフォルト値で補完する。
{
"vault_path": "obsidian",
"log_folder": "ai/daily",
"log_filename": "YYYY-MM-DD-HHmm",
"log_title_max_chars": 20,
"timezone": "Asia/Tokyo"
}
扱いは以下。
obsidian.jsonが存在しない場合は、すべてデフォルト値を使うobsidian.jsonが存在するがJSONとしてパースできない場合は、すべてデフォルト値を使って処理を続行するobsidian.jsonの一部フィールドが欠けている場合は、そのフィールドだけデフォルト値で補完する- JSONパース不能だった場合のみ、完了報告時に警告する
設定値の補正ルール
obsidian.json の各フィールドが存在しても、型が想定と異なる場合は、そのフィールドだけデフォルト値を使う。
有効な型は以下。
vault_path: 文字列のみ有効log_folder: 文字列のみ有効log_filename: 文字列のみ有効log_title_max_chars: 正の整数のみ有効timezone: 文字列のみ有効
log_folder は vault 内の相対パスのみ許可する。
以下の log_folder は不正として扱い、デフォルト値 ai/daily を使う。
- 絶対パス
..によって vault 外へ出るパス- 空文字
- ファイル名として不正な文字だけで構成されるパス
timezone が未指定、空文字、不正な値の場合は Asia/Tokyo を使う。
log_filename が空文字、またはファイル名として不正な結果になる場合は、デフォルト値 YYYY-MM-DD-HHmm を使う。
未対応の文字列は変換せず、そのままファイル名に含める。
パス解決
以下の手順で保存先を決定する。
obsidian.jsonのvault_pathが定義されていれば、それを使うvault_pathが未定義の場合は、プロジェクトルートのobsidian/を使うvault_pathを実際のパスに解決する- 保存先フォルダを
<vault_path>/<log_folder>/として決定する - 必要フォルダの存在確認と作成は「フォルダ作成の共通ルール」に従う
パス解決の詳細
vault_path は相対パスまたは絶対パスを許可する。
- 相対パスの場合:プロジェクトルートから解決する
- 絶対パスの場合:そのまま使用する
vault_path の末尾に / または \ がある場合は、パス結合前に取り除いて正規化する。
例:
obsidian/ → obsidian
obsidian\ → obsidian
フォルダ作成の共通ルール
以下のフォルダが存在しない場合は、親フォルダを含めて作成する。
<vault_path>/<vault_path>/<log_folder>/
これは mkdir -p 相当の動作とする。
作成は1回だけ試みる。
権限エラー、パス不正、I/Oエラーなどで作成に失敗した場合は、リトライせず処理を中断し、ユーザーに確認する。
vault状態の判定
以下でvault状態を判定する。
<vault_path>/.obsidian/ が存在する → vault内モード
<vault_path>/.obsidian/ が存在しない → vault未確認モード
vault内モード
<vault_path>/.obsidian/ が存在する場合は、Obsidian vaultとして扱い、<vault_path>/<log_folder>/ にMarkdownファイルを保存する。
vault未確認モード
<vault_path>/.obsidian/ が存在しない場合でも、<vault_path>/<log_folder>/ にMarkdownファイルを保存する。
完了報告時の扱いは「書き込み後の報告ルール」に従う。
ファイル名の生成ルール
log_filename のフォーマットに従い、AIが直接値を計算して書く。
日時は timezone に従って生成する。
timezone が未指定の場合は Asia/Tokyo、JST、UTC+9 として扱う。
対応するフォーマットトークンは以下。
YYYY → 4桁年(例: 2026)
MM → 2桁月(例: 05)
DD → 2桁日(例: 06)
HH → 2桁時(24時間表記、例: 14)
mm → 2桁分(例: 30)
フォーマットトークンは大文字小文字を区別する。
MMは月mmは分
トークンは意味単位で解釈し、MM と mm を混同しない。
対応トークン以外の文字列は変換せず、そのままファイル名に含める。
例:
log_filename: YYYY-MM-DD-HHmm
生成例: 2026-05-06-1430.md
タイトル付きファイル名
タイトルを付ける場合は、以下の形式にする。
{log_filename}-{タイトル}.md
例:
2026-05-06-1430-クロスAIエージェント設計.md
タイトルは log_title_max_chars 文字以内に収める。
文字数は文字単位で数える。
日本語1文字は1文字として扱う。
英数字1文字も1文字として扱う。
絵文字も原則1文字として扱う。
タイトルなしの場合
タイトルが未指定、空文字、またはサニタイズ後に空になった場合は、タイトル部分を付けない。
例:
2026-05-06-1430.md
この場合、末尾にハイフンは付けない。
ファイル名サニタイズ
タイトルをファイル名に含める場合、以下の文字は - に置換する。
/ \ : * ? " < > |
また、以下の処理を行う。
- 改行・タブはスペースに変換する
- 連続するスペースは1つにまとめる
- 前後の空白は削除する
- 日本語・絵文字・英数字は使用可能
タイトルの処理順序
タイトルは以下の順で処理する。
- 改行・タブをスペースに変換する
- ファイル名禁止文字を
-に置換する - 連続するスペースを1つにまとめる
- 前後の空白を削除する
- サニタイズ後のタイトルが空ならタイトルなしとして扱う
- サニタイズ後のタイトルが
log_title_max_chars文字を超える場合は、先頭から指定文字数で切り詰める
切り詰め時に末尾へ … は付けない。
連番サフィックスは、タイトルの切り詰め後に付ける。
ファイル名衝突時のルール
生成予定のファイルが既に存在する場合は、既存ファイルを上書きしない。
同名ファイルが存在する場合は、ファイル名末尾に連番を付ける。
例:
2026-05-06-1430-obsidian設定検討.md
2026-05-06-1430-obsidian設定検討-2.md
2026-05-06-1430-obsidian設定検討-3.md
タイトルなしの場合も同じルールを適用する。
タイトルなしの場合は、{log_filename} の末尾に連番を付ける。
例:
2026-05-06-1430.md
2026-05-06-1430-2.md
2026-05-06-1430-3.md
連番は -2 から始める。
-99 まで試しても空きファイル名が見つからない場合は、処理を中断してユーザーに確認する。
-99 まで衝突する場合は通常運用を超えた異常状態とみなし、ユーザー確認に切り替える。
書き込み後の報告ルール
ファイルを書き込んだ後は、保存したファイルパスを簡潔に報告する。
保存しました: <保存したファイルパス>
処理を中断した場合は、保存完了とは報告せず、失敗理由とユーザーに確認したい内容を報告する。
警告として報告すること
以下に該当する場合のみ、警告として補足する。
- vault未確認モードだった場合
obsidian.jsonがパース不能だったためデフォルト値を使った場合- フォルダ作成に失敗して処理を中断した場合
-99まで試しても空きファイル名が見つからず処理を中断した場合
vault未確認モードだった場合は、以下を伝える。
.obsidian/が見つからなかったこと- Markdownファイルは生成済みであること
- 後でObsidianから
<vault_path>をvaultとして開けば確認できること
情報レベルの処理
以下の情報レベルの処理は通常報告しない。
obsidian.jsonが存在しなかったためデフォルト値を使ったこと- 一部フィールドをデフォルト値で補完したこと
- 型不正や不正な設定値をデフォルト値で補完したこと
- 保存先フォルダを新規作成したこと
- 同名ファイルが存在したため連番を付けたこと
ただし、ユーザーが処理経緯や詳細ログを求めた場合のみ、短く報告する。
Gotchas(既知の注意点)
- ObsidianのCLIツールは使わない
- Templater・Dataview等のプラグイン構文は書かない
- 既存ファイルは上書きしない
.obsidian/が存在しない場合でも、Markdownファイルは<vault_path>/<log_folder>/に生成するobsidian.jsonがパース不能な場合は、デフォルト値で続行し警告するlog_folderはvault内相対パスのみ許可し、vault外へ出るパスは使わない- タイトルが空の場合は、末尾にハイフンを付けず
{log_filename}.mdにする - タイトルはサニタイズ後に文字数制限を適用する
- タイムゾーン未指定時は
Asia/Tokyo、JST、UTC+9 を使う