skills/obsidian-todotxt/SKILL.md
Read, parse, write, sort, and complete tasks in Obsidian vaults using our custom Todo.txt format. Use when adding, completing, uncompleting, or restructuring todo.txt tasks. When called independently, Section 0 detects the vault and resolves todoPath automatically.
npx skillsauth add neurongraph/skills_repo obsidian-todotxtInstall 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.
This skill guides agents on how to read, parse, write, sort, and complete tasks in an Obsidian vault conforming to our custom Todo.txt spec and its extensions.
Run this section only when the skill is invoked directly — i.e. when todoPath or OBSIDIAN_VAULT were not supplied by the caller.
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.
bash "$HOME/.maam/registries/surjit_skills/skills/obsidian-todotxt/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 and resolve to $OBSIDIAN_VAULT/<todoPath>.
If the file is absent, ask the user for the path to todo.md.
Every task is represented as one line of plain text. We follow the standard Todo.txt spec with three specific custom extensions:
complete:yyyy-mm-dd Tag: Task completion date is stored as a custom metadata key-value tag complete:YYYY-MM-DD at the very end of the line.---):
---## @context (sorted alphabetically, No Context at the bottom)### +project (sorted alphabetically under the context, No Project at the bottom)(Priority) Description text +project @context due:YYYY-MM-DD rec:N[dwmy]x (Priority) Description text +project @context due:YYYY-MM-DD rec:N[dwmy] complete:YYYY-MM-DDAgents parsing a task line should use the following logic (or equivalents in Python/JavaScript):
x . If it does, completed = true. Strip the leading x from the string.^\(([A-Z])\)\b. If found, extract the letter as priority and strip the priority block from the start.+ are Projects (extract without the +).@ are Contexts (extract without the @).key:value are Metadata. Ensure you filter out URLs (keys shouldn't be http or contain //).due:YYYY-MM-DD represents the task's due date.rec:N[dwmy] represents task recurrence (e.g. 1w for 1 week, 3d for 3 days, 2m for 2 months, 1y for 1 year). The optional + prefix (like +1m) represents strict recurrence.complete:YYYY-MM-DD represents the completion date (only present if completed).When reconstructing a line from a task object, assemble the parts strictly in this order:
x (if completed)(A) (if priority is present, e.g. A)description (retains projects, contexts, and metadata tags like due:, rec:, and complete:)Example:
x (A) Greet team +work @office due:2026-05-24 rec:1w complete:2026-05-23
When reading or modifying a vault's todo.md file, agents MUST follow these workflows to maintain list integrity. The todoPath is resolved in Section 0 or provided by the invoking agent.
todo.md.Natural Language Normalization — before writing the task line, convert spoken/written shorthand into todo.txt tokens. All substitutions are case-insensitive and applied before the line is written.
Context & Project tokens:
"context is <name>" → @<name> (remove the phrase, insert token)"for project <name>" → +<name> (remove the phrase, insert token)<name>, the word underscore (surrounded by spaces or at word boundaries) is replaced with _, then spaces are removed to form a single token.Examples:
"Call dentist context is health" → Call dentist @health"Finish report for project acme" → Finish report +acme"context is health underscore personal" → @health_personal"for project kb underscore work" → +kb_work"context is work send invoice for project consulting" → send invoice @work +consultingDue date tokens:
Convert natural language date expressions to due:YYYY-MM-DD. Resolve relative to today's date.
| Phrase | Resolves to |
|---|---|
| "due today" | due:<today> |
| "due tomorrow" | due:<today+1d> |
| "due <weekday>" / "due next <weekday>" | due:<next occurrence of that weekday> |
| "due in <n> days" | due:<today+nd> |
| "due in <n> weeks" | due:<today+nw> |
| "due next week" | due:<today+7d> |
| "due next month" | due:<same day next month> |
| "due <YYYY-MM-DD>" | due:<YYYY-MM-DD> (pass through) |
Example: "Submit tax return due next friday context is finance" → Submit tax return due:2026-05-29 @finance
To check off a task on a specific line:
x to the beginning of the line.YYYY-MM-DD.complete:YYYY-MM-DD to the end of the line (e.g. complete:2026-05-23).Handling Recurrence (rec:):
If the task being completed has a rec:n[dwmy] tag (e.g., rec:1w):
due:2026-05-25). If missing, fall back to today's date.2026-05-25 + 1 week = 2026-06-01).complete: tag.x from the beginning of the line.complete:YYYY-MM-DD from the end of the line.If asked to reorganize or sort the file:
# or exactly equal to ---).@context or No Context), then by project (+project or No Project).No Context and No Project at the bottom of their respective levels).--- separator before each context block.## @context headings.### +project headings under each context.To rank tasks, use the bundled script:
python3 "${OBSIDIAN_VAULT}/.claude/skills/obsidian-todotxt/scripts/get_top_todos.py" "$todoPath" 10
The script parses uncompleted tasks, computes a composite urgency score (priority A=26…Z=1 + proximity 60→0 over a 30-day window), and returns the top k sorted descending as a markdown table with Priority, Due Date, Score, and Description columns.
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
--- 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
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