home / skills / krishagel / geoffrey / redrover-manager
This skill provides access to Red Rover absence data for PSD staff, enabling reporting and analysis of daily, weekly, and certificated summaries.
npx playbooks add skill krishagel/geoffrey --skill redrover-managerReview the files below or copy the command above to add this skill to your agents.
---
name: redrover-manager
description: Access Red Rover absence management data for PSD staff attendance tracking and reporting
triggers:
- "redrover"
- "red rover"
- "absences"
- "staff attendance"
- "teacher absences"
- "substitute"
- "sub coverage"
- "unfilled positions"
allowed-tools: Read, Bash
version: 0.1.0
---
# Red Rover Manager Skill
## Overview
Red Rover is an absence management system used by PSD to track staff absences and substitute coverage. This skill provides access to absence data for reporting and analysis.
## Configuration
- **Base URL**: `https://connect.redroverk12.com/`
- **Org ID**: 1305 (Peninsula School District)
- **Authentication**: HTTP Basic Auth + API Key header
- **Credentials**: Stored in 1Password as "RedRover"
- **Rate Limit**: 100 requests/minute
## Authentication
All requests require both:
1. `Authorization: Basic [base64(username:password)]` header
2. `apiKey: [key]` header (obtained from organization endpoint)
The organization endpoint returns a dynamic API key that should be used for subsequent requests.
## Scripts
All scripts are in `skills/redrover-manager/scripts/`. Run with `bun`:
### get_organization.js
Fetch organization info and validate credentials.
```bash
bun get_organization.js
```
Returns: Organization ID, name, and API key.
### get_absences.js
Fetch raw absence/vacancy data for a date range.
```bash
bun get_absences.js <start_date> <end_date> [filled|unfilled|all]
```
Examples:
```bash
bun get_absences.js 2026-01-20 2026-01-27
bun get_absences.js 2026-01-27 2026-01-27 unfilled
```
**Note:** Max date range is 31 days.
### get_daily_summary.js
Get daily absence summary (all staff) with counts by school, reason, and fill status.
```bash
bun get_daily_summary.js [date]
```
Date options:
- `today` (default)
- `yesterday`
- Day names: `monday`, `tuesday`, etc.
- `last wednesday`, `last friday`
- Specific date: `2026-01-27`
### get_certificated_summary.js
Get daily absence summary for **certificated staff only** (Teachers, ESA, CTE).
```bash
bun get_certificated_summary.js [date]
```
Same date options as above. This is the most commonly requested report - focuses on classroom coverage.
### get_weekly_summary.js
Get weekly trends and patterns.
```bash
bun get_weekly_summary.js [weeks_ago]
```
Options:
- `0` = this week (default)
- `1` = last week
- `2` = two weeks ago
## API Endpoints Used
### Organization
```
GET /api/v1/organization
Security: Basic Auth
Returns: Array with org info including dynamic apiKey
```
### Vacancy Details (Primary data endpoint)
```
GET /api/v1/{orgId}/Vacancy/details
Security: Basic Auth + apiKey header
Query Params:
- fromDate: datetime (required)
- toDate: datetime (required)
- filled: boolean (optional - filter filled/unfilled)
- pageSize: int (default 10, max 100)
- page: int (default 1)
Returns: Paginated vacancy/absence data
```
## Common Workflows
### "How many absences yesterday?"
```bash
bun get_daily_summary.js yesterday
```
### "Show unfilled positions for today"
```bash
bun get_daily_summary.js today
# Look at unfilled_positions array in output
```
### "Weekly absence trends"
```bash
bun get_weekly_summary.js
```
### "Last week's summary"
```bash
bun get_weekly_summary.js 1
```
## Output Format
### Daily Summary
```json
{
"date": "yesterday",
"date_iso": "2026-01-26",
"total_absences": 110,
"filled": 75,
"unfilled": 35,
"fill_rate": 68,
"by_school": {
"PENINSULA HIGH SCHOOL": 13,
"GIG HARBOR HIGH SCHOOL": 10
},
"by_reason": {
"SICK LV > 1 SICK": 54,
"OTH PAID LV > PERSONAL": 15
},
"by_position_type": {
"Teacher": 55,
"Paraprofessional": 36
},
"unfilled_positions": [
{
"school": "PENINSULA HIGH SCHOOL",
"position": "MATH",
"employee": "JANE DOE",
"start": "2026-01-26T07:00:00",
"end": "2026-01-26T14:30:00"
}
]
}
```
### Weekly Summary
```json
{
"week": "Jan 20-24, 2026",
"week_label": "this week",
"total_absences": 450,
"daily_average": 90,
"filled": 380,
"unfilled": 70,
"fill_rate": 84,
"peak_day": { "day": "Monday", "count": 120 },
"slow_day": { "day": "Friday", "count": 65 },
"by_day": {
"Monday": 120,
"Tuesday": 95,
"Wednesday": 90,
"Thursday": 80,
"Friday": 65
},
"trends": [
{ "type": "info", "message": "Monday had 120 absences (50%+ above average)" }
]
}
```
## Data Fields
Key fields in vacancy data:
- `absenceDetail.employee` - Employee who is absent
- `absenceDetail.reasons[0].name` - Reason category (SICK, PERSONAL, etc.)
- `location.name` - School name
- `position.title` - Position title
- `position.positionType.name` - Position category (Teacher, Paraprofessional, etc.)
- `substitute` - If present, position is filled
- `start` / `end` - Absence time range
- `needsReplacement` - Whether sub is required
## Schools in PSD
Common school names in data:
- PENINSULA HIGH SCHOOL
- GIG HARBOR HIGH SCHOOL
- HENDERSON BAY HIGH SCHOOL
- GOODMAN MIDDLE SCHOOL
- HARBOR RIDGE MIDDLE SCHOOL
- KEY PENINSULA MIDDLE SCHOOL
- KOPACHUCK MIDDLE SCHOOL
- ARTONDALE ELEMENTARY SCHOOL
- DISCOVERY ELEMENTARY SCHOOL
- EVERGREEN ELEMENTARY SCHOOL
- HARBOR HEIGHTS ELEMENTARY SCHOOL
- MINTER CREEK ELEMENTARY SCHOOL
- PIONEER ELEMENTARY SCHOOL
- PURDY ELEMENTARY SCHOOL
- SWIFT WATER ELEMENTARY SCHOOL
- VAUGHN ELEMENTARY SCHOOL
- VOYAGER ELEMENTARY SCHOOL
This skill provides programmatic access to Red Rover absence management data for PSD staff attendance tracking and reporting. It fetches organization credentials, vacancy/absence records, and prebuilt summaries to support daily and weekly reporting. Use it to get raw absence details, daily summaries, certificated-only summaries, and weekly trends.
The skill authenticates using HTTP Basic Auth plus a dynamic apiKey retrieved from the organization endpoint. It calls the Vacancy details endpoint to page through absence records by date range and applies filters for filled/unfilled status. Helper scripts produce daily, certificated, and weekly summaries with counts by school, reason, position type, and fill status.
What headers are required for each API call?
Every request needs Authorization: Basic [base64(user:pass)] and apiKey: [dynamic key] retrieved from GET /api/v1/organization.
What is the maximum date range for absence queries?
The Vacancy/details endpoint should be queried with a maximum span of 31 days per request.