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:
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:
- Ensure dashboard notifier config exists.
- Route dashboard to all priorities.
- On macOS, install/configure
AO Notifier.app best-effort.
- Route desktop only to urgent priority.
- Do not add Composio unless user runs
ao setup composio or a composio-* setup command.
- 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
Bug / Product Gap
AO currently defaults notification routing to include
composioeven when the user has not run any Composio setup flow. At the same time, the desired first-run notification experience is not fully wired:dashboardshould be enabled by default for all notification priorities.desktopshould be enabled by default for urgent/critical notifications only.AO Notifier.appshould be installed/configured duringao starton macOS.ao setup ....Current behavior does not match that policy.
Analyzed against:
45de80ce3f8bae4f8a2f8ff00bf81b09af874025Observed AO version:
0.8.0Environment observed: macOS Darwin 25.5.0 arm64, zsh, Node
v24.15.0Confidence: 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:
This can cause
composioto appear in~/.agent-orchestrator/config.yamlor the effective config even when the user never ran:The plugin registry treats
notificationRouting: ["composio"]as enough to instantiate the built-in Composio notifier with empty config. If noCOMPOSIO_API_KEYexists, 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:
ao doctorthen reported Composio plugin resolution as passing even though there was nonotifiers.composiosetup block.Desired Behavior
Fresh
ao start/ fresh global config should produce notification defaults equivalent to:Interpretation:
urgentpriority.Expected
ao startBehaviorOn first run / startup:
AO Notifier.appbest-effort.ao setup composioor acomposio-*setup command.If desktop setup cannot complete,
ao startshould not fail the whole startup. It should warn and continue with dashboard-only notifications.Files / Areas To Inspect
packages/core/src/global-config.tsGlobalConfigSchema.defaults.notifiersGlobalConfigSchema.notificationRoutingcreateDefaultGlobalConfig()packages/cli/src/commands/start.tspackages/cli/src/lib/desktop-setup.tsrunDesktopSetupActionallpackages/cli/src/lib/dashboard-setup.tsurgent-actionpackages/cli/src/lib/notifier-routing.tsapplyNotifierRoutingPresetpackages/core/src/plugin-registry.tsRoot Cause
The standard config path was previously changed to make notifications opt-in by default:
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
composio.ao startconfiguresdashboardnotifier by default.ao startroutes dashboard forurgent,action,warning, andinfo.ao startconfigures desktop notifier on macOS withbackend: ao-appwhen possible.ao startroutes desktop only forurgent.ao setup composio*.ao doctorshould not report Composio as configured/routed on a fresh install.ao startnotifier defaults.Related