Operations

Team Presets & Workflows

Team standardization and collaboration. Plugin bundles, workflow templates, automated onboarding, and multi-layer configuration hierarchy (org/team/project/individual).

~25 min read 5,000 words Production-Ready

Production Playbook for Team Leads and Engineering Managers

Standardizing Claude Code configurations across engineering teams accelerates onboarding, ensures consistency, and enables collaborative development. This playbook provides team plugin bundles, workflow templates, configuration management strategies, and automation for distributed teams.

Team Configuration Strategy

Configuration Layers

graph TB
    A[Organization Config] --> B[Team Config]
    B --> C[Project Config]
    C --> D[Individual Config]

A --> E[Global Plugins]

B --> F[Team-Specific Plugins]

C --> G[Project Plugins]

D --> H[Personal Preferences]

Configuration Precedence:

  • Organization - Security policies, approved plugins, compliance settings
  • Team - Team-specific workflows, shared plugins, coding standards
  • Project - Project dependencies, custom agents, specific tools
  • Individual - Personal preferences, API keys, editor settings

Team Configuration File

// .claude/team-config.json
{
  "teamId": "engineering-team-backend",
  "organization": "acme-corp",
  "version": "1.0.0",

"plugins": {

"required": [

"code-reviewer@claude-code-plugins-plus",

"test-automator@claude-code-plugins-plus",

"security-auditor@claude-code-plugins-plus"

],

"recommended": [

"performance-engineer@claude-code-plugins-plus",

"database-optimizer@claude-code-plugins-plus"

],

"forbidden": [

"untrusted-plugin" // Security risk

]

},

"workflows": {

"default": "code-review-workflow",

"available": [

"code-review-workflow",

"hotfix-workflow",

"feature-development-workflow"

]

},

"standards": {

"coding": {

"linter": "eslint",

"formatter": "prettier",

"typeChecker": "typescript"

},

"security": {

"scanOnCommit": true,

"preventSecrets": true

},

"review": {

"minReviewers": 2,

"requireTests": true

}

},

"onboarding": {

"steps": [

"install-required-plugins",

"configure-git-hooks",

"setup-local-environment",

"run-first-workflow"

],

"documentation": "https://wiki.acme.com/claude-code-setup"

}

}


Plugin Bundles

Team-Specific Plugin Packs

Backend Engineering Team:

{
  "name": "backend-engineering-pack",
  "version": "1.0.0",
  "plugins": [
    "code-reviewer@claude-code-plugins-plus",
    "test-automator@claude-code-plugins-plus",
    "database-optimizer@claude-code-plugins-plus",
    "security-auditor@claude-code-plugins-plus",
    "api-documenter@claude-code-plugins-plus",
    "performance-engineer@claude-code-plugins-plus"
  ],
  "skills": [
    "typescript-pro",
    "nodejs-expert",
    "postgresql-optimizer",
    "rest-api-designer"
  ]
}

Frontend Engineering Team:

{
  "name": "frontend-engineering-pack",
  "version": "1.0.0",
  "plugins": [
    "code-reviewer@claude-code-plugins-plus",
    "ui-visual-validator@claude-code-plugins-plus",
    "frontend-security-coder@claude-code-plugins-plus",
    "seo-content-auditor@claude-code-plugins-plus"
  ],
  "skills": [
    "react-expert",
    "css-architect",
    "accessibility-specialist",
    "responsive-design"
  ]
}

DevOps Team:

{
  "name": "devops-pack",
  "version": "1.0.0",
  "plugins": [
    "cloud-architect@claude-code-plugins-plus",
    "kubernetes-architect@claude-code-plugins-plus",
    "terraform-specialist@claude-code-plugins-plus",
    "observability-engineer@claude-code-plugins-plus",
    "deployment-engineer@claude-code-plugins-plus"
  ],
  "skills": [
    "kubernetes-ops",
    "terraform-infra",
    "prometheus-monitoring",
    "docker-containerization"
  ]
}

Bundle Installation Script

#!/bin/bash
# install-team-bundle.sh - Install team plugin bundle

BUNDLE=$1

if [ -z "$BUNDLE" ]; then

echo "Usage: ./install-team-bundle.sh <backend|frontend|devops>"

exit 1

fi

BUNDLE_FILE="team-bundles/${BUNDLE}-engineering-pack.json"

if [ ! -f "$BUNDLE_FILE" ]; then

echo "Bundle not found: $BUNDLE_FILE"

exit 1

fi

# Parse plugins from bundle

PLUGINS=$(jq -r '.plugins[]' $BUNDLE_FILE)

# Install each plugin

for plugin in $PLUGINS; do

echo "Installing: $plugin"

/plugin install $plugin

done

# Verify installation

/plugin list

echo "✓ Team bundle installed: $BUNDLE"


Workflow Templates

Code Review Workflow

<!-- .claude/workflows/code-review-workflow.md -->
# Code Review Workflow

<h2>Steps</h2>

  • Pre-Review Analysis

- Run linter: npm run lint

- Run tests: npm test

- Check types: npm run typecheck

  • Automated Code Review

- Activate: code-reviewer plugin

- Scan for security issues: security-auditor

- Check performance: performance-engineer

  • Generate Review Report

- Create summary of findings

- Categorize issues by severity (critical, major, minor)

- Suggest fixes with code examples

  • Submit for Human Review

- Create GitHub PR with AI review in description

- Assign to team members

- Link Jira ticket if applicable

<h2>Triggers</h2>

  • Manual: /review-pr <pr-number>
  • Automated: Git hook on git push origin <branch>
  • CI/CD: GitHub Actions on PR creation

<h2>Success Criteria</h2>

  • ✅ No critical security issues
  • ✅ Test coverage >= 80%
  • ✅ All tests passing
  • ✅ Linter passing
  • ✅ Performance within acceptable range

Hotfix Workflow

<!-- .claude/workflows/hotfix-workflow.md -->
# Hotfix Workflow

<h2>Steps</h2>

  • Create Hotfix Branch
bash

git checkout -b hotfix/issue-description main

``

  • Implement Fix

- Make minimal changes

- Focus on immediate issue

- Defer refactoring to follow-up

  • Expedited Testing

- Run affected tests only

- Manual verification in staging

  • Deploy

- Deploy to staging

- Verify fix

- Deploy to production

  • Post-Deployment

- Monitor metrics (error rate, latency)

- Create postmortem (if SEV-1/SEV-2)

- Schedule follow-up refactoring

Approval

  • SEV-1: Single approver required (on-call engineer)
  • SEV-2: Two approvers required
  • SEV-3: Standard review process

Rollback Plan

  • Keep previous version ready
  • Monitor for 30 minutes post-deploy
  • Auto-rollback if error rate > 5%
`

Feature Development Workflow

// .claude/workflows/feature-development.ts

interface FeatureWorkflow {

name: string;

steps: Step[];

approvals: string[];

testing: TestRequirement[];

}

const featureDevelopmentWorkflow: FeatureWorkflow = {

name: 'feature-development',

steps: [

{

name: 'Requirements Gathering',

duration: '1-2 days',

deliverables: ['PRD', 'Technical spec', 'UX mockups'],

agents: ['product-manager', 'architect-reviewer']

},

{

name: 'Design Review',

duration: '0.5 days',

deliverables: ['Architecture diagram', 'API contracts'],

agents: ['backend-architect', 'database-optimizer']

},

{

name: 'Implementation',

duration: '3-5 days',

deliverables: ['Code', 'Unit tests', 'Integration tests'],

agents: ['code-reviewer', 'test-automator']

},

{

name: 'Code Review',

duration: '0.5 days',

deliverables: ['Approved PR', 'Security scan', 'Performance review'],

agents: ['code-reviewer', 'security-auditor', 'performance-engineer']

},

{

name: 'QA Testing',

duration: '1 day',

deliverables: ['Test plan', 'Bug reports', 'Sign-off'],

agents: ['test-automator']

},

{

name: 'Deployment',

duration: '0.5 days',

deliverables: ['Production deployment', 'Monitoring setup'],

agents: ['deployment-engineer', 'observability-engineer']

}

],

approvals: [

'tech-lead',

'product-manager',

'security-reviewer'

],

testing: [

{ type: 'unit', coverage: 0.8 },

{ type: 'integration', coverage: 0.6 },

{ type: 'e2e', coverage: 0.4 }

]

};


Onboarding Automation

New Team Member Setup Script

#!/bin/bash
# onboard-team-member.sh - Automated onboarding

MEMBER_NAME=$1

TEAM=$2

if [ -z "$MEMBER_NAME" ] || [ -z "$TEAM" ]; then

echo "Usage: ./onboard-team-member.sh <name> <team>"

exit 1

fi

echo "🚀 Onboarding: $MEMBER_NAME to $TEAM team"

# 1. Install Claude Code

echo "Installing Claude Code..."

npm install -g claude-code

# 2. Configure team settings

echo "Configuring team settings..."

mkdir -p ~/.claude

cp team-configs/$TEAM/config.json ~/.claude/config.json

# 3. Install team plugin bundle

echo "Installing team plugins..."

./install-team-bundle.sh $TEAM

# 4. Set up Git hooks

echo "Setting up Git hooks..."

cp team-configs/$TEAM/hooks/* .git/hooks/

chmod +x .git/hooks/*

# 5. Install Beads (task tracker)

echo "Installing Beads..."

npm install -g @beads/cli

# 6. Clone team repositories

echo "Cloning team repositories..."

while read repo; do

git clone git@github.com:acme-corp/$repo.git

done < team-configs/$TEAM/repositories.txt

# 7. Generate welcome document

cat > ONBOARDING_$MEMBER_NAME.md <<EOF

# Welcome to the $TEAM Team!

<h2>Your Setup</h2>

  • Claude Code: Installed ✅
  • Team Plugins: Installed ✅
  • Git Hooks: Configured ✅
  • Repositories: Cloned ✅

<h2>Next Steps</h2>

  • Read team docs: https://wiki.acme.com/$TEAM
  • Join Slack: #team-$TEAM
  • Attend standup: Daily at 9:30 AM
  • Review team workflows: .claude/workflows/

<h2>Quick Commands</h2>

  • Review code: /review-pr <number>
  • Run tests: npm test
  • Deploy to staging: npm run deploy:staging

<h2>Team Contacts</h2>

  • Tech Lead: @tech-lead
  • Product Manager: @product-manager
  • DevOps: @devops

Happy coding! 🎉

EOF

echo "✅ Onboarding complete!"

echo "Review: ONBOARDING_$MEMBER_NAME.md"

Interactive Onboarding CLI

// onboard-cli.ts
import inquirer from 'inquirer';

interface OnboardingAnswers {

name: string;

team: string;

role: string;

projects: string[];

}

async function runOnboarding(): Promise<void> {

console.log('🎯 Claude Code Team Onboarding ');

const answers = await inquirer.prompt<OnboardingAnswers>([

{

type: 'input',

name: 'name',

message: 'Your name:',

validate: (input) => input.length > 0

},

{

type: 'list',

name: 'team',

message: 'Select your team:',

choices: ['backend', 'frontend', 'devops', 'mobile', 'qa']

},

{

type: 'list',

name: 'role',

message: 'Your role:',

choices: ['engineer', 'senior-engineer', 'staff-engineer', 'manager']

},

{

type: 'checkbox',

name: 'projects',

message: 'Projects you'll work on:',

choices: ['api-server', 'web-app', 'mobile-app', 'analytics', 'infrastructure']

}

]);

console.log(' ⚙️ Setting up your environment... ');

// Install team bundle

console.log('📦 Installing plugins...');

await installTeamBundle(answers.team);

// Configure projects

console.log('📂 Configuring projects...');

for (const project of answers.projects) {

await configureProject(project);

}

// Set up workflows

console.log('🔧 Setting up workflows...');

await setupWorkflows(answers.team);

console.log(' ✅ Onboarding complete! ');

console.log('Next steps:');

console.log('1. Read team docs: https://wiki.acme.com/' + answers.team);

console.log('2. Join Slack: #team-' + answers.team);

console.log('3. Run your first workflow: /code-review');

}

runOnboarding().catch(console.error);


Configuration Management

Centralized Configuration Repository

`

team-configs/

├── backend/

│ ├── config.json

│ ├── plugins.json

│ ├── workflows/

│ ├── hooks/

│ └── repositories.txt

├── frontend/

│ ├── config.json

│ ├── plugins.json

│ └── ...

└── devops/

├── config.json

└── ...

`

Configuration Sync

// sync-team-config.ts
import { execSync } from 'child_process';
import { readFileSync, writeFileSync } from 'fs';

class TeamConfigSync {

private readonly configRepo = 'git@github.com:acme-corp/team-configs.git';

async syncFromCentral(team: string): Promise<void> {

// Clone/pull config repo

execSync(`git clone ${this.configRepo} /tmp/team-configs || (cd /tmp/team-configs && git pull)`);

// Copy team config

const teamConfig = readFileSync(`/tmp/team-configs/${team}/config.json`, 'utf-8');

writeFileSync(`${process.env.HOME}/.claude/config.json`, teamConfig);

// Copy workflows

execSync(`cp -r /tmp/team-configs/${team}/workflows/* ${process.env.HOME}/.claude/workflows/`);

// Copy hooks

execSync(`cp /tmp/team-configs/${team}/hooks/* .git/hooks/`);

console.log(`✓ Synced configuration for ${team} team`);

}

async pushLocalChanges(team: string, message: string): Promise<void> {

// Copy local config back to central repo

execSync(`cp ${process.env.HOME}/.claude/config.json /tmp/team-configs/${team}/config.json`);

// Commit and push

execSync(

cd /tmp/team-configs &&

git add ${team}/ &&

git commit -m "${message}" &&

git push origin main

);

console.log(`✓ Pushed changes to central repository`);

}

}

// Usage

const sync = new TeamConfigSync();

await sync.syncFromCentral('backend');


Collaborative Development

Pair Programming with AI

// pair-programming.ts

interface PairSession {

driver: string; // Human writing code

navigator: string; // AI agent providing guidance

task: string;

startTime: number;

}

class AIPairProgramming {

async startSession(task: string): Promise<PairSession> {

const session: PairSession = {

driver: 'user-123',

navigator: 'code-reviewer-agent',

task,

startTime: Date.now()

};

console.log(`🎯 Pair Programming Session Started`);

console.log(`Task: ${task}`);

console.log(`Navigator: ${session.navigator}`);

console.log('------------------------------------------ ');

return session;

}

async provideGuidance(code: string, context: string): Promise<string> {

// AI agent analyzes code and provides real-time feedback

const response = await callClaude({

agent: 'code-reviewer',

prompt: `As a pair programming navigator, review this code: ${code} Context: ${context} Provide: 1. Immediate feedback 2. Suggestions for improvement 3. Potential bugs 4. Best practices`

});

return response;

}

async endSession(session: PairSession): Promise<void> {

const duration = Date.now() - session.startTime;

console.log(` ✅ Pair Programming Session Complete`);

console.log(`Duration: ${Math.floor(duration / 60000)} minutes`);

}

}

Code Review Automation

// automated-code-review.ts

interface ReviewResult {

approved: boolean;

issues: Issue[];

suggestions: string[];

score: number; // 0-100

}

interface Issue {

severity: 'critical' | 'major' | 'minor';

file: string;

line: number;

description: string;

suggestion?: string;

}

class AutomatedCodeReview {

async reviewPullRequest(prNumber: number): Promise<ReviewResult> {

// Get PR diff

const diff = await getPRDiff(prNumber);

// Run parallel reviews

const [

securityReview,

performanceReview,

styleReview,

testCoverage

] = await Promise.all([

this.securityAudit(diff),

this.performanceAnalysis(diff),

this.styleCheck(diff),

this.checkTestCoverage(diff)

]);

// Aggregate results

const issues = [

...securityReview.issues,

...performanceReview.issues,

...styleReview.issues

];

const score = this.calculateScore(issues, testCoverage);

// Auto-approve if score >= 85 and no critical issues

const criticalIssues = issues.filter(i => i.severity === 'critical');

const approved = score >= 85 && criticalIssues.length === 0;

return {

approved,

issues,

suggestions: this.generateSuggestions(issues),

score

};

}

private calculateScore(issues: Issue[], testCoverage: number): number {

let score = 100;

// Deduct points for issues

score -= issues.filter(i => i.severity === 'critical').length * 20;

score -= issues.filter(i => i.severity === 'major').length * 10;

score -= issues.filter(i => i.severity === 'minor').length * 5;

// Factor in test coverage

score = Math.min(score, testCoverage);

return Math.max(0, score);

}

private async securityAudit(diff: string): Promise<{ issues: Issue[] }> {

// Use security-auditor plugin

return { issues: [] };

}

private async performanceAnalysis(diff: string): Promise<{ issues: Issue[] }> {

// Use performance-engineer plugin

return { issues: [] };

}

private async styleCheck(diff: string): Promise<{ issues: Issue[] }> {

// Run linter

return { issues: [] };

}

private async checkTestCoverage(diff: string): Promise<number> {

// Calculate test coverage

return 85;

}

private generateSuggestions(issues: Issue[]): string[] {

return issues

.filter(i => i.suggestion)

.map(i => i.suggestion!);

}

}


Best Practices

DO ✅

  • Standardize configurations
{
     "team": "backend",
     "plugins": [...],
     "workflows": [...]
   }
  • Automate onboarding
./onboard-team-member.sh alice backend
  • Version control team configs
git commit -m "Update team workflow templates"
  • Document workflows
# Code Review Workflow
   1. Run linter
   2. Run tests
   ...

DON'T ❌

  • Don't hardcode credentials
// ❌ Hardcoded API key
   { "apiKey": "sk-..." }

// ✅ Environment variable

{ "apiKey": "${ANTHROPIC_API_KEY}" }

  • Don't skip testing workflows
# ❌ Deploy untested workflow
   # ✅ Test first
   ./test-workflow.sh code-review

Tools & Resources

Configuration Management

  • Git: Version control for configs
  • Ansible: Configuration automation
  • Terraform: Infrastructure as code

Collaboration Tools

  • GitHub: Code review, PRs
  • Slack: Team communication
  • Jira: Task tracking

Summary

Key Takeaways:

  • Standardize configurations - Team-wide consistency
  • Create plugin bundles - Backend, frontend, DevOps packs
  • Define workflows - Code review, hotfix, feature development
  • Automate onboarding - Scripts for new team members
  • Version control configs - Git repo for team settings
  • Enable collaboration - Pair programming, automated reviews
  • Document everything - Workflows, standards, processes

Team Setup Checklist:

  • [ ] Create team configuration file
  • [ ] Define plugin bundle for team
  • [ ] Document workflows (code review, hotfix, feature)
  • [ ] Write onboarding script
  • [ ] Set up configuration repository
  • [ ] Configure Git hooks
  • [ ] Establish coding standards
  • [ ] Create workflow templates
  • [ ] Train team on workflows
  • [ ] Schedule quarterly config reviews

Last Updated: 2025-12-24

Author: Jeremy Longshore

Related Playbooks: Cost Caps & Budget Management, Compliance & Audit Guide