Notifications

How Forven raises and routes alerts — pop-ups, sidebar badges, the Diagnostics inbox and optional Discord delivery — with the per-event switches and their defaults, Send a test, Pause pop-ups, dedupe and cooldowns, and acting on an alert.

Forven raises a notification whenever something happens you might want to know about: a live trade opened, an approval is waiting, a risk gate refused an entry, a service went down. This page covers where those alerts appear, how to choose what pops up and what goes to Discord, why a noisy condition doesn't spam you, and why a critical alert always gets through.

Every alert goes through one function, whichever part of Forven raised it: the scheduler, the Brain, the health monitor, the trading layer or the bots. The rules below apply to all of them.

Where you see them

  • Pop-ups in the bottom-right corner. The stack holds up to five; a repeat folds into its earlier pop-up as ×N, and hovering over a pop-up keeps it on screen.
  • Sidebar badges: counts next to pages in the sidebar, such as Approvals waiting or open live positions.
  • The inbox on the Diagnostics page. Inbox lists the alerts that still need you, with what's new since your last visit marked. Log is the full history. Acknowledge them one at a time or with Acknowledge all.
  • The dashboard shows a red Critical strip for any critical health alert.
  • Discord, if you connect it (below).

Every notification is stored, however it is routed. The inbox and log are the record.

Choose what pops up and what goes to Discord

Open Settings → Notifications. Where notifications go has one row per kind of event, in four groups, each with a Pop-up switch and a Discord switch. Changes save as you make them; they don't go through the settings save bar. The header counts how many pop-ups are on.

Always means the switch is locked on. A dash means that event never goes there.

GroupEventPop-upDiscord
TradingLive trade openedonon
Live trade closedonon
Live order failedAlwayson
Live entry blockedonon
Paper trade openedoffon
Paper trade closedoffon
Bot Factory tradeson—
Approvals & riskApproval neededonon
Approval resolved—off
Kill switch & loss haltsAlways—
Risk alertsonon
Strategies & jobsStrategy stage changesoffoff
Background jobson—
System & agentsCritical system alertsonAlways while Discord is connected
System warningsoffon
System recoveredoffon
Agent failuresoffon
Agent task finished—off
Agent bug reports—on
AI client connectedoff—
Daily summaries—on

The two locked pop-ups are safety alerts. They show even while pop-ups are paused.

  • Send a test sends a test notification: watch for a pop-up, and a Discord message if Discord is connected.
  • Reset to defaults asks Reset every switch? before it puts every switch back to the table above. Keep cancels.

Below the table, Sidebar badges turns each count on or off. A badge is the real count and stays until the items are dealt with. It is bright while it holds something new since you last opened that page, and dims once you have.

BadgeCountsDefault
ApprovalsApprovals waiting for your decisionon
DiagnosticsSystem issues raised since you last opened Diagnosticson
DataData behind a live or paper strategy that is badly stale or missingon
Live TradesOpen live positionson
Paper TradesOpen paper positionsoff
Bot FactoryBots that are runningon

Quieting pop-ups

  • Mute on a pop-up (it appears when you hover) stops pop-ups of that kind. That turns its switch off, so you can turn it back on in Settings.
  • Pause pop-ups appears under the stack while pop-ups are showing. Choose For 15 min, 1 hour, 4 hours or 24 hours. The pause lasts across page reloads. A strip says how long is left and offers Resume. Safety alerts still show.

Discord

Discord is optional. With nothing configured every alert stays in the app; that is a normal state, not a delivery failure. Until Discord is connected, the Discord switches are dimmed and the card says Discord isn't connected, so everything stays in the app.

Connect it under Settings → Notifications → Discord transport in one of two ways.

Paste a channel webhook (https://discord.com/api/webhooks/…) into Discord webhook URL, or set DISCORD_WEBHOOK_URL in the environment. No bot is needed. Everything switched on for Discord goes to that one channel, posted under a name that says where it was meant to go: Forven · alerts, Forven · paper-trades and so on.

Paste a Discord bot token, or set DISCORD_TOKEN in the environment. With a bot, each kind of notification goes to its own channel (alerts, approvals, risk, paper trades…). The channel map lives in config.json (discord_channels), and a delivery to a channel it doesn't know is recorded as failed. Forven posts with the token directly. You only need to run the Discord bot process itself (START_BOT=1) if you want to talk to Forven from Discord.

Delivery policy → Discord delivery is the master switch: Off stops everything going to Discord, whatever the per-event switches say. Pop-ups and badges are not affected.

Dedupe and cooldowns

A flapping condition could fire the same alert many times a minute: a stream wavering around its limit, a job that retries, a live entry the risk gate keeps refusing. Forven collapses that. Each alert has a dedupe key, and a matching alert inside that event's cooldown is stored as suppressed instead of being sent again. Cooldowns are per event: for example 2 minutes for an approval request, 5 minutes for a trade alert, and an hour for a blocked live entry (one alert per strategy per cause, not one per scan).

Critical alerts break through

A critical alert is never suppressed by an earlier, lower-severity alert with the same key. Dedupe keys include the severity, so a condition that escalates to critical is delivered even while its warnings are being quieted.

Dedupe spares you noise; it never hides an emergency.

The delivery log

Every routing decision is recorded: what was raised, where it was routed, and whether it was delivered, suppressed as a duplicate or dropped. GET /api/notifications/{id}/deliveries shows one notification's delivery attempts, so you can work out afterwards why you did or didn't get pinged.

Notifications are pruned after about 60 days by the maintenance job. See database & maintenance.

Acting on a notification

  • Acknowledge: mark it handled; it leaves the inbox. POST /api/notifications/{id}/acknowledge, or /api/notifications/acknowledge-all.
  • Resend: route it again through the current switches, useful after changing them. POST /api/notifications/{id}/resend.
  • Create a repair task: hand the fault to an agent to investigate. POST /api/notifications/{id}/repair-task, optionally with {"agent_id": "full-stack-engineer"} (the default). It needs a connected model provider; see Agents.
# Acknowledge a notification (send x-operator-key if FORVEN_OPERATOR_KEY is set)
Invoke-RestMethod -Method Post `
  -Uri "http://127.0.0.1:8003/api/notifications/123/acknowledge"

# Hand it to an agent as a repair task
Invoke-RestMethod -Method Post `
  -Uri "http://127.0.0.1:8003/api/notifications/123/repair-task" `
  -ContentType "application/json" `
  -Body '{"agent_id": "full-stack-engineer"}'

Send trade alerts to Discord

Connect Discord

In Settings → Notifications → Discord transport, paste a webhook URL (the simplest) or a bot token, and click Save all.

Pick the events

In Where notifications go, switch on Discord for the events you want, for example Paper trade opened and Paper trade closed. These save as you click.

Check delivery is on

Leave Delivery policy → Discord delivery on On.

Send a test

Click Send a test and watch for the message in Discord.

Notifications that already fired are not re-routed. Use Resend on one to send it under the new switches.

Caveats

  • No connection, no Discord. A "missing" Discord alert is usually no webhook or token, a channel the bot can't post to, Discord delivery switched off, or a dedupe cooldown.
  • Critical alerts ignore dedupe, by design.
  • The log isn't forever. Notifications are pruned after about 60 days.
  • Resend uses the current switches, not the ones in force when the alert first fired.

Forven is research software. Notifications report on a research process. They are not predictions, recommendations or financial advice.