Daily UpdateCAUTION
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
Overview
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
50403ab5d351OBSERVED · 2026-10-25Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| codex | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
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
```
### 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 "Trust audit
CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (5)
.agents/skills/claude-history-ingest
.agents/skills/code-understand
.agents/skills/codex-history-ingest
.agents/skills/copilot-history-ingest
.agents/skills/cross-linker
Gates applied: no_behavioural_pass.
50403ab5d351full audit observations/trust-audit/skill/ar9av__daily-update.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-25 | 50403ab5d351 | CAUTION | B | 89 | first audit |
Questions
What does the daily-update — ar9av/obsidian-wiki skill do?
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
Is daily-update — ar9av/obsidian-wiki safe to install?
With care. The audit graded it B (89/100) and found 5 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can daily-update — ar9av/obsidian-wiki access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does daily-update — ar9av/obsidian-wiki work with?
Its documentation mentions codex. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (50403ab5d351), read on 2026-10-25. The repository is watched, and a new audit runs when it changes — this is the first audit.
Add this badge to your README
Shows this page's audit result and links back to it. It updates when the audit does.
[](https://modelsatlas.com/skills/ar9av/daily-update/)
Not your listing, or something out of date? Claim or update your listing.