skills/obsidian-todo-action/SKILL.md
--- name: obsidian-todo-action description: Action a single Obsidian todo: reads project context and related tasks, adaptively assesses what's needed (sub-tasks, email drafts, calendar invites), generates all artifacts into the project folder, and updates project.md — all in one session. compatibility: When called by an orchestrator, todoPath, projectsPath, and OBSIDIAN_VAULT must be provided. When called independently, Section 0 detects the vault and resolves all paths automatically. --- # Obs
npx skillsauth add neurongraph/skills_repo skills/obsidian-todo-actionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Actions a single todo from the user's Obsidian vault in one focused session. Reads project context, decides adaptively what help is needed, generates artifacts (sub-tasks, email drafts, calendar invites, action notes), and updates the project folder.
When invoked by an orchestrator, todoPath, projectsPath, and OBSIDIAN_VAULT must be provided. When invoked independently, Section 0 handles vault detection and path resolution automatically.
Process isolation: Each bash tool call runs in a separate shell process. Re-source
$OBSIDIAN_VAULT/.envat the top of any bash script that uses env vars from that file.
Run this section only when the skill is invoked directly — i.e. when none of todoPath, projectsPath, or OBSIDIAN_VAULT were supplied by the caller.
bash "$HOME/.maam/registries/surjit_skills/skills/obsidian-todo-action/scripts/detect-vault.sh"
$PWD or any parent directory. Please run from inside your vault."OBSIDIAN_VAULT.Report: ✓ Vault root: <OBSIDIAN_VAULT>
set -a
source "$OBSIDIAN_VAULT/.env" 2>/dev/null || true
set +a
Read $OBSIDIAN_VAULT/.obsidian/plugins/obsidian-todotxt/data.json. Extract:
todoPath → resolve to $OBSIDIAN_VAULT/<todoPath>projectsPath → resolve to $OBSIDIAN_VAULT/<projectsPath>If the file is absent, ask the user for both paths.
Ask the user: "Which todo do you want to work on?" (referencing the numbered urgency table already shown).
Parse the selected todo line using the obsidian-todotxt parsing rules to extract:
description, context, project, priority, due_dateResolve the project folder:
<projectsPath>/<context>/<project>/
If the folder does not exist, create it and write an empty project.md:
# <project>
## Overview
## Collaborators
## Sessions
Then continue to Section 2.
Read three sources before doing any analysis:
todoPath (skip x prefix lines, skip ---, ## @, ### + lines) that share the same @context AND +project as the selected todoproject.md — read the full file from <projectsPath>/<context>/<project>/project.mdContext richness check: Count meaningful words in project.md — words not part of lines that are only markdown headings (##), horizontal rules (---), or blank lines. If the count is ≥100, context is rich → use Mode B. Otherwise, context is sparse → use Mode A.
Synthesize all three context sources and present a single pre-filled assessment:
Working on:
<todo description>Project:@context / +projectBased on the todo, related tasks in this project, and project context, here's my assessment:
Suggested sub-tasks:
- [derived from context]
- [derived from context]
People to loop in: [names and roles from project.md or sibling todos, or "none identified" — include email addresses if present in project.md or sibling todos; otherwise ask the user for emails before generating any invite or email artifact]
Suggested actions:
- [ ] Draft email to [name] re: [topic] (or: No email needed — this appears to be async/solo work)
- [ ] Set up a calendar invite with [name] (or: No invite needed)
Blockers / dependencies: [surfaced from context — if none found in context, ask: "Are there any blockers or dependencies I should know about?"]
Does this look right? Anything to add or change before I proceed?
Wait for the user to confirm or adjust. Then proceed to Section 4 using the confirmed plan.
Ask questions one at a time. Wait for a response before asking the next.
{name, email} pairs (email may be blank if not provided). Carry this list through all subsequent artifact generation steps.Solo/research heuristic (determines whether to skip questions 3 and 4): Skip both if the selected todo description AND all sibling todo descriptions together contain none of the following:
All artifacts are saved to <projectsPath>/<context>/<project>/. Generate only the artifacts confirmed by the user in Section 3.
For each confirmed sub-task:
obsidian-todotxt inbox format:
+project and @context from the parent todo(B) Review stakeholder list +ProjectName @ContextNametodoPath per obsidian-todotxt Workflow A (within the 3 blank lines at the top of the file).If an email was confirmed:
Draft subject and body from context. Present to the user for review:
Proposed email: To: [name / email] Subject: [subject] Body: [body text]
Look good, or would you like to adjust anything before I write the file?
After the user confirms or adjusts, run the email draft script:
python3 "${OBSIDIAN_VAULT}/.claude/skills/obsidian-todo-action/scripts/create_outlook_email_draft.py" \
--to "[email protected]" \
--subject "confirmed subject" \
--body "confirmed body text" \
--output "/absolute/path/to/project/YYYY-MM-DD-<slug>-email.emltpl"
# Add --from "addr" and/or --cc "addr" only when needed
The .emltpl file opens in Outlook for Mac as a fully editable draft when double-clicked.
Slug: lowercase the todo description, replace spaces and non-alphanumeric characters with hyphens, truncate to 40 characters.
If a calendar invite was confirmed:
Propose a time explicitly:
Proposed meeting time: [next business day] at 09:00–10:00 Does that work, or would you prefer a different date, time, or duration?
Do not generate the file before receiving explicit user confirmation or an alternative. Wait for the response.
After confirming, run the calendar draft script:
python3 "${OBSIDIAN_VAULT}/.claude/skills/obsidian-todo-action/scripts/create_outlook_calendar_draft.py" \
--summary "todo description" \
--description "brief agenda derived from context" \
--location "Microsoft Teams" \
--start "YYYY-MM-DDTHH:MM" \
--end "YYYY-MM-DDTHH:MM" \
--attendee "Name:[email protected]" \
--output "/absolute/path/to/project/YYYY-MM-DD-<slug>-invite.ics"
# Repeat --attendee for each person with a known email; omit entirely if no emails collected
The .ics file opens as an editable calendar event in Outlook for Mac when double-clicked.
After all other artifacts are generated, write the action note.
Filename: YYYY-MM-DD-HHMM-<slug>.md (current date and time)
# Action: <todo description>
**Date**: YYYY-MM-DD HH:MM
**Project**: @context / +project
**Priority**: <A or —>
**Due**: <YYYY-MM-DD or —>
---
## Assessment
<2–4 sentences on why this todo matters in the context of the project and related tasks>
## Sub-tasks Created
- [ ] Sub-task 1 (added to todo.txt)
- [ ] Sub-task 2 (added to todo.txt)
## People Involved
- Name — role (email drafted: YYYY-MM-DD-slug-email.emltpl)
## Blockers / Dependencies
- <listed, or "None">
## Decisions Made
- <listed, or "None">
## Next Steps
- <1–3 concrete next actions beyond the sub-tasks>
After writing the action note, update project.md. Never overwrite the file — only upsert specific sections.
Upsert ## Collaborators section:
- Name — role## Sessions (or before the end of the file)Append to ## Sessions section:
- [YYYY-MM-DD HH:MM — Action: <todo description>](<action-note-filename>.md)After all artifacts are written, print:
Session complete for: <todo description>
Created:
✓ <N> sub-tasks added to todo.txt
✓ Email draft: <filename>.emltpl (or: — no email drafted)
✓ Calendar invite: <filename>.ics (or: — no invite created)
✓ Action note: <filename>.md
✓ project.md updated
All files saved to: <projectsPath>/<context>/<project>/
development
Use this skill any time you need to create or edit a .pptx presentation for Surjit. This skill enforces the IBM Plex design language — typography-forward, flat geometry, sharp corners, restrained color. Trigger whenever the user asks for a deck, slides, or presentation, or references a .pptx file, and especially when they want slides that feel clean, modern, or 'IBM-style'. If the user just says 'make me a deck' or 'build slides', use this skill — it overrides the generic pptx skill for this user.
data-ai
Transcribes audio files (voice memos, recordings, meetings) into text using a local ASR model (qwen3_asr_rs). Processes all audio in the configured input directory and saves transcripts as text files. Use this skill whenever the user wants to transcribe audio, convert speech to text, process voice memos, or get spoken content into written form — even if they don't use the word "transcribe".
devops
--- name: obsidian-daily-process description: Orchestrates the full Obsidian vault processing pipeline: transcribes voice memos and audio recordings, classifies them into todos, ideas, or daily notes, and files each into the right place in the vault. Also triggers downstream Obsidian pipelines (wiki update, ArtMind knowledge graph). Use this skill whenever the user wants to process voice memos, audio recordings, or run any Obsidian vault update — even if they only mention "voice memo", "recordin
development
Answer questions about "The Geek Way" by Andrew McAfee — including its four core norms (Science, Ownership, Speed, Openness), supporting concepts like Homo ultrasocialis, cultural evolution, the OODA loop, the press secretary brain module, and real-world case studies. Use this skill whenever someone asks about The Geek Way, geek culture in business, McAfee's framework for organizational excellence, or concepts from the book such as ultrasociality, agile iteration, radical candor, or why tech companies outperform traditional firms. Also trigger when users ask how to apply these ideas to their own organization, team, or leadership style.