---
name: track-deadlines-and-signatures
title: Track Deadlines and Signatures
description: 'Keep tabs on what''s outstanding on the legal side. Pick what you need: chase pending signatures, log a freshly signed agreement, see what deadlines are coming up, or get a Monday rollup of the week. I keep a running list so nothing slips.'
author: gethouston
author_url: https://github.com/gethouston/houston/tree/main/store/agents/legal/.agents/skills/track-deadlines-and-signatures
license: MIT
version: 0.1.0
execution_mode: open
jurisdiction: general
practice: contracts
language: en
---

# Track Deadlines and Signatures

One skill for every standing-state tracker agent maintain. `scope` param pick tracker; atomic read-merge-write discipline shared.

## Parameter: `scope`

- `signatures`  -  watch connected signing platform (DocuSign / PandaDoc / HelloSign) for outstanding docs. Draft polite reminders for laggards (never send). File executed copies to connected doc-storage (Google Drive / Dropbox / Notion). Write status board to `signature-status/{YYYY-MM-DD}.md`.
- `counterparties`  -  append executed agreement to `counterparty-tracker.json` at agent root. Fields: `id`, `counterparty`, `agreementType`, `executedDate`, `effectiveDate`, `term`, `autoRenewal`, `noticePeriod`, `governingLaw`, `keyObligations`, `renewalDate`, `signedCopyPath`. Feed `deadlines` scope (renewal clock) + `weekly-review` scope (rollup).
- `deadlines`  -  seed + refresh canonical legal calendar. Static deadlines (Delaware March 1 annual report, 83(b) 30-day from grant, 409A refresh 12 months, DSR 30-day GDPR / 45-day CCPA, TM office action 6-month, annual board consent) + dynamic deadlines from `counterparty-tracker.json` (renewal clocks, notice windows). Write `deadline-calendar.json` at agent root + 90-day readout to `deadline-summaries/{YYYY-MM-DD}.md`. Flag ≤ 30 days urgent, overdue critical.
- `weekly-review`  -  aggregate across agent by reading `outputs.json`: what shipped this week (contract reviews, drafts, audits, filings), what pending signature (from `signature-status/` most recent), next deadline (from `deadline-calendar.json`), what flagged for attorney review (`attorneyReviewRequired: true` entries without resolution). Write `weekly-reviews/{YYYY-MM-DD}.md`.

If user name scope plain English ("chase signatures", "log this deal", "what's due", "Monday review"), infer. If ambiguous, ask ONE question naming 4 options.

## When to use

- Explicit: "where are my signatures", "log {counterparty}'s executed {type}", "what's due soon / overdue", "Monday legal review", "weekly legal readout".
- Plain-English asks map to a `scope`: "nudge / chase pending signatures" / "who hasn't signed yet" → `signatures`; "I just signed something, log it" / "log this signed agreement" / "track this auto-renewal" → `counterparties`; "check my legal deadlines" / "what's coming up in the next 90 days" → `deadlines`; "weekly legal review" / "Monday rollup" → `weekly-review`.
- Implicit: chained from `review-a-contract` (any mode) to `counterparties` when contract hit executed status; from scheduled routines for `weekly-review` + `deadlines`; from `sort-my-legal-inbox` when detect executed-copy attachment for `counterparties`.

## Ledger fields I read

Read `config/context-ledger.json` first.

- `universal.legalContext` + `context/legal-context.md`  -  recommended not required. Enrich `weekly-review` with standing context. If missing + `weekly-review` scope, run `set-up-my-legal-info` skill or proceed with note.
- `universal.entity`  -  required for `deadlines` (formation date gate Delaware March 1 relevance; 409A date set 12-month clock).
- `domains.contracts.signingPlatform`  -  required for `signatures`. If missing, ask ONE question  -  connect DocuSign / PandaDoc / HelloSign or paste status.
- `domains.contracts.documentStorage`  -  required for `signatures` (where to file executed copies) + `counterparties` (where signed copy live  -  `signedCopyPath`).
- `counterparty-tracker.json`  -  required for `counterparties` (read-merge-write) + `deadlines` (source of dynamic renewal clocks) + `weekly-review` (new logs this week).
- `deadline-calendar.json`  -  required for `deadlines` (baseline to diff against) + `weekly-review` (next-deadline surface).
- `outputs.json`  -  required for `weekly-review` (roll-up source).

If any required field missing, ask ONE targeted question with right modality hint, write, continue.

## Steps

1. **Read ledger + state files.** Gather missing required fields per above. Write atomically.
2. **Discover tools via Composio.** `composio search signing-platform` (signatures), `composio search document-storage` (signatures + counterparties). No discovery needed for `deadlines` or `weekly-review` (pure file ops).
3. **Branch on `scope`.**
   - `signatures`:
     1. Execute signing-platform slug  -  list outstanding envelopes. For each: recipient, sent date, days open, last-viewed status.
     2. Draft polite reminder per laggard (> 5 days open). Never send  -  drafts go into status board for founder to send.
     3. For executed envelopes, fetch PDF via signing-platform slug. Execute doc-storage slug to save to well-known path (`contracts/executed/{counterparty}-{YYYY-MM-DD}.pdf`).
     4. Write `signature-status/{YYYY-MM-DD}.md`  -  three sections: Outstanding (+ reminders) / Recently executed (+ paths) / Stalled (> 14 days open  -  recommend outreach or withdraw). For each executed envelope, recommend chain to `track-deadlines-and-signatures` scope=counterparties to log.
   - `counterparties`:
     1. Take input: counterparty name, agreement type, executed date, effective date, term, auto-renewal, notice period, governing law, key obligations (brief), signed-copy path. Ask ONE question for any missing field.
     2. Compute `renewalDate` from `effectiveDate + term - noticePeriod` (critical date = when notice must be given to avoid auto-renewal).
     3. Read-merge-write `counterparty-tracker.json` atomically. Do not overwrite existing rows  -  `id` stable; update-in-place on match.
     4. Append to `outputs.json` as `type: "counterparty-log"`.
   - `deadlines`:
     1. Start from canonical static deadline set:
        - **Delaware annual report**  -  March 1 every year (gate on `universal.entity.state === "DE"`).
        - **83(b) election window**  -  30 days from each option grant / founder-stock restricted-purchase. Source: `outputs.json` entries for recent grants.
        - **409A refresh**  -  12 months from `universal.entity.four09aDate`.
        - **DSR response window**  -  30 days (GDPR Art. 15) / 45 days (CCPA); track from any `dsr-response` entry in `outputs.json`.
        - **TM office action response**  -  6 months from each office action; gate on `domains.ip.marks`.
        - **Annual board consent**  -  365 days from last board consent.
     2. Enrich with dynamic deadlines from `counterparty-tracker.json`  -  for each open row, compute `renewalDate` + notice-deadline (= `renewalDate - noticePeriod`).
     3. Read-merge-write `deadline-calendar.json`: `id`, `kind`, `label`, `due`, `source`, `authority`, `urgency` (critical if overdue or ≤ 30 days; high ≤ 90 days; medium ≤ 180 days; low > 180 days).
     4. Write `deadline-summaries/{YYYY-MM-DD}.md`  -  90-day readout: Critical + High first; for each, cite authority (e.g. "8 Del. C. §503", "IRC §83(b)", "GDPR Art. 15").
     5. Append to `outputs.json` as `type: "deadline-summary"`.
   - `weekly-review`:
     1. Read `outputs.json`. Filter to entries with `createdAt` or `updatedAt` within last 7 days.
     2. Group by `domain` (contracts / compliance / entity / ip / advisory). For each: what shipped, titles + paths.
     3. Read most recent `signature-status/`  -  surface outstanding signatures + stalled.
     4. Read `deadline-calendar.json`  -  next 3 deadlines by urgency.
     5. Surface any `attorneyReviewRequired: true` entries that don't yet have `escalation-brief` follow-up.
     6. Write `weekly-reviews/{YYYY-MM-DD}.md`  -  sections: What shipped (by domain) / Pending signature / Next 3 deadlines / Attorney-review backlog / Recommended next moves.
     7. Append to `outputs.json` as `type: "weekly-review"`.
4. **Atomic writes everywhere** (`*.tmp` → rename).
5. **Summarize to user.** One short paragraph in plain language: the most important thing from this run (the deadline they need to know about, the signatures still pending, what shipped this week). Never name files or paths.

## What I never do

- Send reminders, request signatures, or file executed copies anywhere outside configured doc-storage. Every "sendable" artifact is draft in status board.
- Invent counterparty, term, or deadline. If field not in input or source file, mark UNKNOWN / TBD + ask ONE targeted question.
- Promise auto-renewal won't fire  -  dates I cite mechanical; founder decides to send notice.
- Overwrite `counterparty-tracker.json` or `deadline-calendar.json`  -  read-merge-write always.
- Cite statutory deadline without naming authority (GDPR Art. 15, IRC §83(b), 8 Del. C. §503, etc.).
- Hardcode tool names  -  Composio discovery at runtime only.

## Outputs

- `signature-status/{YYYY-MM-DD}.md` (scope=signatures).
- Updates `counterparty-tracker.json` (scope=counterparties).
- `deadline-summaries/{YYYY-MM-DD}.md` + updates `deadline-calendar.json` (scope=deadlines).
- `weekly-reviews/{YYYY-MM-DD}.md` (scope=weekly-review).
- Appends to `outputs.json`.
