Skip to content

Fix default notifier onboarding: remove Composio defaults, enable dashboard + desktop #1958

Description

@whoisasx

Bug / Product Gap

AO currently defaults notification routing to include composio even when the user has not run any Composio setup flow. At the same time, the desired first-run notification experience is not fully wired:

  • dashboard should be enabled by default for all notification priorities.
  • desktop should be enabled by default for urgent/critical notifications only.
  • AO Notifier.app should be installed/configured during ao start on macOS.
  • Composio, Slack, Discord, Webhook, OpenClaw, etc. should remain manual opt-in through ao setup ....

Current behavior does not match that policy.

Analyzed against: 45de80ce3f8bae4f8a2f8ff00bf81b09af874025
Observed AO version: 0.8.0
Environment observed: macOS Darwin 25.5.0 arm64, zsh, Node v24.15.0
Confidence: High - traced through global config defaults, effective config loading, notifier setup flows, plugin registration, and live ao doctor/setup status output.

Current Behavior

Fresh/global config defaults still include Composio:

// packages/core/src/global-config.ts
defaults.notifiers = ["composio", "desktop"]

notificationRouting = {
  urgent: ["desktop", "composio"],
  action: ["desktop", "composio"],
  warning: ["composio"],
  info: ["composio"],
}

This can cause composio to appear in ~/.agent-orchestrator/config.yaml or the effective config even when the user never ran:

ao setup composio

The plugin registry treats notificationRouting: ["composio"] as enough to instantiate the built-in Composio notifier with empty config. If no COMPOSIO_API_KEY exists, it becomes a no-op and may warn. If an env key does exist, AO may attempt Composio delivery without explicit notifier setup.

Live observed effective config included:

notifiers:
  desktop:
    plugin: desktop
    backend: ao-app
    dashboardUrl: http://localhost:3000
  dashboard:
    plugin: dashboard
    limit: 50

notificationRouting:
  urgent: [composio, desktop, discord, dashboard]
  action: [composio, desktop, discord, dashboard]
  warning: [composio, desktop, discord, dashboard]
  info: [composio, desktop, discord, dashboard]

ao doctor then reported Composio plugin resolution as passing even though there was no notifiers.composio setup block.

Desired Behavior

Fresh ao start / fresh global config should produce notification defaults equivalent to:

notifiers:
  desktop:
    plugin: desktop
    backend: ao-app
    dashboardUrl: http://localhost:3000
  dashboard:
    plugin: dashboard
    limit: 50

notificationRouting:
  urgent:
    - desktop
    - dashboard
  action:
    - dashboard
  warning:
    - dashboard
  info:
    - dashboard

Interpretation:

  • “Critical” user-facing notifications map to AO’s current urgent priority.
  • Dashboard receives all priorities.
  • Desktop receives only urgent/critical notifications.
  • Composio is absent unless explicitly configured.
  • Discord/Slack/Webhook/OpenClaw are absent unless explicitly configured.

Expected ao start Behavior

On first run / startup:

  1. Ensure dashboard notifier config exists.
  2. Route dashboard to all priorities.
  3. On macOS, install/configure AO Notifier.app best-effort.
  4. Route desktop only to urgent priority.
  5. Do not add Composio unless user runs ao setup composio or a composio-* setup command.
  6. Do not add Slack/Discord/Webhook/OpenClaw unless user runs their setup commands.

If desktop setup cannot complete, ao start should not fail the whole startup. It should warn and continue with dashboard-only notifications.

Files / Areas To Inspect

  • packages/core/src/global-config.ts

    • GlobalConfigSchema.defaults.notifiers
    • GlobalConfigSchema.notificationRouting
    • createDefaultGlobalConfig()
  • packages/cli/src/commands/start.ts

    • first-run config/global registration path
    • startup onboarding hooks
  • packages/cli/src/lib/desktop-setup.ts

    • runDesktopSetupAction
    • non-interactive default currently routes desktop to all
  • packages/cli/src/lib/dashboard-setup.ts

    • non-interactive default currently routes dashboard to urgent-action
  • packages/cli/src/lib/notifier-routing.ts

    • applyNotifierRoutingPreset
    • existing presets may need an explicit startup path for “desktop urgent-only + dashboard all”
  • packages/core/src/plugin-registry.ts

    • currently instantiates a notifier when it is referenced by routing even without a config block

Root Cause

The standard config path was previously changed to make notifications opt-in by default:

722d14298 fix(config): disable all notifications by default — fully opt-in

But the newer global/hybrid config path reintroduced Composio defaults in global-config.ts, likely during the multi-project/global registry work.

As a result, the effective config can contain Composio routing without explicit setup.

Acceptance Criteria

  • Fresh global config does not include composio.
  • Fresh ao start configures dashboard notifier by default.
  • Fresh ao start routes dashboard for urgent, action, warning, and info.
  • Fresh ao start configures desktop notifier on macOS with backend: ao-app when possible.
  • Fresh ao start routes desktop only for urgent.
  • Composio is only added by ao setup composio*.
  • Discord/Slack/Webhook/OpenClaw are only added by their setup flows.
  • ao doctor should not report Composio as configured/routed on a fresh install.
  • Tests cover fresh global config creation and first-run ao start notifier defaults.

Related

Metadata

Metadata

Assignees

Labels

P1Core workflow broken with no safe workaround.bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions