Help us improve
Share bugs, ideas, or general feedback.
From ark-skills
Agent-driven task creation and management via tasknotes MCP or direct markdown write
npx claudepluginhub helloworldsungin/ark-skills --plugin ark-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/ark-skills:ark-tasknotesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create and manage TaskNote tickets automatically during development workflows. Tasks sync to Linear via linear-updater.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
Create and manage TaskNote tickets automatically during development workflows. Tasks sync to Linear via linear-updater.
tasknotes_health_check{vault_path}/TaskNotes/meta/{task_prefix}counter for next available ID| Mode | Trigger | Description |
|---|---|---|
| Create | /ark-tasknotes or /ark-tasknotes create | Create and manage tasks (default) |
| Status | /ark-tasknotes status | Task overview and triage recommendations |
| Trigger | Task Type | Priority |
|---|---|---|
| Bug discovered during code review | Bug | Based on severity |
| Feature completed, needs verification | Story | medium |
| Tech debt identified during maintenance | Task | low-medium |
| Incident debugged, root cause found | Bug | Based on impact |
| Research finding needs follow-up | Story | medium |
Before creating, search for existing tasks on the same topic:
If MCP available:
tasknotes_query_tasks({
conjunction: "and",
children: [{
type: "condition",
id: "1",
property: "status",
operator: "is_not",
value: "done"
}],
sortKey: "due",
sortDirection: "asc"
})
Review results. If a matching task exists, update it instead of creating a duplicate.
If MCP unavailable:
grep -rl "{keyword}" {vault_path}/TaskNotes/Tasks/ --include="*.md" | head -5
COUNTER=$(cat {vault_path}/TaskNotes/meta/{task_prefix}counter)
TASK_ID="{task_prefix}$(printf '%03d' $COUNTER)"
echo "Next task ID: $TASK_ID"
Option A: MCP + post-edit (preferred when Obsidian is running)
tasknotes_create_task({
title: "{task title}",
status: "backlog",
priority: "{low|medium|high|urgent}",
tags: ["{task_type}"],
projects: ["{project_name}"],
details: "{description with context}"
})
task-id: "{TASK_ID}"
task-type: "{epic|story|bug|task}"
work-type: "{development|research|deployment|docs|infrastructure}"
component: "{module_name}"
urgency: "{blocking|high|normal|low}"
summary: "<=200 char description"
Option B: Direct markdown write (fallback when Obsidian is not running)
Determine the subdirectory from task type:
TaskNotes/Tasks/Epic/TaskNotes/Tasks/Story/TaskNotes/Tasks/Bug/TaskNotes/Tasks/Task/Write the file {TASK_ID}-{slug}.md:
---
title: "{task title}"
tags:
- task
- {task_type}
task-id: "{TASK_ID}"
task-type: "{epic|story|bug|task}"
status: backlog
priority: "{low|medium|high|critical}"
project: "{project_name}"
work-type: "{development|research|deployment|docs}"
component: "{module_name}"
urgency: "{blocking|high|normal|low}"
created: "{today}"
summary: "<=200 char description"
---
# {task title}
## Description
{detailed description}
## Related
- [[related-task-or-page]]
echo $((COUNTER + 1)) > {vault_path}/TaskNotes/meta/{task_prefix}counter
Tell the user: "Created {task_type} {TASK_ID}: {title}"
cd {vault_path}
git add TaskNotes/
git commit -m "task: create {TASK_ID} — {title}"
git push
TaskNotes/meta/{task_prefix}counter exists. If missing, alert user that the vault may be misconfigured.Display a task overview with opinionated triage recommendations. Read-only — never creates, updates, or closes tasks.
Read the project's CLAUDE.md to find: task prefix, vault path, TaskNotes path (same as Create Mode).
If MCP available (preferred):
tasknotes_health_check to verify MCP is runningtasknotes_get_stats for aggregate counts by status and prioritytasknotes_query_tasks({
conjunction: "and",
children: [{
type: "condition",
id: "1",
property: "status",
operator: "is_not",
value: "done"
}],
sortKey: "priority",
sortDirection: "desc"
})
tasknotes_query_tasks({
conjunction: "and",
children: [{
type: "condition",
id: "1",
property: "status",
operator: "is",
value: "done"
}],
sortKey: "updated",
sortDirection: "desc"
})
Take only the 5 most recent from the results.
If MCP unavailable (fallback):
{vault_path}/TaskNotes/Tasks/**/*.md files{vault_path}/TaskNotes/Archive/**/*.md (sort by mtime, limit 5)For each open task, extract these fields from frontmatter:
task-id, title, status, priority, urgency, created, last-updated, blockedBy, depends-on, component, work-type, session
From the raw data, compute:
last-updated (or created if never updated) for in-progress tasks. Flag if > 3 days.blockedBy references another open tasktask or bug and priority medium or lowerPrint the report using this format:
TaskNotes Status: {project_name} ({task_prefix})
Overview
backlog: N | todo: N | in-progress: N | done: N
Total open: N | Completed this week: N | Created this week: N
Active Work (in-progress)
{task-id} {title} [{priority}] {N}d active
...
Needs Attention
{task-id} Stale {N}d -- no update since {date} [{priority}]
{task-id} Blocked by {blocker-id} [{priority}]
...
Up Next (todo, by priority)
{task-id} {title} [{priority}, {urgency}]
...
Recently Completed (last 7d)
{task-id} {title} -- done {date}
...
Recommendation
1. {action} {task-id} ({reasoning})
2. {action} {task-id} ({reasoning})
3. Defer {task-id} ({reasoning})
Section rules:
Generate the Recommendation section using these priorities in order:
/ark-tasknotes to create your first task, or /ark-health to check vault configuration."| Tool | Purpose | Key Parameters |
|---|---|---|
tasknotes_health_check | Verify MCP is running | none |
tasknotes_create_task | Create task | title (req), status, priority, tags, projects, details |
tasknotes_update_task | Update task | task file path, properties to update |
tasknotes_query_tasks | Search tasks | conjunction, children (filter conditions), sortKey |
tasknotes_get_task | Get by file path | file path (NOT task-id) |
tasknotes_list_tasks | List with pagination | page, limit |
tasknotes_toggle_status | Cycle status | task file path |
tasknotes_get_stats | Task statistics | none |
Machine-readable subcontract consumed by /ark-context-warmup. Spec: docs/superpowers/specs/2026-04-12-ark-context-warmup-design.md. Calling convention: docs/superpowers/plans/2026-04-12-ark-context-warmup-implementation.md D6.
warmup_contract:
version: 1
commands:
- id: status-and-search
shell: 'python3 "$ARK_SKILLS_ROOT/skills/ark-tasknotes/scripts/warmup_search.py" --tasknotes {{tasknotes_path}} --prefix {{task_prefix}} --task-normalized {{task_normalized}} --task-summary {{task_summary}} --scenario {{scenario}} --json'
inputs:
tasknotes_path:
from: env
env_var: WARMUP_TASKNOTES_PATH
required: true
task_prefix:
from: env
env_var: WARMUP_TASK_PREFIX
required: true
task_normalized:
from: env
env_var: WARMUP_TASK_NORMALIZED
required: true
task_summary:
from: env
env_var: WARMUP_TASK_SUMMARY
required: true
scenario:
from: env
env_var: WARMUP_SCENARIO
required: true
output:
format: json
extract:
matches: '$.matches'
status_summary: '$.status_summary'
extracted_component: '$.extracted_component'
required_fields: [matches, status_summary]