Changelog

Mar 25, 2026

New Metrics Live Activity for Backend Monitoring

Metrics Live Activity on iPhone showing server health with CPU and memory values

Live Activities now support a third activity type: metrics.

Use metrics to track server health, queue pressure, replica lag, worker saturation, and similar backend state you want visible on your lock screen at a glance.

Metrics Live Activity on iPhone showing server health at start

const status = await activitysmith.liveActivities.stream("prod-web-1", {
content_state: {
title: "Server Health",
subtitle: "prod-web-1",
type: "metrics",
metrics: [
{ label: "CPU", value: 9, unit: "%" },
{ label: "MEM", value: 45, unit: "%" },
],
},
});

Call the same PUT /live-activity/stream/{stream_key} endpoint again whenever the values change. ActivitySmith keeps the Live Activity in sync on the device for you.

When the signal is no longer relevant, call DELETE /live-activity/stream/{stream_key} to end the Live Activity.

Need full lifecycle control instead?

If your runtime already has state, you can use the start/update/end lifecycle to have full control over the Live Activity.

Metrics Live Activity on iPhone showing server health while managed through the full lifecycle

const start = await activitysmith.liveActivities.start({
content_state: {
title: "Server Health",
subtitle: "prod-web-1",
type: "metrics",
metrics: [
{ label: "CPU", value: 76, unit: "%" },
{ label: "MEM", value: 52, unit: "%" },
],
},
});
const activityId = start.activity_id;

Store the returned activity_id and use the same metrics shape in update and end requests.

await activitysmith.liveActivities.update({
activity_id: activityId,
content_state: {
...
},
});

Availability

Available now across the API, SDKs, CLI, and GitHub Action.

This feature is available in the ActivitySmith iOS app version 1.5.0 and newer.

Mar 24, 2026

Stateless Live Activities: Stream Updates Without Managing activity_id

Stateless Live Activity showing CPU usage on iPhone

Live Activities now support a stateless stream mode.

I built this because while working on a new Live Activity type, I ran into a real limitation: lifecycle state management is fine in systems that already have state, but it becomes awkward in runtimes that wake up, do one thing, and exit.

GitHub Actions is a good example of where the original lifecycle still fits well. A workflow can start a Live Activity, keep the returned activity_id across steps, send updates, and end it when the run finishes.

A cron job is different. Each run can measure the current state of a process, but it does not naturally remember the activity_id from the previous run. You can bolt on a file, Redis key, or database row to persist it, but that means the integration is doing more state management than the job itself.

Stateless Live Activities remove that overhead.

What's new

  • New PUT /live-activity/stream/{stream_key} endpoint for stateless start-or-update behavior.
  • New DELETE /live-activity/stream/{stream_key} endpoint to end the tracked Live Activity when the process is over.
  • ActivitySmith manages the lifecycle behind a stable stream_key, so the caller does not need to persist activity_id.
  • This is a good fit for cron jobs, scheduled scripts, background workers, and polling loops.

How it works

Pick one stable stream_key for one thing you are tracking.

Examples:

  • prod-web-1
  • deployment-main
  • nightly-backup
  • ev-charging

Use one stream_key for one system, workflow, or process.

If no Live Activity exists yet for that key, ActivitySmith starts one. If one already exists, ActivitySmith updates it. If the current Live Activity needs to rotate, ActivitySmith handles that too.

The caller only sends the latest state.

Example: monitor PM2 process from cron

API Health progress Live Activity on iPhone showing PM2 CPU usage

In this example, a cron job runs on a VPS, reads the CPU usage of one PM2 process by ID, maps that value to a progress Live Activity, and sends it with the same stream_key every time.

The important part is what the script does not do:

  • it does not load an activity_id
  • it does not save lifecycle state anywhere
  • it just sends the latest data
#!/bin/bash
set -euo pipefail
API_BASE_URL="https://activitysmith.com/api"
API_KEY="YOUR_API_KEY"
STREAM_KEY="pm2-activitysmith-api-cpu"
PM2_PROCESS_ID="0"
cpu_raw=$(pm2 jlist | jq -r --arg id "$PM2_PROCESS_ID" '
map(select((.pm2_env.pm_id | tostring) == $id)) | .[0].monit.cpu
')
if [ -z "$cpu_raw" ] || [ "$cpu_raw" = "null" ]; then
exit 1
fi
cpu=$(printf "%.0f" "$cpu_raw")
if [ "$cpu" -gt 100 ]; then
cpu=100
fi
if [ "$cpu" -ge 80 ]; then
color="red"
elif [ "$cpu" -ge 40 ]; then
color="yellow"
else
color="green"
fi
payload=$(cat <<EOF
{
"content_state": {
"title": "API Health",
"subtitle": "PM2 activitysmith-api CPU",
"type": "progress",
"percentage": $cpu,
"color": "$color"
}
}
EOF
)
curl --fail --silent --show-error \
-X PUT "$API_BASE_URL/live-activity/stream/$STREAM_KEY" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"

Then let cron run it every minute:

* * * * * /opt/monitoring/pm2-cpu-live-activity.sh

One run might send a green update at normal CPU usage.

API Health progress Live Activity on iPhone showing PM2 CPU usage spike

A later run can spike the same Live Activity to yellow.

API Health progress Live Activity on iPhone showing PM2 CPU usage after it settles

That is the whole point of stream mode: each execution is stateless, but the Live Activity stays continuous on the device.

When to use which model

Use stream mode when the caller should only send the latest state and move on.

Good fits:

  • cron jobs
  • scheduled health checks
  • queue depth samplers
  • background workers
  • scripts that run independently and exit

Keep the original start/update/end lifecycle when the caller already has a natural place to keep state.

Good fits:

Ending the stream

When the tracked process is over and you no longer want the Live Activity on devices, end the stream explicitly:

curl --fail --silent --show-error \
-X DELETE "https://activitysmith.com/api/live-activity/stream/pm2-activitysmith-api-cpu" \
-H "Authorization: Bearer YOUR_API_KEY"

If you later send another PUT request with the same stream_key, ActivitySmith starts a new Live Activity for that stream again.

Availability

Available now across the API, SDKs, CLI, and GitHub Action.

This feature is available in the ActivitySmith iOS app version 1.5.0 and newer.

Mar 19, 2026

Live Activity Action: Add a Button to Open a URL or Trigger a Webhook

Live Activity with an action button on iPhone

Live Activities now support optional action button.

Use it when a long-running job should stay actionable while progress is visible on the Lock Screen.

Open the GitHub Action run for a deployment, open a runbook, or trigger a backend webhook to pause or retry work without having to search for the right link or dashboard first.

What’s new

  • New optional action field on Live Activity start, update, and end requests.
  • One button per Live Activity.
  • Action type:
    • open_url: opens the provided HTTPS URL in the browser.
    • webhook: ActivitySmith backend calls the provided HTTPS webhook (GET or POST).
  • Supported for both segmented_progress and progress Live Activities.

Open URL example

Use this to jump from the Live Activity straight into the deployment or CI page.

{
"content_state": {
"title": "Deploying payments-api",
"subtitle": "Running database migrations",
"number_of_steps": 5,
"current_step": 3,
"type": "segmented_progress"
},
"action": {
"title": "Open Workflow",
"type": "open_url",
"url": "https://github.com/acme/payments-api/actions/runs/1234567890"
}
}

Webhook example

Use this when the action should trigger backend behavior instead of opening a page.

{
"content_state": {
"title": "Reindexing product search",
"subtitle": "Shard 7 of 12",
"number_of_steps": 12,
"current_step": 7,
"type": "segmented_progress"
},
"action": {
"title": "Pause Reindex",
"type": "webhook",
"url": "https://ops.example.com/hooks/search/reindex/pause",
"method": "POST",
"body": {
"job_id": "reindex-2026-03-19",
"requested_by": "activitysmith"
}
}
}

Good fits

  • deployment progress: open the workflow, deployment page, PR, or incident runbook
  • customer imports and backfills: pause the import or retry a failed batch
  • search reindex jobs: pause the reindex from the Live Activity itself
  • database backup or restore verification: open the runbook or trigger the next backend step

Availability

Available now across the API, SDKs, CLI, and GitHub Action.

This feature is available in the ActivitySmith iOS app version 1.4.0 and newer.

Mar 16, 2026

Rich Push Notifications: Send Images, Video, and Audio

Rich push notifications in ActivitySmith

Push Notifications now support optional media.

Attach an image, video, or audio file to the notification itself so you can press and hold to preview media directly from the notification, then tap through to open the linked content.

This is a good fit for agent outputs, QA review flows, design previews, generated voice overs, and any backend workflow where the notification should carry the actual result, not just a line of text.

What’s new

  • New optional media field for push notifications.
  • Send direct image, video, or audio URLs in the payload.
  • Press and hold to preview the media directly from the notification.
  • media can be combined with redirection.
  • If redirection is omitted, tapping the notification opens the media URL.

What will work

  • direct image URL: .jpg, .png, .gif, etc.
  • direct audio file URL: .mp3, .m4a, etc.
  • direct video file URL: .mp4, .mov, etc.
  • URL that responds with a proper media Content-Type, even if the path has no extension

Example payload

{
"title": "Homepage ready",
"message": "Your agent finished the redesign.",
"media": "https://cdn.example.com/output/homepage-v2.png",
"redirection": "https://github.com/acme/web/pull/482"
}

Availability

Available now across the API, SDKs, CLI, and GitHub Action.

This feature is available in the ActivitySmith iOS app version 1.3.0 and newer.

Mar 11, 2026

New Progress Type for Live Activities

Progress Live Activity showing model download progress on iOS

Live Activities now support a second activity type: progress.

Use progress when the work is naturally continuous instead of step-based.

It fits EV charging, file transfers, data sync progress, imports, downloads, uploads, and any job where a percentage or numeric range is clearer than "step 2 of 4".

What’s new

  • New progress type for Live Activities.
  • Send either percentage or value with upper_limit.
  • Keep using segmented_progress for step-based workflows.
  • segmented_progress still supports dynamic number_of_steps during update and end calls.

Choose the right type

  • segmented_progress: best for jobs tracked in steps.
  • progress: best for jobs tracked as a percentage or numeric range.

Lifecycle

The lifecycle stays the same:

  1. Start the activity.
  2. Save the returned activity_id.
  3. Update it as progress changes.
  4. End it when the work is finished.

Start Live Activity

Progress Live Activity on iPhone showing EV charging starting at 15 percent

{
"content_state": {
"title": "EV Charging",
"subtitle": "Added 30 mi range",
"percentage": 15,
"type": "progress",
"color": "lime"
}
}

Update Live Activity

Progress Live Activity on iPhone showing EV charging updated to 60 percent

{
"content_state": {
"title": "EV Charging",
"subtitle": "Added 120 mi range",
"percentage": 60
}
}

End Live Activity

Progress Live Activity on iPhone showing EV charging completed

{
"content_state": {
"title": "EV Charging",
"subtitle": "Added 200 mi range",
"percentage": 100,
"auto_dismiss_minutes": 2
}
}

Numeric range example

{
"content_state": {
"title": "Data Sync",
"subtitle": "241 of 360 records synced",
"value": 241,
"upper_limit": 360,
"type": "progress",
"color": "blue"
}
}

Availability

Available now across the API, SDKs, CLI, GitHub Action, and ActivitySmith skill.

This feature is available in the ActivitySmith iOS app version 1.2.0 and newer.

Feb 27, 2026

Actionable Push Notifications: Tap to Open URL, Long-Press for Actions (Open URL or Webhook)

Actionable push notifications with tap redirection and long-press actions

Push Notifications now support optional redirection and actions fields.

Use redirection to open a URL when a user taps the notification. Use actions to show up to four buttons on long-press.

What’s new

  • redirection: HTTPS URL opened on notification tap.
  • actions: up to 4 action buttons shown on long-press.
  • Action type:
    • open_url: opens the provided URL in browser.
    • webhook: triggers backend webhook call (GET or POST).

Availability

This feature is available in the ActivitySmith iOS app version 1.1.0 and newer.

Example payload

{
"title": "Build Failed 🚨",
"message": "CI pipeline failed on main branch",
"redirection": "https://github.com/org/repo/actions/runs/123456789",
"actions": [
{
"title": "Open Failing Run",
"type": "open_url",
"url": "https://github.com/org/repo/actions/runs/123456789"
},
{
"title": "Create Incident",
"type": "webhook",
"url": "https://hooks.example.com/incidents/create",
"method": "POST",
"body": {
"service": "payments-api",
"severity": "high"
}
}
]
}

All SDKs, CLI, and the GitHub Action now support these optional fields in push notification requests.

Feb 20, 2026

ActivitySmith Skill: Install with npx skills add for Agent Workflows

ActivitySmith skill for agent workflows

ActivitySmith now provides a skill you can install with npx skills add to send Push Notifications and trigger Live Activities from your coding agents.

Install

npx skills add ActivitySmithHQ/activitysmith-cli --skill activitysmith

Repository: github.com/activitysmithhq/activitysmith-cli

Push notification example

./skills/activitysmith/scripts/send_push.sh \
-t "Codex task finished" \
-m "Implemented OAuth callback fix, added regression tests, and opened PR #128."

ActivitySmith push notification on iPhone showing an agent task finished

Live Activity workflow example

activity_id="$(./skills/activitysmith/scripts/start_activity.sh \
--title "Codex: migrate billing webhooks" \
--subtitle "Analyzing handlers" \
--type "segmented_progress" \
--steps 4 \
--current 1 \
--id-only)"
./skills/activitysmith/scripts/update_activity.sh \
--activity-id "$activity_id" \
--title "Codex: migrate billing webhooks" \
--subtitle "Implementing + tests" \
--current 2
./skills/activitysmith/scripts/end_activity.sh \
--activity-id "$activity_id" \
--title "Codex: migrate billing webhooks" \
--subtitle "Done" \
--current 4 \
--auto-dismiss 2

ActivitySmith Live Activity on iPhone showing coding agent workflow progress

Use ACTIVITYSMITH_API_KEY for auth in your shell or environment.

Feb 17, 2026

Zapier Integration: Trigger Push Notifications and Live Activities from Any Zap

ActivitySmith Zapier integration

ActivitySmith now integrates with Zapier so you can send iOS Push Notifications and Live Activities from your automations.

Connect ActivitySmith to any Zap and route runtime events from your apps, scripts, and workflows to paired team devices.

Supported actions

  • Send push notifications for immediate events.
  • Start and update Live Activities for long-running workflows.

 

Visit ActivitySmith integration on Zapier for more details.

Feb 16, 2026

Channels: Target Users and Devices + Scoped API Keys

ActivitySmith Channels

Use channels to route Push Notifications and Live Activities to specific users and devices.

Channels are now supported across all ActivitySmith SDKs and integrations, and the documentation has been updated with channel examples.

 

ActivitySmith channels screen for routing push notifications and Live Activities

 

You can also scope API keys to specific channels for tighter control over where updates can be delivered.

Why channels

Channels let you route updates to the right audience, for example: #engineering, #ios-builds, #marketing.

Example

{
"title": "Build Failed",
"message": "CI pipeline failed on main branch",
"channels": ["ios-builds", "engineering"]
}

If channels are omitted, delivery behavior stays unchanged.

Feb 12, 2026

Invite Team Members for Shared Push Notifications and Live Activities

ActivitySmith for teams

Add your team members to keep everyone notified and up to date with shared Push Notifications and Live Activities.

When your backend, scripts, or automations send push notifications or Live Activities, each update is delivered to all paired iOS devices on your team.

 

ActivitySmith team members screen for shared push notifications and Live Activities

 

How it works

  1. Add team members in ActivitySmith.
  2. Teammates accept the invite and pair their iOS devices.
  3. Send updates from your backend, scripts, automations, or AI agents.
  4. Everyone gets notified and up to date with Push Notifications and Live Activities.
Feb 7, 2026

Official SDKs Are Live: Node, Python, Go, PHP, Ruby + CLI

ActivitySmith SDKs

The official ActivitySmith SDK suite is now available across all major backend stacks.

You can now integrate ActivitySmith with:

Install

# Node.js SDK
npm i activitysmith
# Python SDK
pip install activitysmith
# Go SDK
go get github.com/ActivitySmithHQ/activitysmith-go
# PHP SDK
composer require activitysmith/activitysmith
# Ruby SDK
gem install activitysmith
# ActivitySmith CLI
npm i -g activitysmith-cli

Documentation

Full SDK documentation:

Feb 6, 2026

ActivitySmith GitHub Action

ActivitySmith GitHub Action launch visual

The official ActivitySmith GitHub Action is now live on the GitHub Marketplace.

Connect your CI and deployment workflows directly to ActivitySmith so your team gets real-time updates on their mobile devices.

You can now:

  • Send push notifications from any workflow step.
  • Start, update, and end Live Activities as your pipeline progresses.

Push Notifications

For lightweight updates like deploy completed, build failed, or rollback started, send a push notification in a single step:

- name: Send push notification
uses: ActivitySmithHQ/[email protected]
with:
action: send_push_notification
api-key: ${{ secrets.ACTIVITYSMITH_API_KEY }}
payload: |
title: "ActivitySmith Deployment"
message: "New release deployed to production."

This is a good fit for one-off alerts where you want immediate visibility but no ongoing activity timeline.

Live Activities

For long-running workflows, start the activity, post as many progress updates as needed, then end it when complete.

The start_live_activity step returns live_activity_id, which you pass into update/end steps.

- name: Start live activity
id: start_activity
uses: ActivitySmithHQ/[email protected]
with:
action: start_live_activity
api-key: ${{ secrets.ACTIVITYSMITH_API_KEY }}
payload: |
content_state:
title: "ActivitySmith API Deployment"
subtitle: "ci: install & build"
number_of_steps: 3
current_step: 1
type: "segmented_progress"
- name: Update live activity
uses: ActivitySmithHQ/[email protected]
with:
action: update_live_activity
api-key: ${{ secrets.ACTIVITYSMITH_API_KEY }}
live-activity-id: ${{ steps.start_activity.outputs.live_activity_id }}
payload: |
content_state:
title: "ActivitySmith API Deployment"
subtitle: "ci: tests"
current_step: 2
- name: End live activity
uses: ActivitySmithHQ/[email protected]
with:
action: end_live_activity
api-key: ${{ secrets.ACTIVITYSMITH_API_KEY }}
live-activity-id: ${{ steps.start_activity.outputs.live_activity_id }}
payload: |
content_state:
title: "ActivitySmith API Deployment"
subtitle: "done"
current_step: 3
Feb 5, 2026

Launch Sequence Completed_

After months of building, ActivitySmith is live! Trigger Live Activities and send Push Notifications to your iOS device(s) with a simple API call.

Start here:

  • Download the ActivitySmith iOS app and pair your device.
  • Create API key and use the REST API to trigger Live Activities and send Push Notifications from any backend or CI.
  • Check Quickstart guide at activitysmith.com/docs.

Try it now at activitysmith.com.