orchestrate-prep
Automates bulk preparation of Jira tickets by drawing tasks and coordinating concurrent sub-agents to handle processing.
Install
mkdir -p .claude/skills/orchestrate-prep && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19311" && unzip -o skill.zip -d .claude/skills/orchestrate-prep && rm skill.zipInstalls to .claude/skills/orchestrate-prep
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Orchestrates bulk ticket preparation directly from the Jira source. USE FOR: batch ticket prep, bulk preparation, random ticket prep across (or within) work groups. Queries the Jira source for work groups, randomly draws unprocessed tickets matching the configured filters, dispatches up to N concurrent ticket-prep sub-agents, saves reports to a structured output directory, and reports completion back to the Jira source via the local-processing flag.Key capabilities
- →Batch prepare Jira tickets
- →Dispatch concurrent ticket-prep sub-agents
- →Save reports to structured directories
- →Sync completion status to Jira
- →Resolve work groups via fuzzy matching
How it works
The orchestrator draws unprocessed tickets from Jira, dispatches concurrent sub-agents to prepare reports, and updates the Jira source with a processed flag.
Inputs & outputs
When to use orchestrate-prep
- →Batch prepare Jira tickets for review
- →Automate bulk ticket status updates
- →Manage concurrent ticket processing tasks
About this skill
Orchestrate Prep Skill
Bulk-prepares FHIR Jira tickets for workgroup review by drawing unprocessed
tickets directly from the Jira source, dispatching concurrent ticket-prep
sub-agents, and reporting completion back to the source. There is no
markdown worklist — the Jira source's ProcessedLocally flag is the sole
persistent state.
Prerequisites
- The
fhir-augury-cliskill must be available — it is the canonical entry point for talking to the Jira source. Follow its fallback order (CLI → MCP → direct HTTP) for every data interaction. - The
ticket-prepskill must be available — it defines the per-ticket workflow and report format that each sub-agent runs. The report structure, all data-access steps, therepo-analysisbriefing dependency, and the disposition rules are all owned byticket-prepand must not be replicated here. - The orchestrator service and Jira source service must be reachable. Verify
with the CLI's
serviceshealth check before starting.
Inputs
The user must provide or you must determine:
- Output directory — where prepared reports are saved, organized by
work-group
nameCleansubfolder. Example:./cache/output/prepared/. - Concurrency (optional, default
4) — maximum number of concurrent sub-agents. - Work group (optional) — a single work group to restrict the run to.
May be supplied as the work group's
code,name, ornameClean(case insensitive). The orchestrator resolves it against the work-group list returned bylist-jira-workgroups. If omitted, tickets are drawn at random across all work groups (no per-WG round-robin — the Jira source's random draw handles distribution). - Statuses (optional, default
["Triaged"]) — list of Jira statuses to consider unprocessed candidates from. Common alternatives:["Submitted"],["Submitted","Triaged"]. - Projects (optional, default
["FHIR"]) — list of Jira project keys to draw from. Common alternatives:["UTG"],["FHIR","UTG"]. - Additional Jira filters (optional) — any subset of the
JiraLocalProcessingFiltershape (e.g.,priorities,types,specifications,labels,reporters,changeCategories,changeImpacts,relatedArtifacts). These are forwarded verbatim on every random-draw call. - Max tickets (optional) — overall cap on tickets to process this run. If omitted, run until the random draw returns 404 (no more unprocessed tickets matching the filter).
- Working directory (optional, default
temp/prep/relative to the repo root) — directory the orchestrator and each sub-agent may use for transient files. Created if it does not already exist. Must be writable on the current platform.
Work-Group Names
Work-group records returned by list-jira-workgroups include code,
name, and nameClean directly, plus a top-level
catalogJoinDegraded flag on the response envelope. Selectors may
be supplied as any of the three forms — the shared
WorkGroupResolver (see FhirAugury.Common.WorkGroups) accepts
code, name, or nameClean interchangeably and falls back to
fuzzy display-name matching (Jaro-Winkler ≥ 0.92) when no exact
match is found.
- Use
nameCleanverbatim for output subdirectory names — folder paths must stay stable across runs. - Use
namefor human-facing labels — README headings, run reports, and skill prose all render the display name. catalogJoinDegradedis a proceed-with-warning signal. Show a single top-of-run banner when set; do not abort. Every entry'snameCleanis still populated — the server falls back toHl7WorkGroupNameCleaner.Clean(name)when the HL7 catalog join is empty.
Jira-source operations used
All operations are reached via the fhir-augury-cli skill. Prefer the typed
jira-local-processing family (added in the 2026-04 sync); the generic
call form is documented as a fallback only.
| Purpose | CLI form (primary, typed) |
|---|---|
| Health check | {"command":"services","action":"health"} |
List work groups (with code/name/nameClean/issueCount) | {"command":"list-jira-workgroups"} |
| Draw a random unprocessed ticket | {"command":"jira-local-processing","action":"random-ticket","body":{...filter...}} |
| Mark a ticket processed locally | {"command":"jira-local-processing","action":"set-processed","body":{"key":"FHIR-XXXXX","processedLocally":true}} |
| Inspect processed flags (admin) | {"command":"jira-local-processing","action":"tickets","body":{...filter...}} |
| Clear all processed flags (admin) | {"command":"jira-local-processing","action":"clear-all-processed"} |
Valid action values for jira-local-processing (per
src/FhirAugury.Cli/Dispatch/Handlers/JiraLocalProcessingHandler.cs):
tickets, random-ticket, set-processed, clear-all-processed.
Fallback (older call form, still works): the resolver matches
Jira.local-processing.<name> first, then falls back to
local-processing.<name> — e.g.,
{"command":"call","source":"jira","operation":"local-processing.get-random-ticket","body":{...}}.
Use only when running against a build that predates the typed family.
Pre-run ingestion (optional)
If the bulk run needs fresh Jira data for a single project, scope an
ingest with the jiraProject parameter before starting:
fhir-augury-cli --json '{"command":"ingest","action":"trigger","sources":["jira"],"jiraProject":"FHIR"}'
Only the Jira leg of the fan-out receives the parameter; other sources
ingest normally. Omit jiraProject to ingest every configured project.
Random-draw filter shape
Build the body for local-processing.get-random-ticket per
JiraLocalProcessingFilter (in
src/FhirAugury.Source.Jira/Api/JiraContracts.cs). The orchestrator builds
one filter per draw using the configured inputs:
{
"workGroups": ["Orders & Observations"],
"processedLocally": false,
"statuses": ["Triaged"],
"projects": ["FHIR"]
}
- Always include
"processedLocally": false. - Include
workGroupsonly when a single work group was supplied. - Always include
statusesandprojects(defaulted if not supplied). - Merge any Additional Jira filters into this body before each draw.
A successful draw returns a JiraIssueSummaryEntry (key, workGroup,
title, status, …). A 404 means no unprocessed tickets remain matching
the filter — terminate draws (the run is exhausted).
Workflow
Step 1: Verify services and resolve inputs
- Health-check the orchestrator and Jira source via the CLI's
servicescommand. Abort with a clear message if either is down. - Fetch the work-group list with
list-jira-workgroups. Readcode,name,nameClean,issueCountfrom the JSON response — the CLI surfacesnameCleandirectly; do not re-derive it fromname. - If the user supplied a Work group, resolve it against
code/name/nameClean(case insensitive). Abort if no match. - Apply defaults: statuses →
["Triaged"], projects →["FHIR"], concurrency →4, working directory →temp/prep/relative to the repo root.
Step 2: Confirm with the user
Before any draws or directory creation, present a one-screen summary and
ask the user to confirm. Use the ask_user tool. Include every
resolved input so the user can verify defaults haven't masked a typo:
About to start bulk prep with the following configuration:
Output directory : C:\ai\git\fhir-augury-content\prepared\
Working directory: temp/prep/ (relative to repo root)
Work group : (all) — or: "Orders & Observations" (nameClean: OrdersAndObservations)
Statuses : Triaged
Projects : FHIR
Other filters : (none) — or list any additional filters
Concurrency : 4
Max tickets : (no cap) — or: 50
Proceed?
Choices: Yes, start, Cancel. Do not proceed on anything except
explicit confirmation.
Step 3: Create directories (cross-platform)
Both the output directory and the working directory must exist before dispatching sub-agents. Create them idempotently using a method that works on both Windows (PowerShell) and Unix (bash). Two acceptable patterns:
- Tool-based (preferred when available): use the agent's file-system tool to create directories — it abstracts the platform.
- Shell-based: detect the shell and run the appropriate command:
- PowerShell:
New-Item -ItemType Directory -Path $Path -Force | Out-Null - bash/sh:
mkdir -p "$Path"
- PowerShell:
If a single work group was supplied, also create
<OutputDir>/<nameClean>/ for that group. Otherwise, create each
work-group subdirectory lazily as tickets for that group are returned
by the random draw (avoids creating empty directories for inactive WGs).
The working directory should be passed through to each sub-agent so all transient files land in the same controlled location.
Step 4: In-flight tracking
Maintain in memory:
inFlight— set of ticket keys currently assigned to a running sub-agent. This is the only tracking required, and exists solely to prevent assigning the same ticket to two sub-agents (the random draw is unaware of in-flight state).completed/failedcounters for progress reporting.
Persist nothing locally; the Jira source's ProcessedLocally flag is the
durable state.
Step 5: Draw and dispatch loop
Loop until the in-flight set is empty AND the last draw returned 404, or the optional max-tickets cap is reached:
- While
len(inFlight) < concurrencyand the run is not exhausted:- Build the random-draw filter (work group if supplied,
processedLocally:false, statuses, projects, any user filters) and calllocal-processing.get-random-ticket. - Handle the response:
- 404 / empty → mark the run exhausted; stop drawing. Wait for in-flight agents to d
- Build the random-draw filter (work group if supplied,
Content truncated.
When not to use it
- →Replicating data-access logic defined in ticket-prep
- →Clearing processed flags for tickets outside current scope
Prerequisites
Limitations
- →Cached directories may use deprecated naming conventions
- →Requires writable working directory on the host
How it compares
It automates bulk ticket preparation using a persistent Jira flag rather than relying on a manual markdown worklist.
Compared to similar skills
orchestrate-prep side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| orchestrate-prep (this skill) | 0 | 2mo | Review | Intermediate |
| github-project-management | 4 | 5mo | Review | Advanced |
| create-plans | 1 | 8mo | Review | Intermediate |
| issue-manage | 2 | 4mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
github-project-management
ruvnet
Comprehensive GitHub project management with swarm-coordinated issue tracking, project board automation, and sprint planning
create-plans
glittercowboy
Create hierarchical project plans optimized for solo agentic development. Use when planning projects, phases, or tasks that Claude will execute. Produces Claude-executable plans with verification criteria, not enterprise documentation. Handles briefs, roadmaps, phase plans, and context handoffs.
issue-manage
catlog22
Interactive issue management with menu-driven CRUD operations. Use when managing issues, viewing issue status, editing issue fields, performing bulk operations, or viewing issue history. Triggers on "manage issue", "list issues", "edit issue", "delete issue", "bulk update", "issue dashboard", "issue history", "completed issues".
phasing
WellApp-ai
Group slices into risk-optimized phases with timeline generation
code-task-generator
mikeyobrien
Generates structured .code-task.md files from descriptions or PDD implementation plans. Auto-detects input type, creates properly formatted tasks with Given-When-Then acceptance criteria.
flow-next
gmickel
Manage .flow/ tasks and epics. Triggers: 'show me my tasks', 'list epics', 'what tasks are there', 'add a task', 'create task', 'what's ready', 'task status', 'show fn-1-add-oauth'. NOT for /flow-next:plan or /flow-next:work.