Agent skill

Schema Workflow

by jpicklyk in jpicklyk/task-orchestrator

Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.

MITAuto-check passedAgent Workflows

Install Schema Workflow

skills CLI
$ npx skills add jpicklyk/task-orchestrator --skill schema-workflow -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jpicklyk/task-orchestrator schema-workflow --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/schema-workflow .claude/skills/schema-workflow && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
schema-workflow
GitHub stars
207
Token cost
~3.2k tokens
SKILL.md length
1,610 words
Files
1
Skills in repo
28
Repo updated
First seen
Licence
MIT

At a glance

Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.

  • Works in 4 steps: Identify missing notes → Fill notes using guidanceKey → Advance to the next phase → …
  • Tasks that involve MCP servers
  • SKILL.md covers Entry Point, Phase Progression Loop, Phase-Specific Guidance and Orchestrator vs Subagent…, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Schema Workflow is an agent skill from jpicklyk/task-orchestrator. Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Server-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what… The licence is MIT.

When your agent uses it

  • Tasks that involve MCP servers

Example prompts

  • “/schema-workflow”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Identify missing notes
  2. Fill notes using guidanceKey
  3. Advance to the next phase
  4. Repeat or finish

What it can do on your machine

Read from SKILL.md and the folder at commit b688ea0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Schema Workflow loads about 3.2k tokens when it runs. Until then it costs about 39 tokens; SKILL.md has 1,610 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~39
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jpicklyk/task-orchestrator at commit b688ea0, republished under its MIT licence (© jpicklyk). 1,610 words, ~3,165 tokens.

Download SKILL.mdSave it as .claude/skills/schema-workflow/SKILL.md (or your agent's skills folder).
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

Schema Workflow

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).


Entry Point

Start by loading the item's context:

get_context(itemId="<uuid>")

The response tells you everything needed to proceed:

FieldWhat it means
currentRoleWhich phase the item is in (queue, work, review, terminal)
canAdvanceWhether the gate is satisfied for the next start trigger
missingRequired notes not yet filled for the current phase
expectedNotesAll notes defined by the schema, with exists and filled status (keys-only — no description/guidance/skill)
guidanceKeyKey of the first unfilled required note with guidance; resolve its text via query_items(operation="schema", itemId=...)
noteSchemaThe 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:

  • .taskorchestrator/config.yaml doesn't exist or has no work_item_schemas or note_schemas section
  • The item's type field doesn't match any configured schema key in work_item_schemas
  • The item's tags don't match any configured schema key in note_schemas (legacy fallback)
  • No default schema exists as a fallback

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.


Phase Progression Loop

Each phase follows the same pattern: fill required notes, then advance.

Step 1 — Identify missing notes

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.

Step 2 — Fill notes using guidanceKey

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:

  • get_context returns guidanceKey (a note key) for the first unfilled required note
  • After filling that note, call get_context again to get the key for the next one
  • Resolve the key's guidance text via query_items(operation="schema", itemId=...)
  • If guidanceKey is null, no unfilled required note has guidance — use the note's description (also from the schema op) as a general guide

Skill-assisted note filling:

  • If the get_context response includes skillPointer (a non-null string), invoke that skill via the Skill tool before filling the note
  • The skill provides a structured evaluation workflow — follow its steps, then use the output to fill the note
  • skillPointer is derived from the first unfilled required note's skill field in the schema
  • If skillPointer is null, use the resolved guidanceKey text as the authoring guide
  • description/guidance/skill are not in expectedNotes (keys-only) — fetch them via query_items(operation="schema", itemId=...)

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.

Step 3 — Advance to the next phase
advance_item(transitions=[{ itemId: "<uuid>", trigger: "start" }])

The response confirms the transition:

FieldCheck
appliedMust be true — if false, the gate rejected (notes still missing)
newRolePhase you moved to (previousRole is omitted from success results)
expectedNotesNotes required for the new phase (fill these next)
unblockedItemsOther 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.

Step 4 — Repeat or finish

After advancing, check whether the new phase has its own required notes:

  • If expectedNotes in the advance response shows unfilled required notes → loop back to Step 2
  • If newRole is terminal → the item is complete
  • Otherwise, continue work in the new phase and fill notes as progress is made

Phase-Specific Guidance

The schema defines which notes belong to which phase. Common patterns:

PhaseTypical purposeWhen notes get filled
queueRequirements, design, reproduction stepsDuring planning, before implementation starts
workImplementation notes, test results, fix summariesDuring or after implementation
reviewDeploy notes, verification resultsAfter implementation, during validation

The actual note keys and content requirements vary per schema — always check expectedNotes rather than assuming specific keys exist.


Show full SKILL.md (790 more words)Show less

Orchestrator vs Subagent Responsibility

Protocol auto-injection is agent-type gated. The subagent-start hook injects the Agent-Owned-Phase Protocol only when the dispatched subagent's agent_type resolves to implementer or reviewer (bare, or plugin-qualified like task-orchestrator:implementer) — see current/docs/integration-guides/plugin-skills-hooks.md → "Execution modes". Dispatching any other agent type (general-purpose, Explore, Plan, a project-local research agent, etc.) for a work/review phase gets NO auto-injected protocol. When dispatch.agent is unset (see the dispatch-profile note below), prefer dispatching the phase owner explicitly as task-orchestrator:implementer (work) / task-orchestrator:reviewer (review) so the protocol is injected automatically; if a different agent type is genuinely required, include the Agent-Owned-Phase Protocol text directly in that dispatch's prompt instead of relying on injection. The hook is also silent for the entire duration of a headless ralph iteration (TASK_ORCHESTRATOR_MODE=headless-iteration), which never dispatches subagents in the first place.

Orchestrator (this skill's primary user):

  • Fills queue-phase notes (requirements, design) during planning
  • Dispatches implementation agents with the item UUID
  • When dispatching the phase owner (implementer on work, reviewer on review), reads the profile for the phase being dispatched INTO — advance_item's dispatch for newRole once the transition is already made, or query_items(operation="schema", itemId=...) → dispatch.<phase> when the agent will enter the phase itself (agent-owned-phase protocol, item still in queue at dispatch; get_context only returns the CURRENT role's profile, the wrong one in that case) — and honors it: subagent_type = dispatch.agent when set, and ALWAYS still passes model explicitly (dispatch.model if set, else its own model policy) regardless of whether agent is set, since effort has no Agent-tool parameter and is advisory unless agent names a definition carrying that effort
  • After implementation agents return, advances the item via advance_item(start) and inspects newRole:
    • If review: dispatches review agents or performs inline review
    • If terminal: item completed through a lightweight lifecycle (no review-phase notes in schema)
  • Performs the final terminal transition (review→terminal) after the review verdict
  • Uses this skill for queue-phase note filling and terminal advancement

Implementation agents (agent-owned-phase model):

  • Receive the full phase-aware protocol automatically via the subagent-start hook
  • Call advance_item(start) once to enter work phase (queue→work)
  • Fill work-phase notes using the JIT progression loop (guidanceKey + skillPointer)
  • Return to the orchestrator — do NOT call advance_item again
  • The orchestrator advances the item to the next phase and handles all further routing

Review agents (dispatched into an item already in review):

  • Receive the subagent-start hook, which tells them to call advance_item(start)
  • Since the item is already in review, advance_item returns applied: false — this is expected
  • The hook's fallback applies: call get_context(itemId=...) to get guidance instead
  • Fill review-phase notes (e.g., review-checklist), report verdict, return
  • Do NOT call advance_item again — the orchestrator handles the terminal transition

Key invariant: Agents own phase entry (one advance_item(start) call to enter their assigned phase). When a run plan assigns several seats to one phase (run-wave), only that phase's entry seat makes this call; in-phase seats (test author, declarations extractor) and read-only seats never call advance_item; the orchestrator owns every later transition. The orchestrator owns all phase-to-phase transitions — advancing the item, inspecting the schema to determine the next phase (review or terminal), and dispatching phase-appropriate agents. Review agents fill review-phase notes and return — they do not advance items.


Creating a New Schema Item

When creating a new item with a schema, set the type field to the schema key:

manage_items(
  operation="create",
  items=[{ title: "...", type: "<schema-key>", priority: "medium" }]
)

The type field is the primary schema selector — it maps directly to a key in work_item_schemas:. Tags can still be used for additional categorization and as a legacy schema fallback, but type takes precedence.

Check expectedNotes in the response — it lists all notes the schema requires across all phases. Begin filling queue-phase notes immediately, then follow the progression loop above.


Error Recovery

Gate rejection: advance_item returns applied: false with the missing note keys. Fill them and retry — no need for a separate get_context call.

Resource-lease contention: advance_item returns applied: false with errorCode: "resource_unavailable" and errorKind: "transient" instead of missing notes — distinct from a gate rejection. Do not fill notes in response to this; it means another item currently holds a resource this item's traits declare. Wait (retryAfterMs is a hint) or work a different item; never spin-retry the same advance_item call.

Wrong phase notes: If you try to upsert a note with a role that doesn't match the item's current role, the note is still created (notes are not phase-locked), but it won't satisfy a gate for a different phase. Always match the note's role to the schema definition.

Blocked items: If advance_item fails because the item is blocked by a dependency, resolve the blocking item first. Use get_blocked_items or query_dependencies to diagnose.

No schema match: Items whose type doesn't match any schema in work_item_schemas and whose tags don't match any schema in note_schemas have no gate enforcement. advance_item will succeed without notes. This is by design — only typed or tagged items require structured note workflows.

© jpicklyk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in claude-plugins/task-orchestrator/skills/schema-workflow of jpicklyk/task-orchestrator.

Open the folder on GitHubat commit b688ea0

Compare with similar skills

Schema Workflow next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Schema Workflow compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Schema Workflow this skilljpicklyk/task-orchestrator207—~3.2kAutomated safety check: PassMIT
MCP Server Builderanthropics/skills180k62 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT
MCP Integration for Pluginsanthropics/claude-plugins-official37k11 repos~3.1kAutomated safety check: PassApache-2.0
Fastmcp Client CLIPrefectHQ/fastmcp28k1 repos~823Automated safety check: PassApache-2.0
Crush Configurationcharmbracelet/crush29k—~3.7kAutomated safety check: PassCustom licence

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 62 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.

    37k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed
  • Fastmcp Client CLI

    PrefectHQ/fastmcp

    Query and invoke tools on MCP servers using fastmcp list and fastmcp call.

    28k GitHub starsUsed in 1 repo~823 tokens
    Agent WorkflowsAuto-check passed
  • Crush Configuration

    charmbracelet/crush

    Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.

    29k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Context Mode Output Sandbox

    mksglu/context-mode

    Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.

    26k GitHub stars~4.1k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from jpicklyk/task-orchestrator

All 28 skills in this repo
  • Task Orchestrator Server Setup

    jpicklyk/task-orchestrator

    Walks through how to launch and reach the MCP Task Orchestrator server container: transport, REST API, port publishing, config mounts and config-sync.

    207 GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Run Wave

    jpicklyk/task-orchestrator

    Resolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification.

    207 GitHub stars~4.7k tokensUpdated yesterday
    Auto-check passed
  • Adopt Project Scope Migration

    jpicklyk/task-orchestrator

    Migrates an existing unscoped Task Orchestrator database to the project-scoping convention in place, creating one project anchor root and re-parenting work trees under it after a mandatory dry run.

    207 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Bulk Task Completion

    jpicklyk/task-orchestrator

    Completes or cancels a whole feature subtree, a named list of items, or a batch of stale work items at once, previewing the impact and warning before force-completing anything active.

    207 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed
  • Task Orchestrator Item Creator

    jpicklyk/task-orchestrator

    Creates an MCP work item from conversation context, anchoring it under the right container, inferring type and priority and pre-filling the required notes.

    207 GitHub stars~4k tokensUpdated yesterday
    Auto-check passed
  • Work Item Dependency Manager

    jpicklyk/task-orchestrator

    Views, creates, deletes and diagnoses BLOCKS, IS_BLOCKED_BY and RELATES_TO links between MCP work items, including why an item cannot start.

    207 GitHub stars~3.5k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Schema Workflow

What does Schema Workflow do?

Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes. Schema Workflow is an agent skill from jpicklyk/task-orchestrator. Internal, invoked from the orchestration context: drives a schema-typed MCP item through its gate-enforced phases, filling required notes.

When should I use Schema Workflow?

Schema Workflow fits situations like: tasks that involve MCP servers.

How do I install Schema Workflow in Claude Code?

Run `npx skills add jpicklyk/task-orchestrator --skill schema-workflow -a claude-code`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/schema-workflow in jpicklyk/task-orchestrator) into .claude/skills/schema-workflow in your project. Claude Code loads it when a task matches its description.

How do I install Schema Workflow in Codex?

Run `npx skills add jpicklyk/task-orchestrator --skill schema-workflow -a codex`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/schema-workflow in jpicklyk/task-orchestrator) into .agents/skills/schema-workflow in your project. Codex loads it when a task matches its description.

Can I use Schema Workflow in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jpicklyk/task-orchestrator --skill schema-workflow -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/schema-workflow, .gemini/skills/schema-workflow, .github/skills/schema-workflow and .opencode/skills/schema-workflow in your project.

What does Schema Workflow need to run?

SKILL.md names no scripts, command-line tools or credentials: Schema Workflow is instructions for the agent only.

Does Schema Workflow access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Schema Workflow safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Schema Workflow use?

Schema Workflow is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Schema Workflow use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Schema Workflow?

Skills that share tags, products or a category with Schema Workflow: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 37k stars) and Fastmcp Client CLI (PrefectHQ/fastmcp, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Schema Workflow?

jpicklyk (a GitHub user) maintains it in jpicklyk/task-orchestrator, which has 207 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 6, 2026.

Source: jpicklyk/task-orchestrator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.