/team-workload-balancer
Balance team workload distribution
$ npx -y skills add qdhenry/Claude-Command-Suite --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/team-workload-balancer
Context preview
What this command does when you run it.
Balance team workload distribution
Command definition
team-workload-balancer.mdteam-workload-balancer
Balance team workload distribution
Purpose
This command analyzes team members' current workloads, skills, past performance, and availability to suggest optimal task assignments. It helps prevent burnout, ensures balanced distribution, and matches tasks to team members' strengths.
Usage
# Show current team workload
claude "Show workload balance for the engineering team"
# Suggest optimal assignment for new tasks
claude "Who should work on the new payment integration task?"
# Rebalance current sprint
claude "Rebalance tasks in the current sprint for optimal distribution"
# Capacity planning for next sprint
claude "Plan task assignments for next sprint based on team capacity"
Instructions
1. Gather Team Data
Collect information about team members:
class TeamAnalyzer {
async gatherTeamData() {
const team = {};
// Get team members from Linear
const teamMembers = await linear.getTeamMembers();
for (const member of teamMembers) {
team[member.id] = {
name: member.name,
email: member.email,
currentTasks: [],
completedTasks: [],
skills: new Set(),
velocity: 0,
availability: 100, // percentage
preferences: {},
strengths: [],
timeZone: member.timeZone
};
// Get current assignments
const activeTasks = await linear.getUserTasks(member.id, {
filter: { state: ['in_progress', 'todo'] }
});
team[member.id].currentTasks = activeTasks;
// Get historical data
const completedTasks = await linear.getUserTasks(member.id, {
filter: { state: 'done' },
since: '3 months ago'
});
team[member.id].completedTasks = completedTasks;
// Analyze git contributions
const gitStats = await this.analyzeGitContributions(member.email);
team[member.id].skills = gitStats.technologies;
team[member.id].codeContributions = gitStats.contributions;
}
return team;
}
async analyzeGitContributions(email) {
// Get commit history
const commits = await exec(`git log --author="${email}" --since="6 months ago" --pretty=format:"%H"`);
const commitHashes = commits.split('\n').filter(Boolean);
const stats = {
technologies: new Set(),
contributions: {
frontend: 0,
backend: 0,
database: 0,
devops: 0,
testing: 0,
documentation: 0
},
filesChanged: new Map()
};
// Analyze each commit
for (const hash of commitHashes.slice(0, 100)) { // Limit to recent 100 commits
const files = await exec(`git show --name-only --pretty=format: ${hash}`);
const fileList = files.split('\n').filter(Boolean);
for (const file of fileList) {
// Track technologies
if (file.match(/\.(js|jsx|ts|tsx)$/)) stats.technologies.add('JavaScript');
if (file.match(/\.(py)$/)) stats.technologies.add('Python');
if (file.match(/\.(java)$/)) stats.technologies.add('Java');
if (file.match(/\.(go)$/)) stats.technologies.add('Go');
// Categorize contributions
if (file.match(/\/(components|views|pages|frontend)\//)) stats.contributions.frontend++;
if (file.match(/\/(api|server|backend|services)\//)) stats.contributions.backend++;
if (file.match(/\/(migrations|schemas|models)\//)) stats.contributions.database++;
if (file.match(/\/(deploy|docker|k8s|.github)\//)) stats.contributions.devops++;
if (file.match(/\.(test|spec)\./)) stats.contributions.testing++;
if (file.match(/\.(md|docs)\//)) stats.contributions.documentation++;
// Track file expertise
stats.filesChanged.set(file, (stats.filesChanged.get(file) || 0) + 1);
}
}
return stats;
}
}2. Calculate Workload Metrics
Analyze current workload distribution:
class WorkloadCalculator {
calculateWorkload(teamMember) {
const metrics = {
currentPoints: 0,
currentTasks: teamMember.currentTasks.length,
inProgressPoints: 0,
todoPoints: 0,
blockedTasks: 0,
overdueTasksk: 0,
workloadScore: 0, // 0-100
capacity: 0
};
// Sum story points
for (const task of teamMember.currentTasks) {
const points = task.estimate || 3; // Default to 3 if no estimate
metrics.currentPoints += points;
if (task.state === 'in_progress') {
metrics.inProgressPoints += points;
} else if (task.state === 'todo') {
metrics.todoPoints += points;
}
if (task.blockedBy?.length > 0) {
metrics.blockedTasks++;
}
if (task.dueDate && new Date(task.dueDate) < new Date()) {
metrics.overdueTasksk++;
}
}
// Calculate velocity from historical data
const velocity = this.calculateVelocity(teamMember.completedTasks);
// Calculate workload score (0-100)
// Higher score = more overloaded
metrics.workloadScore = Math.min(100, (metrics.currentPoints / velocity.average) * 100);
// Calculate remaining capacity
metrics.capacity = Math.max(0, velocity.average - metrics.currentPoints);
// Adjust for blocked tasks
if (metrics.blockedTasks > 0) {
metrics.workloadScore *= 1.2; // Increase workload score for blocked work
}
return metrics;
}
calculateVelocity(completedTasks) {
// Group by sprint/week
const tasksByWeek = new Map();
for (const task of completedTasks) {
const weekKey = this.getWeekKey(task.completedAt);
if (!tasksByWeek.has(weekKey)) {
tasksByWeek.set(weekKey, []);
}
tasksByWeek.get(weekKey).push(task);
}
// Calculate points per week
const weeklyPoints = [];
for (const [week, tasks] of tasksByWeek) {
const points = tasks.reduce((sum, t) => sumRead more
team-workload-balancer
Balance team workload distribution
Purpose
This command analyzes team members' current workloads, skills, past performance, and availability to suggest optimal task assignments. It helps prevent burnout, ensures balanced distribution, and matches tasks to team members' strengths.
Usage
# Show current team workload claude "Show workload balance for the engineering team" # Suggest optimal assignment for new tasks claude "Who should work on the new payment integration task?" # Rebalance current sprint claude "Rebalance tasks in the current sprint for optimal distribution" # Capacity planning for next sprint claude "Plan task assignments for next sprint based on team capacity"
Instructions
1. Gather Team Data
Collect information about team members:
class TeamAnalyzer {
async gatherTeamData() {
const team = {};
// Get team members from Linear
const teamMembers = await linear.getTeamMembers();
for (const member of teamMembers) {
team[member.id] = {
name: member.name,
email: member.email,
currentTasks: [],
completedTasks: [],
skills: new Set(),
velocity: 0,
availability: 100, // percentage
preferences: {},
strengths: [],
timeZone: member.timeZone
};
// Get current assignments
const activeTasks = await linear.getUserTasks(member.id, {
filter: { state: ['in_progress', 'todo'] }
});
team[member.id].currentTasks = activeTasks;
// Get historical data
const completedTasks = await linear.getUserTasks(member.id, {
filter: { state: 'done' },
since: '3 months ago'
});
team[member.id].completedTasks = completedTasks;
// Analyze git contributions
const gitStats = await this.analyzeGitContributions(member.email);
team[member.id].skills = gitStats.technologies;
team[member.id].codeContributions = gitStats.contributions;
}
return team;
}
async analyzeGitContributions(email) {
// Get commit history
const commits = await exec(`git log --author="${email}" --since="6 months ago" --pretty=format:"%H"`);
const commitHashes = commits.split('\n').filter(Boolean);
const stats = {
technologies: new Set(),
contributions: {
frontend: 0,
backend: 0,
database: 0,
devops: 0,
testing: 0,
documentation: 0
},
filesChanged: new Map()
};
// Analyze each commit
for (const hash of commitHashes.slice(0, 100)) { // Limit to recent 100 commits
const files = await exec(`git show --name-only --pretty=format: ${hash}`);
const fileList = files.split('\n').filter(Boolean);
for (const file of fileList) {
// Track technologies
if (file.match(/\.(js|jsx|ts|tsx)$/)) stats.technologies.add('JavaScript');
if (file.match(/\.(py)$/)) stats.technologies.add('Python');
if (file.match(/\.(java)$/)) stats.technologies.add('Java');
if (file.match(/\.(go)$/)) stats.technologies.add('Go');
// Categorize contributions
if (file.match(/\/(components|views|pages|frontend)\//)) stats.contributions.frontend++;
if (file.match(/\/(api|server|backend|services)\//)) stats.contributions.backend++;
if (file.match(/\/(migrations|schemas|models)\//)) stats.contributions.database++;
if (file.match(/\/(deploy|docker|k8s|.github)\//)) stats.contributions.devops++;
if (file.match(/\.(test|spec)\./)) stats.contributions.testing++;
if (file.match(/\.(md|docs)\//)) stats.contributions.documentation++;
// Track file expertise
stats.filesChanged.set(file, (stats.filesChanged.get(file) || 0) + 1);
}
}
return stats;
}
}2. Calculate Workload Metrics
Analyze current workload distribution:
class WorkloadCalculator {
calculateWorkload(teamMember) {
const metrics = {
currentPoints: 0,
currentTasks: teamMember.currentTasks.length,
inProgressPoints: 0,
todoPoints: 0,
blockedTasks: 0,
overdueTasksk: 0,
workloadScore: 0, // 0-100
capacity: 0
};
// Sum story points
for (const task of teamMember.currentTasks) {
const points = task.estimate || 3; // Default to 3 if no estimate
metrics.currentPoints += points;
if (task.state === 'in_progress') {
metrics.inProgressPoints += points;
} else if (task.state === 'todo') {
metrics.todoPoints += points;
}
if (task.blockedBy?.length > 0) {
metrics.blockedTasks++;
}
if (task.dueDate && new Date(task.dueDate) < new Date()) {
metrics.overdueTasksk++;
}
}
// Calculate velocity from historical data
const velocity = this.calculateVelocity(teamMember.completedTasks);
// Calculate workload score (0-100)
// Higher score = more overloaded
metrics.workloadScore = Math.min(100, (metrics.currentPoints / velocity.average) * 100);
// Calculate remaining capacity
metrics.capacity = Math.max(0, velocity.average - metrics.currentPoints);
// Adjust for blocked tasks
if (metrics.blockedTasks > 0) {
metrics.workloadScore *= 1.2; // Increase workload score for blocked work
}
return metrics;
}
calculateVelocity(completedTasks) {
// Group by sprint/week
const tasksByWeek = new Map();
for (const task of completedTasks) {
const weekKey = this.getWeekKey(task.completedAt);
if (!tasksByWeek.has(weekKey)) {
tasksByWeek.set(weekKey, []);
}
tasksByWeek.get(weekKey).push(task);
}
// Calculate points per week
const weeklyPoints = [];
for (const [week, tasks] of tasksByWeek) {
const points = tasks.reduce((sum, t) => sumA comprehensive development toolkit designed following Anthropic's Claude Code Best Practices for AI-assisted software development.
Repo: qdhenry/Claude-Command-Suite
Other commands on claude-command-suite.
- /boundary-bbcr-fallback
Execute automatic BBCR (Collapse-Rebirth Correction) when knowledge boundaries are exceeded or reasoning fails.
Open command - /boundary-detect
Analyze semantic position relative to knowledge boundaries to prevent hallucination and identify uncertainty zones.
Open command - /boundary-heatmap
Generate a visual heatmap of knowledge boundaries showing safe zones, risk areas, and semantic coverage.
Open command - /boundary-risk-assess
Evaluate the current risk level and provide detailed analysis of potential hallucination or reasoning failure.
Open command - /boundary-safe-bridge
Find and construct semantic bridges to safely navigate from current position to target concept without crossing dangerous boundaries.
Open command - /optimize-prompt
Takes an input prompt and returns ONLY a token-optimized version that preserves meaning while minimizing token count. Based on LLM tokenization principles: common words tokenize more efficiently, unusual words break into more tokens, and conciseness reduces cost.
Open command

