caution combined · worst of core + verified (1 trusted, 2 counted)
opc opc: caution mkt ≤ marketplace: caution reviewed 3d0d673 upstream 2d5f2bd
provider tier sig verdict risk counts as criteria commit · tree when opc details core sig caution 13 caution safe-to-run : passed no-net : failed no-exec : failed no-persist : passed no-priv : passed no-obfusc : passed no-secrets : passed human : not checked 3d0d673 c380273 2026-10-02 mkt details unsigned ≤caution unsigned caution — ≤ caution — 3d0d673 = 2026-08-20
verdict does caps areas 0 net 10 deps 0 secrets 1 supply inject quality perf activity diff findings 158 ai caution 13/100 risk
caution: score 13; 4 low; uses processExec, network, fileWrite
reasons capabilities: processExec, network, fileWrite criteria safe-to-run : passed no-net : failed no-exec : failed no-persist : passed no-priv : passed no-obfusc : passed no-secrets : passed human : not checked ai no escalation guard canary control n/a tools schema purpose Gmail client for Omarchy: bar unread count plus a mail window using Google OAuth and the Gmail API, with on-disk caches and helper scripts. kinds service bar-widget panel entry service → Service.qml
barWidget → BarWidget.qml
panel → App.qml
manifest valid scope repository root · marketplace-listing persist survives restart
priv sudo / pkexec / polkit
pkg installs packages
bin ships binaries
clip reads/writes clipboard
screen captures screen
hypr controls the compositor
ext runs code it does not ship
shell not touched
hypr not touched
systemd not touched
pacman not touched
sudoers not touched
rc not touched
ssh not touched
browsers not touched
gpg not touched
dbus not touched
deps 0 vulns · 0 pkgs · 0 external no dependencies
scorecard n/a unavailable
pinned n/a
signed 14% commits
bus factor 1
age 44d repo age
unpinned fetch 0 remote code
hidden unicode 0
prompt injection 0
obfuscation 0
loc 23,362
lint errors 8 shellcheck · eslint · qmllint · bandit
lint warnings 5,444
tests 14 files
docs readme
license MIT
HTML 11,569 · 6 files QML 6,679 · 31 files JavaScript 4,492 · 17 files Shell 421 · 10 files Python 92 · 2 files YAML 58 · 2 files Makefile 51 · 1 files
hotspots .github/workflows/release.yml AuthManager.qml
spawns/min 0 estimated
timers 8
keep loaded yes always resident
large assets 0
timer interval repeat spawns App.qml:785 6 s no — AuthManager.qml:593 0.12 s no — AuthManager.qml:599 0.25 s no — AuthManager.qml:605 180 s no — CacheStore.qml:117 0.8 s no — MailAccount.qml:828 30 s yes — MailAccount.qml:835 4 s no — MailAccount.qml:843 runtime yes —
commits 90d 56
contributors 1
open issues 31
release v0.3.0
last commit 2026-08-20
archived n/a
first review · nothing to diff
findings 4 above info · 154 info · 0 hard low supply-chain .github/workflows/release.yml:5 zizmor · 50%
runtime artifacts potentially vulnerable to a cache poisoning attack (https://docs.zizmor.sh/audits/#cache-poisoning)
on: push: tags: - "v*" ai: unsure low supply-chain .github/workflows/release.yml:17 zizmor · 90%
unpinned action reference (https://docs.zizmor.sh/audits/#unpinned-uses)
uses: actions/checkout@v4 with: # Release notes are generated from the history since the last tag, so # a shallow clone would produce an empty changelog. fetch-depth: 0 ai confirmed low supply-chain .github/workflows/release.yml:23 zizmor · 90%
unpinned action reference (https://docs.zizmor.sh/audits/#unpinned-uses)
uses: actions/setup-node@v4 with: node-version: "20" # The manifest version is what Omarchy installs and what the marketplace # lists. A tag that disagrees with it would publish a release describing a # version nobody can install, so it fails here instead. ai confirmed low exec AuthManager.qml:531–532 opengrep · 70%
Shell command string built by concatenation inside `sh -c` — command injection if any part is untrusted (network data, file names, user input).
toolProbe.command = ["sh", "-c", "for tool in " + requiredTools.join(" ") ai confirmed 154 info findings info supply-chain .github/workflows/release.yml:17 zizmor · 50%
credential persistence through GitHub Actions artifacts (https://docs.zizmor.sh/audits/#artipacked)
info other Accounts.js malcontent · 60%
contains a client ID [MEDIUM]
info other AGENTS.md:92 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other App.qml malcontent · 60%
pipes to shell [MEDIUM]
info other AuthManager.qml malcontent · 60%
contains a client ID [MEDIUM]
info other AuthManager.qml malcontent · 60%
Uses OpenSSL [MEDIUM]
info other AuthManager.qml malcontent · 60%
Runs shell commands but throws output away [MEDIUM]
info other AuthManager.qml malcontent · 60%
upload content via HTTP form [MEDIUM]
info other AuthManager.qml malcontent · 60%
submits content to websites [MEDIUM]
info other AuthManager.qml malcontent · 60%
encodes URL, likely to pass GET variables [MEDIUM]
info network AuthManager.qml:321 opengrep · 90%
HTTP request from QML/JS (XMLHttpRequest / fetch).
info exec AuthManager.qml:417 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec AuthManager.qml:531 ai · 60%
The sh -c string is built only from the internal requiredTools list, so it is likely not injectable. I did not check that list's source.
info exec AuthManager.qml:531 opengrep · 90%
Runs a shell command string via `sh -c`.
info exec AuthManager.qml:553 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:570 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:611 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:623 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:643 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:655 opengrep · 90%
Quickshell Process — spawns external programs.
info exec AuthManager.qml:680 opengrep · 90%
Quickshell Process — spawns external programs.
info exec BodyCache.qml:67 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec BodyCache.qml:108 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec BodyCache.qml:111 opengrep · 90%
Quickshell Process — spawns external programs.
info other CacheStore.qml malcontent · 60%
modifies file permissions [MEDIUM]
info exec CacheStore.qml:90 opengrep · 90%
Quickshell Process — spawns external programs.
info exec CacheStore.qml:94 opengrep · 90%
Runs a shell command string via `sh -c`.
info filesystem CacheStore.qml:122 opengrep · 90%
Writes files from QML (FileView.setText / JsonAdapter writeAdapter).
info other components/ActionIcon.qml malcontent · 60%
download files [MEDIUM]
info other components/MessageReader.qml malcontent · 60%
generic listen string [MEDIUM]
info other components/MessageReader.qml malcontent · 60%
requests resources via URL [MEDIUM]
info other components/SetupPage.qml malcontent · 60%
contains a client ID [MEDIUM]
info other Credentials.js malcontent · 60%
contains a client ID [MEDIUM]
info other Credentials.js malcontent · 60%
download files [MEDIUM]
info other Credentials.js malcontent · 60%
exchanges credentials with Google [MEDIUM]
info network Credentials.js:227 textscan · 100%
URL literal: https://accounts.google.com
info network Credentials.js:228 textscan · 100%
URL literal: https://oauth2.googleapis.com
info network Credentials.js:229 textscan · 100%
URL literal: https://www.googleapis.com
info network Credentials.js:231 textscan · 100%
URL literal: http://localhost
info other docs/SPEC.md:5 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:7 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:24 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:490 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:493 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:536 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:553 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:557 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:558 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:929 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:1569 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:1780 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2102 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2403 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2699 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2864 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2869 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other docs/superpowers/plans/2026-08-19-omarchy-gmail.md:2909 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info network GmailApi.js:8 textscan · 100%
URL literal: https://gmail.googleapis.com
info network GmailApi.js:9 textscan · 100%
URL literal: https://mail.google.com
info other GmailApiClient.qml malcontent · 60%
upload content via HTTP form [MEDIUM]
info other GmailApiClient.qml malcontent · 60%
submits content to websites [MEDIUM]
info network GmailApiClient.qml:68 opengrep · 90%
HTTP request from QML/JS (XMLHttpRequest / fetch).
info other Html.js malcontent · 60%
complex math with parseInt or fromCharCode conversions [MEDIUM]
info other Html.js malcontent · 60%
Contains HTML content [MEDIUM]
info other Html.js malcontent · 60%
assembles strings from UTF-16 code units [MEDIUM]
info other Html.js malcontent · 60%
generic listen string [MEDIUM]
info network Html.js:174 textscan · 100%
URL literal: http://127.0.0.1
info other install.sh malcontent · 60%
Uses OpenSSL [MEDIUM]
info other install.sh malcontent · 60%
Runs shell commands but throws output away [MEDIUM]
info other install.sh:44 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other install.sh:67 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other install.sh:71 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other install.sh:72 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info exec MailAccount.qml:674 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec MailAccount.qml:681 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec MailAccount.qml:708 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec MailAccount.qml:712 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec MailAccount.qml:716 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info network MailAccount.qml:716 textscan · 100%
URL literal: https://console.cloud.google.com
info exec MailAccount.qml:720 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info exec MailAccount.qml:724 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info other Makefile:53 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other Makefile:56 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other Message.js malcontent · 60%
complex math with parseInt or fromCharCode conversions [MEDIUM]
info other Message.js malcontent · 60%
decode base64 strings [MEDIUM]
info other Message.js malcontent · 60%
assembles strings from UTF-16 code units [MEDIUM]
info other Model.js malcontent · 60%
unarchives files [MEDIUM]
info other Model.js malcontent · 60%
Run as a background daemon [MEDIUM]
info other OAuth.js malcontent · 60%
contains a client ID [MEDIUM]
info other OAuth.js malcontent · 60%
Contains HTML content [MEDIUM]
info other OAuth.js malcontent · 60%
decodes URL components [MEDIUM]
info network OAuth.js:14 textscan · 100%
URL literal: https://accounts.google.com
info network OAuth.js:15 textscan · 100%
URL literal: https://oauth2.googleapis.com
info network OAuth.js:25 textscan · 100%
URL literal: https://www.googleapis.com
info network OAuth.js:35 textscan · 100%
URL literal: http://127.0.0.1
info other README.md:6 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other README.md:32 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other README.md:39 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other README.md:52 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info other README.md:167 opengrep · 90%
Calls Omarchy commands or touches Omarchy shell state.
info filesystem README.md:167 opengrep · 90%
Writes Omarchy configuration/state.
info other scripts/body-cache.sh malcontent · 60%
executes shell [MEDIUM]
info other scripts/body-cache.sh malcontent · 60%
Forcibly deletes files recursively [MEDIUM]
info other scripts/body-cache.sh malcontent · 60%
change file timestamps [MEDIUM]
info other scripts/body-cache.sh malcontent · 60%
modifies file permissions [MEDIUM]
info other scripts/config-store.sh malcontent · 60%
executes shell [MEDIUM]
info other scripts/config-store.sh malcontent · 60%
modifies file permissions [MEDIUM]
info other scripts/google-cloud-setup.sh malcontent · 60%
Runs shell commands but throws output away [MEDIUM]
info other scripts/google-cloud-setup.sh malcontent · 60%
path reference within /dev [MEDIUM]
info network scripts/google-cloud-setup.sh:65 textscan · 100%
URL literal: https://console.cloud.google.com
info other scripts/keyring-store.sh malcontent · 60%
executes shell [MEDIUM]
info other scripts/migrate-storage.sh malcontent · 60%
executes shell [MEDIUM]
info other scripts/pkce.sh malcontent · 60%
Uses OpenSSL [MEDIUM]
info other scripts/pkce.sh malcontent · 60%
executes shell [MEDIUM]
info other Service.qml malcontent · 60%
contains a client ID [MEDIUM]
info exec Service.qml:377 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info network Service.qml:377 textscan · 100%
URL literal: https://github.com
info exec Service.qml:381 opengrep · 90%
Detached process launch (Quickshell.execDetached / startDetached).
info network Service.qml:381 textscan · 100%
URL literal: https://x.com
info exec Service.qml:436 opengrep · 90%
Quickshell Process — spawns external programs.
info exec Service.qml:462 opengrep · 90%
Quickshell Process — spawns external programs.
info exec tests/load.js:12 eslint · 60%
Found readFileSync from package "fs" with non literal argument at index 0
info other tests/test_accounts.js malcontent · 60%
contains a client ID [MEDIUM]
info other tests/test_accounts.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_cache.js malcontent · 60%
Detects access to sensitive files (credentials, configs, keys) [MEDIUM]
info other tests/test_cache.js malcontent · 60%
possible hidden file path [MEDIUM]
info exec tests/test_cache.js:190 eslint · 60%
Generic Object Injection Sink
info exec tests/test_cache.js:191 eslint · 60%
Function Call Object Injection Sink
info exec tests/test_cache.js:192 eslint · 60%
Generic Object Injection Sink
info exec tests/test_cache.js:227 eslint · 60%
Generic Object Injection Sink
info exec tests/test_cache.js:228 eslint · 60%
Function Call Object Injection Sink
info exec tests/test_cache.js:229 eslint · 60%
Generic Object Injection Sink
info other tests/test_credentials.js malcontent · 60%
contains a client ID [MEDIUM]
info other tests/test_credentials.js malcontent · 60%
possible hidden file path [MEDIUM]
info other tests/test_credentials.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_credentials.js malcontent · 60%
download files [MEDIUM]
info other tests/test_credentials.js malcontent · 60%
exchanges credentials with Google [MEDIUM]
info other tests/test_gmail_api.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_html.js malcontent · 60%
Detects URLs to suspicious domains often used for exfiltration or C2 [MEDIUM]
info other tests/test_html.js malcontent · 60%
hardcoded IP address [MEDIUM]
info other tests/test_html.js malcontent · 60%
Contains HTML content [MEDIUM]
info network tests/test_html.js:128 opengrep · 60%
Network address given as a raw public IP (no DNS name).
info other tests/test_install.sh malcontent · 60%
Runs shell commands but throws output away [MEDIUM]
info other tests/test_install.sh malcontent · 60%
pipes to shell [MEDIUM]
info other tests/test_install.sh malcontent · 60%
Forcibly deletes files recursively [MEDIUM]
info other tests/test_message.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_model.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_model.js malcontent · 60%
Run as a background daemon [MEDIUM]
info other tests/test_oauth.js malcontent · 60%
contains hardcoded endpoint with a question mark [MEDIUM]
info other tests/test_oauth.js malcontent · 60%
contains a client ID [MEDIUM]
info other tests/test_oauth.js malcontent · 60%
Contains HTML content [MEDIUM]
info other tests/test_oauth.js malcontent · 60%
references and possibly executes relative path [MEDIUM]
info other tests/test_oauth.js malcontent · 60%
submits content to websites [MEDIUM]
info secret tests/test_oauth.js:95 gitleaks · 70%
Possible hard-coded secret (Detected a Generic API Key, potentially exposing access to various services and sensitive operations.); value redacted, liveness not verified.
pass 1 ok context pack, read-only
turns 3
cost $0.10
pass 2 4 findings re-checked
model sonnet+fable
escalate no
Partial review: Gmail client plugin using Gmail API, OAuth loopback, keyring, and local cache scripts. Only BarWidget, Accounts.js, BodyCache, Cache.js and the AuthManager excerpt were reviewed; the other files were not read. No malicious behaviour seen in them.
escalate-only: the ai may add findings and raise one level; it never lowers a verdict and never clears a hard fail.
verdict does activity caution unsigned
marketplace baseline: review-required
outcome review-required (marketplace automated baseline) caps installer mode selective commit 3d0d673 checked 2026-08-20 counts as ≤caution
the marketplace publishes no findings, no score and no signature. it is the source of truth for metadata; for verdicts it can only raise combined to caution, never make it safe.
Email client for Omarchy: read, triage, and reply to Gmail, HEY and any JMAP or IMAP mailbox in a native window. Fastmail, iCloud, Outlook, Zoho, Proton Bridge, or your own server — several accounts at once, each with its own inbox and unread count. Keyboard-first, three columns when there is room and one when there is not, and it follows your theme. Meeting invitations are drawn as meetings you can answer, newsletters unsubscribe in one click, and remote images stay blocked until you ask.
kind Bar widget version 0.11.0 install omarchy-plugin-check --add omamail checks the verdict first, then runs omarchy plugin add https://github.com/huacnlee/omamail.git --enable
stars 304 +51 in 30d
commits 90d 297
contributors 31 bus factor 1
release v0.11.0 20 in 180d
last commit 2026-10-19
issues 31 ~43h to reply
marketplace ↗ open on plugins.omarchy.org category Productivity kind Bar widget tags quickshell bar author huacnlee license MIT stars 304 status unverified baseline review-required listed 2026-08-20 rank #8