LogoSkills

ZenHub Pipeline Registry

---

ZenHub pipeline dynamic query guide


Workspace Info Query#

Pipeline ID, Repository ID, and Issue Type ID differ per workspace. Dynamically query based on the X-zh-workspace configured in the project root's .mcp.json:

// Pipeline ID + Repository ID
const workspace = await mcp__zenhub__getWorkspacePipelinesAndRepositories();
// workspace.pipelines → [{ id, name }, ...]
// workspace.repositories → [{ id, name }, ...]

// Issue Type ID
const issueTypes = await mcp__zenhub__getIssueTypes();
// issueTypes → [{ id, name }, ...]  (Epic, Feature, Bug, Task, Sub-task, ...)

Query Issue Type IDs via mcp__zenhub__getIssueTypes().


Pipeline Transitions by Workflow#

Issue Processing Workflow#

New Issues → Product Backlog → Sprint Backlog → In Progress → Review/QA → [Auto Close on merge]

Note: Done pipeline is not used. Issues auto-close via GitHub Closes # keyword on PR merge.

StepTriggerPipeline
Issue creationAutomaticNew Issues
Backlog registrationAfter triageProduct Backlog
Sprint assignmentSprint planningSprint Backlog
Start workOn branch creationIn Progress
Request review After PR creation Review/QA
Complete PR merge → GitHub auto Close Done (not used)

MCP Call Examples#

// Query workspace info (once at session start)
const workspace = await mcp__zenhub__getWorkspacePipelinesAndRepositories();
const inProgress = workspace.pipelines.find(p = >   p.name ===  " In Progress " );
const reviewQA = workspace.pipelines.find(p = >   p.name ===  " Review/QA " );

// On work start (move to In Progress)
mcp__zenhub__moveIssueToPipeline({
  issueId:  " {issue.graphqlId} " ,
  pipelineId: inProgress.id
})

// After PR creation (move to Review/QA)
mcp__zenhub__moveIssueToPipeline({
  issueId:  " {issue.graphqlId} " ,
  pipelineId: reviewQA.id
})

// After PR merge: No Done pipeline move needed
// Issue auto-closes via GitHub  " Closes # "   keyword

GitHub Issue Creation Example#

const workspace = await mcp__zenhub__getWorkspacePipelinesAndRepositories();
const repoId = workspace.repositories.find(r = >   /* select GitHub repo */).id;
const issueTypes = await mcp__zenhub__getIssueTypes();

mcp__zenhub__createGitHubIssue({
  repositoryId: repoId,
  title:  " feat(scope): Feature title " ,
  body:  " ## Summary\n...\n\n## Acceptance Criteria\n- [ ] ... " ,
  issueTypeId: issueTypes.find(t = >   t.name ===  " Feature " ).id,
  labels: [ " feature " ],
})

Workspace Initialization#

To set up a new workspace with the standard pipeline structure, use the /zenhub:init-workspace command:

/zenhub:init-workspace

Standard structure:

New Issues → Icebox → Product Backlog → Sprint Backlog → In Progress → Review/QA

If a Done pipeline exists, internal issues are Closed and manual deletion is guided.


Referencing Skills/Agents#

Files that reference this registry:

FilePurpose
commands/dev/run.mdFull workflow
commands/dev/batch.mdSequential issue processing
commands/dev/issue.mdSingle issue processing
commands/agents/dev/issue-state-agent.mdIssue state management
commands/agents/issue-processor-agent.mdIssue processing agent
commands/zenhub/init-workspace.mdWorkspace pipeline initialization

Important Notes#

  1. No Hardcoded IDs: All IDs must be dynamically queried via MCP tools
  2. .mcp.json Based: Per-project workspace is determined by the X-zh-workspace header in .mcp.json
  3. ID Query: All IDs obtained via getWorkspacePipelinesAndRepositories() + getIssueTypes() combination