| name | tasknotes |
| description | Manages tasks in Obsidian via the TaskNotes Plugin HTTP API. Provides task creation, status updates, filtering by project or status, and vault-wide scanning. Triggers when the user asks to "show my tasks", "create a task", "what should I work on", "mark as done", or wants to filter tasks by status/project. |
TaskNotes Skill
Task management in Obsidian via the TaskNotes Plugin HTTP API.
User: "show my tasks"
Action: Execute `list --scan --table` to display all tasks in the vault
User: "create a task to finish the landing page"
Action: Execute `create "Finish landing page"`
User: "what should I work on?"
Action: Execute `list --status in-progress --scan --table` to show active tasks
User: "mark task X as done"
Action: Execute `update "Tasks/task-x.md" --status done`
Prerequisites
- TaskNotes Plugin installed in Obsidian
- HTTP API enabled in TaskNotes settings:
- Open Obsidian Settings → TaskNotes
- Enable "HTTP API" toggle
- Set API port (default: 8080)
- API Token: leave empty for no authentication, or set a token for security
- Environment variables in
.env file at vault root (if authentication is used):
TASKNOTES_API_PORT=8080
TASKNOTES_API_KEY=your_token_here
If TaskNotes has no auth token configured, no .env file is required.
CLI Commands
The script is located at ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py.
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --scan --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --scan --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --all --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --status "in-progress" --scan
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --project "My Project" --scan
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py create "Task title" --project "My Project" --priority high
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py create "Meeting preparation" --scheduled "2025-01-15T14:00:00"
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py update "Tasks/task.md" --status done
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py update "Tasks/task.md" --details "Additional context here."
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py delete "Tasks/task.md"
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py options --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --table
Task Properties
Status and priority values: Configured in TaskNotes plugin settings. Execute the options command to view available values:
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py options --table
Additional fields:
projects - Array of project links, e.g., ["[[ProjectName]]"]
contexts - Array such as ["office", "energy-high"]
due - Due date (YYYY-MM-DD)
scheduled - Scheduled date/time (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)
timeEstimate - Minutes (number)
tags - Array of tags
details - Task description (writes to Markdown body, not frontmatter)
API Reference
Base URL: http://localhost:8080/api
| Method | Endpoint | Description |
|---|
| GET | /tasks | List tasks (supports filters) |
| POST | /tasks | Create task |
| GET | /tasks/{id} | Retrieve single task |
| PUT | /tasks/{id} | Update task |
| DELETE | /tasks/{id} | Delete task |
| GET | /filter-options | Available statuses, priorities, projects |
Query Parameters for GET /tasks
status - Filter by status
project - Filter by project name
priority - Filter by priority
tag - Filter by tag
overdue - true/false
sort - Sort field
limit - Maximum results
offset - Pagination offset
Usage Patterns
| User Request | Action |
|---|
| "create a task for X" | Create task |
| "show my tasks" | list --scan --table (finds all tasks in vault) |
| "show in-progress tasks" | list --status in-progress --scan --table |
| "mark X as done" | Set task status to done |
| "what should I work on" | list --scan --table |
IMPORTANT: Always use --scan when listing to find ALL tasks in the entire vault, not just those in the configured TaskNotes folder.
Example Workflow
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --scan --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --status in-progress --scan --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py list --scan --limit 5 --table
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py create "Complete landing page" \
--project "Website Redesign" \
--priority high
uv run ${CLAUDE_PLUGIN_ROOT}/skills/tasknotes/scripts/tasks.py update "Tasks/complete-landing-page.md" --status done
Important Notes
- JSON output (default): Suitable for programmatic processing
- Table output (
--table): For human-readable display
- Vault path: The script expects the
.env file at the vault root or automatically locates the Obsidian vault
- Error handling: On connection errors, verify that Obsidian is running and the TaskNotes API is enabled
- Scan mode (
--scan): Directly scans the filesystem and finds ALL tasks with the #task tag in the entire vault, regardless of the configured TaskNotes folder. This is the recommended mode for listing tasks.
- API mode (without
--scan): Uses the TaskNotes HTTP API but only finds tasks in TaskNotes-monitored folders