| name | wiki-task |
| description | Create a single Obsidian Tasks-compatible task from a natural language prompt. Detects target file, tags, Fibonacci effort estimate, priority, scheduled/due dates, Jira links, and people references. Previews the formatted task for user approval before inserting. Replaces the legacy "task:" prefix. Triggers on: wiki-task, create task, add task, new task.
|
| allowed-tools | view, edit, create, bash, glob, grep, ask_user |
wiki-task
Read these files fully before proceeding:
~/.copilot/installed-plugins/ihudak-copilot-plugins/obsidian-llm-wiki/skills/_shared/task-rules.md
~/.copilot/installed-plugins/ihudak-copilot-plugins/obsidian-llm-wiki/skills/_shared/vault-conventions.md
Then attempt to read .obsidian/copilot/tag-index.md (at vault root).
If the file does not exist, note it and continue — tags will be omitted from tasks.
See the "If tag-index.md does not exist" section in task-rules.md.
Invoke with: /wiki-task <description>
Step 1 — Resolve VAULT_PATH
Vault path: ~/obsidian_vault by default; set VAULT_PATH to override.
WSL users with a Windows-side vault must set VAULT_PATH explicitly
(e.g. /mnt/c/Users/<name>/obsidian_vault).
All file paths below are relative to the vault root.
Step 2 — Parse the prompt
Analyse the natural-language <description> and extract every field you can.
Do not ask follow-up questions for fields that are simply absent — leave them
at their defaults. Only ask the user when the prompt is genuinely ambiguous
(e.g., two plausible target projects).
2.1 — Description text
The core task description. Strip out metadata you extract into other fields
(dates, priority words, effort hints) so the description reads cleanly.
2.2 — Effort estimate
Map effort hints to Fibonacci values using the scale in task-rules.md.
Heuristics:
- Explicit numbers or words: "5 min" →
[0], "quick" → [0]–[1],
"half a day" → [3], "a few days" → [5], "a week" → [8].
- Action verbs: "review" / "approve" / "check" → lean
[0]–[1];
"implement" / "build" / "migrate" → lean [2]–[5];
"design" / "architect" → lean [3]–[8].
- If truly no signal: use
[ ] (unestimated).
- When in doubt between two values, pick the higher one.
2.3 — Priority
Look for: "urgent", "critical", "highest", "high", "low", "lowest",
"asap", "blocking", "nice to have", "backlog".
Map to the priority emoji from task-rules.md. Default: none (Normal).
2.4 — Dates
- Scheduled date (
⏳): "start on", "begin", "from", "starting"
- Due date (
📅): "due", "by", "before", "deadline", "until"
- Relative dates: "today", "tomorrow", "next Monday", "in two weeks",
"end of month" — resolve to
YYYY-MM-DD using the current date.
- Always add
➕ <today> (created date).
2.5 — Tags
If tag-index.md was loaded: match keywords against the tag index
categories (work areas, technology, people, work type, etc.).
Never invent tags. If a keyword has no match, skip it silently.
If tag-index.md was not found: skip tagging entirely. The task is still
valid — Obsidian Tasks does not require tags.
2.6 — Jira tickets
Pattern: uppercase letters + dash + digits (e.g., MGD-7211).
To find the Jira base URL, follow the detection steps in task-rules.md
(search existing tasks → ask user → or skip linking).
2.7 — Dependencies and recurrence
Only extract if explicitly stated. See task-rules.md for 🆔, ⛔, 🔁 syntax.
Step 3 — Find the target file
3.1 — Project match
First, check whether Projects/ exists:
[ -d "Projects/" ] && echo "EXISTS" || echo "ABSENT"
If absent: skip to Step 3.3 (fallback).
If present: search Projects/ for a file whose name or content keywords match
the task's context (project name, tags, Jira project prefix).
grep -rl "tags:" Projects/ --include="*.md" | head -20
For each candidate, read the frontmatter and check:
archived: is false (or absent)
tags: contains task
If multiple projects match, prefer the one with the strongest keyword overlap.
If still ambiguous, ask the user which project.
3.2 — Project-level wiki context
If the user invoked /wiki-task while discussing a specific project's wiki
(e.g., after /wiki-tasks-extract Projects/Products/MyProject/wiki/), prefer
the project file in that same project directory.
3.3 — Fallback
If no eligible project matches: target Tasks.md, section # Irregular.
If Tasks.md does not exist: create it with the bootstrap template from
task-rules.md, then insert the task under # Irregular.
3.4 — Never
Never target Daily notes unless the user explicitly says "add to today's daily note".
Step 4 — Verify target
Run the verification checklist from task-rules.md:
- Target file has
#task in frontmatter tags (project files only)
- Target file has
archived: false or no archived field
- The insertion point is in
### Tasks section (project files) or
# Irregular (Tasks.md), not an archive section
If verification fails, try the next candidate or fall back to Tasks.md.
Step 5 — Assemble the task line
Build the complete task line following the format in task-rules.md:
- [effort] Description #tag1 #tag2 priority ⏳ scheduled 📅 due ➕ created
Order of elements:
- [effort] — checkbox with effort character
- Description text (with Jira links inline if applicable)
- Tags
- Priority emoji (if not Normal)
- Dependency markers (if any)
- Recurrence (if any)
⏳ YYYY-MM-DD scheduled (if any)
📅 YYYY-MM-DD due (if any)
➕ YYYY-MM-DD created (always)
Step 6 — Preview and confirm
Present the formatted task to the user along with:
- The target file path
- The section where it will be inserted
- The parsed fields (effort, priority, dates, tags) so they can verify
Use ask_user to get approval. The user may:
- Approve — proceed to insert
- Modify — adjust fields, re-preview
- Cancel — abort without writing
Step 7 — Insert the task
Read the target file. Find the correct section heading:
- Project files:
### Tasks
- Tasks.md:
# Irregular
Insert the task line at the end of the existing tasks in that section
(before the next heading or end of file). Do not reorder existing tasks.
Use the edit tool to insert the line.
Step 8 — Confirm
Report to the user:
- ✅ Task created
- File:
<path>
- Line: (approximate line number)
- Full task text (for copy-paste reference)