---
description: Personal tracker for action items, ideas, follow-ups across all projects. Manages ~/.personal/tracker.json. Supports prefixes (JOB-* applications, OUTREACH-* messages, INT-* improvements, IDEA-* future projects). Triggered by 'add to tracker', 'track this', 'what's open', '/track'.
---

# personal-tracker

The persistent action-item tracker for the personal laptop. Lives at `~/.personal/tracker.json`.

## Trigger phrases

- "Add to tracker"
- "Track this"
- "What's open"
- "What's due this week"
- `/track [add|list|update|done]`

## Schema

```json
{
  "items": [
    {
      "id": "INT-00001",
      "type": "improvement | application | outreach | idea | learning | side-project",
      "title": "...",
      "description": "...",
      "status": "open | waiting | snoozed | done",
      "priority": "high | medium | low",
      "created": "YYYY-MM-DD",
      "due": "YYYY-MM-DD or null",
      "snoozed_until": "YYYY-MM-DD or null",
      "completed_date": "YYYY-MM-DD or null",
      "project": "personal-opencode | job-hunt | side-project-foo | null",
      "tags": ["..."],
      "notes": "...",
      "linked_items": ["..."]
    }
  ],
  "completed": [/* same schema, archived after status=done */]
}
```

## Prefixes

- `JOB-NNNNN` — job applications (managed by `personal-application-tracker`)
- `OUTREACH-NNNNN` — outreach messages (managed by `personal-networking-outreach`)
- `INT-NNNNN` — improvements / process / setup-tweaks
- `IDEA-NNNNN` — future projects, things to maybe build, things to read about
- `LEARN-NNNNN` — learning goals / courses / books
- `SIDE-NNNNN` — active side projects

## Operations

### Add

```
Add to tracker: [title]

[description]

priority: [high|medium|low]
due: [YYYY-MM-DD or "soon" or "no rush"]
project: [project name]
tags: [comma-separated]
```

The AI:

1. Generates next-available ID for the prefix
2. Validates dates (date-only YYYY-MM-DD format, no time/TZ)
3. Appends to `items[]` in tracker.json
4. Confirms with the assigned ID

### List

```
What's open?
What's due this week?
What INT-* items are open?
What's stale (no update >7 days)?
```

The AI:

1. Reads tracker.json
2. Filters by criteria
3. Sorts by due date (overdue first) then priority
4. Returns a tight markdown table

### Update

```
INT-00012: snooze 1 week
INT-00012: priority high
INT-00012: status waiting (waiting on Josh decision)
INT-00012: add note: "tried X, didn't work"
```

### Done

```
Mark INT-00012 done
INT-00012 done — [note about what shipped]
```

The AI moves the item from `items[]` to `completed[]`, sets `completed_date`, optionally appends note.

### Reorder / re-prioritize

```
What should I work on next?
Force-rank my open INT items.
```

The AI applies the CoS priority order (closing loops > opening new ones) plus due-date weighting and surfaces a top-3.

## Date discipline (from work-machine bug history)

ALL date fields use **YYYY-MM-DD only** format. Never datetime. Never timezone. The work-machine bug that black-screened the dashboard for 15 minutes was caused by inconsistent date formats — same discipline here even though there's no dashboard yet.

```python
# CORRECT
from datetime import date
created = date.today().isoformat()  # "2026-05-08"

# WRONG — never do this for tracker date fields
from datetime import datetime
created = datetime.now().isoformat()  # "2026-05-08T22:30:00.123456"
```

## Stale-item surfacing

The skill auto-flags items with no update in >7 days when listing. Stale items get one of three suggestions:

- **Chase** — if status=waiting, suggest a follow-up action
- **Snooze** — if not actionable yet, snooze with a future date
- **Drop** — if the item is no longer relevant, suggest closing it

## Tracker hygiene

When the open-items list crosses 50, the AI proactively suggests a triage session:
"Tracker has 53 open items. Want me to bucket them into Today / This Week / Snooze / Drop?"

This prevents the work-machine pattern of 100+ ghost-open items accumulating.

## Backup

Every write to tracker.json creates a `.bak-{date}` snapshot. The skill keeps the last 7 daily snapshots; older ones are pruned.

## Privacy

Tracker.json may contain salary numbers, recruiter contacts, employment plans. NEVER commit this file. The defensive .gitignore covers `.personal/`. Verify before any public push.
