By duncanfinney
Daily note generator for Obsidian vaults with automatic Claude Code session extraction and nightly synthesis.
A Claude Code plugin that turns your coding sessions into daily notes in an Obsidian vault, automatically.
/daily-note skill — generates today's daily note at $OBSIDIAN_VAULT/daily-notes/YYYY-MM-DD.md, carrying forward unchecked wrap-up tasks from the previous day and folding in session extractions from today.~/.claude/obsidian-staging/YYYY-MM-DD/.claude -p agent reads all staged extractions, writes them into the vault (daily notes, project notes, research notes), and (if the vault is a git repo) commits + pushes.jq, python3, bash, and crontab on your PATH# 1. Add the plugin
/plugin marketplace add duncanfinney/duncans-daily-notes
/plugin install duncans-daily-notes@duncanfinney
# 2. Point it at your vault
export OBSIDIAN_VAULT="$HOME/path/to/your/vault"
echo 'export OBSIDIAN_VAULT="$HOME/path/to/your/vault"' >> ~/.zshrc
# 3. Install the cron entry for nightly synthesis
# (the Stop hook installs automatically with the plugin)
cd "$(claude-code-plugin-path duncans-daily-notes)" 2>/dev/null \
|| cd ~/.claude/plugins/cache/*/duncans-daily-notes/*/
./install.sh
/daily-note
Run once at the start of your day. The skill will:
## Wrap-up## Work Log, ## Notes, ## Wrap-upYou can edit the note during the day. New sessions that end after you run /daily-note will stage more extractions; running /daily-note again folds those in without clobbering your edits.
duncans-daily-notes/
├── .claude-plugin/plugin.json
├── hooks/hooks.json # Stop → obsidian-extract.sh
├── skills/daily-note/SKILL.md
├── scripts/
│ ├── obsidian-extract.sh # per-session extraction (hook)
│ ├── obsidian-synthesize.sh # nightly synthesis (cron)
│ └── obsidian-synthesize-prompt.txt # system prompt for synthesis
└── install.sh # sets up the cron entry
| Env var | Required | Description |
|---|---|---|
OBSIDIAN_VAULT | yes | Absolute path to your Obsidian vault directory |
Make sure OBSIDIAN_VAULT is exported in your shell rc (.zshrc/.bashrc) so the Stop hook inherits it when Claude Code launches.
You can extract an older session manually:
./scripts/obsidian-extract.sh <SESSION_ID> [YYYY-MM-DD]
And synthesize any date:
./scripts/obsidian-synthesize.sh 2025-12-31
With no args, obsidian-synthesize.sh scans every dated staging dir and synthesizes them all — if a nightly run is missed, the next one backfills automatically.
/plugin uninstall duncans-daily-notes
crontab -l | grep -v obsidian-synthesize.sh | crontab -
MIT — see LICENSE.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub duncanfinney/duncans-daily-notes --plugin duncans-daily-notesCore skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Superpowers Plus core skills library for Claude Code: planning, execution routing, TDD, debugging, and collaboration workflows
Claude harness - A harness for solo developers (Vibecoders) to handle full-cycle contract development.
Intelligent prompt optimization: injects the right context at the right moment so Claude lands a better first output. Clarifies vague prompts with research-based questions, plus targeted nudges for approach selection, plan readability, workflow routing, background execution, subagent routing, output readability, user-decision questions, and plan-mode assessment
v9.44.1 — Patch release for Gemini environment/version detection and qwen auth gating. Run /octo:setup.