Run your Obsidian weekly review: open tasks, a stale inbox and what you wrote

Every Sunday evening: open tasks across your Obsidian vault by due date, inbox notes older than a week, and a short summary of what you wrote.

Runs
Sundays at 18:00
Posts
Report card

What lands on your board

VaultObsidian weekly review: open tasks and stale notes · Claude Code

4 tasks overdue, 6 inbox notes older than a week

You wrote 11 notes and finished 14 tasks this week, mostly on the pricing change and hiring. 4 tasks are overdue, the oldest from a meeting on Oct 2.

TaskNoteDue
Send revised offer to the design candidateHiring - designerOct 9
Draft FAQ for the pricing change2026-10-02 Pricing syncOct 10
Book accountant for Q3 closeAdminOct 14
Reply to the podcast inviteInbox/Podcast inviteOct 16
Review onboarding mocksProduct - onboardingOct 20
Open tasks37
Done this week14
Stale inbox notes6
Done
An example with made-up numbers. Your agent posts your real ones.

What it does

The weekly review is the habit that keeps an Obsidian vault useful, and the first habit to slip. Tasks hide in meeting notes and daily notes, the inbox folder fills with captures nobody processes, and by month three the vault is a place things go to be forgotten.

This skill reads the vault folder directly, so it needs no plugin and no API. It collects every unchecked task with its due date, lists inbox notes that have sat for more than a week, and sums up what you wrote, so Sunday's review starts from a list instead of a blank page.

How it works

  1. 1Walk the vault

    Read every .md file under the vault folder, skipping .obsidian/, .trash/ and your templates folder. The skill only reads; it never edits or moves a note.

  2. 2

    2Collect open tasks

    Find unchecked task lines (- [ ], at any indent). Take the due date from the Tasks plugin's due marker (a calendar emoji followed by YYYY-MM-DD) or a Dataview field [due:: YYYY-MM-DD]. Sort into overdue, due in the next 7 days, and undated, keeping the note and heading each came from.

  3. 3

    3Find the stale inbox

    List notes in Inbox/ (or the folder you name) whose last modified time is more than 7 days ago, oldest first, with the first line of each.

  4. 4

    4Sum up the week

    Notes modified in the last 7 days, daily notes named YYYY-MM-DD.md from this week, and tasks completed this week (checked - [x] with a done date). Write three lines on the themes, not a list of files.

  5. 5

    5Post the review

    Overdue and due-soon tasks with their notes, the inbox notes to process, the counts, and the three-line summary.

  6. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

What you get

  • Overdue tasks and tasks due in the next 7 days, each with its note.
  • Undated tasks: a count, and the oldest few.
  • Inbox: notes untouched for more than a week.
  • This week: notes written, tasks completed, and three lines on the themes.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/obsidian-weekly-review/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the obsidian-weekly-review skill

    Or paste the prompt instead of installing:

    promptRead my Obsidian vault (the folder I connected), skipping .obsidian, .trash and my templates folder, without changing anything. List unchecked tasks (- [ ]) with their due dates from the Tasks plugin due marker or [due:: YYYY-MM-DD], split into overdue, due in the next 7 days and undated, each with its note. List notes in my Inbox folder not modified for more than 7 days. Count notes modified and tasks completed this week, and write three lines on what I worked on. Start with overdue tasks.
  3. Put it on a schedule

    Sundays at 18:00, from cron on any machine where Claude Code is signed in:

    crontab0 18 * * 0 claude -p "Run the obsidian-weekly-review skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: obsidian-weekly-review
description: "Every Sunday evening: open tasks across your Obsidian vault by due date, inbox notes older than a week, and a short summary of what you wrote. Use when the user asks for this, or when it runs on a schedule."
---

# Obsidian weekly review: open tasks and stale notes

Every Sunday evening: open tasks across your Obsidian vault by due date, inbox notes older than a week, and a short summary of what you wrote.

The weekly review is the habit that keeps an Obsidian vault useful, and the first habit to slip. Tasks hide in meeting notes and daily notes, the inbox folder fills with captures nobody processes, and by month three the vault is a place things go to be forgotten.

This skill reads the vault folder directly, so it needs no plugin and no API. It collects every unchecked task with its due date, lists inbox notes that have sat for more than a week, and sums up what you wrote, so Sunday's review starts from a list instead of a blank page.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- Claude Code, Claude Cowork or another agent with the vault folder on the same machine and read access to it. A vault in Obsidian Sync or iCloud works as long as it is synced locally.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Walk the vault** (Obsidian): Read every `.md` file under the vault folder, skipping `.obsidian/`, `.trash/` and your templates folder. The skill only reads; it never edits or moves a note.
2. **Collect open tasks**: Find unchecked task lines (`- [ ]`, at any indent). Take the due date from the Tasks plugin's due marker (a calendar emoji followed by `YYYY-MM-DD`) or a Dataview field `[due:: YYYY-MM-DD]`. Sort into overdue, due in the next 7 days, and undated, keeping the note and heading each came from.
3. **Find the stale inbox**: List notes in `Inbox/` (or the folder you name) whose last modified time is more than 7 days ago, oldest first, with the first line of each.
4. **Sum up the week**: Notes modified in the last 7 days, daily notes named `YYYY-MM-DD.md` from this week, and tasks completed this week (checked `- [x]` with a done date). Write three lines on the themes, not a list of files.
5. **Post the review**: Overdue and due-soon tasks with their notes, the inbox notes to process, the counts, and the three-line summary.

## Route B: the browser

### What you need

- Signed in to GitHub (or the cloud drive) with read access to the private repository that mirrors the vault, and a sync that ran since you last wrote in Obsidian.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://github.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open the synced copy of the vault**: Obsidian has no web app, so this route reads a copy of the vault that a website shows. The steps assume a private GitHub repository kept current by the Obsidian Git plugin; open the repository from your list. A vault in iCloud Drive (icloud.com), Dropbox or Google Drive works the same way for reading files, with weaker search.
2. **Find open tasks**: Use the repository search box with `"- [ ]"` to list files with unchecked tasks, or open the folders one by one if search returns too much. Read the due marker (a calendar emoji with `YYYY-MM-DD`) or `[due:: YYYY-MM-DD]` on each line and sort into overdue, due in the next 7 days and undated, noting the file and heading.
3. **Check the inbox folder**: Open `Inbox/` (or the folder you use). The file list shows the last commit time per file; notes untouched for more than 7 days are the stale ones. Open each and read the first line.
4. **Sum up the week**: Open **Commits** for the last 7 days to see which notes changed, including daily notes named `YYYY-MM-DD.md`, and search `"- [x]"` with this week's done dates. Write three lines on the themes rather than a list of files.
5. **Write the review**: Overdue and due-soon tasks with their notes first, then the inbox notes to process, then the counts and the three-line summary. Change nothing in the repository.

Note: This route only works when the vault is synced to a place a browser can show. Obsidian Sync has no web view. GitHub code search treats brackets loosely, so expect a few extra matches to skim; commit times show when a note was pushed, not when it was edited in Obsidian. For a vault over a few hundred notes, the local-file route is far faster.

## The report

- **Overdue tasks** and **tasks due in the next 7 days**, each with its note.
- **Undated tasks**: a count, and the oldest few.
- **Inbox**: notes untouched for more than a week.
- **This week**: notes written, tasks completed, and three lines on the themes.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "obsidian-weekly-review/<date of this run, e.g. 2026-10-16>",
  "item_key": "obsidian-weekly-review",
  "project": "Vault",
  "source": "Obsidian weekly review: open tasks and stale notes skill",
  "kind": "update",
  "title": "4 tasks overdue, 6 inbox notes older than a week",
  "summary": "You wrote **11 notes** and finished **14 tasks** this week, mostly on the pricing change and hiring. **4 tasks are overdue**, the oldest from a meeting on Oct 2.",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Task",
          "Note",
          "Due"
        ],
        "align": [
          "left",
          "left",
          "right"
        ],
        "rows": [
          [
            "Send revised offer to the design candidate",
            "Hiring - designer",
            "Oct 9"
          ],
          [
            "Draft FAQ for the pricing change",
            "2026-10-02 Pricing sync",
            "Oct 10"
          ],
          [
            "Book accountant for Q3 close",
            "Admin",
            "Oct 14"
          ],
          [
            "Reply to the podcast invite",
            "Inbox/Podcast invite",
            "Oct 16"
          ],
          [
            "Review onboarding mocks",
            "Product - onboarding",
            "Oct 20"
          ]
        ]
      }
    },
    {
      "type": "Grid",
      "props": {
        "columns": 3
      },
      "children": [
        {
          "type": "Stat",
          "props": {
            "label": "Open tasks",
            "value": 37
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Done this week",
            "value": 14,
            "tone": "ok"
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Stale inbox notes",
            "value": 6,
            "tone": "warn"
          }
        }
      ]
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Sundays at 18:00 (`0 18 * * 0`). From cron, with the agent signed in on that machine:

```bash
0 18 * * 0 claude -p "Run the obsidian-weekly-review skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/obsidian-weekly-review#schedule

Source: https://briefkin.dev/skills/obsidian-weekly-review

What your agent needs

  • Claude Code, Claude Cowork or another agent with the vault folder on the same machine and read access to it. A vault in Obsidian Sync or iCloud works as long as it is synced locally.

Connecting Obsidian

  1. Point the agent at the vault. No server is needed. Start Claude Code in the vault folder, or add it to a session with claude --add-dir ~/Obsidian/Vault; Codex and Cursor work the same way when opened in the folder. Obsidian's CEO, Steph Ango, publishes Agent Skills for Obsidian Markdown, Bases, JSON Canvas and the CLI: /plugin marketplace add kepano/obsidian-skills, then /plugin install obsidian@obsidian-skills.
  2. Obsidian CLI. The Obsidian 1.12 installer and later include an official command-line tool. Turn on Command line interface under Settings > General, then run commands such as obsidian search query="meeting notes", obsidian tasks daily or obsidian tags counts against the running app (docs).
  3. MCP server. Obsidian doesn't publish an official MCP server. Community servers exist, such as mcp-obsidian, which talks to the Local REST API community plugin with an OBSIDIAN_API_KEY; it includes tools that append to, patch and delete notes, so check what a server can do before you connect it.

A report only needs to read the vault: in Claude Code, add deny rules for Edit and Write on the vault path, or point the skill at a synced read-only copy.

Questions

Does it need an Obsidian plugin or the app running?

No. An Obsidian vault is a folder of Markdown files, and the agent reads them like any other files. Task due dates follow the Tasks plugin's format if you use it, but plain - [ ] tasks without dates are collected too.

Can it move inbox notes or tick off tasks?

Not in this skill; it only reads, so nothing changes in your vault while you are not looking. If you want it to file inbox notes, give it that job in a separate session where you approve each move.

Do I need Briefkin to use the Obsidian weekly review: open tasks and stale notes skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Obsidian pages themselves: the agent opens github.com in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Read this report on your board, not in a chat log

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.