Push anything to your lock screen with chirp
Live Activities and push notifications, straight to your iPhone, from any script, service, or agent. Training runs, deploys, jobs, scrapers, alerts, AI agents. If it runs, it can chirp.
- Live Activities. Real-time status pinned to your lock screen and Dynamic Island. Nobody else does this.
- Push notifications. When the activity ends, when something breaks, when you want to be told.
- One line. Or zero. @chirp.track above any Python function, or chirp run wrapping any shell command. No code changes inside your script.
Training runs, deploys, backups, monitors, agents. One pill, every use case.
Fires from any long-running job
Three lines to your lock screen.
Pick your language, paste your key, wrap your job. No SDKs to learn, no agents to train. Just status where you can actually see it.
- 01
Install
Pick your surface. Python, Node, Go, Rust, Ruby, CLI, bash helpers, MCP, or raw curl. Same API underneath, so integrations you add later keep working.
shellpip install chirp-sdk - 02
Sign in
Run
chirp loginto pair the CLI with your account via your browser — no key copy-pasting. Or setCHIRP_API_KEYin env.shellchirp login # or: export CHIRP_API_KEY=chirp_sk_... - 03
Wrap your job
Call it as a context manager, or use the CLI, or bash wrapper. Start, updates, done, and error reporting are handled for you.
from chirp import ChirpAgent
# Context manager handles start / update / done / error.
# An exception inside the block → red ERROR badge automatically.
with ChirpAgent(name="training") as agent:
for epoch in range(10):
agent.update(f"Epoch {epoch + 1}/10")
train_one_epoch()
agent.done("Best val acc 94.1%")If it runs for a while,
Chirp has a shape for it.
Same API, any job. Drop into the surface that fits. Python for training loops, bash for deploys, curl for anything with an HTTP client.
ML / research
Epoch counter, loss curve, val acc. Notify when the sweep converges.
Epoch 7/10 · loss 0.034
Deploys & builds
Green badge when prod lands. Red on rollback. Wrap any CI job.
Backups & batch jobs
Nightly snapshots, ETL runs. Know whether last night worked.
Snapshot 48 GB complete
Crawlers & collection
Items scraped, pages visited, rate-limit status. Long jobs become glanceable.
Uptime & alerts
Service health, error rates, oncall pages. Amber when something drifts.
Memory at 92% · investigate
AI agents
Claude Code, OpenClaw, custom agents. Turn-complete signals without alt-tabbing.
iOS & game builds
Wrap xcodebuild, ffmpeg, anything slow. Come back when green lands.
Archiving · 58%
Anything custom
Home automation, game servers, sports feeds. If it runs, it can chirp.
Live for the whole run.
Gone the moment it’s over.
The card stays pinned to your lock screen and Dynamic Island while the job runs. Counter ticks, metrics update, status changes. When it finishes, the badge goes green and the activity dismisses itself. Works the same for a training run, a deploy, a backup, or anything else you wrap.
- WORKING
Your .update() call rides the APNs Live Activity pipeline. Same pathway as any native push.
- WAITING
Fires when a job blocks on something outside itself. Human approval, a queue slot, a rate limit window. Amber reads as 'your turn' without alt-tabbing.
- DONE
Success signal. The badge holds for a couple minutes, then the activity dismisses itself. Lock screen goes back to normal.
- ERROR
Non-zero exit, exception, timeout. Whatever went wrong carries through as the status message. Triage from across the room.
Sunday, April 19
5:17
Epoch 3/10 · loss 0.412
One API. Every surface.
Five SDKs (Python, Node, Go, Rust, Ruby), a CLI that wraps any command, GitHub Actions, GitLab CI, CircleCI, Vercel + Sentry webhook bridges, and plain HTTP for everything else. All speak the same API — your phone sees the same Live Activity regardless of how it got there.
from chirp import track
# One line above any function. Green on return, red on exception.
@track("model training", theme="#818cf8")
def train():
for epoch in range(10):
train_one_epoch()
train()Designed for how you actually work.
Live Activities
The differentiator. Real-time status pinned to the lock screen and Dynamic Island. Everyone sends notifications. Nobody else does this.
Push notifications
When the activity ends, when something breaks, when you want to know about it later. Same API, different surface.
Glanceable
Green badge, red badge, amber badge. Color carries the signal. You don't have to read the status line.
Native APNs
Updates ride the same Apple Push pipeline as any first-party Live Activity. Nothing between you and the lock screen.
One per job
Restart your script? The activity updates in place. No stacked cards, no manual cleanup. Idempotent by design.
Language-agnostic
Python, Node, Go, Rust, Ruby, CLI, bash, MCP. One login file, every SDK reads it. Hook into anything that can POST.
No logs by default
Notification and activity records never touch disk — we skip the write entirely in ephemeral mode. Opt into 7 or 30 days on the dashboard if you need a debug window — never longer.
One price. Everything.
Unlimited Live Activities and notifications, all integrations, all templates. Pick monthly or save with yearly.
Works out to $1.67 / month
- Unlimited Live Activities
- Unlimited notifications
- Python SDK, CLI, MCP server, bash wrapper
- All built-in templates + custom schemas
- Dynamic Island + lock screen rendering
- Priority Discord access
Free during alpha · no card required
The iPhone app is the receiver.
Install it, sign in with the same account you used here, and every push or Live Activity Chirp sends lands on your lock screen. Takes under a minute.
You already have your API key and can test the API surface right now from your dashboard. The phone half just lights up once the app pairs.
Wire up your first chirp.
See it on your phone in a minute.
Install the CLI, run chirp login, wrap your job. Every SDK on your machine picks up the same credentials — the first Live Activity lands on your lock screen before you’ve finished reading this.