add-component
Checklists for adding a new MCP tool, a new Flyway database migration, or a new Gradle dependency to the Task Orchestrator…
Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.
$ npx -y skills add jpicklyk/task-orchestrator --skill schema-workflow --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/schema-workflowContext preview
The summary Claude sees to decide when to auto-load this skill.
Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.
name: schema-workflow description: "Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes." user-invocable: false
Drive any schema-tagged MCP work item through its gate-enforced lifecycle. This skill is schema-driven — it reads note requirements and authoring guidance from the item's tag schema at runtime, never hardcoding what notes should contain.
**When this skill applies:** Any item whose `type` field matches a schema defined in `work_item_schemas:` in `.taskorchestrator/config.yaml`, or whose tags match a schema in `note_schemas:` (legacy). Items without a matching type or tags advance freely (no gates).
---
Start by loading the item's context:
get_context(itemId="<uuid>")
The response tells you everything needed to proceed:
| Field | What it means | |-------|--------------| | `currentRole` | Which phase the item is in (queue, work, review, terminal) | | `canAdvance` | Whether the gate is satisfied for the next `start` trigger | | `missing` | Required notes not yet filled for the current phase | | `expectedNotes` | All notes defined by the schema, with `exists` and `filled` status (keys-only — no description/guidance/skill) | | `guidanceKey` | Key of the first unfilled required note with guidance; resolve its text via `query_items(operation="schema", itemId=...)` | | `noteSchema` | The full schema definition matching the item's tags |
If `currentRole` is `terminal`, the item is already complete — nothing to do.
If `noteSchema` is null or empty, no schema matches the item. This means either:
Inform the user: "No schema found for this item's type/tags. Use `/manage-schemas` to configure gate workflows." The item can still advance freely — this is non-blocking, but gate enforcement won't apply.
---
Each phase follows the same pattern: **fill required notes, then advance.**
From `get_context`, check the `missing` array. These are the required notes that must be filled before the gate allows advancement.
If `missing` is empty and `canAdvance` is true, skip to Step 3.
For each missing note, `guidanceKey` names the note with authoring guidance; resolve its text via `query_items(operation="schema", itemId=...)` and follow it.
manage_notes(
operation="upsert",
notes=[{
itemId: "<uuid>",
key: "<note-key>",
role: "<note-role>",
body: "<content following the resolved guidance>"
}]
)Keep the body distilled prose; route verbatim artifacts (test output, diffs, logs) through `bodyFromFile` instead of pasting them inline.
**How guidanceKey works:**
**Skill-assisted note filling:**
**Batch filling:** If you already know the content for multiple notes (e.g., from a completed plan or implementation), fill them all in one `manage_notes` call. You only need to re-check `get_context` between notes when you need the next `guidanceKey` for authoring direction.
advance_item(transitions=[{ itemId: "<uuid>", trigger: "start" }])The response confirms the transition:
| Field | Check | |-------|-------| | `applied` | Must be `true` — if `false`, the gate rejected (notes still missing) | | `newRole` | Phase you moved to (`previousRole` is omitted from success results) | | `expectedNotes` | Notes required for the new phase (fill these next) | | `unblockedItems` | Other items that were waiting on this one |
**If the gate rejects:** The response lists which notes are missing. Fill them (Step 2), then retry. Do not call `get_context` first — `advance_item` already told you what's needed.
**If the response instead has `applied: false` with `errorCode: "resource_unavailable"` (`errorKind: "transient"`):** this is NOT a note-gate rejection — do not fill more notes and do not retry the same call. A shared resource this item declares via a `resources:` trait is currently held by another item entering WORK. Report the contended `contendedResources` key(s) (and `retryAfterMs` if present) back to the orchestrator/user rather than spin-retrying; see `/status-progression` → "resource_unavailable" for the full recovery pattern.
After advancing, check whether the new phase has its own required notes:
---
The schema defines which not
Server-enforced workflow discipline for AI agents. Prompt-based frameworks hope the LLM follows instructions. This one blocks the call if it doesn't.
Checklists for adding a new MCP tool, a new Flyway database migration, or a new Gradle dependency to the Task Orchestrator…
Compatibility assessment for items with the needs-api-compat-review trait. Evaluates the MCP tool surface and the REST surface…
Guides the full lifecycle of a feature-implementation tagged MCP item (the feature container) — from queue through review.…
End-to-end workflow for taking MCP work items from backlog to merged PR. Handles git branching, schema-driven planning,…
SQLite migration assessment for items with the needs-migration-review trait. Evaluates schema changes, table recreation patterns,…
Performance impact assessment for items with the needs-perf-review trait. Evaluates hot paths, query patterns, and measurement…