Skip to main content
skill CX Codex

team-coordination — Claude Code skill: what it does, how to install

Coordinates multiple Claude Code sessions in a single repository via shared Markdown state files and task claiming. Helps developer teams avoid merge conflicts when editing the same codebase.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add alinaqi/maggy --skill team-coordination -a claude-code
Open on GitHub

What team-coordination does

The skill sets up a _project_specs/ directory inside the repository to track shared work across multiple sessions. Everything runs on plain Markdown files. Team members see active tasks and touched files in team/state.md, while architectural choices go into session/decisions.md. Work distribution is tracked inside todos/active.md.

This skill is not user-invocable. Instead, it instructs the coding assistant to follow strict operational checklists. The agent must pull the latest Git changes, verify that a todo is unassigned, claim it, and broadcast the session state before editing code. When transferring tasks, it writes a detailed handoff note under handoffs/.

The workflow breaks if developers fail to push their state files every 1–2 hours. Because there is no background sync server, coordination relies entirely on regular Git commits.

What it helps with

  • claim tasks in active.md to prevent duplicate work
  • track touched files across active sessions to detect conflicts
  • pass unfinished work to teammates using handoff files
  • record shared architectural choices in decisions.md

Example prompts for the agent

  • Check _project_specs/team/state.md and claim an unassigned task from active.md
  • I am ending this session, update my status in state.md and create a handoff note
  • Record our architectural decision on JWT in session/decisions.md and push the update

How to install team-coordination

1Skills CLI (Vercel)

npx skills add alinaqi/maggy --skill team-coordination -a claude-code

2Manually: put the files in place

~/.claude/skills/team-coordination/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/team-coordination/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about team-coordination

How do I install team-coordination in Claude Code?

Run npx skills add alinaqi/maggy --skill team-coordination -a claude-code in your terminal. Alternatively, place the file directly at ~/.claude/skills/team-coordination/SKILL.md.

What does the team-coordination skill do?

It coordinates multiple developers and AI sessions working on the same repository. The skill enforces task claiming, tracks modified files, and records shared architectural choices in Markdown files.

Can team-coordination be triggered via a slash command?

No, the skill specifies user-invocable: false. It operates as a workflow standard that guides the agent to read and update team state files throughout a session.

Source text

SKILL.md · MIT
---
name: team-coordination
description: Multi-person projects - shared state, todo claiming, handoffs
when-to-use: When multiple developers are working on the same repo
user-invocable: false
effort: low
---

# Team Coordination Skill


**Purpose:** Enable multiple Claude Code sessions across a team to coordinate and work together without conflicts. Manages shared state, todo claiming, decision syncing, and session awareness.

---

## Core Philosophy

```
┌─────────────────────────────────────────────────────────────────┐
│  TEAM CLAUDE CODE                                               │
│  ─────────────────────────────────────────────────────────────  │
│  Multiple devs, multiple Claude sessions, one codebase.         │
│  Coordination > Speed. Communication > Assumptions.             │
│                                                                 │
│  Before you start: Check who's working on what.                 │
│  Before you claim: Make sure nobody else has it.                │
│  Before you decide: Check if it's already decided.              │
│  Before you push: Pull and sync state.                          │
└─────────────────────────────────────────────────────────────────┘
```

---

## Team State Structure

When a project becomes multi-person, create this structure:

```
_project_specs/
├── team/
│   ├── state.md              # Who's working on what right now
│   ├── contributors.md       # Team members and their focus areas
│   └── handoffs/             # Notes when passing work to others
│       └── [feature]-handoff.md
├── session/
│   ├── current-state.md      # YOUR session state (personal)
│   ├── decisions.md          # SHARED - architectural decisions
│   └── code-landmarks.md     # SHARED - important code locations
└── todos/
    ├── active.md             # SHARED - with claim annotations
    ├── backlog.md            # SHARED
    └── completed.md          # SHARED
```

---

## Team State File

**`_project_specs/team/state.md`:**

```markdown
# Team State

*Last synced: [timestamp]*

## Active Sessions

| Contributor | Working On | Started | Files Touched | Status |
|-------------|------------|---------|---------------|--------|
| @alice | TODO-042: Add auth | 2024-01-15 10:30 | src/auth/* | 🟢 Active |
| @bob | TODO-038: Fix checkout | 2024-01-15 09:00 | src/cart/* | 🟡 Paused |
| - | - | - | - | - |

## Claimed Todos

| Todo | Claimed By | Since | ETA |
|------|------------|-------|-----|
| TODO-042 | @alice | 2024-01-15 | Today |
| TODO-038 | @bob | 2024-01-14 | Tomorrow |

## Recently Completed (Last 48h)

| Todo | Completed By | When | PR |
|------|--------------|------|-----|
| TODO-037 | @alice | 2024-01-14 | #123 |

## Conflicts to Watch

| Area | Contributors | Notes |
|------|--------------|-------|
| src/auth/* | @alice, @carol | Carol needs auth for TODO-045, coordinate |

## Announcements

- [2024-01-15] @alice: Refactoring auth module, avoid touching until EOD
- [2024-01-14] @bob: New env var required: STRIPE_WEBHOOK_SECRET
```

---

## Contributors File

**`_project_specs/team/contributors.md`:**

```markdown
# Contributors

## Team Members

| Handle | Name | Focus Areas | Timezone | Status |
|--------|------|-------------|----------|--------|
| @alice | Alice Smith | Backend, Auth | EST | Active |
| @bob | Bob Jones | Frontend, Payments | PST | Active |
| @carol | Carol White | DevOps, Infra | GMT | Part-time |

## Ownership

| Area | Primary | Backup | Notes |
|------|---------|--------|-------|
| Authentication | @alice | @bob | All auth changes need @alice review |
| Payments | @bob | @alice | Stripe integration |
| Infrastructure | @carol | @alice | Deploy scripts, CI/CD |
| Database | @alice | @carol | Migrations need sign-off |

## Communication

- Slack: #project-name
- PRs: Always tag area owner for review
- Urgent: DM on Slack

## Working Hours Overlap

```
EST:  |████████████████████|
PST:  |   ████████████████████|
GMT:  |████████████|
      6am        12pm       6pm       12am EST

Best overlap: 9am-12pm EST (all three)
```
```

---

## Workflow

### Starting a Session

```
┌─────────────────────────────────────────────────────────────────┐
│  START SESSION CHECKLIST                                        │
│  ─────────────────────────────────────────────────────────────  │
│  1. git pull origin main                                        │
│  2. Read _project_specs/team/state.md                           │
│  3. Check claimed todos - don't take what's claimed             │
│  4. Claim your todo in active.md                                │
│  5. Update state.md with your session                           │
│  6. Push state changes before starting work                     │
│  7. Start working                                               │
└─────────────────────────────────────────────────────────────────┘
```

### Claiming a Todo

In `active.md`, add claim annotation:

```markdown
## [TODO-042] Add email validation

**Status:** in-progress
**Claimed:** @alice (2024-01-15 10:30 EST)
**ETA:** Today

...
```

### During Work

- Update `state.md` if you touch new files
- Check `decisions.md` before making architectural choices
- If you make a decision, add it to `decisions.md` immediately
- Push state updates every 1-2 hours (keeps team in sync)

### Ending a Session

```
┌─────────────────────────────────────────────────────────────────┐
│  END SESSION CHECKLIST                                          │
│  ─────────────────────────────────────────────────────────────  │
│  1. Commit your work (even if WIP)                              │
│  2. Update your current-state.md                                │
│  3. Update team state.md (status → Paused or Done)              │
│  4. If passing to someone: create handoff note                  │
│  5. Unclaim todo if abandoning                                  │
│  6. Push everything                                             │
└─────────────────────────────────────────────────────────────────┘
```

### Creating a Handoff

When passing work to another team member, create:

**`_project_specs/team/handoffs/auth-feature-handoff.md`:**

```markdown
# Handoff: Auth Feature (TODO-042)

**From:** @alice
**To:** @bob
**Date:** 2024-01-15

## Status

70% complete. Core auth flow works, need to add:
- [ ] Password reset flow
- [ ] Email verification

## What's Done

- Login/logout working
- JWT tokens implemented
- Session management done

## What's Left

1. Password reset - see src/auth/reset.ts (skeleton exists)
2. Email verification - need to integrate SendGrid

## Key Decisions Made

- Using JWT not sessions (see decisions.md)
- Tokens expire in 7 days
- Refresh tokens stored in httpOnly cookies

## Watch Out For

- The `validateToken` function has a weird edge case with expired tokens
- Don't touch `authMiddleware.ts` - it's fragile rn

## Files to Start With

1. src/auth/reset.ts - password reset
2. src/email/verification.ts - email flow
3. tests/auth.test.ts - add tests here

## Questions?

Slack me @alice if stuck
```

---

## Conflict Prevention

### File-Level Awareness

Before modifying a file, check state.md for who's touching what:

```markdown
## Active Sessions

| Contributor | Working On | Started | Files Touched | Status |
|-------------|------------|---------|---------------|--------|
| @alice | TODO-042 | ... | src/auth/*, src/middleware/* | 🟢 Active |
```

If you need to touch `src/auth/*` and Alice is working there:
1. Check if it's truly conflicting (same file? same functions?)
2. Coordinate via Slack before proceeding
3. Add a note to "Conflicts to Watch" section

### Pre-Push Check

Before pushing, always:

```bash
git pull origin main
# Resolve any conflicts
git push
```

### PR Tagging

Always tag area owners in PRs:

```markdown
## PR: Add password reset flow

Implements TODO-042

cc: @alice (auth owner), @bob (reviewer)

### Changes
- Added password reset endpoint
- Added email templates

### Testing
- [ ] Unit tests pass
- [ ] Manual testing done
```

---

## Decision Syncing

### Before Making a Decision

1. Pull latest `decisions.md`
2. Check if decision already exists
3. If similar decision exists, follow it (consistency > preference)
4. If new decision needed, add it and push immediately

### Decision Format

```markdown
## [2024-01-15] JWT vs Sessions for Auth (@alice)

**Decision:** Use JWT tokens
**Context:** Need auth for API and mobile app
**Options:**
1. Sessions - simpler, server-side state
2. JWT - stateless, works for mobile
**Choice:** JWT
**Reasoning:** Mobile app needs stateless auth, JWT works across platforms
**Trade-offs:** Token revocation is harder, need refresh token strategy
**Approved by:** @bob, @carol
```

---

## Commands

### Check Team State

```bash
# See who's working on what
cat _project_specs/team/state.md

# Quick active sessions check
grep "🟢 Active" _project_specs/team/state.md
```

### Claim a Todo

1. Edit `_project_specs/todos/active.md`
2. Add claim annotation to todo
3. Update `_project_specs/team/state.md`
4. Commit and push

### Release a Claim

1. Remove claim annotation from todo
2. Update state.md (remove from Claimed Todos)
3. Commit and push

---

## Git Hooks for Teams

### Pre-Push Hook Addition

Add team state sync check to pre-push:

```bash
# In .git/hooks/pre-push (add to existing)

# Check if team state is current
echo "🔄 Checking team state..."
git fetch origin main --quiet

LOCAL_STATE=$(git show HEAD:_project_specs/team/state.md 2>/dev/null | md5)
REMOTE_STATE=$(git show origin/main:_project_specs/team/state.md 2>/dev/null | md5)

if [ "$LOCAL_STATE" != "$REMOTE_STATE" ]; then
    echo "⚠️  Team state has changed on remote!"
    echo "   Run: git pull origin main"
    echo "   Then check _project_specs/team/state.md for updates"
    # Warning only, don't block
fi
```

---

## Claude Instructions

### At Session Start

When user starts a session in a team project:

1. Check for `_project_specs/team/state.md`
2. If exists, read it and report:
   - Who's currently active
   - What todos are claimed
   - Any conflicts to watch
   - Recent announcements

3. Ask what they want to work on
4. Check if it's already claimed
5. Help them claim and update state

### During Session

- Before touching files, check if someone else is working there
- Before making decisions, check decisions.md
- Remind user to update state periodically

### At Session End

- Prompt user to update state.md
- Ask if they need to create a handoff
- Remind them to push state changes

---

## Single → Multi-Person Conversion

When a project needs team coordination:

1. Run `/check-contributors`
2. Create `_project_specs/team/` structure
3. Initialize `state.md` and `contributors.md`
4. Add claim annotations to active todos
5. Update CLAUDE.md to reference team-coordination.md skill

---

## Quick Reference

### Status Icons

```
🟢 Active - Currently working
🟡 Paused - Stepped away, will return
🔴 Blocked - Needs help/waiting on something
⚪ Offline - Not working today
```

### Claim Format

```markdown
**Claimed:** @handle (YYYY-MM-DD HH:MM TZ)
```

### Daily Standup Template

```markdown
## Standup [DATE]

### @alice
- Yesterday: Finished TODO-042 auth flow
- Today: Starting TODO-045 password reset
- Blockers: None

### @bob
- Yesterday: Fixed checkout bug
- Today: Payment webhook integration
- Blockers: Need STRIPE_WEBHOOK_SECRET from @carol
```

---

## Checklist

### Starting Work
- [ ] `git pull origin main`
- [ ] Read `team/state.md`
- [ ] Check todo not claimed
- [ ] Claim todo in `active.md`
- [ ] Update `state.md`
- [ ] Push state changes

### Ending Work
- [ ] Commit all changes
- [ ] Update `current-state.md`
- [ ] Update `team/state.md`
- [ ] Create handoff if needed
- [ ] Push everything

© alinaqi · MIT · alinaqi/maggy

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set33

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor