Omahub
← All plugins
W

Omaherald

by wisdom

Agent notification hub: custom toasts, event log, and settings

Security review

Review recommended · 2 findings

Deterministic scan — not a security guarantee

Low
Risk level
Low
Analyzed commit
4106fc6
Scanned
1 month ago

Flagged patterns appear only in documentation files (README / docs) — descriptive examples, not executable code.

  • Docs external_hosts README.md:26

    Downloads or connects to an external HTTP(S) host.

    curl -fsSL https://raw.githubusercontent.com/chuma-beep/omaherald/main/bin/omaherald \
  • Docs external_hosts README.md:33

    Downloads or connects to an external HTTP(S) host.

    git clone https://github.com/chuma-beep/omaherald.git

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
4106fc6
Reviewed
1 month ago

The plugin is a notification hub consisting of a bash CLI, QML widgets, and an opencode hook. The executable code performs no network access, no obfuscation, and no destructive or persistent system changes; install.sh only copies files into user directories. The deterministic scan's external-host findings are in README install examples only, which are documentation and not part of the plugin's runtime.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/chuma-beep/omaherald --enable
Developer Tools #bar #ai #system

omaherald

Desktop notification hub for terminal AI agents on Omarchy (Arch + Hyprland). When Claude Code, Codex CLI, or opencode finishes a turn, hits an error, or waits on your approval, omaherald raises a toast — custom QML toasts rendered by Omarchy's shell, falling back to notify-send.

Includes a bar widget with an event log panel so you can see what every agent has been up to.

Components

File Installed to Purpose
bin/omaherald ~/.local/bin/omaherald CLI / hook entry point
manifest.json, *.qml ~/.config/omarchy/plugins/wisdom.omaherald/ Bar widget, settings panel, custom toast host (standard Omarchy shell plugin layout)
opencode-plugin/omaherald.js ~/.config/opencode/plugins/omaherald.js opencode plugin that calls the CLI on events

Install

Option A: Omarchy plugin manager + CLI

omarchy plugin add https://github.com/chuma-beep/omaherald.git --enable

This installs and registers the bar widget / toast host. Then grab the CLI:

curl -fsSL https://raw.githubusercontent.com/chuma-beep/omaherald/main/bin/omaherald \
  -o ~/.local/bin/omaherald && chmod +x ~/.local/bin/omaherald

Option B: full install from a clone

git clone https://github.com/chuma-beep/omaherald.git
cd omaherald
./install.sh
omaherald test

install.sh copies all three components into place. To install only the opencode plugin or CLI, copy those files manually.

Uninstall

omarchy plugin remove wisdom.omaherald   # bar widget / toast host (or: rm -rf ~/.config/omarchy/plugins/wisdom.omaherald)
rm ~/.local/bin/omaherald                # CLI
rm ~/.config/opencode/plugins/omaherald.js  # opencode plugin (optional)
rm -rf ~/.local/state/omaherald          # event log (optional)

Nothing in ~/.config/hypr/, your shell layout, or other agent configs is touched; remove any hooks you added from ~/.claude/settings.json / ~/.codex/config.toml if desired.

Requirements:

  • Omarchy (for custom toasts via omarchy-shell); otherwise falls back to notify-send
  • jq
  • Optional: paplay for sounds (sound setting)

Agent hooks

Claude Code

Add to ~/.claude/settings.json:

{
  "hooks": {
    "Stop": [{ "hooks": [{ "type": "command", "command": "omaherald claude stop" }] }],
    "Notification": [{ "hooks": [{ "type": "command", "command": "omaherald claude permission" }] }]
  }
}

Hooks receive the session JSON on stdin; omaherald reads cwd and message from it.

Claude Code fires Notification for more than permission requests (idle waits, plan-mode notices, etc.). Omaherald classifies each message: text mentioning permission or approval raises the amber permission toast; anything else falls back to a neutral question toast showing the actual message, so working in plan mode no longer triggers false "needs approval" flags.

All event fields (agent, project, message) are sanitized by the CLI — control characters stripped, whitespace flattened, length capped — and rendered as plain text by the shell plugin, so markup in agent output is never interpreted.

Codex CLI

In ~/.codex/config.toml:

notify = ["omaherald", "codex"]

Fires on agent-turn-complete.

opencode

install.sh copies the plugin to ~/.config/opencode/plugins/. It notifies on session idle, permission requests, and session errors — deduplicated per turn and suppressed while another top-level session is still busy.

Anything else

Wrap any long-running command:

omaherald run -- npm run build

Or emit directly:

omaherald notify myagent done "build finished" --cwd ~/Projects/foo

Usage

omaherald test                            send a test notification
omaherald notify <agent> <event> [msg] [--cwd D]
                                          generic hook entry point
                                          events: done | error | permission | question
omaherald claude <stop|permission|idle>   Claude Code hook (reads JSON from stdin)
omaherald codex '<json>'                  Codex CLI notify target
omaherald run -- <cmd...>                 wrap any command; toast when it exits

Settings

~/.config/omaherald/settings.json (created/tuned from the bar panel):

{
  "style": "custom",
  "position": "bottom-right",
  "sound": true,
  "min_run_seconds": 5,
  "toast_seconds": 8,
  "sticky_events": []
}
  • style: "custom" (Omarchy QML toasts) or "system" (notify-send)
  • position: toast placement used by the custom host
  • sound: play a freedesktop sound per event type
  • min_run_seconds: minimum runtime before omaherald run notifies
  • toast_seconds: custom toast lifetime; all custom toasts auto-expire
  • sticky_events: event names (done, error, permission, question) whose custom toasts stay on screen until clicked; system-mode toasts always auto-expire

Event history is logged to ~/.local/state/omaherald/events.log (JSON lines).

License

MIT — see LICENSE.