
Daily Update
- 2k installs
- 3.1k repo stars
- Updated August 4, 2026
- ar9av/obsidian-wiki
daily-update is an agent skill that >.
About
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 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 Run Mode default triggered by cron or daily update 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 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
- 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
- Follow daily-update SKILL.md steps and documented constraints.
- Follow daily-update SKILL.md steps and documented constraints.
Daily Update by the numbers
- 1,988 all-time installs (skills.sh)
- +28 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #614 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Security screen: HIGH risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
daily-update capabilities & compatibility
- Capabilities
- run the daily wiki maintenance cycle: check all · use this skill when the user says "/daily update · "refresh the wiki index", or when triggered by t · follow daily update skill.md steps and documente
- Use cases
- orchestration
What daily-update says it does
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
npx skills add https://github.com/ar9av/obsidian-wiki --skill daily-updateAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2k |
|---|---|
| repo stars | ★ 3.1k |
| Security audit | 2 / 3 scanners passed |
| Last updated | August 4, 2026 |
| Repository | ar9av/obsidian-wiki ↗ |
When should an agent use daily-update and what problem does it solve?
>
Who is it for?
Developers invoking daily-update as documented in the skill source.
Skip if: Skip when requirements fall outside daily-update documented scope.
When should I use this skill?
>
What you get
Outputs aligned with the daily-update SKILL.md workflow and stated deliverables.
- refreshed index
- hot.md
- freshness report
By the numbers
- Schedules launchd cron maintenance at 9 AM
- Regenerates index and hot.md each maintenance cycle
Files
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:
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":
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|falseStep 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 ingestSetup 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. If not, point the user to it.
Step 2: Install launchd plist
# Replace placeholder in plist
sed "s|OBSIDIAN_WIKI_REPO|$OBSIDIAN_WIKI_REPO|g" \
"$OBSIDIAN_WIKI_REPO/scripts/com.obsidian-wiki.daily-update.plist" \
> "$HOME/Library/LaunchAgents/com.obsidian-wiki.daily-update.plist"
# Load it
launchctl load "$HOME/Library/LaunchAgents/com.obsidian-wiki.daily-update.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:
SHELL_NAME=$(basename "$SHELL") # zsh, bash, fish, etc.
case "$SHELL_NAME" in
zsh) RC_FILE="$HOME/.zshrc" ;;
bash) RC_FILE="$HOME/.bashrc" ;;
*) echo "Shell '$SHELL_NAME' not auto-detected. Add the source line manually to your shell rc file." ; return ;;
esacCheck if wiki-notify.sh is already sourced in that rc file. If not, append:
echo "" >> "$RC_FILE"
echo "# obsidian-wiki terminal notification" >> "$RC_FILE"
echo "source $OBSIDIAN_WIKI_REPO/scripts/wiki-notify.sh" >> "$RC_FILE"For Fish shell, source syntax is different — provide the manual instruction:
# Add to ~/.config/fish/config.fish:
bass source $OBSIDIAN_WIKI_REPO/scripts/wiki-notify.sh
# (requires bass plugin, or copy the logic natively)Step 4: Run the script once
bash "$OBSIDIAN_WIKI_REPO/scripts/daily-update.sh"This initializes $STATE_DIR/.last_update so the terminal notification works immediately.
Step 5: Confirm
Tell the user:
- The cron runs daily at 9 AM (or on next login if missed)
- Terminal notifications appear when the wiki is >20 hours stale
- State is stored in
~/.obsidian-wiki/state/<vault-id>/— supports multiple vaults independently - They can run
/daily-updateanytime to force a sync - Logs go to
/tmp/obsidian-wiki-daily.log
QMD Refresh After Vault Writes
QMD 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.
${QMD_CLI:-qmd} updateIf the output says vectors are needed or embeddings may be stale, run:
${QMD_CLI:-qmd} embedVerify the collection with either:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"or, when a specific page path is known:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5Record one of:
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>
Related skills
FAQ
What is daily-update?
>
When should I use daily-update?
>
Is daily-update safe to install?
Review the Security Audits panel on this page before production use.