npx skills add ...
npx skills add ar9av/obsidian-wiki --skill daily-update
npx skills add ar9av/obsidian-wiki --skill daily-update
Run the daily wiki maintenance cycle: check all source freshness, update the index, and regenerate hot.md. Use this skill when the user says "/daily-update", "run the daily update", "update everything", "morning sync", "refresh the wiki index", or when triggered by the launchd cron at 9 AM. Also use to set up or verify the cron + terminal notification infrastructure for the first time ("set up the daily cron", "install the terminal notification", "how do I get the morning reminder?").
You run a lightweight maintenance pass over the wiki: check source freshness, refresh the index, update hot.md, and write the state file that the terminal notification reads.
llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → ~/.obsidian-wiki/config → prompt setup). This gives OBSIDIAN_VAULT_PATH and OBSIDIAN_WIKI_REPO.$OBSIDIAN_VAULT_PATH/.manifest.json./daily-update)Execute the maintenance cycle:
Step 1: Source freshness check
Compare each source in .manifest.json against its file's modification time. Classify as:
mtime ≤ ingested_atmtime > ingested_at (new content exists, not yet ingested)Step 2: Index refresh
Read $OBSIDIAN_VAULT_PATH/index.md. If any pages in the vault are missing from the index (or vice versa), update the index. Use find $OBSIDIAN_VAULT_PATH -name "*.md" -not -path "*/_*" to enumerate vault pages, then reconcile against the index.
Step 3: hot.md update
Read hot.md. If it's >48h old based on its updated: frontmatter, regenerate it: read the 10 most recently modified wiki pages and write a fresh ~500-word semantic snapshot of what the wiki covers. This keeps the next session's context warm without a full vault crawl.
Step 4: Write state
Write to the vault-scoped $STATE_DIR derived in "Before You Start":
Step 5: Spawn impl-validator
After the cycle, spawn impl-validator as a subagent:
Apply any FAILs before logging.
Step 6: Log
Append to $OBSIDIAN_VAULT_PATH/log.md:
Step 7: Report to user
Walk the user through first-time setup:
Step 1: Verify script exists
Check that $OBSIDIAN_WIKI_REPO/scripts/daily-update.sh exists and is executable. If not, point the user to it.
Step 2: Install launchd plist
Step 3: Install terminal notification (optional)
Ask the user: "Do you want a terminal reminder when your wiki is stale? (y/n)" — skip this step if they say no, or if the environment is headless/VPS.
If yes, detect the user's shell and target the right rc file:
Check if wiki-notify.sh is already sourced in that rc file. If not, append:
For Fish shell, source syntax is different — provide the manual instruction:
Step 4: Run the script once
This initializes $STATE_DIR/.last_update so the terminal notification works immediately.
Step 5: Confirm
Tell the user:
~/.obsidian-wiki/state/<vault-id>/ — supports multiple vaults independently/daily-update anytime to force a sync/tmp/obsidian-wiki-daily.logQMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.
Use $QMD_CLI if set; otherwise use qmd.
If the output says vectors are needed or embeddings may be stale, run:
Verify the collection with either:
or, when a specific page path is known:
Record one of:
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>