Notifications
UpServe agents finish work on schedules, webhooks, and autonomous runs — even when you’re not looking at the screen. To make sure you don’t miss the results, UpServe delivers them in two ways: in-app notifications and mobile push notifications (iOS and Android). A few notices tied directly to billing or your contract — like the outcome of a bug report — also arrive by email.
When do notifications arrive
- When an agent has a reply for you — If an autonomous run finishes while you’re away from the chat, or a scheduled run wakes the agent up and it produces an answer, a notification is sent. If you’re already viewing that agent’s chat, no push is sent — the message just appears in the conversation.
- When an agent has been stuck waiting for your approval or answer — If an agent asks for approval before a potentially risky action, or asks you a question, and you don’t respond for a while, you’ll get a nudge so you don’t miss it (at most once per request). Quick approvals ping you within about 2 to 5 minutes; requests that are meant to wait longer, like a skill install, wait up to 30 minutes. The chat screen also shows a “Waiting for your approval” indicator with a countdown pinned above the message box, so you can catch it there even if you miss the notification.
- When work you handed to a Workstream finishes — If you’ve given an agent its own Workstream to run a multi-step task, you get notified once that work produces a result — whether it wrapped up successfully or hit a wall it needs to tell you about. Tapping the notification takes you straight to that Workstream instead of the main conversation.
- When your SU changes — Low balance, grants, deductions, and expirations are surfaced as notifications.
- When an agent is paused — If an automatic run is interrupted — for example, by an empty SU balance, or because there’s been no contact with the agent for a while (7 days by default) — you’ll be told which agent stopped and why. One day before an agent is paused for inactivity, you’ll get a single heads-up notification.
- When an agent’s daily automatic-work budget runs out — Work an agent does on its own, like scheduled runs and periodic check-ins, draws from a daily budget. Once today’s share is used up, you get a single notification, and the agent screen shows a “Background work resting” badge. Things pick back up automatically within 24 hours — you won’t get this notification twice for the same agent within that window, and messages you send directly are unaffected.
- When an agent’s workspace runs out of storage — If the storage an agent uses to create or download files fills up, you’re notified. Upgrading the agent’s specs won’t help here — storage capacity doesn’t change with the performance tier — so the agent needs to clean up unneeded files or scale down what it’s working on. You’ll only get this once per day for the same agent.
- When an agent’s workspace has to be rebuilt — In rare cases, a temporary fault in an agent’s working environment forces the system to rebuild it from scratch to recover. Memory and files are usually restored, but things like a signed-in session may be lost — a card in the chat lays out exactly what came back and what didn’t. Open the chat to check.
- When a managed organization database is about to lose access — If your organization uses a separately contracted managed database, you’re warned before access is cut off once the contract expires. Even after the cutoff, your data is kept for a while, and renewing the contract restores access without interruption. Sent only to the organization’s owner.
- When your subscription changes — Subscription start and cancel events are announced.
- When a bug report you filed is resolved — If you used the bug icon’s Report an issue to file a problem and the team confirms a fix — a redo, free support, a fee waiver, or a refund — you’re notified both in-app and by email. Because this ties directly to your contract and billing, it can’t be turned off, and it’s sent regardless of your email unsubscribe settings.
- When a question you posted in the community gets auto-resolved — If someone else replies to your question and then 7 days pass with no new conversation, the server automatically marks it resolved and lets you know. If it’s not actually solved yet, you can undo this anytime by tapping “Still unresolved” on the post.
- Daily summary — Every morning at 9 AM in your time zone, UpServe sends a brief recap of the previous day’s agent activity. If no notifications occurred the day before, no summary is sent.
- Do Not Disturb catch-up — When your Do Not Disturb window ends, UpServe sends a short summary of any agent activity that happened while you were away. This only applies if you have Do Not Disturb enabled.
Notifications are changing (daily summary → work report)
The change described below has not shipped yet as of this update. Once it does, this section reflects what actually happens; until then, the “Daily summary” description above still applies.
- Until now, the “Daily summary” arrived with a self-referential phrase like “N unread notifications.” After this ships, that slot is replaced with what your agents actually did yesterday — completed work, questions or approvals that expired unanswered, failed automatic runs, artifacts created, and things newly learned.
- A notification only arrives on days that need your attention — when something expired unanswered, or an automatic run failed. On days with only completed work, or quiet days with nothing at all, no notification is sent. Tapping the notification takes you straight to the conversation with the employee who handled it.
- You’ll see the full picture every day on a dedicated screen instead of in the notification — on web, the work report card at the top of the Inbox panel on the right side of the Office screen; on mobile, the work report card at the top of the Inbox tab. Quiet days with nothing to report still show “No recorded work for this day,” so they’re distinguishable from days that simply haven’t been tallied yet.
- Your Do Not Disturb hours and the Do Not Disturb catch-up summary are unaffected by this change.
Notification categories
These are the notification categories shown in settings:
- Agent response (including replies from a Workstream)
- SU low / granted / deducted / expired
- Subscription started / canceled
- Agent paused
- Approval / answer reminders — Arrives once more when an agent has been paused for a while waiting for you to approve an action or answer a question, and you still haven’t responded.
- Background work resting — Arrives once when an agent’s daily automatic-work budget runs out and its scheduled/background runs pause for a while. This is a different situation from running out of SU, and things resume automatically within 24 hours.
- Upgrade Suggestions
- Skill improvement proposal received — Arrives when another user’s agent reports a defect in a skill you’ve published. Open My Library → Proposals to review and accept or dismiss each proposal.
- Library cleanup available — Arrives when a periodic scan finds installed skills that may need cleanup. Sent at most once every 7 days per user. Tapping the notification takes you to Skills → My Library, where a cleanup banner lets you handle each item on your own terms.
- Skill deprecated — Arrives when the original author of a skill you’re using marks it as no longer supported. You can search Explore in the Skills tab for a replacement or fork the skill to keep using it.
- Weekly skill health report — A weekly summary of success rates across your installed skills, sent once per week.
- Published item comments — Arrives when another user comments on a skill or preset you published.
- Community comments — Arrives when someone comments on a post you wrote in the community.
- Community question auto-resolved — Arrives when a question you posted in the community gets a reply and then goes 7 days with no new conversation. The notification includes how to undo it. There’s no separate toggle — it shares its setting with Community comments.
- Sensor watch alert — Arrives when a change is detected in something you’ve registered to watch. Each check runs without an LLM call, but it does draw a small amount of SU (workspace upkeep cost) per check.
- Skill auto-created — Arrives when an agent creates a new skill on its own, based on experience from a completed task. The skill is private to that agent and is not published publicly.
- Skill auto-improved — Arrives when an agent refines one of its existing skills on its own. The notification includes a note that you can roll back to the previous version if the change doesn’t help.
- Skill auto-archived — Arrives when an agent automatically archives one of its self-created skills that hasn’t been used in a while. You can restore it anytime from the Skills page.
- Skill version security revocation — Arrives when a specific version of a skill you’ve installed is revoked for a security issue. Update to the latest safe version, or uninstall it if you no longer need it.
- External tool connection expired — Arrives when authentication for an external service (MCP server) connected to your agent expires and the agent can no longer use that tool. Reconnect it from Settings.
- Low storage alert — Arrives when an agent’s workspace runs out of storage.
- Workspace rebuilt — Arrives when a fault in an agent’s working environment forces the system to rebuild it. Shares its setting with the low storage alert.
- Bug report resolution — Arrives when a report you filed is resolved with a redo, free support, a fee waiver, or a refund. Also sent by email, regardless of your mail unsubscribe settings.
- Managed database access ending soon — Arrives when your organization’s managed database contract has expired and access is scheduled to be cut off. This ties directly to your contract and billing, so it can’t be turned off, and it’s sent only to the organization’s owner.
Agent response, SU and subscription notifications, Agent paused, Approval / answer reminders, Upgrade Suggestions, skill-related notifications (improvement proposal received, library cleanup available, deprecated, weekly health report), Published item comments, Community comments, and Sensor watch alert each have their own toggle so you can keep only the ones you care about. The daily summary, Do Not Disturb catch-up, Background work resting, Skill auto-created, Skill auto-improved, Skill auto-archived, Skill version security revocation, External tool connection expired, Low storage alert (including the workspace-rebuilt notice), Bug report resolution, and Managed database access ending soon notifications have no toggle — they can’t be turned off individually and are always sent.
Where to configure them
On the web, open Settings → Notifications (/settings/notifications). Everything is managed from this one screen:
- Master push toggle — The large toggle at the top. When it’s off, no notifications are pushed to your phone (in-app notifications still accumulate).
- Per-category toggles — Turn each category from the list above on or off. Turning a toggle off prevents both the push and the in-app notification from being created.
- Notification hours (Do Not Disturb) — Choose between
Receive all dayandOnly during set hours. If you restrict it to set hours, pushes are silenced outside that window, and the ones that piled up are delivered together at the next allowed time. The agent keeps working outside those hours too — only the notifications are deferred. It uses your current time zone, and overnight windows (e.g. 22:00 – 08:00) work as expected. - Mute specific agents — All agents registered to your account are listed. Toggle any agent to silence every notification from it.

Receiving push notifications on mobile
UpServe push notifications are delivered through the mobile apps (iOS and Android). Web browser push is not supported.
- From Settings → Notifications, tap Download iOS app or Download Android app, or search “UpServe” in the App Store or Google Play. Install the app.
- Sign in. On first launch, the system asks for notification permission — tap Allow. From that moment on, the device can receive push notifications.
- Once permission is granted, the app automatically links the device to your UpServe account. No extra setup is needed.
If you declined permission earlier, re-enable it from Settings → Notifications → UpServe on iOS, or Settings → Apps → UpServe → Notifications on Android. The app won’t ask again on its own.
Setup steps and platform differences are covered in Getting Started on Mobile.
Following progress while an agent runs
You can watch an agent’s progress from your phone while it works. How it’s displayed depends on the platform.
iOS — Live Activities (Lock Screen / Dynamic Island)
- After you send a message and navigate away, a Live Activity starts automatically.
- The Dynamic Island updates as the agent switches between states — for example, when it calls a tool or waits for your approval.
- When the work is done, a brief summary of the final response remains on the lock screen for a few minutes before disappearing.
- Requires iOS 16.2 or later, with Live Activities allowed in your device settings.
- On iOS 17.2 or later, the server can start a Live Activity remotely without the app being open first, so autonomous results can update your lock screen even when you haven’t launched the app.
Android — ongoing notification
- Android has no Live Activity or Dynamic Island. Instead, an “in progress” notification sits in the notification shade while the agent works and clears itself when the run ends.
- The ongoing notification is suppressed while you have the app open in the foreground.
- When the agent needs your approval or answer, you get a notification. Tap it to jump straight into that conversation and respond there.
What about the web?
On the website, the bell icon in the header shows the unread count and opens the notification list when clicked. New notifications update the badge in real time. The browser’s own notification permission is not used — every alert is shown inside the UpServe interface.
That count only includes notifications that need your attention — see “Only badge what needs attention” below for details.
If you want push notifications on your phone, follow the mobile app instructions above.
Only badge what needs attention
As notifications pile up, it gets harder to spot the ones that actually matter. So the badge count and the list filters both separate “things to do” from “things that already happened.”
- The badge only counts notifications that need action. The web bell icon and the app icon badge on iOS and Android both add up only things like a pending approval, a login that needs renewing, or a low SU balance — anything you need to do something about, or that costs you if you ignore it. Notices about something that’s already done — a SU grant or expiration, a daily summary, a subscription starting or canceling — stay in the list but don’t add to the badge.
- Filters at the top of the list let you narrow what you see. Open the notification list and you’ll find three filters: Needs attention, Log, and All. “Needs attention” uses the same rule as the badge; “Log” shows the history of things that are already done; “All” combines both. The list opens with Needs attention selected by default. This filter works the same way on web, iOS, and Android.
Old notifications clean up automatically
So your notification list doesn’t grow without limit, the server automatically removes old notifications.
- Read notifications are deleted 30 days after you read them.
- Unread notifications are deleted 90 days after they were created.
- The exception: mandatory notices tied to contracts or billing — like a remediation, a fee waiver, or a price change — are excluded from this cleanup and stay in your list either way (if you tap Delete all notifications yourself, those are removed too — this exception only stops the server from deleting them on its own).
This cleanup runs automatically, so there’s nothing to configure. To make sure you don’t miss anything important, use the filters above and work through Needs attention first.
How autonomous results are delivered
When an agent finishes work on its own, UpServe applies these rules. Note that when you start a conversation directly, the reply appears inline and no separate notification is generated — notifications are only created when the agent acts without a direct user request (scheduled runs, webhook triggers, and other autonomous executions).
- While you’re viewing that agent’s chat, no push is sent — the response just appears inline in the conversation.
- While you’re on a different screen or have the app closed, both an in-app notification and a push are sent.
- If the same agent replies multiple times in quick succession, you get a phone push for every reply, but once enough unread notifications pile up, the in-app list collapses them into a single grouped entry showing the total count. Opening the chat clears all unread notifications for that agent at once.
- When work finishes in a Workstream, tapping the notification takes you straight to that Workstream. If you’re juggling several Workstreams at once, you don’t have to hunt through the whole conversation to find the result.
Advanced
You don’t need this section for normal use. Read it only if you’re troubleshooting missing notifications or want to understand the system in more detail.
Internal categories
The toggles you see in settings map to these underlying categories. The labels in the UI take priority, but the category names may appear in search and metadata views.
AGENT_RESPONSE— agent replyAGENT_PAUSED— agent paused (out of SU, or no contact for a while). Settings key:agent_pausedAGENT_BUDGET_PAUSED— sent once, the first time an agent’s daily automatic-work budget is exceeded and its scheduled/background runs pause. At most once per agent within the same 24-hour window. Not in the opt-out mapping, so it cannot be disabled individually.AGENT_INACTIVITY_WARNING— a heads-up sent one day before an inactive agent is paused. Not in the opt-out mapping, so it cannot be disabled individually.AGENT_DISK_FULL— sent when the agent’s workspace disk saturates (ENOSPC). Debounced to once per 24 hours per (user, agent) pair. A settings keyagent_disk_fullexists on the server (default on), but as of this writing no screen on web, iOS, or Android exposes a dedicated toggle for it — the master push toggle, Do Not Disturb, and muting that specific agent are the only ways to control it. Muting the agent does suppress it (unlike the forced notices below).AGENT_SANDBOX_RECOVERED— sent when the workspace could not be confirmed alive after a transient fault and was rebuilt. Shares its setting key (agent_disk_full) withAGENT_DISK_FULL— both fall under the same “agent operating status” axis. The chat carries a card with reproducible detail (what was restored, what wasn’t); the notification text itself is capped at two lines.ORG_DATABASE_ENTITLEMENT_GRACE— sent once to the organization’s owner (resent if the contract expires again) when a managed organization’s contract has expired and shared database access is scheduled to be blocked after a grace period. The grace period is timed from the notification itself; if sending fails, access is not cut off and the system retries at the next check. A different type from the quota-warning notice (org_database_quota_warning) — the cause here is contract expiry, so the fix is renewing the contract, not cleaning up data. No individual toggle — required by the terms of service as advance notice.INTERRUPT_WAITING_REMINDER— sent once per pending approval/question. Settings key:interrupt_waiting_reminder. Fires atclamp(time-to-expiry × 0.5, 90s, 1800s)— halfway to expiry, floored at 90 seconds and capped at 1800 seconds (30 minutes). Skipped if fewer than 60 seconds remain before expiry. Excludes orphaned sub-agent interrupts and desktop login handoffs (which have their own dedicatedDESKTOP_HANDOFF_WAITINGnotification).CREDIT_LOW/CREDIT_GRANTED/CREDIT_DEDUCTED/CREDIT_EXPIRED— SU-related eventsSUBSCRIPTION_STARTED/SUBSCRIPTION_CANCELED— subscription eventsUPSELL_CREDIT/UPSELL_FEATURE— recommendations and upsell hintsDAILY_SUMMARY— sent once per day at 9 AM in the user’s time zone. Not in the opt-out mapping, so it cannot be disabled individually. Suppressed automatically if no notifications occurred the previous day.DND_SUMMARY— sent shortly after the Do Not Disturb window closes. Not in the opt-out mapping, so it cannot be disabled individually. Suppressed if no notifications occurred during the DND window.SKILL_PROPOSAL_RECEIVED— proposal received on a published skill. Settings key:skill_proposal_receivedSKILL_LIBRARY_CLEANUP_AVAILABLE— Personal Curator found cleanup candidates. Settings key:skill_library_cleanup_availableSKILL_DEPRECATED— a skill you use has been deprecated by its author. Settings key:skill_deprecatedSKILL_HEALTH_REPORT_WEEKLY— weekly skill health summary. Settings key:skill_health_report_weeklyMARKETPLACE_COMMENT— a comment on a skill or preset you published. Settings key:marketplace_commentCOMMUNITY_COMMENT— a comment on a post you wrote in the community. Settings key:community_commentQUESTION_AUTO_RESOLVED— sent when a QUESTION post you wrote gets a reply and then goes 7 days with no new comments, transitioning it to auto-resolved (auto_resolved_at). No dedicated settings key — sharescommunity_comment(turning that off also disables this). The body includes how to undo it (the post’s “Still unresolved” button).SENSOR_EVENT— a change was detected in something registered to watch. No LLM call is involved, but each check deducts a small amount of SU under “Infra” (workspace upkeep cost) — only on a successful round trip; failed checks are not charged. Settings key:sensor_eventSKILL_CLUSTER_ALERT/SKILL_FORK_INSPIRATION/SKILL_SUGGESTION/SKILL_PROMOTION_SUGGESTED/SKILL_DERIVATIVE_PUBLISHED— skill curation notifications. Not in the opt-out mapping, so they cannot be disabled individually.SKILL_AUTO_CREATED— sent when an agent autonomously creates a new skill from this task’s experience. Not in the opt-out mapping, so it cannot be disabled individually.SKILL_AUTO_PATCHED— sent when an agent autonomously improves an existing skill. The notification body includes a pointer to the version history for one-click rollback. Not in the opt-out mapping, so it cannot be disabled individually.SKILL_AUTO_ARCHIVED— sent when a long-unused, autonomously created skill is automatically archived. Not in the opt-out mapping, so it cannot be disabled individually.SKILL_VERSION_REVOKED— sent when the pinned version of a skill you installed is revoked for a security issue. Not in the opt-out mapping, so it cannot be disabled individually.MCP_REAUTH_REQUIRED— sent when an external MCP server’s authorization expires and needs to be renewed (since the tool disappears silently otherwise, this notification is the only way to notice). Not in the opt-out mapping, so it cannot be disabled individually.REMEDIATION_STAGE_CHANGED— notice that a bug report was resolved with a redo, free support, or a refund (the specific stage is carried in the notification metadata).FEE_WAIVER_GRANTED— notice that a fee waiver was confirmed (includes the waived amount; when a report resolves as a fee waiver, only this type is sent —REMEDIATION_STAGE_CHANGEDis deliberately skipped to avoid announcing the same fact twice). Neither is in the opt-out mapping, so neither can be disabled individually, and creating the in-app notification forcibly bypasses agent muting. The email is also attempted and bypasses marketing-unsubscribe settings — this is a transactional notice that billing was adjusted, not that SU were granted.
The badge axis: ACTIONABLE vs. INFORMATIONAL
Every notification type is classified server-side as ACTIONABLE or INFORMATIONAL. This isn’t a stored column — it’s derived from the type on every read, and it’s the single source of truth for both the badge and the filters.
- The badge count (the
unread_countfield fromGET /api/notifications/unread-count, and the same field on the list endpoint) counts only unread notifications that areACTIONABLE. A separateinformational_unread_countfield carries the unread count for the “Log” side, and it’s what the filter chip’s own number is based on. - The list filter is implemented as a
category=ACTIONABLEorcategory=INFORMATIONALquery parameter onGET /api/notifications. Omitting it (the “All” filter) returns everything, unfiltered. - Any new, unclassified type defaults to
ACTIONABLE— the reasoning is that a missed classification should add noise rather than silently disappear from the badge. QUESTION_AUTO_RESOLVEDis classifiedINFORMATIONAL(it’s a post-hoc notice about something the server already changed), so it doesn’t add to the badge.- This filter and badge behavior has been verified on all three platforms — web, iOS, and Android — as of 2026-08-18.
(Upcoming) Daily work report transition
Technical detail for the “Notifications are changing” section above. Not yet deployed to production as of this update.
- A new notification category,
DAILY_WORK_ATTENTION, is introduced and classifiedACTIONABLE(counted toward the badge and the default filter). After this ships, the existingDAILY_SUMMARYtype stops being sent, though its past history andINFORMATIONALclassification remain unchanged. Neither type has a settings key, so neither can be disabled individually. - The send decision is whether that day’s tally has at least one expired interrupt or failed automatic run (
needs_attention). Days with only completed work, artifacts, or newly learned skills don’t produce a notification — only a ledger row. Whether the ledger row is saved (has_content) and whether a notification is sent are separate axes. - The reporting window is the previous day (midnight to midnight) in the user’s time zone, processed during the user’s local 9 AM window.
- The population covers every agent the user can see (personally owned + agents owned by organizations they belong to).
- Even on days with no notification, that day’s data is still recorded — that’s how the surface distinguishes “no recorded work for this day” from “not tallied yet.”
- The Do Not Disturb catch-up summary’s own stats (
DND_SUMMARY) exclude bothDAILY_SUMMARYandDAILY_WORK_ATTENTIONto avoid double-counting — the Do Not Disturb behavior you experience isn’t otherwise affected.
Notification retention policy (automatic deletion)
The notifications table has a daily cleanup job that hard-deletes old rows (not recoverable).
- Read branch: deleted 30 days after
read_at. - Unread branch: deleted 90 days after
created_at. - Exception:
REMEDIATION_STAGE_CHANGED/FEE_WAIVER_GRANTED/PRICE_CHANGE_NOTICE/CONTRACT_RENEGOTIATION_NOTICE/SERVICE_LIMIT_NOTICE(the 5 mandatory notices) are excluded from this cleanup regardless of read status. That said, if you runDELETE /api/notifications/all(delete all notifications) yourself, those 5 types are removed too — this exception only stops the server from deleting them on its own; it doesn’t take away your own delete option.
AGENT_RESPONSE push suppression
The decision to skip a push is made on the server by checking whether you currently have that agent’s chat open. If the mobile app happens to be in the foreground but the server doesn’t detect an active session, a push may still be delivered. The message will already be visible on screen, so it’s a visual duplicate rather than a missed notification — the app does not filter it out at the client level.
Autonomous response grouping
Once 2 or more unread responses for the same agent have piled up (i.e. starting with the 3rd new response), the server deletes the existing entries and replaces them with a single grouped notification showing the total count. This grouping is per-agent and applies regardless of platform (iOS, Android, or web). Grouping only changes how the in-app list is displayed — the phone push itself still fires on every new response (as long as you’re not currently viewing that chat), independent of grouping. Opening the chat and reading the messages clears all unread notifications for that agent at once.
How Workstream notifications find the right screen
Notifications from a Workstream use the same category as a regular AGENT_RESPONSE, but the link carries extra information about which Workstream to open. The web app and both mobile apps read this information and jump straight into that Workstream, skipping the list view. One exception: if several notifications for the same agent stack up in a short window and get merged into one (see “Autonomous response grouping” above), the link points to whichever Workstream produced the most recent one — you’ll need to open the others directly to see their results.
Troubleshooting checklist
- Is the master push toggle on? With it off, no notifications reach your phone for any category.
- Is the matching category toggle on? For example, if Agent response is off, neither push nor in-app notifications are created for that category.
- Are you inside Do Not Disturb hours? Double-check the start and end time and make sure your phone’s time zone is correct.
- Is the agent muted? In the Muted agents section, turn the toggle off to start receiving notifications from that agent again.
- Is notification permission granted on your device? Open Settings → Notifications → UpServe on iOS, or Settings → Apps → UpServe → Notifications on Android, and make sure notifications are allowed.
- Is the right account signed in on the device? Logging in with another account moves push delivery to the new account. Signing out disables push on that device for the previous account.
- Are you already viewing that agent’s chat? Push is intentionally suppressed while you’re on the same screen.
Device registration behavior
- On first launch, the mobile app asks for notification permission and — once granted — registers the device with your UpServe account automatically. No manual step is required. (On Android 12 and older there is no permission prompt; the device registers directly.)
- Signing in with a different account on the same device re-links the device to the new account.
- Signing out deactivates the device for that account, so push delivery stops.
- Push is supported on iOS and Android. Web browser push is not supported — the web uses in-app notifications only. If you sign in on multiple devices, all of them receive push.