ProofScout operates strictly local-first with zero hosted cloud dependencies. Scheduled scans, change detection, watchlists, and alerts can run in-process or via native OS scheduling facilities.
When the scoped approval names the optional social-lane providers, scheduled runs must respect their polite rates:
reddit-pullpush: at most one mirror request per subreddit per 20 seconds with exponential backoff on 429/5xx (sharedRateLimiter). Do not schedule social-lane scans more often than the subreddit count allows — e.g. 8 subreddits need at least ~3 minutes of fetch time per run. Prefer daily or twice-daily cadence.x-ingest: file ingest only — no requests are issued, so no rate constraint. Drop a freshlast30daysskill output file before the run and point the provider at it.
Execute a one-off scan with change detection and alert generation:
proofscout schedule-run --days 30 --approval path/to/approval.json --format markdownFor local development or long-lived local worker processes:
import { Scheduler } from "./scheduler.js"
const scheduler = new Scheduler(dependencies, {
days: 30,
alertWebhookUrl: "http://localhost:8080/alerts",
alertFilePath: "./alerts.md",
})
// Run every 60 minutes
const handle = scheduler.start(60 * 60 * 1000)
// Stop on process shutdown
process.on("SIGINT", () => {
handle.stop()
process.exit(0)
})Using native crontab guarantees reliable execution without background Node.js process drift.
Open crontab:
crontab -eRun every morning at 8:00 AM:
0 8 * * * /usr/bin/node /path/to/proofscout/dist/cli.js schedule-run --days 30 --approval /path/to/approval.json --alert-file /path/to/alerts.md >> /var/log/proofscout.log 2>&1Run every 4 hours during business days:
0 */4 * * 1-5 /usr/bin/node /path/to/proofscout/dist/cli.js schedule-run --days 14 --approval /path/to/approval.json >> /var/log/proofscout.log 2>&1For production Linux environments, systemd timers provide robust logging and retry semantics.
[Unit]
Description=ProofScout Market Intelligence Scan
After=network.target
[Service]
Type=oneshot
User=operator
WorkingDirectory=/home/operator/proofscout
ExecStart=/usr/bin/node dist/cli.js schedule-run --days 30 --approval /home/operator/proofscout/approval.json --alert-file /home/operator/proofscout/alerts.md
StandardOutput=journal
StandardError=journal[Unit]
Description=Run ProofScout scan periodically
[Timer]
OnCalendar=*-*-* 08:00:00
Persistent=true
[Install]
WantedBy=timers.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable --now proofscout.timerOn Windows, use schtasks or PowerShell to configure periodic execution:
schtasks /create /tn "ProofScoutDailyScan" /tr "node C:\proofscout\dist\cli.js schedule-run --days 30 --approval C:\proofscout\approval.json" /sc daily /st 08:00- Deterministic Windowing: Each run scans from
now - daystonow. - Audit Diffs: Every change is stored in the SQLite
opportunity_diffstable:new-opportunity: newly discovered opportunity.route-changed: canonical URL or source URL changed.compensation-changed: salary/compensation representation updated.deadline-passed: expiration date reached.risk-flag-added: new contradiction or risk signals detected.
- Shortlist-Ready Alerts Only:
- Alerts page only for new or materially changed shortlist-ready opportunities (
status === "verified", actionable next step, no risk flags, confidence >= 0.7). - Unverified
needs_reviewitems and minor metadata noise do not trigger alerts.
- Alerts page only for new or materially changed shortlist-ready opportunities (
- Watchlists:
- Named companies, authors, and keywords can be registered via
watchlist-add. - Watchlist matches without an actionable next step enter the review queue with evidence as
hiring-signal, never as qualified opportunities.
- Named companies, authors, and keywords can be registered via