Configure OMX Notifications
SkillCommunicationconfigure-notifications is a skill that lets an AI agent set up task alerts through Discord, Telegram, Slack, or custom webhooks by editing its own config. It checks existing notification settings in ~/.codex/.omx-config.json, asks which platform to use, and writes the matching configuration entries with jq. Alerts can fire on events like session end or questions needing input.
Use Configure OMX Notifications in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Configure OMX Notifications and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Configure OMX Notifications skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Have an AI agent that can run shell commands and edit files.
What your AI can do with it
- Check existing notification settings in ~/.codex/.omx-config.json
- Ask which platform to use for notifications
- Write configuration entries with jq
- Set up Discord webhooks or bots
- Set up Telegram bots and Slack incoming webhooks
- Add generic webhook and CLI commands that fire on events
Getting started
- Have an AI agent that can run shell commands and edit files.
- Make sure jq is available for writing configuration entries.
- Have the webhook URL or bot token for the platform you want to use.
- Ask the agent to run the configure-notifications skill and choose a platform.
- Confirm the new entries in ~/.codex/.omx-config.json.
What this skill tells your AI
The instructions your AI receives, as published by yeachan-heo/oh-my-codex in skills/configure-notifications/SKILL.md and read by ahel’s review.
Use this card for Discord, Telegram, Slack, generic command aliases, or OpenClaw. Shared safety, lifecycle, hook, team, autonomy, and cancellation rules live in templates/AGENTS.md.
1. Inspect and choose a path
CONFIG_FILE="$HOME/.codex/.omx-config.json"
if [ -f "$CONFIG_FILE" ]; then
jq -r '{notifications_enabled:(.notifications.enabled // false), discord:(.notifications.discord.enabled // false), discord_bot:(.notifications["discord-bot"].enabled // false), telegram:(.notifications.telegram.enabled // false), slack:(.notifications.slack.enabled // false), openclaw:(.notifications.openclaw.enabled // false), custom_webhook_command:(.notifications.custom_webhook_command.enabled // false), custom_cli_command:(.notifications.custom_cli_command.enabled // false), verbosity:(.notifications.verbosity // "session"), idleCooldownSeconds:(.notifications.idleCooldownSeconds // 60), reply_enabled:(.notifications.reply.enabled // false)}' "$CONFIG_FILE"
else
echo "NO_CONFIG_FILE"
fi
Use AskUserQuestion to choose: Discord native (webhook or bot), Telegram native (bot token + chat id), Slack native (incoming webhook), custom_webhook_command, custom_cli_command, cross-cutting settings, or disable all notifications.
2. Native providers
Collect and validate provider values, then write only these native keys: notifications.discord, notifications["discord-bot"], notifications.telegram, or notifications.slack. Do not represent native providers with generic aliases.
3. Generic aliases
For custom_webhook_command, collect URL, optional headers, method (POST default or PUT), events (session-end, ask-user-question, session-start, session-idle, stop), and an instruction template:
jq --arg url "$URL" --arg method "${METHOD:-POST}" --arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" --argjson headers "${HEADERS_JSON:-{}}" '.notifications=(.notifications//{enabled:true})|.notifications.enabled=true|.notifications.custom_webhook_command={enabled:true,url:$url,headers:$headers,method:$method,instruction:$instruction,events:["session-end","ask-user-question"]}' "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
For custom_cli_command, collect a command template ({{event}}, {{instruction}}, {{sessionId}}, {{projectPath}}), optional events, and an instruction template:
jq --arg command "$COMMAND_TEMPLATE" --arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" '.notifications=(.notifications//{enabled:true})|.notifications.enabled=true|.notifications.custom_cli_command={enabled:true,command:$command,instruction:$instruction,events:["session-end","ask-user-question"]}' "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
OpenClaw dispatch requires OMX_OPENCLAW=1; command gateways additionally require OMX_OPENCLAW_COMMAND=1; timeout precedence is gateways.<name>.timeout > OMX_OPENCLAW_COMMAND_TIMEOUT_MS > 5000 ms.
4. OpenClaw + Clawdbot agent mode
Use this only when the requested route is a clawdbot agent turn delivered to Discord. The session-stop notification intentionally maps to the OpenClaw stop hook. OMX shell-escapes substitutions; keep instructions short, avoid untrusted shell metacharacters, append || true, and append JSONL logs with >>.
jq --arg command "(clawdbot agent --session-id omx-hooks --message {{instruction}} --thinking minimal --deliver --reply-channel discord --reply-to 'channel:CHANNEL_ID' --timeout 120 --json >>/tmp/omx-openclaw-agent.jsonl 2>&1 || true)" '.notifications=(.notifications//{enabled:true})|.notifications.enabled=true|.notifications.verbosity="verbose"|.notifications.openclaw={enabled:true,gateways:{local:{type:"command",command:$command,timeout:120000}},hooks:{"session-start":{enabled:true,gateway:"local",instruction:"OMX hook=session-start project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 상태를 #omc-dev에 공유하고 SOUL.md를 참고하세요."},"session-idle":{enabled:true,gateway:"local",instruction:"OMX hook=session-idle session={{sessionId}} tmux={{tmuxSession}}. 한국어로 팔로업을 #omc-dev에 안내하세요."},"ask-user-question":{enabled:true,gateway:"local",instruction:"OMX hook=ask-user-question session={{sessionId}} tmux={{tmuxSession}} question={{question}}. 한국어로 응답 필요를 #omc-dev에 알리세요."},"stop":{enabled:true,gateway:"local",instruction:"OMX hook=session-stop session={{sessionId}} tmux={{tmuxSession}}. 한국어로 중단 상태를 전달하세요."},"session-end":{enabled:true,gateway:"local",instruction:"OMX hook=session-end session={{sessionId}} tmux={{tmuxSession}} reason={{reason}}. 한국어로 완료 요약을 #omc-dev에 남기세요."}}}' "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
Compatibility + precedence contract
Explicit notifications.openclaw wins when valid; generic aliases are ignored with a warning.
Verify this mode and inspect evidence without hiding output:
clawdbot agent --session-id omx-hooks --message "OMX hook test via clawdbot agent path" --thinking minimal --deliver --reply-channel discord --reply-to 'channel:CHANNEL_ID' --timeout 120 --json
tmux list-sessions -F '#{session_name}' | rg '^omx-' || true
jq '.notifications.openclaw.hooks' "$CONFIG_FILE"
tail -n 120 /tmp/omx-openclaw-agent.jsonl | jq -s '.[] | {timestamp:(.timestamp // .time),status:(.status // .error // "ok")}'
rg '"error"|"failed"|"timeout"' /tmp/omx-openclaw-agent.jsonl | tail -20
For HTTP integrations, run both a /hooks/wake smoke test and /hooks/agent delivery verification.
5. Cross-cutting settings and disable
- Verbosity:
minimal,session(recommended),agent, orverbose. - Idle cooldown:
notifications.idleCooldownSeconds(environment override:OMX_IDLE_COOLDOWN_SECONDS). - Profiles:
notifications.profilesandnotifications.defaultProfile. - Reply listener:
notifications.reply.enabled; gates areOMX_REPLY_ENABLED=trueand, for Discord,OMX_REPLY_DISCORD_USER_IDS=.... An authorized Discord bot operator may exact-matchstatuson a tracked notification for a bounded read-only session summary.
Disable all notifications:
jq '.notifications.enabled=false' "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
Exit evidence
Run jq empty "$CONFIG_FILE" after edits. Report the config path, enabled native providers, enabled aliases, whether valid notifications.openclaw overrides aliases, verbosity, idle cooldown, reply-listener state, and smoke-test results. Stop when the JSON parses and the selected path has its required evidence; do not claim delivery from configuration alone.
Signals
- GitHub stars
- 33k
- Forks
- 3k
- Last commit
- Oct 2026
Questions
- Which platforms can it configure?
- Discord webhooks or bots, Telegram bots, Slack incoming webhooks, plus generic webhook and CLI commands.
- What events can trigger notifications?
- Events like session end or questions needing input.
- Where does it store notification settings?
- In ~/.codex/.omx-config.json.
- How does it write the configuration?
- It writes the matching configuration entries with jq.
- Does it check existing settings first?
- Yes, it walks through checking existing notification settings before asking which platform to use.
Advanced
- Item type
- skill
- Key
configure-notifications-2- Source
- github.com/yeachan-heo/oh-my-codex
github.com/yeachan-heo/oh-my-codex
Related picks
Skill · anil-matcha
The pick for Discorddiscord-announcement
Skill · aidenlx
The pick for Discordslack-gif-creator
Skill · anthropics
The pick for Slackhive.slack-notifications-setup
Skill · aden-hive
The pick for Slackerror-handling
Skill · affaan-m
More in Communicationemails
Skill · coreyhaines31
More in Communication