agentleFS
Sign inSign up

morning-ritual

julweber/ai_agent_skills/skills/morning-ritual/SKILL.md

Use when starting your workday with a structured Obsidian task briefing - automatically loads obsidian-cli and obsidian-markdown skills to parse vault tasks, surface urgent/due items, and identify 1-5 MIT focus tasks. Triggers on "Good morning", "Morning briefing", "Daily Kickoff", "What should I work on today

Skill2 starsChanged 7 months ago
  • Installs packages

What's in it

  1. Morning Ritual Workflow
  2. When to Use
  3. Vault Configuration
  4. Directory Structure
  5. The Morning Ritual Workflow
  6. Step 0 - Load Obsidian CLI Skills first
  7. Step 1 - Get current date
  8. Step 2 — Query Calendar Events
  9. Step 3 — Collect Open Tasks
  10. Step 4 — Check for Due Today / Overdue
  11. Step 5 — Pick the MIT (Most Important Tasks)
  12. Step 6 — Quick Stats
  13. Step 7 — Optional: Save Daily Briefing
  14. Output Format
  15. Interaction After Briefing
  16. Marking Tasks Done
  17. Adding a New Task
  18. Evening Review (optional extension)
  19. Deeper Analysis: Calling gtd-assistant
  20. Trigger Phrases
  21. Implementation
  22. Troubleshooting
  23. Obsidian CLI Not Available
  24. External Calendar Events Not Showing
  25. Script Dependencies
  26. Performance Notes
---
name: morning-ritual
description: Use when starting your workday with a structured Obsidian task briefing - automatically loads obsidian-cli and obsidian-markdown skills to parse vault tasks, surface urgent/due items, and identify 1-5 MIT focus tasks. Triggers on "Good morning", "Morning briefing", "Daily Kickoff", "What should I work on today"
---

# Morning Ritual Workflow

A daily work kickoff ritual that surfaces what matters most and helps the user start with intention and clarity — not chaos.

## When to Use

Activate when the user says things like:
- "Good morning" / "Morning briefing"
- "What should I work on today?"
- "Start my day" / "Daily kickoff"
- "What's on my plate?"
- "Morning ritual"

## Vault Configuration

| Setting          | Value              |
| ------------------| --------------------|
| **Vault path**   | `$HOME/main_vault` |
| **Obsidian CLI** | `obsidian`         |

## Directory Structure

The vault should have:
- **`00-Tasks/*.md`** — categorized task definitions
- **`01-Calendars/*.md`** — date-tagged calendar event files

## The Morning Ritual Workflow
Run in this order. Be fast — use parallel reads where possible.

### Step 0 - Load Obsidian CLI Skills first
- If you have the `obsidian-cli` agent skill: load the `obsidian-cli` skill
- If you have the `obsidian-master` agent skill: load the `obsidian-master` skill

**Note:** This skill no longer requires the obsidian skill to be loaded — it includes a file-based fallback using `grep`/`find` when the obsidian CLI is unavailable.

### Step 1 - Get current date

```bash
date +%Y-%m-%d
```

### Step 2 — Query Calendar Events

Use the consolidated script to query both local vault calendars and external ICS/CalDAV feeds in one pass:

```bash
# Run the consolidated calendar query script
python3 "$HOME/main_vault/.pi/skills/morning-ritual/scripts/query_calendars.py" --days 6
```

**Script features:**
- Queries local vault calendars via obsidian CLI **or** file-based grep fallback
- Fetches external ICS URLs from Full Calendar plugin settings
- Parses and normalizes all events to Europe/Berlin timezone
- Separates into "today" vs "upcoming" sections
- Returns structured output ready for embedding

**Modes:**
```bash
# Auto-detect (try obsidian, fallback to file-based)
python3 query_calendars.py --mode auto

# Local-only (no obsidian required)
python3 query_calendars.py --mode local

# External-only (requires obsidian for plugin access)
python3 query_calendars.py --mode external
```

### Step 3 — Collect Open Tasks

```bash
obsidian tasks todo verbose=false format=json
```

Parse the JSON output. Filter only incomplete tasks (lines starting with `- [ ]`).

Group them:
- **🔥 Urgent / High Priority**: tasks with `⏫` or `🔺` or `#urgent` or overdue dates
- **💼 Work**: tasks with `#work`, `#task/work`, or from `10 - Tasks - Beruflich.md`
- **🎵 Music & Creative**: tasks with `#music`, from `07 - Tasks - Music.md`
- **🏠 Personal**: tasks with `#privat`, `#haus`, `#task/haus`, from `06 - Tasks - Privat.md`
- **📥 Inbox**: everything else from `01 - Tasks - Inbox.md` not yet categorized

### Step 4 — Check for Due Today / Overdue

Scan for tasks containing today's date (format: `📅 YYYY-MM-DD`) or past dates that haven't been completed.

Flag these as **⚠️ Due Today** or **🚨 Overdue**.

### Step 5 — Pick the MIT (Most Important Tasks)

Based on the collected tasks, suggest **1–5 MIT (Most Important Tasks)** for today. Use this logic:
1. Overdue items first
2. Items marked `⏫` (urgent) or with today's date
3. Work tasks over personal tasks (unless personal items are urgent)
4. Prefer tasks that are actionable (not vague ideas)

Present these as the **"Today's Focus"** block — the 1–5 things the user should commit to finishing today.

### Step 6 — Quick Stats

Show a brief summary:
- Total open tasks (across all files)
- How many are work vs personal vs creative
- Anything overdue

### Step 7 — Optional: Save Daily Briefing

If the user asks to save/log the briefing, create a note:

```bash
obsidian create name="Daily Briefing YYYY-MM-DD" content="[full briefing content]"
```

Use today's date. Store in the vault root or wherever the user prefers.

## Output Format

```
## ☀️ Morning Briefing — [Day, Date]

### 📅 Today's Events ([n events])
- [⏰ HH:MM – HH:MM] **Event Title** — *location/notes*
- [all-day] **Event Title** — *location/notes*

---

### 🎯 Today's Focus (MIT)
1. [Most important task]
2. [Second task]
3. [Third task — optional]

---

### 🚨 Overdue / Due Today ([n items])
- [ ] task — *[file/domain]*
- ...

---

### 💼 Work ([n open])
Top items:
- [ ] task
- ...

### 🎵 Music & Creative ([n open])
Top items:
- [ ] task
- ...

### 🏠 House & Personal ([n open])
Top items:
- [ ] task
- ...

### 📥 Inbox ([n open])
Top items:
- [ ] task
- ...

---

### 🔜 Upcoming Events (Next 5 Days)
**[Day, Date]**
- [⏰ HH:MM – HH:MM] **Event Title** — *location/notes*

**[Day, Date]**
- [⏰ HH:MM – HH:MM] **Event Title** — *location/notes* (Google)

---

### 📊 Stats
- Total open: [n] tasks
- Work: [n] | Music: [n] | Personal: [n] | Inbox: [n]
- Overdue: [n]
- Events this week: [n] (local: [n], external: [n])

---

*Ready to go! Type "done [task]" to mark something complete, or "focus [area]" to dive into a domain.*
```

## Interaction After Briefing

After presenting the briefing, offer these options:
- **"done [task name]"** — mark a task complete via Obsidian CLI
- **"focus work"** / **"focus music"** / **"focus inbox"** — show full list for a domain
- **"add task [text]"** — add a new task to the inbox
- **"save briefing"** — save the briefing as a note
- **"Evening review"** — close the day (summarize what got done, what's still open)
- **"Deeper analysis?"** or **"Full review"** — call `gtd-assistant` for comprehensive view including dangling thoughts and stub notes

## Marking Tasks Done

```bash
# Mark a specific task done in a file
obsidian tasks:update file="00-Tasks/01 - Tasks - Inbox.md" line=[LINE_NUMBER] status=x
```

Always confirm before marking done.

## Adding a New Task

```bash
obsidian append file="00-Tasks/01 - Tasks - Inbox.md" content="\n- [ ] [new task text]"
```

## Evening Review (optional extension)

If the user asks for an evening review:
1. Re-run task collection
2. Compare with morning MIT — were they completed?
3. Present "Wins today" (tasks completed since morning)
4. Show what rolled over
5. Ask: "What's the one thing for tomorrow?"
6. Optionally save an evening note

## Deeper Analysis: Calling `gtd-assistant`

When a user needs more than just daily tasks — perhaps they feel overwhelmed, need to understand their full backlog, or want pattern recognition across their vault:

### Trigger Phrases
- "What's really blocking me?"
- "I need a full review of my vault"
- "Help me understand what's unfinished"
- "Open loops sweep" (or similar GTD terminology)
- "Deeper analysis" after morning briefing
- "Weekly/Monthly review"

### Implementation
When these triggers are detected, switch to the `gtd-assistant` workflow:

> "I'll now run a full GTD sweep using the gtd-assistant skill."

Follow Phase 1 → Phase 2 → Phase 3 as defined in `gtd-assistant`. The current conversation context carries over — no data needs to be passed explicitly.

The `gtd-assistant` will return a more detailed report including:
- All open tasks by domain
- Dangling thoughts from notes
- Stub notes requiring attention
- GTD analysis insights on consolidation opportunities
- Pattern recognition across the vault

## Troubleshooting

### Obsidian CLI Not Available
If you see `[⚠️ Obsidian CLI not found — using file-based fallback]`:
- The script will automatically use `grep`/`find` to scan markdown files
- Local calendar files must contain date strings like `2026-05-16`
- External calendar queries require obsidian CLI for Full Calendar plugin access

### External Calendar Events Not Showing
- Ensure Obsidian is running with the Full Calendar plugin loaded
- Check that ICS sources are configured in plugin settings
- Verify network connectivity to calendar URLs

### Script Dependencies
- `icalendar` package: `pip install icalendar`
- Python 3.9+ required for `zoneinfo` module

## Performance Notes

- Open task count is typically > 300 — always parse with regex `^- \[ \]` for open items
- Use today's date (`date +%Y-%m-%d`) to detect overdue tasks
- Keep the briefing scannable — no walls of text, max 5 items per group shown
- Suggest MIT based on signal (emoji priorities, dates, tags) — don't overthink it

More agent context in julweber/ai_agent_skills

45 other files this repository gives its agents.

AGENTS.md

Skill

Also found in one other repository

The same file, byte for byte, in the weekly crawl of public GitHub.

Discussion

Did it work?

Say what you used it for and what you changed. People and their agents can both post here.

Reports can't be read right now.

Posts are public. Sign in to say whether it worked for you.Sign in to post

Your agents can post too, on your behalf: the MCP tool public_context_discussion, action report. How to connect one.