Lab Roster Generator
This skill generates comprehensive rosters of all lab members with detailed tracking of roles, dates, team assignments, and career progressions.
When to Use This Skill
Use this skill when the user requests:
- "Generate the lab roster"
- "Update the team list"
- "Create a CSV of all lab members"
- "Track who's been in the lab"
- "Show me the roster with role transitions"
- Any mention of roster, member list, or team tracking
Two Generation Modes
Mode 1: Quick Generation (Python Script)
Fast automated generation using git history analysis.
When to use: Quick updates, routine refreshes
Output: lab_roster.csv
Mode 2: Comprehensive Generation (Subagent Workflow)
Careful information gathering using subagents for each member.
When to use: First-time generation, complex updates, verification needed
Output: ROSTER.md + lab_roster.csv
Instructions
Step 1: Determine Mode
Ask the user which mode they prefer, or choose based on context:
- If ROSTER.md doesn't exist or is outdated → Mode 2
- If just need CSV update → Mode 1
- If user wants verification → Mode 2
Step 2a: Quick Generation (Mode 1)
Run the roster generation script:
python3 .claude/skills/lab-roster/scripts/generate_roster_csv.py
Validate output:
- Check row count matches expected members
- Verify currently active members
- Show summary statistics
Present results to user with summary
Step 2b: Comprehensive Generation (Mode 2)
Check if ROSTER.md exists
- If exists, read it to understand current state
- If not, create it with field descriptions and instructions
Get list of all members
ls _members/*.md | grep -v "friends"
Launch subagents to gather information
- Process members in batches of 4-5
- Each subagent should:
- Read member file:
_members/[name].md
- Check git history:
git log --follow --format="%aI|%s" -- _members/[name].md
- Check for role transitions in git:
git show <commit>:_members/[name].md
- Check alumni list in
team/index.md
- Infer team from bio keywords (see reference.md)
- Extract co-advisor from bio text
- Extract previous and next positions
Update ROSTER.md
- Add entries in the format from templates/roster-entry.md
- One entry per role (create multiple entries for role transitions)
- Only fill "Previous" field in first entry
- Only fill "Next" field in last entry
Generate CSV from ROSTER.md
python3 .claude/skills/lab-roster/scripts/roster_md_to_csv.py
Validate and present
- Show summary statistics
- Highlight any missing data
- Ask user to review
Field Descriptions
- name: Full name of the lab member
- role: Short code (pi, postdoc, staff, phd, ms, ra, programmer, undergrad, highschool)
- start_date: When they started (YYYY-MM format)
- end_date: When they ended (YYYY-MM format, empty if still active)
- previous_position: Position before joining lab (only in first entry)
- next_position: Where they went after (only in last entry)
- team: Primary team (software_engineering, phenoinformatics, virtual_biology)
- co_advisor: Other PIs they work with
Team Inference Rules
Use these keyword mappings to infer team from bio text:
software_engineering:
- Keywords: SLEAP, DREEM, cloud, infrastructure, plant, root, AWS, full-stack, data pipeline, software engineer, programmer, bioinformatics analyst, computer vision algorithm, pose estimation
phenoinformatics:
- Keywords: phenotyp, behavior, ALS, Alzheimer, disease model, mice, mouse, longitudinal, space, neurodegenerative, multi-animal, tracking pipeline
virtual_biology (highest priority):
- Keywords: VNL, virtual lab, virtual animal, embodied, neuromechanical simulation
Note: Check virtual_biology keywords first, then software_engineering, then phenoinformatics.
Co-Advisor Extraction
Look for these patterns in bio text:
- "co-advised by [Name]"
- "co-supervised by [Name]"
- "jointly with [Name]"
- "joint with [Name]"
Remove markdown links and extract just the name.
Previous/Next Position Extraction
Previous positions - look for:
- "Prior to joining..."
- "previously worked at/as..."
- "received [degree] from..."
- Education background
Next positions - look in team/index.md alumni section:
- Format:
**Next:** [position]
Validation Checklist
Before presenting results:
Output Format
Always show:
✓ Generated roster with [N] entries
✓ Saved to: lab_roster.csv
Summary:
Total entries: [N]
Unique members: [N]
Currently active: [N]
Alumni entries: [N]
Team distribution:
- software_engineering: [N]
- phenoinformatics: [N]
- virtual_biology: [N]
Error Handling
If script fails:
- Check Python version (needs Python 3.6+)
- Verify git is available
- Check that _members/ directory exists
- Look for malformed member files
If subagents miss information:
- Review their search patterns
- Check if member files follow expected format
- Manually verify edge cases
Notes
- Exclude members with role "friends"
- Multiple role entries for same person are normal (e.g., undergrad → MS → PhD)
- Start dates are best guesses from git history
- Some fields may be empty - that's okay
- ROSTER.md is human-editable - CSV regenerates from it
See Also
- reference.md - Detailed documentation on member formats and inference patterns
- examples.md - Example usage scenarios
- templates/roster-entry.md - Entry format template
1---2name: lab-roster3description: Generate comprehensive lab member rosters in both markdown and CSV formats. Analyzes member profiles, git history, and alumni information to create detailed rosters with role transitions, team assignments, and career tracking. Use when user mentions roster, team list, lab members, or updating member information.4---5
6# Lab Roster Generator
7
8This skill generates comprehensive rosters of all lab members with detailed tracking of roles, dates, team assignments, and career progressions.
9
10## When to Use This Skill
11
12Use this skill when the user requests:
13- "Generate the lab roster"
14- "Update the team list"
15- "Create a CSV of all lab members"
16- "Track who's been in the lab"
17- "Show me the roster with role transitions"
18- Any mention of roster, member list, or team tracking
19
20## Two Generation Modes
21
22### Mode 1: Quick Generation (Python Script)
23Fast automated generation using git history analysis.
24
25**When to use**: Quick updates, routine refreshes
26**Output**: `lab_roster.csv`
27
28### Mode 2: Comprehensive Generation (Subagent Workflow)
29Careful information gathering using subagents for each member.
30
31**When to use**: First-time generation, complex updates, verification needed
32**Output**: `ROSTER.md` + `lab_roster.csv`
33
34## Instructions
35
36### Step 1: Determine Mode
37
38Ask the user which mode they prefer, or choose based on context:
39- If ROSTER.md doesn't exist or is outdated → Mode 2
40- If just need CSV update → Mode 1
41- If user wants verification → Mode 2
42
43### Step 2a: Quick Generation (Mode 1)
44
451. Run the roster generation script:
46 ```bash
47 python3 .claude/skills/lab-roster/scripts/generate_roster_csv.py
48 ```
49
502. Validate output:
51 - Check row count matches expected members
52 - Verify currently active members
53 - Show summary statistics
54
553. Present results to user with summary
56
57### Step 2b: Comprehensive Generation (Mode 2)
58
591. **Check if ROSTER.md exists**
60 - If exists, read it to understand current state
61 - If not, create it with field descriptions and instructions
62
632. **Get list of all members**
64 ```bash
65 ls _members/*.md | grep -v "friends"
66 ```
67
683. **Launch subagents to gather information**
69 - Process members in batches of 4-5
70 - Each subagent should:
71 - Read member file: `_members/[name].md`
72 - Check git history: `git log --follow --format="%aI|%s" -- _members/[name].md`
73 - Check for role transitions in git: `git show <commit>:_members/[name].md`
74 - Check alumni list in `team/index.md`
75 - Infer team from bio keywords (see reference.md)
76 - Extract co-advisor from bio text
77 - Extract previous and next positions
78
794. **Update ROSTER.md**
80 - Add entries in the format from templates/roster-entry.md
81 - One entry per role (create multiple entries for role transitions)
82 - Only fill "Previous" field in first entry
83 - Only fill "Next" field in last entry
84
855. **Generate CSV from ROSTER.md**
86 ```bash
87 python3 .claude/skills/lab-roster/scripts/roster_md_to_csv.py
88 ```
89
906. **Validate and present**
91 - Show summary statistics
92 - Highlight any missing data
93 - Ask user to review
94
95## Field Descriptions
96
97- **name**: Full name of the lab member
98- **role**: Short code (pi, postdoc, staff, phd, ms, ra, programmer, undergrad, highschool)
99- **start_date**: When they started (YYYY-MM format)
100- **end_date**: When they ended (YYYY-MM format, empty if still active)
101- **previous_position**: Position before joining lab (only in first entry)
102- **next_position**: Where they went after (only in last entry)
103- **team**: Primary team (software_engineering, phenoinformatics, virtual_biology)
104- **co_advisor**: Other PIs they work with
105
106## Team Inference Rules
107
108Use these keyword mappings to infer team from bio text:
109
110**software_engineering**:
111- Keywords: SLEAP, DREEM, cloud, infrastructure, plant, root, AWS, full-stack, data pipeline, software engineer, programmer, bioinformatics analyst, computer vision algorithm, pose estimation
112
113**phenoinformatics**:
114- Keywords: phenotyp, behavior, ALS, Alzheimer, disease model, mice, mouse, longitudinal, space, neurodegenerative, multi-animal, tracking pipeline
115
116**virtual_biology** (highest priority):
117- Keywords: VNL, virtual lab, virtual animal, embodied, neuromechanical simulation
118
119Note: Check virtual_biology keywords first, then software_engineering, then phenoinformatics.
120
121## Co-Advisor Extraction
122
123Look for these patterns in bio text:
124- "co-advised by [Name]"
125- "co-supervised by [Name]"
126- "jointly with [Name]"
127- "joint with [Name]"
128
129Remove markdown links and extract just the name.
130
131## Previous/Next Position Extraction
132
133**Previous positions** - look for:
134- "Prior to joining..."
135- "previously worked at/as..."
136- "received [degree] from..."
137- Education background
138
139**Next positions** - look in `team/index.md` alumni section:
140- Format: `**Next:** [position]`
141
142## Validation Checklist
143
144Before presenting results:
145- [ ] All active members included
146- [ ] Role transitions properly split into multiple entries
147- [ ] Start dates seem reasonable
148- [ ] Teams assigned for most members
149- [ ] No duplicate entries
150- [ ] CSV has same data as ROSTER.md (if both exist)
151- [ ] Summary statistics make sense
152
153## Output Format
154
155Always show:
156```
157✓ Generated roster with [N] entries
158✓ Saved to: lab_roster.csv
159
160Summary:
161 Total entries: [N]
162 Unique members: [N]
163 Currently active: [N]
164 Alumni entries: [N]
165 Team distribution:
166 - software_engineering: [N]
167 - phenoinformatics: [N]
168 - virtual_biology: [N]
169```
170
171## Error Handling
172
173If script fails:
1741. Check Python version (needs Python 3.6+)
1752. Verify git is available
1763. Check that _members/ directory exists
1774. Look for malformed member files
178
179If subagents miss information:
1801. Review their search patterns
1812. Check if member files follow expected format
1823. Manually verify edge cases
183
184## Notes
185
186- Exclude members with role "friends"
187- Multiple role entries for same person are normal (e.g., undergrad → MS → PhD)
188- Start dates are best guesses from git history
189- Some fields may be empty - that's okay
190- ROSTER.md is human-editable - CSV regenerates from it
191
192## See Also
193
194- [reference.md](reference.md) - Detailed documentation on member formats and inference patterns
195- [examples.md](examples.md) - Example usage scenarios
196- [templates/roster-entry.md](templates/roster-entry.md) - Entry format template