Identify Flight Risk
Analyze employee data to identify retention risk from multiple signals including tenure, workload, and engagement
Check for Slack engagement signals.
Look for People Directory. If it exists, check the fetchedAt timestamp.
- If present and < 7 days old: Note "Slack signals available" and continue
- If present but > 7 days old: Note "Slack signals are stale"
- If missing: Note "No Slack signals cached"
If Slack signals are missing or stale, offer:
"I can enhance this analysis with Slack engagement data (message frequency,
after-hours activity, participation patterns). Want me to sync? Takes ~30 seconds."
- If user says yes: run
Setup Slack Signals, then continue
- If user says no or skips: proceed with CSV-only analysis
If the CSV path was not already provided, ask the user for it.
Common sources: HRIS exports (Workday, BambooHR, Rippling), spreadsheet exports,
or combined data from multiple systems.
Establish for the subtask:
- Output path:
Manager Analytics Session Data
- Column types to detect: employee name/ID, hire date, role start date,
last promotion date, weekly hours, engagement score
Validate the data before analysis. Check for:
- Required fields: Every row needs an employee identifier (name or ID) and
hire date/tenure. Report missing required fields. - Date parsing: Hire dates, role dates, and promotion dates must be parseable.
Flag unparseable or future dates. - Numeric values: Hours and engagement scores must be valid numbers if present.
- Sample size: Count unique employees.
If required fields are missing for >50% of rows, stop and ask user to provide
cleaner data with at least employee names and hire dates.
Report available signals for this dataset:
CSV signals:
- Tenure: ✓ if hire date or tenure column found
- Time-in-role: ✓ if role start date column found
- Promotion history: ✓ if last promotion date column found
- Workload/burnout: ✓ if hours data column found
- Engagement: ✓ if engagement score column found
Slack signals (if People Directory exists):
- Message frequency: ✓
- After-hours activity: ✓
- Weekend activity: ✓
- Channel breadth: ✓
Note overall confidence based on total signals available.
Calculate flight risk score for each employee.
For each person, evaluate available signals using the scoring weights from the guide:
Tenure signals:
- +3 points if tenure is 18-24 months (highest risk window)
- +1 point if tenure is 12-18 months (elevated risk)
Time-in-role signal (if available):
- +2 points if in same role >24 months without promotion
Promotion history (if available):
- +2 points if no promotion in >18 months (for growth-track roles)
Workload/burnout signal (if hours data available):
- +3 points if showing high burnout risk (50+ hrs sustained)
- +1 point if showing moderate burnout risk (45+ hrs sustained)
Engagement signal (if scores available):
- +2 points if engagement declining over 2+ periods
- +1 point if engagement below team average
Assign risk levels:
- 🔴 High Risk: 6+ points
- 🟡 Moderate Risk: 3-5 points
- 🟢 Low Risk: 1-2 points
- ✅ Healthy: 0 points
If Slack signals are available, incorporate them into the score.
Match employees by name between CSV and Slack data. For each matched employee:
- +2 points if message frequency declined > 20% week-over-week
- +1 point if message frequency declined > 10%
- +1 point if after-hours activity > 10% above team average
- +1 point if 3+ weekend messages
- +1 point if channel count < 50% of team average
Note any employees who couldn't be matched between CSV and Slack data.
Proceed with CSV-only scoring for unmatched employees.
Present the flight risk assessment following the output format from the guide.
Include:
- Summary with employee count, available signals, and risk distribution
- High-risk individuals table with specific signals that triggered
- Moderate-risk individuals table
- Note on healthy/low-risk count
- Data gaps section noting which signals were unavailable
- Retention conversation starters for managers to use
For each flagged individual, be specific:
- Name the exact signals that contributed to their score
- Note any context factors (role level, recent changes) that might affect interpretation
- Provide 1-2 specific conversation starters tailored to their risk profile
Provide actionable recommendations:
For high-risk individuals:
- Prioritize for retention conversation this week
- Suggest specific topics to explore based on their risk signals
- Recommend documenting outcomes for follow-up
For team-wide patterns:
- If multiple people hit tenure risk windows, note this as systemic
- If workload is a common factor, recommend capacity review
- If engagement is broadly declining, suggest pulse survey or team discussion
Ask if they want to:
- Dive deeper on any specific individual
- Cross-reference with the burnout or workload analysis tasks
- Get help preparing for specific retention conversations
To run this task you must have the following required information:
> CSV with employee data including names and hire dates/tenure; optionally role dates, promotion history, hours, or engagement scores
If you don't have all of this information, exit here and respond asking for any extra information you require, and instructions to run this task again with ALL required information.
---
You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple read steps in a row, read them all at once (in parallel).
Add all steps to your todo list now and begin executing.
## Steps
1. **Check for Slack engagement signals.**
Look for `documents/knowledge/people/*.md`. If it exists, check the fetchedAt timestamp.
- If present and < 7 days old: Note "Slack signals available" and continue
- If present but > 7 days old: Note "Slack signals are stale"
- If missing: Note "No Slack signals cached"
If Slack signals are missing or stale, offer:
"I can enhance this analysis with Slack engagement data (message frequency,
after-hours activity, participation patterns). Want me to sync? Takes ~30 seconds."
- If user says yes: run `skills/sauna/[skill_id]/references/recipes/manager.slack.setup.md`, then continue
- If user says no or skips: proceed with CSV-only analysis
2. If the CSV path was not already provided, ask the user for it.
Common sources: HRIS exports (Workday, BambooHR, Rippling), spreadsheet exports,
or combined data from multiple systems.
Establish for the subtask:
- Output path: `session/manager-analysis-data.json`
- Column types to detect: employee name/ID, hire date, role start date,
last promotion date, weekly hours, engagement score
3. [Gather Requirements for Parse and Interpret CSV] The next step has the following requirements: "CSV file path to parse. Column type hints (e.g., "scores, customers, dates, categories"). Output file path for the interpreted data.". Search the user's data for this information or ask them directly if needed. Do not proceed until you have this information.
4. [Execute Parse and Interpret CSV Task]: Spawn a subagent and provide it with the requirements gathered above and instructions to read `skills/sauna/[skill_id]/references/recipes/stdlib.csv.interpret.md` for its task list
5. [Read Manager Analytics Session Data]: Read the file at `session/manager-analysis-data.json` into context (Load the parsed and interpreted CSV data)
6. [Read Flight Risk Analysis Guide]: Read the documentation in: `skills/sauna/[skill_id]/references/manager.flight.guide.md` (Reference flight risk thresholds, signal weights, and output format)
7. **Validate the data before analysis.** Check for:
1. **Required fields:** Every row needs an employee identifier (name or ID) and
hire date/tenure. Report missing required fields.
2. **Date parsing:** Hire dates, role dates, and promotion dates must be parseable.
Flag unparseable or future dates.
3. **Numeric values:** Hours and engagement scores must be valid numbers if present.
4. **Sample size:** Count unique employees.
If required fields are missing for >50% of rows, stop and ask user to provide
cleaner data with at least employee names and hire dates.
8. **Report available signals for this dataset:**
CSV signals:
- Tenure: ✓ if hire date or tenure column found
- Time-in-role: ✓ if role start date column found
- Promotion history: ✓ if last promotion date column found
- Workload/burnout: ✓ if hours data column found
- Engagement: ✓ if engagement score column found
Slack signals (if `documents/knowledge/people/*.md` exists):
- Message frequency: ✓
- After-hours activity: ✓
- Weekend activity: ✓
- Channel breadth: ✓
Note overall confidence based on total signals available.
9. **Calculate flight risk score for each employee.**
For each person, evaluate available signals using the scoring weights from the guide:
**Tenure signals:**
- +3 points if tenure is 18-24 months (highest risk window)
- +1 point if tenure is 12-18 months (elevated risk)
**Time-in-role signal (if available):**
- +2 points if in same role >24 months without promotion
**Promotion history (if available):**
- +2 points if no promotion in >18 months (for growth-track roles)
**Workload/burnout signal (if hours data available):**
- +3 points if showing high burnout risk (50+ hrs sustained)
- +1 point if showing moderate burnout risk (45+ hrs sustained)
**Engagement signal (if scores available):**
- +2 points if engagement declining over 2+ periods
- +1 point if engagement below team average
**Assign risk levels:**
- 🔴 High Risk: 6+ points
- 🟡 Moderate Risk: 3-5 points
- 🟢 Low Risk: 1-2 points
- ✅ Healthy: 0 points
10. **If Slack signals are available**, incorporate them into the score.
Match employees by name between CSV and Slack data. For each matched employee:
- +2 points if message frequency declined > 20% week-over-week
- +1 point if message frequency declined > 10%
- +1 point if after-hours activity > 10% above team average
- +1 point if 3+ weekend messages
- +1 point if channel count < 50% of team average
Note any employees who couldn't be matched between CSV and Slack data.
Proceed with CSV-only scoring for unmatched employees.
11. **Present the flight risk assessment** following the output format from the guide.
Include:
1. Summary with employee count, available signals, and risk distribution
2. High-risk individuals table with specific signals that triggered
3. Moderate-risk individuals table
4. Note on healthy/low-risk count
5. Data gaps section noting which signals were unavailable
6. Retention conversation starters for managers to use
**For each flagged individual, be specific:**
- Name the exact signals that contributed to their score
- Note any context factors (role level, recent changes) that might affect interpretation
- Provide 1-2 specific conversation starters tailored to their risk profile
12. **Provide actionable recommendations:**
For high-risk individuals:
- Prioritize for retention conversation this week
- Suggest specific topics to explore based on their risk signals
- Recommend documenting outcomes for follow-up
For team-wide patterns:
- If multiple people hit tenure risk windows, note this as systemic
- If workload is a common factor, recommend capacity review
- If engagement is broadly declining, suggest pulse survey or team discussion
Ask if they want to:
- Dive deeper on any specific individual
- Cross-reference with the burnout or workload analysis tasks
- Get help preparing for specific retention conversations