Agent skill

monitor-contacts

Always-on contact freshness monitoring service. Periodically re-researches stale contacts via /dogpile, detects job changes and company news, and alerts via Discord when significant changes are found.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/monitor-contacts

Metadata

Additional technical details for this skill

author
Graham
version
0.1.0
short description
Always-on contact freshness monitoring with change detection

SKILL.md

monitor-contacts

Always-on contact freshness monitoring service. Runs on a schedule (via /scheduler) to keep contact profiles current, detect significant changes (job moves, company news, acquisitions), and alert via Discord.

Why This Exists

Contact enrichment is a point-in-time snapshot. People change jobs. Companies get acquired. Programs end. This service ensures your contact intelligence stays fresh without manual re-research.

Continuous Operation (Non-Negotiable)

This skill is always-on. It:

  • Runs on its configured schedule indefinitely — it NEVER stops unless explicitly halted by the user
  • The agent MUST NOT stop and wait for the human to ask for status or remember to check
  • If a cycle fails, diagnose the failure, attempt auto-repair, and continue
  • Only escalate to the human if genuinely blocked after exhausting /dogpile research
  • Gracefully handles restarts and maintains state across cycles
  • Is designed for multi-day/week/month autonomous operation

Anti-pattern: Reporting status and waiting for the human to ask "what next?" is UNACCEPTABLE. The agent must proactively fix issues and continue the monitoring loop.

Architecture

┌──────────────────────────────────────────────────────┐
│              monitor-contacts                         │
│  - Scheduled via /scheduler (nightly or weekly)      │
│  - Staleness-based priority queue                    │
│  - Change detection engine                           │
│  - Discord alerting                                  │
└──────────────────────────────────────────────────────┘
         │                    │                    │
    ┌────┴─────┐        ┌────┴─────┐        ┌────┴──────┐
    │ Staleness │        │ Change   │        │ Alert     │
    │ Scanner   │        │ Detector │        │ Engine    │
    ├──────────┤        ├──────────┤        ├───────────┤
    │ Age check │        │ Diff old │        │ Discord   │
    │ Priority  │        │ vs new   │        │ webhook   │
    │ queue     │        │ profile  │        │ Summary   │
    └──────────┘        └──────────┘        └───────────┘

Commands

bash
# Start monitoring (foreground)
./run.sh monitor

# Start as background service
./run.sh start

# Stop background service
./run.sh stop

# Check service status
./run.sh status

# Run one monitoring cycle manually
./run.sh cycle

# Show contact freshness report
./run.sh report

# Show recent changes
./run.sh changes --since 7d

# Configure monitoring
./run.sh config --interval weekly --budget 10 --alert-channel contacts

Monitoring Cycle

Each cycle:

1. SCAN — Find contacts with staleness > threshold
   ├── Default threshold: 30 days
   ├── High-priority contacts: 14 days
   └── Low-priority contacts: 90 days

2. PRIORITIZE — Sort by staleness + importance
   ├── Contacts with upcoming meetings/events → top
   ├── Contacts in active deals/programs → high
   └── Cold contacts → low

3. RESEARCH — Re-enrich top N stale contacts
   ├── Uses /discover-contacts research pipeline
   ├── Budget-limited (default: 10 contacts per cycle)
   └── Rate-limited to avoid API exhaustion

4. DIFF — Compare new profile vs stored profile
   ├── Job title changed?
   ├── Company changed?
   ├── New publications?
   ├── Company news (funding, acquisition)?
   └── Email likely stale?

5. ALERT — Notify on significant changes
   ├── Discord embed with change summary
   ├── Color-coded: green (positive), yellow (neutral), red (attention)
   └── Weekly digest option

Change Detection

The change detector tracks these signals:

Signal Severity Example
Job change High "John Rushby moved from SRI to DARPA"
Company acquisition High "Galois acquired by [company]"
New DARPA program Medium "Contact's company awarded new DARPA contract"
New publication Low "3 new papers on ArXiv"
Email bounce Medium "Email domain changed"
Company funding Medium "Series B announced"
Company layoffs High "Major restructuring reported"
Conference appearance Low "Speaking at [event]"

Discord Alerts

Individual Change Alert

Contact Change Detected
━━━━━━━━━━━━━━━━━━━━━━

John Rushby
  Was: Senior Computer Scientist @ SRI International
  Now: Program Manager @ DARPA I2O

  Change Type: Job Change (High Priority)
  Detected: 2026-02-12
  Source: LinkedIn via Brave Search

  Action: Update contact record and reach out?

Weekly Digest

Contact Monitor — Weekly Digest
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Contacts Checked: 15/60
Changes Found: 3

  Job Changes (1):
    • John Rushby: SRI → DARPA

  Company News (1):
    • Galois, Inc.: Awarded DARPA PROOFS Phase 2

  New Publications (1):
    • Natasha Neogi: 2 new papers on ArXiv

  Stale Contacts (5):
    • 5 contacts not refreshed in 60+ days

Next cycle: 2026-02-19
Budget used: 8/10 /dogpile calls

Priority Tiers

Contacts can be tagged with priority tiers:

yaml
priority_tiers:
  critical:    # Check every 14 days
    - contacts with active deals
    - contacts in current programs
  standard:    # Check every 30 days (default)
    - general professional network
  cold:        # Check every 90 days
    - historical contacts
    - inactive relationships

Schedule Configuration

yaml
# monitor-contacts config
schedule:
  interval: weekly          # daily, weekly, biweekly, monthly
  day: sunday               # for weekly
  time: "02:00"             # off-peak
  budget_per_cycle: 10      # max /dogpile calls
  concurrency: 2            # parallel research

alerts:
  discord_channel: contacts # channel name
  webhook_url: ${DISCORD_CONTACTS_WEBHOOK}
  digest: weekly            # individual, weekly, both

thresholds:
  critical_staleness: 14    # days
  standard_staleness: 30    # days
  cold_staleness: 90        # days

Memory + Taxonomy Integration

The skill integrates with the shared memory and taxonomy systems via memory_integration.py for longitudinal contact freshness tracking:

  • Pre-hook (recall_contact_changes): Before checking a contact, recalls prior change history to surface patterns (e.g., frequent job moves, company instability).
  • Post-hook (learn_contact_change): After detecting a change, stores the change event (person, type, old/new values, severity) to memory for trend tracking.
  • Bridge keywords: Precision, Resilience, Fragility, Corruption, Loyalty, Stealth (tuned to contact monitoring domain).
  • Tags: ["monitor_contacts", person_name, "drift_tracking"] + bridges

Gracefully degrades if common.memory_client or taxonomy/taxonomy.py are unavailable.

File Structure

monitor-contacts/
  SKILL.md                   # This file
  run.sh                     # Shell entry point
  sanity.sh                  # Sanity checks
  config.py                  # Paths, constants, skill references
  memory_integration.py      # Memory + Taxonomy hooks

Storage

/mnt/storage12tb/media/personas/references/
├── darpa_arcos_contacts.csv          # Source contacts
├── darpa_arcos_enriched.yaml         # Current enriched profiles
├── company_profiles/                 # Company intelligence
├── change_log/                       # Historical changes
│   ├── 2026-02/
│   │   ├── 2026-02-12_changes.json
│   │   └── 2026-02-19_changes.json
│   └── ...
├── enrichment_log.json               # Audit trail
└── monitor_config.yaml               # Service configuration

Integration with /scheduler

bash
# Register with scheduler for weekly runs
/scheduler add monitor-contacts --cron "0 2 * * 0" --budget 10

# Or via run.sh
./run.sh start --schedule weekly

Leveraged Skills

Skill Purpose
/discover-contacts Contact research pipeline
/dogpile Multi-source deep research
/memory Store/recall enriched profiles
/ops-discord Discord webhook alerts
/scheduler Scheduled execution
/task-monitor Progress tracking
/ops-sam-gov Government contract monitoring
/ops-darpa DARPA program tracking

Task-Monitor Integration

The monitoring service registers with /task-monitor:

json
{
  "task_id": "monitor-contacts-cycle",
  "description": "Contact freshness monitoring cycle",
  "completed": 8,
  "total": 15,
  "stats": {
    "contacts_checked": 8,
    "changes_found": 2,
    "dogpile_calls": 6,
    "budget_remaining": 4
  }
}

Privacy & Ethics

  • All research uses publicly available information only
  • No automated outreach or email sending
  • Change detection is passive (no login scraping)
  • Data stored locally on 12TB drive only
  • Audit trail tracks all research activity
  • Respect rate limits on all sources

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results