name: track-compliance-deadlines description: "Keep a living people-compliance calendar - I-9 / W-4 status, visa renewals, vesting cliffs, review-cycle dates, policy-refresh cadence. I scan your HR system, update the calendar in place, and nudge you before things expire." version: 1 category: People featured: no image: busts-in-silhouette integrations: [googlesheets, notion]
Track Compliance Deadlines
When to use
- Explicit: "build the compliance calendar", "what's coming up in HR compliance", "what I-9 / W-4 / visa renewals are due", "refresh the compliance calendar".
- Implicit: routed monthly, or new hire finishes onboarding (new I-9 deadline), or visa date recorded.
- Frequency: on-demand + monthly refresh.
Connections I need
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.
- HR platform (Gusto, Deel, Rippling, Justworks) — pull start dates, work-authorization, vesting. Required.
- Calendar (Google Calendar, Outlook) — push date reminders if you want them on your calendar. Optional.
- Sheets (Google Sheets, Airtable) — mirror the calendar for finance or ops if needed. Optional.
- Docs (Notion) — share the calendar in your team workspace. Optional.
If your HR platform isn't connected I stop and ask you to link Gusto, Deel, Rippling, or Justworks from the Integrations tab.
Information I need
I read your people context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.
- Roster with start dates and statuses — Required. Why I need it: every entry traces to an employee record. If missing I ask: "Connect your HR platform so I can pull start dates and work-authorization, or paste the team list with these fields."
- Review cycle rhythm — Required. Why I need it: review-cycle anchors are part of the calendar. If missing I ask: "Are reviews annual, semi-annual, or quarterly, and when does the next cycle start?"
- State registration footprint — Optional. Why I need it: state filings depend on where employees live. If you don't have it I keep going with TBD on state entries.
- Equity vesting policy — Optional. Why I need it: cliff dates and acceleration drive 30-day notices. If you don't have it I keep going with TBD on equity entries.
- PTO refresh date — Optional. Why I need it: anchors the annual PTO refresh entry. If you don't have it I keep going with TBD.
Steps
- Read people-context doc. Read
context/people-context.mdfor review-cycle rhythm (annual / semi-annual / quarterly, next cycle date) + any policy-refresh cadence. If missing/empty, tell user: "I need the people-context doc first - run the set-up-my-people-info skill." Stop. - Read ledger.
config/context-ledger.json(HR platform read-only - never modify records). If HR platform not connected, ask ONE targeted question with modality hint ("Connect your HR platform - Gusto, Deel, Rippling, or Justworks - in the Integrations tab so I can pull start dates, work-authorization status, and vesting schedules"). - Discover tools via Composio. Run
composio search hrisfor read-only profile slug +composio search calendarfor calendar tool to push reminders if user wants. - Scan employee records (read-only). Per employee, pull:
- Start date (I-9 3-day rule reference).
- W-4 last-refreshed date.
- Work-authorization / visa expiration (if applicable).
- Equity vesting start + cliff date + acceleration terms (if applicable).
- Review-cycle anchor date vs rhythm in people-context.
- Produce calendar entries per category:
- I-9 deadlines - 3-day rule. Flag anyone still in 3-day window.
- W-4 refresh timing - annual refresh anchors.
- Visa expirations - 90 / 60 / 30 day warnings per employee.
- State registration requirements - per-state obligations from new-state hires.
- Review-cycle dates - derived from rhythm in people-context.
- Equity vesting cliffs - notify 30 days pre-cliff.
- PTO policy refresh dates - annual / fiscal refresh.
- Update living doc. Write full refreshed calendar atomically to
compliance-calendar.mdat agent root (NOT subfolder) - writecompliance-calendar.md.tmp, rename over existing file. Structure: one section per category above, entries sorted by date ascending, each entry carrying{ employee-slug (if applicable), due-date, days-out, action }. Top-of-file "Refreshed: {timestamp}" line. - Append to
outputs.json- read existing array, add new entry per refresh:{ id, type: "compliance", title: "Compliance calendar refresh {YYYY-MM-DD}", summary, path: "compliance-calendar.md", status: "ready", createdAt, updatedAt }. Each substantive refresh = NEW outputs.json entry - file at agent root overwritten, but outputs log append-only so dashboard shows history. Write atomically. - Summarize to user - one paragraph: count of entries per category, nearest-term action, path to
compliance-calendar.md. Offer to push date reminders to connected calendar tool.
Never invent
Every entry ties back to a real HR platform record or real people-context anchor. Field missing → mark TBD. Don't guess date.
Never mutate
HR platform / payroll records read-only from this agent. Skill reads, scans, produces markdown calendar - never writes back to the HR platform.
Outputs
compliance-calendar.mdat agent root (living doc, updated atomically in place).- Appends to
outputs.jsonwith typecomplianceper refresh - dashboard shows refresh history even though calendar file overwritten.