for Omarchy

OmaSafe v0.3.1 · signed release · 2026-09-09

Know what your system can do.Catch what quietly changed.

A bounded, evidence-first review tool for Omarchy. Plugins: exact revisions, shipped payloads, capabilities, and drift from your trust baseline. Host: encryption, firewall, updates, listeners, and persistence, reported as state rather than a score. Candidates: scan a GitHub URL or install command before anything touches your shell.

Sigstore-signed CLI Never executes plugin code Runs unprivileged MIT

OmaSafe surfaces unusual patterns, risky capabilities, posture regressions, and source changes for review. It never labels a plugin safe or malicious, and a quiet report means “no new actionable change”, not “proven secure”.

two subjects, one engine omasafe-cli 0.3.1
$ omasafe-cli posture scan
catalog
v1 · 18 checks · x86_64 · Omarchy 4.0.2
states
5 pass 7 informational 2 attention 2 incomplete
coverage
14 of 18 observed · 2 incomplete kept visible · 2 not applicable
attention
omarchy 4.0.2-1 → 4.0.3-1 · next: review, then omarchy update
$ omasafe-cli scan-plugin --request 'omarchy plugin add https://github.com/…'
acquired
exact commit installed: false
findings
32 · 0 critical · 0 high · 31 medium · 1 low
capability
persistence scheduling process execution clipboard filesystem
coverage
partial 21 analyzed · 1 partial · 11 unsupported · 16 unreferenced
 
evidence attached, no verdict

Why

The marketplace validates one commit. Your machine runs whatever came next.

Omarchy plugins are QML and JavaScript loaded unsandboxed, with full user permissions, inside the shared shell process, installed as mutable Git repositories. AUR packages have the same shape: community code, rebuilt often, executed as you. OmaSafe closes the gap between what was validated once and what is running now.

Omarchy plugin marketplace

snapshot 2026-09-09
2,866plugin listings
897community listings unverified
796upstream already moved past the validated commit

Nearly one in three community listings no longer points at the commit the marketplace checked. OmaSafe records the exact revision on your disk and tells you when it drifts.

Arch User Repository

snapshot 2026-09-09
119,109packages
59,411with zero community votes
13,720changed in the last 30 days

Half the AUR has never been vouched for by anyone, and it churns daily. Read-only PKGBUILD review is next on the roadmap; host posture already reports foreign packages and pending updates.

Figures from the public catalog and AUR metadata dumps on the snapshot date. Both sources change continuously; treat them as a point in time.

Three ways in

One engine. A bar widget for glancing, a CLI for proof, a skill for your agent.

The CLI owns parsing, identity, findings, coverage, policy, and state. The widget and the agent skill are thin, bounded clients over the same commands. Install what fits your workflow; the evidence is identical.

01 / enginev0.3.1

omasafe-cli

A single Rust binary. Inventory, marketplace correlation, trust baselines, drift diff, payload analysis, candidate scans, host posture, reviewed updates, and an opt-in daily timer. Every report is versioned JSON with coverage attached.

  • x86_64 Linux
  • Sigstore + SHA-256
  • argv-only exec
  • exit codes for CI
# pinned to the release you are installing
curl --fail --proto '=https' --tlsv1.2 --location \
  https://raw.githubusercontent.com/tuthan/omasafe/v0.3.1/scripts/install-cli.sh \
  --output install-cli.sh
less install-cli.sh
bash install-cli.sh --version v0.3.1
02 / Omarchy bar widgetv0.5.0

OmaSafe plugin

A bar chip with a review panel. Five views over two subjects: the plugins on this machine, and the machine itself. Renders CLI reports, keeps stale and incomplete states visible, and never scans on its own.

io.github.tuthan.omasafe · category: Security
  • Plugins
  • Analysis
  • Rules
  • Posture
  • Source Scan
# from the marketplace or the published repository
omarchy plugin add https://github.com/tuthan/omasafe-plugin.git --enable

# the marketplace does not install the CLI; add it separately
03 / agent skillv1.4.0

omasafe-plugin-review

A portable Agent Skill so Claude Code, Codex, Cursor, or OpenCode can review a plugin through the local CLI: paste a GitHub URL or install command, get a bounded report. Plugin content stays untrusted evidence, never instructions.

  • Claude Code
  • Codex
  • Cursor
  • OpenCode
# offline, exact-target install from a checked-out release
adapters/install.sh --host claude --scope user --symlink
adapters/install.sh --host codex --scope project --project-dir . --copy

# requires a local omasafe-cli >= 0.3.0; never installs it for you

For AI agents

Your agent will be asked to install plugins. Give it a way to review them without running them.

“Is this plugin OK to add?” now arrives in Claude Code or Codex with the install command attached. An agent that answers by reading the repository is reading untrusted text; a README or AGENTS.md can talk to it. The OmaSafe skill routes the question through the CLI instead: argv-only, read-only, validated JSON back. The agent reports evidence and coverage. It is not allowed to say “safe”. Watch it happen below, unedited.

Recorded 2026-09-09 · Claude Code · omasafe-cli 0.3.1 · 1 min 23 s The operator pastes omarchy plugin add …/omarchy-lunar-calendar.git --enable. The skill checks the CLI version, hands the whole command to the CLI as one argument, and reports the review-profile result: exact commit resolved, nothing installed, zero findings under partial coverage with five files unsupported. Asked “do you think this plugin is safe”, the agent declines to say so and explains what would close the coverage gap.
transcript of the recording omasafe-cli 0.3.1
/omasafe-plugin-review omarchy plugin add https://github.com/tuthan/omarchy-lunar-calendar.git --enable
skill → version check → bounded runner, argv onlyomasafe-cli scan-plugin --request '<the pasted command, as one argument>' \ --report-profile review --format json resolved default-branch head to exact commit 032bf2f…0722efd · installation_performed: false · --enable recorded as discarded intent

Not done, and not requested: no install, no enable, no trust, no override. The CLI parsed the command itself; I did not parse or fetch anything.

  • Findings: 0 / 0 / 0. No active findings reported under this scan's coverage.
  • Coverage is partial: of 11 files, 0 analyzed, 6 unreferenced, 5 unsupported. Zero files reached the fully analyzed state.
  • Code exposure: 7 invocation edges recorded; three JS files flagged known-execute-or-load, so they matter most and are exactly the ones this pass did not fully read.

Zero findings here is not a clean bill of health. It says the scanner did not get far enough to have an opinion.

do you think this plugin is safe

No, and I am not going to call it safe. That is not evasion; it is the epistemic state of this scan. The honest answer is unknown, with a specific coverage gap identified, not “safe” or “unsafe”. The next concrete step is finding out why those 5 files are unsupported before any enable or trust decision.

  • 01

    The CLI does the reading.

    Parsing, identity, severity, coverage, and policy are owned by the binary. The agent receives command-validated JSON through a bounded runner, never raw plugin source in its context.

  • 02

    Plugin text is evidence, not instructions.

    The skill forbids cloning, rendering, sourcing, or executing candidate content, and ignores the target's README, AGENTS.md, CLAUDE.md, hooks, and scripts. Prompt injection has nowhere to land.

  • 03

    Mutations need a human in the turn.

    Trust, enable, overrides, reviewed updates, and timers require a live operator's confirmation against an exact identity. They are refused in CI, headless, delegated, or full-auto sessions.

  • 04

    Same engine in your pipeline.

    Agents and CI read the same versioned report. --fail-on high turns a scan into a gate: exit 4 when the threshold is met, exit 3 for actionable drift, 0 for nothing new.

Claude CodeCodexCursorOpenCode one canonical skill directory · offline install · requires a local omasafe-cli ≥ 0.3.0

What ships in v0.3.1

From “what is installed?” to “what is this machine doing?”

The v0.2 series made plugin coverage explicit. v0.3 adds the first data not keyed by plugin: the host itself. The trust layer stays small, and every result carries identity, evidence, and coverage.

01 / analyze

See the whole payload.

QML, JavaScript, shell, Python, and native binaries inventoried with digests, invocation edges, and explicit per-file coverage. Bounded dataflow, not guesswork.

02 / review

Review the exact change.

Rule-backed findings, capability context, marketplace claims, and candidate updates checked against an immutable commit before the native updater mutates anything.

03 / control

Keep the decision yours.

Advisory and hardened policies, per-file opaque executable reviews, scoped suppressions, exact expiring overrides, and report-only scheduled scans.

04 / posture · new

Watch the host, not a grade.

LUKS, firewall, listeners, kernel restart, keyring, persistence, PATH hygiene, pending updates, and advisories. Regression notifications deduplicate; a stable machine stays quiet.

Scope

Five questions, answered before trust

identity

What is installed?

Repository, HEAD, tree OID, dirty worktree, content digest.

provenance

Is it what was checked?

Correlated against a commit-pinned catalog snapshot.

drift

What changed since?

Your baseline, an exact diff, a daily quiet sweep.

review

What should I read?

Payload, capability, and coverage evidence per file.

posture

Is the host where I left it?

18 read-only checks with state, not a score.

Roadmap

Ordered by dependency, not ambition

The analyzer is bounded and evidence-first. Lifecycle controls stay opt-in, explicit, and reportable. No privileges are requested before v0.5.

v0.1

Local plugin trust

Inventory, catalog correlation, commit identity, baseline, diff, drift alerts.

Released · 2026-08
v0.2.x

Coverage truth

Payload analyzer, candidate source scans, scan caching, explicit coverage, opaque executable review, hardened lifecycle gates.

Shipped in v0.3.1
v0.3

Host posture

18-check catalog, coverage states, update awareness, post-update hook, support export, daily and weekly timers. Next: posture baselines, windowed digests, bar indicator.

Current · v0.3.1 · 2026-09-09
v0.4

AUR review

PKGBUILD static analysis and update diffs, never executing a build file.

v0.5

Narrow remediation

Per-action polkit helper, first hardening installer, report export.

later

Held

Secrets sweep, panic workflow, VirusTotal hash lookups, ClamAV, AIDE.

Boundaries

What it will never claim to be

Getting started

Install the engine, then review what you trust

Download the signed v0.3.1 CLI, run your first posture scan, pin a baseline for the plugins you already trust, and let the daily timer stay quiet until something changes. The bar widget and agent skill are separate installs with their own lifecycles.

verified install x86_64 Linux
# download the pinned installer, review it, then run it
curl --fail --proto '=https' --tlsv1.2 --location \
  https://raw.githubusercontent.com/tuthan/omasafe/v0.3.1/scripts/install-cli.sh \
  --output install-cli.sh
less install-cli.sh
bash install-cli.sh --version v0.3.1

# verifies the Sigstore bundle and SHA-256 before installing to ~/.local/bin
omasafe-cli --version
first review read-only by default
# the host
omasafe-cli posture scan
omasafe-cli posture export --format markdown

# a plugin you have not installed yet
omasafe-cli scan-plugin --request \
  'omarchy plugin add https://github.com/OWNER/REPO.git --enable'

# the plugins you already run
omasafe-cli plugins inventory
omasafe-cli plugins trust PLUGIN_ID
omasafe-cli scan --include-analysis --notify
omasafe-cli schedule install --policy advisory

Prefer a UI? Add the bar widget from the Omarchy marketplace. Reviewing with an AI assistant? Install the agent skill and paste a plugin URL.