From task-orchestrator
Creates MCP work items from conversation context, anchors in Bugs/Features/Tech Debt/Observations containers, infers type/priority, builds single items or trees. Use for bugs, features, or user requests to track/log tasks.
npx claudepluginhub jpicklyk/task-orchestrator --plugin task-orchestratorThis skill uses the workspace's default tool permissions.
Create MCP work items intelligently from conversation context. This skill handles container anchoring, tag inference, structure decisions, and note pre-population so you don't have to.
Interactively guides creation of structured work items for features, bugs, tasks, spikes, or epics using templates and agents. Outputs to meta/work/ directory for tracking.
Captures backlog items via MCP server in guided, quick, or autonomous modes. Validates fields, detects duplicates, creates GitHub issues for P0/P1 priorities.
Generates well-structured work items with titles, descriptions, acceptance criteria, journals, and notes using govctl. Useful for creating tasks, adding criteria, or WI/task/ticket mentions.
Share bugs, ideas, or general feedback.
Create MCP work items intelligently from conversation context. This skill handles container anchoring, tag inference, structure decisions, and note pre-population so you don't have to.
Determine from context (or from $ARGUMENTS if provided):
If title or type cannot be inferred with confidence, use AskUserQuestion with concrete options. Do not ask open-ended questions.
query_items(operation="overview", includeChildren=true)
Classify the existing structure:
| Pattern | Classification |
|---|---|
| Depth-0 item with category-named children (Bugs, Features, etc.) | Hierarchical — project root exists |
| Category-named items at depth 0, no project root | Flat — use category containers directly |
| No items at all | Empty — offer to create project root |
| Item type | Target category container | Signal keywords |
|---|---|---|
| Bug / error / crash / unexpected behavior | Bugs | bug, error, crash, broken, failure, wrong, exception |
| Feature / enhancement / new capability | Features | feature, add, implement, new, support, capability, enhancement |
| Tech debt / refactor / cleanup / improvement | Tech Debt | refactor, cleanup, simplify, debt, improve, migrate, restructure |
| Observation / friction / optimization / missing capability | Observations | slow, performance, optimize, latency, friction, missing, gap, observe |
| Action item / follow-up / reminder / TODO | Action Items | todo, follow up, remind, action, track, check |
| General / unclear | Best-effort match — ask if uncertain |
Hierarchical structure:
Matching category found under project root → use as parentId
Category missing under project root → create it, then use as parentId
Flat structure:
Matching category at depth 0 → use as parentId
Category missing at depth 0 → create it, then use as parentId
Empty (no project root exists):
→ AskUserQuestion: "No project root container exists yet.
Would you like to create one for this project?"
→ Yes: create project root → create category under it → create item
→ No: create category container at depth 0 → create item under it
Read .taskorchestrator/config.yaml to discover available note schemas (this is a file read, not an MCP call). In Docker, the config is mounted at a path controlled by the AGENT_CONFIG_DIR env var — read $AGENT_CONFIG_DIR/.taskorchestrator/config.yaml if that variable is set, otherwise use .taskorchestrator/config.yaml relative to the working directory. Each schema key is a tag that activates gate enforcement when applied to an item.
Error handling: If the config file is not found, cannot be read, or contains invalid YAML, skip schema-based tagging and create the item without tags. Inform the user: "No schema config found — item created without schema tags." Do not abort item creation due to a missing or malformed config.
Infer the best schema match from context:
| Context signal | Schema to apply |
|---|---|
| Feature, enhancement, new capability | Match against feature-related schema keys in config (if any exist) |
| Bug, error, crash, unexpected behavior | Match against bug-related schema keys in config (if any exist) |
| Observation, friction, optimization, missing capability | Match against observation-related schema keys in config (if any exist) |
If the inferred schema key exists in the config, apply it as the item's tags value. If the key does not exist in the config (e.g., no bug-fix schema defined), leave tags empty — do not apply a tag that has no matching schema.
When no confident match can be inferred:
default exists in the config, apply it as the fallback — this lets users control what happens to unclassified itemsAskUserQuestion, listing the available schema keys from the configIf no config file exists, skip tagging entirely — all items will be schema-free.
Single item (bug, observation, standalone task, action item):
manage_items(operation="create", items=[{
title: "<inferred title>",
summary: "<1-2 sentence description from context>",
priority: "<inferred priority>",
tags: "<tags or omit>",
parentId: "<category container UUID>"
// Additional fields like `complexity` are optional — omit if not relevant
}])
Work tree (feature with 2+ distinct subtasks clearly described):
create_work_tree(
root={title, summary, priority, tags},
children=[{ref: "t1", title: "..."}, {ref: "t2", title: "..."}, ...],
parentId="<category container UUID>"
)
Default to single item when scope is unclear. Use create_work_tree only when the conversation explicitly names multiple distinct subtasks.
Check expectedNotes in the create response. For each note where required: true and role: "queue":
expectedNotes entry for a guidance field — use it as the authoring instruction for note content. Guidance takes precedence over free-form inference.manage_notes(operation="upsert", notes=[
{itemId: "<uuid>", key: "reproduction-steps", role: "queue", body: "..."},
{itemId: "<uuid>", key: "root-cause", role: "queue", body: "..."}
])
✓ Created: [title] (`short-id`)
Path: [container path, e.g. "Features" or "Project Root › Features"]
Tags: [tags, or "none"]
Notes pre-filled: [key names, or "none"]
If a new category container was created, add one line:
↳ Created new container: [category name] under [parent]
No containers found in overview
AskUserQuestionWrong container chosen for the item
manage_items(operation="update", items=[{id: "<uuid>", parentId: "<correct-container-uuid>"}])Tags not matching a schema — expectedNotes is empty
.taskorchestrator/config.yaml, or the config hasn't been loadednote_schemas: key exactly. If the config was recently changed, run /mcp to reconnect the serverExpected notes not returned after item creation
/mcp in Claude Code to reconnect the server, then retry the create operation