From virtual-team
Implements backlog interface with external services (GitHub Issues, Linear, Jira) via gh CLI or MCP connectors. Bridges local docs (specs, plans) with external status, priority, labels. Activates when stack.md has external backlog_config.
npx claudepluginhub ovargas/virtual-team --plugin virtual-teamThis skill uses the workspace's default tool permissions.
```yaml
Defines abstract interface for backlog operations: list, get, create items, track status/progress, generate IDs. Load before read/write ops; delegates to local/external implementations.
Manages backlog items across GitHub Issues, Linear, and Beads backends via unified CREATE/LIST/UPDATE/COMPLETE operations. Configure task_management in .agents.yml for team workflows with dependencies.
Manages backlog items synced to GitHub Issues via MCP tools. Create, list, view, update, close, resolve, groom, and sync without direct file edits.
Share bugs, ideas, or general feedback.
implements: backlog
stack: external
This skill implements the backlog interface using an external project management service (GitHub Issues, Linear, Jira, etc.). It reads the service type and state mappings from stack.md.
Design principle: Local is the source of truth for documents (specs, plans, contracts). The external service is the source of truth for item status and priority ordering. This skill bridges both.
gh CLI for GitHub Issuesbacklog_config section in stack.md properly configuredstack.mdbacklog: external
backlog_config:
service: github-issues # github-issues | linear | jira
project: my-org/my-repo # GitHub: owner/repo, Linear: project slug, Jira: project key
states:
ready: "Backlog" # Service-specific state name for each workflow status
doing: "In Progress"
implemented: "In Review"
done: "Done"
labels:
feature_prefix: "feat:" # Label prefix for feature grouping (e.g., "feat:FEAT-005")
service_prefix: "svc:" # Label prefix for service tagging (e.g., "svc:be")
group_prefix: "group:" # Label prefix for story groups
issue_type: "Story" # Jira only: issue type for stories
External service manages: Item status, priority ordering, team comments/feedback, assignment, labels, sprint planning.
Local files manage: Document references (spec paths, plan paths).
The bridge: Each backlog item has an external issue ID AND a local story ID. The external issue links to the local spec file. Local operations update the external service after each status change.
For every operation, the AI:
stack.md to get the backlog_configservice:
gh CLI commands (already available, no MCP needed)Intent: Get items from the external service matching the filter.
status: ready → query for issues in the state configured as backlog_config.states.ready)For GitHub Issues:
gh issue list --repo {project} --state open --label "{label}" --json number,title,state,labels
For Linear/Jira: Use the appropriate MCP tool to list/search issues with the matching state and labels.
Priority ordering: The external service's ordering is authoritative. Items are returned in the order the service provides them.
Intent: Get a single item with full metadata.
Intent: Count items per status for a feature.
feat:FEAT-005)Intent: Generate the next story ID.
S-NNN pattern)S-{max+1}Intent: Create new issues in the external service for each backlog item.
For each item:
{id}: {title}ready stateSpec: {spec_path}Do NOT create local docs/backlog.md entries. The external service IS the backlog. However, maintain a lightweight local index file at docs/backlog-index.md that maps story IDs to external issue IDs for quick reference:
# Backlog Index
| Story | External | Feature | Status |
|---|---|---|---|
| S-010 | #42 | FEAT-005 | ready |
| S-011 | #43 | FEAT-005 | ready |
Intent: Move an item from ready to doing.
doing state in the external servicedocs/backlog-index.md status columnIntent: Mark an item as code-complete, pending PR.
implemented state in the external serviceIntent: Mark an item as done.
done state in the external serviceThese are ACTIVE for external backends:
Update the issue status in the external service. Map the workflow status to the configured state name.
Already called inline by start(), complete(), etc. — this operation exists for cases where the status needs to be updated separately (e.g., fixing a stale status).
Create or update a parent issue/epic in the external service:
{feature_id}: {title}Same as create(items) but specifically for syncing after /virtual-team:vt-feature creates stories.
Retrieve comments from the external issue. Present them to the AI as context:
Team feedback on {id}:
- [{author}] ({date}): {comment text}
- [{author}] ({date}): {comment text}
Called by /virtual-team:vt-implement before starting a story — ensures the AI sees any QA feedback, PO notes, or team discussion.
Retrieve the current issue ordering from the external service. This overrides any local ordering:
backlog: local in stack.md."/virtual-team:vt-contracts sync or create it manually."Never fall back to local silently. If the external service is unavailable, tell the user explicitly. Using local as a silent fallback would cause the two sources to diverge.
To migrate from backlog: local to backlog: external:
backlog_config in stack.mddocs/backlog.md, create an issue in the external servicedocs/backlog-index.md from the syncdocs/backlog.md as a read-only archive (rename to docs/backlog-archive.md)stack.md to backlog: external