shuffling-projects

star 8

Reorganizes work items when priorities change - move items between sprints or projects, rebalance workload, and update dependencies. Use when sprint scope changes, priorities shift, or work needs redistribution.

memyselfandm By memyselfandm schedule Updated 2/3/2026

name: shuffling-projects description: Reorganizes work items when priorities change - move items between sprints or projects, rebalance workload, and update dependencies. Use when sprint scope changes, priorities shift, or work needs redistribution.

Shuffling Projects

Reorganize work items between projects, sprints, or releases while maintaining relationships.

Usage

/shuffling-projects [options]

Options

Movement:

  • --from PROJECT: Source project/sprint
  • --to PROJECT: Destination project/sprint
  • --items IDs: Specific items to move (comma-separated)

Filters:

  • --status STATUS: Only move items with status
  • --priority PRIORITY: Only move items with priority
  • --unassigned: Only move unassigned items

Actions:

  • --dry-run: Preview changes without applying
  • --update-deps: Also move blocking items if needed

Examples

# Move items between sprints
/shuffling-projects --from CCC-123.S01 --to CCC-123.S02 --items CCC-456,CCC-457

# Move all todo items from sprint
/shuffling-projects --from CCC-123.S01 --to CCC-123.S02 --status todo

# Preview rebalancing
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --dry-run

# Move with dependencies
/shuffling-projects --items CCC-456 --to CCC-123.S02 --update-deps

Workflow

Step 1: Gather Context

source = pm_context.get_project(from_project) if from_project else None
destination = pm_context.get_project(to_project)

if items_specified:
    items_to_move = [pm_context.get_item(id) for id in item_ids]
else:
    items_to_move = pm_context.list_items({
        project: source.id,
        status: status_filter,
        priority: priority_filter
    })

Step 2: Validate Moves

issues = []

for item in items_to_move:
    # Check dependencies
    if item.blocked_by:
        for blocker_id in item.blocked_by:
            blocker = pm_context.get_item(blocker_id)
            if blocker.project != destination.id:
                if update_deps:
                    items_to_move.append(blocker)
                else:
                    issues.append({
                        "item": item,
                        "issue": f"Blocked by {blocker.key} in different project",
                        "resolution": "Use --update-deps to move blocker too"
                    })

    # Check if item blocks others staying behind
    if item.blocks:
        for blocked_id in item.blocks:
            blocked = pm_context.get_item(blocked_id)
            if blocked not in items_to_move:
                issues.append({
                    "item": item,
                    "issue": f"Blocks {blocked.key} which is staying in source",
                    "resolution": "Move blocked item too or remove dependency"
                })

Step 3: Preview Changes

## Shuffle Preview

### Moving {count} items
From: {source.name}
To: {destination.name}

### Items to Move
{for item in items_to_move:}
- [{item.key}] {item.title}
  - Status: {item.status}
  - Dependencies: {item.blocked_by}

### Validation Issues
{for issue in issues:}
⚠️ [{issue.item.key}]: {issue.issue}
   Resolution: {issue.resolution}

### Impact
- Source will have: {source_remaining} items
- Destination will have: {dest_total} items

Step 4: Execute Moves

if not dry_run and not issues:
    for item in items_to_move:
        pm_context.assign_to_project(item.id, destination.id)

        # Also move children
        children = pm_context.get_children(item.id)
        for child in children:
            pm_context.assign_to_project(child.id, destination.id)

        # Add comment
        pm_context.add_comment(
            item.id,
            f"Moved from {source.name} to {destination.name}"
        )

Step 5: Report

## Shuffle Complete

### Moved {count} items
From: {source.name} → To: {destination.name}

### Items Moved
{for item in moved:}
✅ [{item.key}] {item.title}

### Updated Dependencies
{for dep in updated_deps:}
🔗 {dep.from_item} → {dep.to_item}

### Project Balances

| Project | Before | After |
|---------|--------|-------|
| {source.name} | {before} | {after} |
| {destination.name} | {before} | {after} |

Common Use Cases

Sprint Scope Reduction

# Move uncompleted items to next sprint
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --status todo

Priority Escalation

# Move urgent items to current sprint
/shuffling-projects --items CCC-456 --to "Current Sprint" --update-deps

Workload Rebalancing

# Move items from overloaded sprint
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --unassigned

Release Rescheduling

# Move features to next release
/shuffling-projects --from "v1.0" --to "v1.1" --items FEAT-1,FEAT-2,FEAT-3

Error Handling

Issue Resolution
Dependency in different project Use --update-deps or resolve manually
Item blocks work in source Move blocked item or remove dependency
Circular dependency Report and require manual resolution
Project not found Verify project name/ID
Install via CLI
npx skills add https://github.com/memyselfandm/cconami --skill shuffling-projects
Repository Details
star Stars 8
call_split Forks 1
navigation Branch main
article Path SKILL.md
More from Creator
memyselfandm
memyselfandm Explore all skills →