home / skills / krishagel / geoffrey / redrover-manager

redrover-manager skill

/skills/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-manager

Review the files below or copy the command above to add this skill to your agents.

Files (6)
SKILL.md
5.3 KB
---
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

Overview

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.

How this skill works

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.

When to use it

  • Generate yesterday or today absence summaries for operational staffing decisions
  • Extract raw absence and vacancy data for a specific date range (max 31 days)
  • Produce certificated-staff reports focused on classroom coverage needs
  • Monitor weekly trends and peak days to inform substitute staffing levels
  • List unfilled positions for immediate follow-up by district staff

Best practices

  • Store Basic Auth credentials and the dynamic apiKey securely (1Password recommended)
  • Limit queries to 100 requests/minute and page results (pageSize up to 100) to avoid rate limits
  • Keep date ranges under 31 days for Vacancy endpoint calls to ensure complete results
  • Use certificated summary for teacher/ESA/CTE-focused decision making to prioritize classroom coverage
  • Validate organization endpoint first to refresh the dynamic apiKey before other requests

Example use cases

  • Run get_daily_summary.js yesterday to report total absences, fill rate, and unfilled positions for the district
  • Run get_absences.js 2026-01-20 2026-01-27 unfilled to export unfilled vacancies for a week
  • Run get_certificated_summary.js today to see teacher-specific coverage gaps and prioritize substitutes
  • Run get_weekly_summary.js 1 to compare last week’s trends against this week for staffing adjustments
  • Automate nightly exports of Vacancy details for integration with payroll or HR analytics

FAQ

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.