Connect providers
Discord
Channels, DMs, reactions, threads. Bot OAuth with per-server consent.
Discord integration uses bot OAuth. Each Discord server (guild) approves Nomos separately.
Connect
- 1Open picker
Connections → Discord.
- 2Pick server + approve
Discord shows the server picker. Bot scopes:
bot,applications.commands,messages.read. Pick the server, approve.
One server per consent. Run the flow again for additional servers. - 3Invite the bot to channels
The bot has to be in a channel to read/write. Discord defaults to "All channels" but you can narrow it per-server via Server Settings → Integrations.
Commands
/discord/channel/list,/discord/channel/get/discord/message/list,/discord/message/get,/discord/message/create,/discord/message/update,/discord/message/delete(step-up)/discord/thread/create,/discord/thread/archive/discord/reaction/add,/discord/reaction/remove/discord/user/get,/discord/dm/create
Starter policies
discord:read-only— channel + message list/get; user lookups.discord:notification-bot— read + message create on a pinned channel.
Cedar fragment
permit (
principal,
action in [Action::"/discord/message/list", Action::"/discord/message/create"],
resource
) when {
resource.channelId == "1234567890123456"
};
forbid (
principal,
action == Action::"/discord/message/delete",
resource
) when { !context.cosigner };