From ai-os-lite
Evening prep that writes today's accomplishments, highlights, and a gentle wind-down prompt to the evening journal page. The evening mirror of /start-day. Designed to run as a cron job (~8pm) but can also be invoked manually. Use when the user says "prep evening", "evening prep", or "/prep-evening".
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-os-lite:prep-eveningThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Prep tonight's evening journal page with today's accomplishments, highlights, and a gentle wind-down prompt. This is Phase A of the evening loop: **AI preps the reflection before you journal.**
Prep tonight's evening journal page with today's accomplishments, highlights, and a gentle wind-down prompt. This is Phase A of the evening loop: AI preps the reflection before you journal.
The end of the day leads to a great start the next day. Without a structured wind-down, the evening drifts → time gets lost → next morning starts behind. /prep-evening provides the transition point: review what you accomplished, reflect, check habits, and set up tomorrow.
5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md./start-day (which requires a daily hub), this skill creates the evening entry on demand./process-evening processes the user's voice/written reflection, triages Still Open tasks, and suggests new tasks./process-evening will update after processing the user's reflection.vault-config/references/source-manifest.md.Track all source calls per vault-config/references/source-manifest.md. This skill uses:
| Source | Used For | Criticality |
|---|---|---|
| Obsidian CLI | Read/write evening entry, devlogs, daily hub | REQUIRED |
| Obsidian MCP | Patch sections into evening entry | REQUIRED |
| QMD Search | Devlog lookup (backup to glob) | MEDIUM |
| Todoist CLI | Completed tasks, remaining tasks | HIGH |
| GWS Calendar | Tomorrow preview | MEDIUM |
| Linear MCP | Cross-reference devlogs against RS42 issues | LOW |
| Task Notes | Task note frontmatter (all projects) | MEDIUM |
/prep-evening → prep tonight's entry
/prep-evening 2026-03-14 → prep a specific date
Cron setup (future): Schedule to run daily at ~8:00 PM local time.
Reference: vault-config/references/tool-selection.md CLI for reads, writes, graph traversal, and property operations. MCP only for semantic search and section-level patching. DO NOT use mcp__obsidian-mcp-tools__get_vault_file for reads.
YYYY-MM-DDCheck if the evening journal entry exists:
obsidian read path="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md"
If it doesn't exist: Create it with the evening template content (resolved, not Templater syntax):
obsidian create path="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md" content="---\ndate: YYYY-MM-DD\ntype: journal\njournal_type: evening\ntags:\n - journal\nhabit_evening_meditation: false\nhabit_journaled: false\ntodoist_tasks_created: false\n---\n\n## Evening Habits\n- [ ] Evening meditation\n- [ ] Journaled\n\n### Today's Accomplishments\n\n### Tomorrow Preview\n\n### Wind Down\n\n---\n## Evening\n\n\n## Reflection\n\n**What went well today:**\n\n\n**What could I improve:**\n\n\n**Grateful for:**\n1.\n2.\n3.\n\n---\n\n###### Still Open\n"
If it already exists: Check for existing ### Today's Accomplishments section. If present, replace individual sections (idempotent re-run).
Collect four categories of context:
Find devlogs created today using a two-pronged approach (body search misses frontmatter dates):
Primary — glob by filename (devlogs always have the date in the filename):
obsidian files pattern="*/Dev Log/YYYY-MM-DD*"
Backup — QMD keyword search (catches any devlogs the glob misses):
mcp__qmd__search(query="YYYY-MM-DD", collection="vault")
Filter QMD results to only files under */Dev Log/ paths with today's date.
Also check today's daily hub for devlog references. For each devlog found, extract:
tasks: property (list of linked task IDs — Linear RS4-, Todoist task name)For each devlog, determine its task linkage:
tasks: property exists and is non-empty → use those references directlytasks: property is empty or missing → search for a matching active task:
td task list --filter "search:{session_topic_keywords}" --jsonmcp__linear__list_issues for matching issuestd task list --filter "completed today" --json --full
If no completed tasks API exists, check today's morning journal for the work priorities that were set and note them.
Group completed tasks by project. For each, note the task content and project.
td task list --filter "overdue | today" --json --full
These are tasks that were planned for today but not yet completed. Present them as "still open" — not as failures, but as items to either complete tonight, reschedule, or acknowledge.
Read task notes with status: active or status: todo across all projects:
for dir in ~/Claude/ObsidianVault/"2. Projects"/*/*/Tasks/; do
[[ -d "$dir" ]] || continue
for f in "$dir"*.md; do
[[ -f "$f" ]] || continue
status=$(awk '/^---$/{if(f){exit}f=1;next}f' "$f" | grep '^status:' | sed 's/^status: *//')
if [[ "$status" == "active" || "$status" == "todo" ]]; then
echo "=== $(basename "$f" .md) ==="
head -20 "$f"
fi
done
done
Also check 6. Main Notes/ for area-level task notes:
grep -rl "^type: task" ~/Claude/ObsidianVault/"6. Main Notes/"*.md 2>/dev/null
Merge task notes with Todoist remaining tasks (dedup by external_id match). For task notes that don't have a Todoist mirror, include them in Still Open with a *(task note, pN)* tag.
Cross-reference each remaining Todoist task against today's devlogs (from Step 3a):
tasks: property references it (by Todoist task name or Linear ID)session_topic and project names*(p3, N sessions today — brief summary of what was done)**(pN)* with optional encouraging noteExample:
###### Still Open
- [ ] [[{WorkArea}]] / [[{Project}]] — Design carry-forward task lifecycle *(p3, 4 sessions today — task triage, evening flow, format unification)*
- [ ] [[{WorkArea}]] / [[{Project}]] — Brainstorm leveraging {Project} for work productivity *(p3, related: daily loop end-to-end redesign)*
- [ ] [[Personal]] — Research Bali trip *(p3)* → no rush
gws calendar events list --params '{"calendarId":"primary","timeMin":"YYYY-MM-DD+1T00:00:00-06:00","timeMax":"YYYY-MM-DD+1T23:59:59-06:00","singleEvents":true,"orderBy":"startTime"}'
Quick preview of tomorrow so the user can mentally prepare. If empty, note "No meetings tomorrow."
Write context to three separate sections in the evening entry. No ## Context wrapper — sections sit directly between ## Evening Habits and the --- before ## Evening.
mcp__obsidian-mcp-tools__patch_vault_file(
filename="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md",
operation="replace",
targetType="heading",
target="Today's Accomplishments",
content="""{devlog_bullets}
{completed_tasks_bullets}
"""
)
mcp__obsidian-mcp-tools__patch_vault_file(
filename="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md",
operation="replace",
targetType="heading",
target="Tomorrow Preview",
content="""{calendar_bullets_or_clear}
"""
)
mcp__obsidian-mcp-tools__patch_vault_file(
filename="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md",
operation="replace",
targetType="heading",
target="Wind Down",
content="""[Warm, personalized 1-2 sentences based on today's accomplishments. Reference specific wins. End with "Check your evening habits, reflect on what went well, and rest. Tomorrow is prepped."]
"""
)
mcp__obsidian-mcp-tools__patch_vault_file(
filename="5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD.md",
operation="replace",
targetType="heading",
target="Still Open",
content="""{remaining_tasks_or_all_clear}
"""
)
Still Open is at the bottom of the entry (after ## Reflection, below the --- separator). This is intentional — it's the interactive section that /process-evening will update after triaging tasks against the user's reflection.
[!warning] Accomplishments Format — MUST use unified quick-link checkbox format DO THIS:
- [x] [[{WorkArea}]] / [[{Project}]] — Fixed storage key auth bug, restored data pipelinesNEVER THIS:- **{Project} ({WorkArea})** — Fixed storage key auth bug← missing wikilinks, not checkable
Accomplishments — devlogs + completed tasks combined. Use checked checkboxes (- [x]) with area/project wikilinks and task references — same format as the daily hub's Yesterday's Summary and the morning entry's Yesterday section:
### Today's Accomplishments
- [x] [[{WorkArea}]] / [[{Project}]] — Wired trigger to server.py *(Linear {TICKET}, in progress)*
- [x] [[{WorkArea}]] / [[{Project2}]] — Debugged agent feedback *(Linear {TICKET}, in progress)*
- [x] [[{WorkArea}]] / [[{Project}]] — Built /process-evening skill *(Todoist: Design carry-forward lifecycle)*
- [x] [[{WorkArea}]] / [[{Project}]] — Redesigned daily hub template *(no task linked)*
- [x] [[{WorkArea}]] — Email {Contact} about key vault *(Todoist)*
Rules:
- [x] (these are accomplished items)[[{WorkArea}]], [[{SideArea2}]], [[Personal]], etc./ [[{Project}]], / [[{Project}]]—tasks: property or cross-reference search:
*(Linear RS4-42, state)**(Todoist: task name)**(no task linked)* — flags dev sessions with no corresponding task*(Todoist)* source tag[!warning] Still Open Format — MUST use checkbox format with quick-link wikilinks DO THIS:
- [ ] [[{WorkArea}]] / [[{Project}]] — Follow up on {Project2} stakeholder meeting *(p2)*NEVER THIS:**[{WorkArea}/p2]** Follow up on {Project2} stakeholder meeting← renders as broken purple links in Obsidian
Still Open — remaining Todoist tasks with devlog progress annotations. Uses the unified quick-link checkbox format. Lives at the bottom of the entry (after Reflection, below ---). This section is a living section — /process-evening will update it after triaging tasks against the user's reflection:
###### Still Open
- [ ] [[{WorkArea}]] / [[{Project}]] — Design carry-forward task lifecycle *(p3, 4 sessions today — task triage, evening flow, format unification)*
- [ ] [[{WorkArea}]] / [[{Project}]] — Brainstorm leveraging {Project} for work productivity *(p3, related: daily loop redesign)*
- [ ] [[Personal]] — Research Bali trip *(p3)* → no rush
- *All tasks completed today!* ← if empty
Task note formats for Still Open:
Rules:
- [ ] (these are open items)—*(pN)**(p3, N sessions today — what was done)**(p3, related: brief context)*→*(Todoist + task note: status, pN)**(task note: status, pN)*due_date in parenthetical if set: *(task note: active, p1, due Apr 1)*Tomorrow Preview:
### Tomorrow Preview
- 10:00–10:30 — Manager 1:1
- *No meetings tomorrow* ← if empty
Wind Down — always present, warm tone:
### Wind Down
Time to step back. You got things done today. Check your evening habits, reflect on what went well, and rest. Tomorrow is prepped.
Read today's daily hub at 1. Daily/YYYY-MM-DD.md and find the Today's priorities section. Cross-reference each priority against today's devlogs:
- [ ]):
- [x]mcp__obsidian-mcp-tools__patch_vault_file(
filename="1. Daily/YYYY-MM-DD.md",
operation="replace",
targetType="heading",
target="Morning Journal",
content="""> [[5. Resources/Personal/Journal/Morning Entries/YYYY-MM-DD|Open Morning Entry]]
**Today's priorities:**
- [ ] [[{WorkArea}]] / [[{Project3}]] — Build the integration connector (Linear {TICKET})
- [ ] [[{WorkArea}]] / [[{Project3}]] — Prepare server access (Linear {TICKET})
- [x] [[{WorkArea}]] / [[{Project}]] — Figure out carry-forward task lifecycle
"""
)
Rules:
- [ ] ... *(in progress — N sessions today)*Display a brief summary followed by the execution report (per vault-config/references/source-manifest.md):
Evening prep complete for YYYY-MM-DD.
**Accomplishments**: N devlog sessions, M tasks completed
**Still open**: N tasks remaining
**Tomorrow**: N meetings scheduled
Evening journal prepped: [[5. Resources/Personal/Journal/Evening Entries/YYYY-MM-DD]]
Time to wind down.
---
### Execution Report
#### Sources
- [x] Obsidian CLI — evening entry created, N devlogs found, daily hub updated
- [x] QMD Search — backup devlog search, N results
- [x] Todoist completed — N items
- [x] Todoist remaining — N items
- [ ] GWS Calendar — FAILED: auth token expired
- [x] Linear cross-ref — N devlogs matched
#### Warnings
- GWS integration unavailable — tomorrow preview shows "Calendar unavailable". Run `gws auth login` to refresh.
- N devlogs found with no task linked.
#### Fix
- GWS: Run `gws auth login` to refresh OAuth token
Only include the Warnings and Fix sections if there are actual warnings.
| Scenario | Handling |
|---|---|
| No devlogs today | Write "No dev sessions today" |
| No completed Todoist tasks | Write "No tasks completed in Todoist" (doesn't mean nothing was done — devlogs may show work) |
| No remaining tasks | Write "All tasks completed today!" |
| Calendar API fails | Write "Calendar unavailable", record FAILED in execution report, continue |
| Evening entry already has sections | Replace individual heading content (idempotent) |
| Run before 5pm | Still works, but context will be incomplete (may add more devlogs later) |
| Weekend / no work | Still runs — personal accomplishments and habits still matter |
/process-evening)/process-evening or manual)/process-evening)/weekly-review, future)npx claudepluginhub rs42-ai/ai-os-lite --plugin ai-os-liteGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.