Track the latest updates, features, and improvements to SEER
Web dashboard, API, and monitoring infrastructure updates
December 2024
November 2024
2025 — aligned with SeerPy 0.2.4 offline semantics
~/.seer/queue (shared with SeerPy). Atomic writes, cross-process locking, FIFO eviction, dead-letter folder. Override with SEER_QUEUE_DIR.seer replay-failed, kept as alias). Supports --max-attempts.--tags, --base-url, --no-auto-replay, --background-replay, --replay-interval, --log-sync-interval.SEER_BASE_URL, SEER_QUEUE_DIR, SEER_QUEUE_MAX_FILES, SEER_QUEUE_MAX_BYTES, SEER_TIMEOUT, SEER_LOG_SYNC_INTERVAL.curl -fsSL https://raw.githubusercontent.com/seer-monitoring/seer-cli/main/cli/install.sh | shexport SEER_API_KEY=your_key
# Monitor any command (job_name must exist in your Seer dashboard)
seer run daily_etl --metadata='{"source":"lake"}' --tags=etl,prod -- python etl.py
# Heartbeat
seer heartbeat worker_process --metadata='{"pid":1234}'
# Flush offline queue
seer replay2025
~/.seer/queue (shared with Seer CLI). Atomic writes, cross-process locking, FIFO eviction at 500 files / 50 MiB, dead-letter folder.seer.replay() manual flush, auto_replay=True on init, and background_replay=True daemon thread.Idempotency-Key header. Replay uses {key}:register then {key}:complete.tags= parameter added to both monitor() and heartbeat().base_url= or set SEER_BASE_URL. Envelopes pin the base_url they were created with.finally. HTTP 4xx not retried (except 429). Log capture restores prior handlers. Shared requests.Session.filelock for cross-process queue locking.pip install seerpyfrom seerpy import Seer
import os
# api_key= preferred; apiKey= accepted for backwards compat
seer = Seer(api_key=os.getenv("SEER_API_KEY"), auto_replay=True)
with seer.monitor("daily_job", capture_logs=True, tags=["prod"]):
print("Running job...")
# Your code hereDecember 2024
with seer.monitor() syntax for automatic job tracking