
Daily Update
Automate the Obsidian wiki morning cycle—source freshness, index refresh, hot.md, and vault-scoped state—for a personal knowledge base you ship alongside your product.
Install
npx skills add https://github.com/ar9av/obsidian-wiki --skill daily-updateWhat is this skill?
- Run mode: source freshness check, index update, hot.md regeneration, and state file for terminal notifications
- Triggers on /daily-update, morning sync phrases, or 9 AM launchd cron
- First-time setup mode for cron plus terminal notification infrastructure
- Vault-scoped state under ~/.obsidian-wiki/state/<vault-id> after Config Resolution Protocol
Adoption & trust: 1.3k installs on skills.sh; 1.8k GitHub stars; 2/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Daily wiki maintenance is Operate work: it keeps documentation and capture current without rebuilding the vault from scratch. Iterate is the canonical subphase for recurring sync jobs, cron-driven passes, and small systemic fixes to how you run the vault.
Common Questions / FAQ
Is Daily Update safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Daily Update
# Daily Update — Wiki Maintenance Cycle 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. ## Before You Start 1. **Resolve config** — follow the Config Resolution Protocol in `llm-wiki/SKILL.md` (walk up CWD for `.env` → `~/.obsidian-wiki/config` → prompt setup). This gives `OBSIDIAN_VAULT_PATH` and `OBSIDIAN_WIKI_REPO`. 2. **Derive vault-scoped state dir** — all runtime state is scoped to the resolved vault, not global: ```bash VAULT_ID=$(echo "$OBSIDIAN_VAULT_PATH" | md5sum 2>/dev/null | cut -c1-8 || md5 -q - <<< "$OBSIDIAN_VAULT_PATH" | cut -c1-8) STATE_DIR="$HOME/.obsidian-wiki/state/$VAULT_ID" mkdir -p "$STATE_DIR" ``` 3. Read `$OBSIDIAN_VAULT_PATH/.manifest.json`. ## Modes ### Run Mode (default — triggered by cron or `/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: - **Fresh** — `mtime ≤ ingested_at` - **Stale** — `mtime > ingested_at` (new content exists, not yet ingested) - **Missing** — source file no longer exists **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": ```bash date +%s > "$STATE_DIR/.last_update" echo "<stale_count>" > "$STATE_DIR/.pending_delta" echo "$OBSIDIAN_VAULT_PATH" > "$STATE_DIR/.vault_path" ``` **Step 5: Spawn impl-validator** After the cycle, spawn `impl-validator` as a subagent: ``` impl-validator check: goal: "Daily wiki maintenance — index reconciled, hot.md refreshed, state file written" artifacts: - $OBSIDIAN_VAULT_PATH/index.md - $OBSIDIAN_VAULT_PATH/hot.md - $STATE_DIR/.last_update - $STATE_DIR/.pending_delta checks: - Does .last_update contain a recent Unix timestamp (within the last 60 seconds)? - Does .pending_delta contain a non-negative integer? - Does hot.md have an updated: frontmatter field set to today? - Does index.md list at least as many pages as exist in the vault? ``` Apply any FAILs before logging. **Step 6: Log** Append to `$OBSIDIAN_VAULT_PATH/log.md`: ``` - [TIMESTAMP] DAILY-UPDATE fresh=N stale=N missing=N index_added=N hot_refreshed=true|false ``` **Step 7: Report to user** ``` ## Daily Wiki Update - Sources: N fresh · N stale · N missing - Index: N pages (N added, N removed) - hot.md: refreshed / up to date Stale sources (run to sync): /wiki-history-ingest claude — N sessions since last ingest /wiki-history-ingest codex — N sessions since last ingest ``` ### Setup Mode (triggered by "set up the daily cron" or "install terminal notification") 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. I