Agent skill

Daily Update

by Ar9av in Ar9av/obsidian-wiki

Run or configure the daily wiki maintenance cycle: check source freshness, refresh the index and hot.md, and manage its scheduled 9 AM launchd/systemd/cron reminder.

MITAuto-check: notesProductivity & Automation

Install Daily Update

skills CLI
$ npx skills add Ar9av/obsidian-wiki --skill daily-update -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Ar9av/obsidian-wiki daily-update --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.skills/daily-update .claude/skills/daily-update && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
daily-update
GitHub stars
3.5k
Token cost
~2.4k tokens
SKILL.md length
838 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Run or configure the daily wiki maintenance cycle: check source freshness, refresh the index and hot.md, and manage its scheduled 9 AM launchd/systemd/cron reminder.

  • Works in 3 steps: Resolve config — follow the Config… → Derive vault-scoped state dir — all… → Read $OBSIDIAN_VAULT_PATH/.manifest.json.
  • Morning wiki refresh
  • SKILL.md covers Before You Start, Modes and QMD Refresh After Vault Writes
  • Calls bash

What it does

Daily Update is an agent skill from Ar9av/obsidian-wiki. Run or configure the daily wiki maintenance cycle: check source freshness, refresh the index and hot.md, and manage its scheduled 9 AM launchd/systemd/cron reminder. Use for daily or morning wiki refresh or scheduler setup and verification.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Productivity & Automation, covering Meeting notes and agendas, Scheduled and recurring tasks and LLM wikis. It works with Linux and Obsidian. The repository describes itself as: Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents. The licence is MIT.

When your agent uses it

  • Morning wiki refresh
  • Scheduler setup and verification

Example prompts

  • “/daily-update”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Resolve config — follow the Config Resolution Protocol in llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → global config…
  2. Derive vault-scoped state dir — all runtime state is scoped to the resolved vault, not global
  3. Read $OBSIDIAN_VAULT_PATH/.manifest.json.

What it can do on your machine

Read from SKILL.md and the folder at commit 4a0630b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Daily Update loads about 2.4k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 838 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~63
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:13
    line `@name` override → walk up CWD for `.env` → global config → prompt setup). This gives `OBSIDIAN_VAULT_PATH` and `OB
  • NoteRuns commands with sudoSKILL.md:163
    ged in unless lingering is on — suggest `sudo loginctl enable-linger "$USER"`.
  • NoteMentions a .env fileSKILL.md:215
    et `LINT_SCHEDULE=daily` or `manual` in `.env` to change it

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Ar9av/obsidian-wiki at commit 4a0630b, republished under its MIT licence (© Ar9av). 838 words, ~2,411 tokens.

Download SKILL.mdSave it as .claude/skills/daily-update/SKILL.md (or your agent's skills folder).
name
daily-update
description
Run or configure the daily wiki maintenance cycle: check source freshness, refresh the index and hot.md, and manage its scheduled 9 AM launchd/systemd/cron reminder. Use for daily or morning wiki refresh or scheduler setup and verification.

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 (inline @name override → walk up CWD for .env → global 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="$(obsidian_wiki_config_dir)/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

bash
obsidian-wiki memory index --vault "$OBSIDIAN_VAULT_PATH"

This reconciles index.md against the pages on disk under the memory lock — missing entries added, entries for deleted pages removed, the owner's own sections left untouched. Note added/removed from the output for the log line in Step 6. Do not enumerate pages with find and edit the index by hand.

Step 3: hot.md update

bash
obsidian-wiki memory hot --vault "$OBSIDIAN_VAULT_PATH"

Recent Activity, Active Threads, and Flagged Contradictions are regenerated from the log, the todo index, and page frontmatter; ## Key Takeaways carries across unchanged. If the takeaways are older than ~48h and the vault has changed materially since, refresh them: read the 10 most recently updated pages and pass a fresh ~500-word snapshot with --takeaways - on stdin. Otherwise leave them — a rebuild without new takeaways is cheap and correct.

If either command reports the vault is unmigrated, stop and tell the user to run obsidian-wiki memory migrate (preview) then --apply; do not fall back to hand-editing.

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 4a: Scheduled health check (wiki-lint)

LINT_SCHEDULE (default weekly) controls how often this cycle also runs wiki-lint:

  • manual — never auto-run; skip this step entirely.
  • daily — run wiki-lint every cycle.
  • weekly — run wiki-lint only if $STATE_DIR/.last_lint is missing or older than 7 days.
bash
LINT_SCHEDULE="${LINT_SCHEDULE:-weekly}"
NOW=$(date +%s)
LAST_LINT=$(cat "$STATE_DIR/.last_lint" 2>/dev/null || echo 0)

If the schedule says to run, invoke the wiki-lint skill, then record the run:

bash
date +%s > "$STATE_DIR/.last_lint"

Fold its summary (broken links, orphans, stale pages found) into Step 7's report as a Health check: line; omit the line entirely on a cycle where lint didn't run.

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:

obsidian-wiki memory log DAILY-UPDATE fresh=<N> stale=<N> missing=<N> index_added=<N> hot_refreshed=<true|false> lint=<ran|skipped>

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
- Health check: N broken links, N orphans, N stale pages (omit this line if lint didn't run this cycle)

Stale sources (run to sync):
  /wiki-history-ingest claude   — N sessions since last ingest
  /wiki-history-ingest codex    — N sessions since last ingest
Show full SKILL.md (429 more words)Show less
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. If not, point the user to it.

Step 2: Install the scheduler — pick by platform (uname -s).

macOS (Darwin) — launchd:

bash
# 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"

Linux with systemd (systemctl --user works) — a user timer:

bash
UNIT_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user"
mkdir -p "$UNIT_DIR"
sed "s|OBSIDIAN_WIKI_REPO|$OBSIDIAN_WIKI_REPO|g" \
  "$OBSIDIAN_WIKI_REPO/scripts/obsidian-wiki-daily-update.service" \
  > "$UNIT_DIR/obsidian-wiki-daily-update.service"
cp "$OBSIDIAN_WIKI_REPO/scripts/obsidian-wiki-daily-update.timer" "$UNIT_DIR/"
systemctl --user daemon-reload
systemctl --user enable --now obsidian-wiki-daily-update.timer

On a headless server, user timers only run while the user is logged in unless lingering is on — suggest sudo loginctl enable-linger "$USER".

Anything else (no systemd, containers, WSL without systemd) — crontab. Append this line via crontab -e, skipping it if an obsidian-wiki daily-update line is already there:

cron
0 9 * * * /bin/bash "$OBSIDIAN_WIKI_REPO/scripts/daily-update.sh" >> /tmp/obsidian-wiki-daily.log 2>&1

Write the literal repo path in place of $OBSIDIAN_WIKI_REPO — cron does not load your shell env.

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:

bash
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 ;;
esac

Check if wiki-notify.sh is already sourced in that rc file. If not, append:

bash
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:

fish
# 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
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 scheduler runs daily at 9 AM (launchd and the systemd timer catch up on the next login/boot if missed; plain cron does not)
  • wiki-lint health checks run on the LINT_SCHEDULE cadence (default weekly) as part of that cycle — set LINT_SCHEDULE=daily or manual in .env to change it
  • Terminal notifications appear when the wiki is >20 hours stale
  • State is stored in <global config dir>/state/<vault-id>/ (XDG-style ~/.config/obsidian-wiki by default, or the legacy ~/.obsidian-wiki if that already exists) — supports multiple vaults independently
  • They can run /daily-update anytime to force a sync
  • Logs go to /tmp/obsidian-wiki-daily.log (launchd, cron) or journalctl --user -u obsidian-wiki-daily-update (systemd)

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.

bash
${QMD_CLI:-qmd} update

If the output says vectors are needed or embeddings may be stale, run:

bash
${QMD_CLI:-qmd} embed

Verify the collection with either:

bash
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"

or, when a specific page path is known:

bash
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5

Record one of:

  • QMD refreshed: update + embed + verified
  • QMD refreshed: update only + verified
  • QMD skipped: QMD_WIKI_COLLECTION unset
  • QMD skipped: qmd CLI unavailable
  • QMD failed: <short error summary>

© Ar9av, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .skills/daily-update of Ar9av/obsidian-wiki.

Open the folder on GitHubat commit 4a0630b

Compare with similar skills

Daily Update next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Daily Update compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Daily Update this skillAr9av/obsidian-wiki3.5k—~2.4kAutomated safety check: NotesMIT
Shadowvpn Deploy Clientmadeye/shadowvpn101—~2.4kAutomated safety check: NotesMIT
Nextclaw AutostartPeiiii/nextclaw260—~943Automated safety check: NotesMIT
Daily Journalravila4/claude-adhd-skills157—~2.5kAutomated safety check: PassMIT
GranolaArtemXTech/claude-code-obsidian-starter224—~905Automated safety check: PassNone
Paperclip Distillpaperclipai/paperclip99k—~2.8kAutomated safety check: PassMIT

Similar skills

  • Shadowvpn Deploy Client

    madeye/shadowvpn

    Deploy, install, and run the ShadowVPN client in a target environment — Linux (systemd), macOS (launchd), or Windows (Wintun, foreground launcher or scheduled-task service).

    101 GitHub stars~2.4k tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check: notes
  • Nextclaw Autostart

    Peiiii/nextclaw

    A skill your agent uses when the user asks about NextClaw autostart, auto-start on login or reboot, daemon/service registration, LaunchAgent, systemd, Windows Scheduled Task, service autostart…

    260 GitHub stars~943 tokensUpdated today
    Productivity & AutomationAuto-check: notes
  • Daily Journal

    ravila4/claude-adhd-skills

    Draft, organize, or update development journal entries. An agent skill from ravila4/claude-adhd-skills.

    157 GitHub stars~2.5k tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Granola

    ArtemXTech/claude-code-obsidian-starter

    Query and sync Granola meetings to Obsidian vault. An agent skill from ArtemXTech/claude-code-obsidian-starter.

    224 GitHub stars~905 tokensUpdated 3 days ago
    Productivity & AutomationAuto-check passed
  • Paperclip Distill

    paperclipai/paperclip

    A skill your agent uses when an operation issue is a Paperclip cursor-window, distill, or backfill.

    99k GitHub stars~2.8k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Summarize Meetings

    harperreed/dotfiles

    A skill your agent uses when processing, summarizing, or extracting insights from meeting notes in the Obsidian vault.

    334 GitHub stars~3.3k tokensUpdated 6 days ago
    Productivity & AutomationAuto-check passed

More from Ar9av/obsidian-wiki

All 39 skills in this repo
  • Codex History Ingest

    Ar9av/obsidian-wiki

    Ingest Codex CLI conversation/session history into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Copilot History Ingest

    Ar9av/obsidian-wiki

    Ingest GitHub Copilot CLI/session history into Obsidian as distilled knowledge.

    3.5k GitHub stars~4.4k tokensUpdated today
    Auto-check: notes
  • Hermes History Ingest

    Ar9av/obsidian-wiki

    Ingest Hermes agent history into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Obsidian Layout Adjustment

    Ar9av/obsidian-wiki

    Adjust the user's Obsidian visual layout with CSS snippets. An agent skill from Ar9av/obsidian-wiki.

    3.5k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Openclaw History Ingest

    Ar9av/obsidian-wiki

    Ingest OpenClaw session/history data into Obsidian as distilled knowledge.

    3.5k GitHub stars~2.5k tokensUpdated today
    Auto-check: notes
  • Wiki Capture

    Ar9av/obsidian-wiki

    Turn the current conversation or finding into a structured permanent wiki note.

    3.5k GitHub stars~4.3k tokensUpdated today
    Auto-check: notes

Works with

Questions about Daily Update

What does Daily Update do?

Run or configure the daily wiki maintenance cycle: check source freshness, refresh the index and hot.md, and manage its scheduled 9 AM launchd/systemd/cron reminder. Daily Update is an agent skill from Ar9av/obsidian-wiki.md, and manage its scheduled 9 AM launchd/systemd/cron reminder.

When should I use Daily Update?

Daily Update fits situations like: morning wiki refresh; scheduler setup and verification.

How do I install Daily Update in Claude Code?

Run `npx skills add Ar9av/obsidian-wiki --skill daily-update -a claude-code`. Or copy the skill folder (.skills/daily-update in Ar9av/obsidian-wiki) into .claude/skills/daily-update in your project. Claude Code loads it when a task matches its description.

How do I install Daily Update in Codex?

Run `npx skills add Ar9av/obsidian-wiki --skill daily-update -a codex`. Or copy the skill folder (.skills/daily-update in Ar9av/obsidian-wiki) into .agents/skills/daily-update in your project. Codex loads it when a task matches its description.

Can I use Daily Update in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ar9av/obsidian-wiki --skill daily-update -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/daily-update, .gemini/skills/daily-update, .github/skills/daily-update and .opencode/skills/daily-update in your project.

What does Daily Update need to run?

Going by SKILL.md and its folder, Daily Update needs the command-line tools its instructions call (bash).

Does Daily Update access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Daily Update safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file; runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Daily Update use?

Daily Update is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Daily Update use?

About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Daily Update?

Skills that share tags, products or a category with Daily Update: Shadowvpn Deploy Client (madeye/shadowvpn, 101 stars), Nextclaw Autostart (Peiiii/nextclaw, 260 stars), Daily Journal (ravila4/claude-adhd-skills, 157 stars) and Granola (ArtemXTech/claude-code-obsidian-starter, 224 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Daily Update?

Ar9av (a GitHub user) maintains it in Ar9av/obsidian-wiki, which has 3,538 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 8, 2026.

Source: Ar9av/obsidian-wiki on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.