Linux security orchestrator (CLI-first). Prefer AUR/COPR/deb for Polkit helper; pip is for CLI discovery.
Project description
oysterAV
Linux security orchestrator — CLI-first backend with a thin GTK4 GUI.
ClamAV spine, pack adapters, quarantine, scheduling — without reimplementing engines.
Dashboard — posture cards, security news ticker, recent scans
Why oysterAV?
- Orchestrator, not engine — wraps ClamAV, rkhunter, Lynis, and friends (ADR-001)
- CLI owns security —
oyst-cliis the source of truth; the GUI is a client (ADR-002) - Full or Lite runtime — vendored tools under XDG, or host packages only (ADR-004)
- Host co-control — on-access blocking stays with ClamAV; oysterAV guides and responds (ADR-008)
Screenshots
| Scan | Reports |
|---|---|
| Profiles, paths, multi-pack progress | History, export, quarantine / resolve actions |
Settings — feeds, scan defaults, services, scheduling, packs
Prerequisites
- Python ≥ 3.12 and uv
- GUI: system GTK4 + libadwaita (PyGObject introspection)
Quick start
uv sync --extra all
uv run oyst-cli setup run --confirm --json
uv run oyst-cli status assess --json
uv run oyst-cli scan ~/Downloads --json
setup run can take several minutes on a cold machine (signatures / packs). Soft-failed steps (schedule, rkhunter) are non-fatal — check --json output.
Privileged helper install (install-privileged-helper) needs a root-owned
oyst_core prefix (distro package) or sudo uv run oyst-cli install-privileged-helper --dev
for a checkout. See docs/cli/reference.md.
./scripts/check.sh --quick # local validation
./scripts/check.sh --format # also enforce ruff format
GUI
uv sync --extra gui --extra dev
uv run oysterav
The GUI talks only through OystClient / oyst-cli serve — never runs security tools itself. See ADR-007 and the GUI↔CLI contract.
Architecture
| Package | Role |
|---|---|
oyst_core |
Packs, orchestrator, quarantine, RPC serve |
oyst_cli |
Full CLI (oyst-cli) |
oysterav |
Thin GTK4 / libadwaita client |
Decision log: docs/adr/README.md.
Pack runtime (Full mode, default)
Vendored upstream tools live under ~/.local/share/oysterav/runtime/:
uv run oyst-cli runtime status
uv run oyst-cli runtime install --all
uv run oyst-cli runtime update # ClamAV CDIFF updates
Lite mode uses host packages only (packaging/lite/README.md):
uv run oyst-cli config set runtime.mode lite
Packs
| Tier | Packs |
|---|---|
| Required | clamav, freshclam |
| Recommended | rkhunter, chkrootkit, lynis, clamonacc, firewall |
| Optional | maldet, unhide, fail2ban, fangfrisch |
Host package examples (Lite / clamd on the host):
# Debian/Ubuntu
sudo apt install clamav clamav-daemon rkhunter chkrootkit lynis
# Arch / CachyOS
sudo pacman -S clamav rkhunter chkrootkit lynis
# Fedora
sudo dnf install clamav clamav-update rkhunter chkrootkit lynis
On-access prevention with the host: operator guide.
Install from GitHub Releases
Prefer a system package so the privileged helper is root-owned under /usr
(getting started). Current install path:
assets on each GitHub Release.
| Channel | Status | Install |
|---|---|---|
| Debian/Ubuntu (.deb) | Available | Download oysterav_*_amd64.deb, then sudo apt install ./oysterav_*_amd64.deb |
| Fedora/RHEL (.rpm) | Available | Download oysterav-*-1.x86_64.rpm, then sudo dnf install ./oysterav-*.rpm |
| Flatpak (GitHub bundle) | Available | flatpak install --user ./oysterAV-*-x86_64.flatpak — also install a host .deb/.rpm for Polkit helper elevation |
| Wheel / uv (dev) | Available | Download the .whl or clone and uv sync --extra all |
| AUR (Arch / CachyOS) | Pending listing | Packaging prepared — see distro submit status |
| Fedora COPR | Pending listing | Spec prepared — see distro submit status |
| Flathub | Pending listing | Offline manifest prepared — see distro submit status |
| PyPI (CLI) | Pending publish | CLI discoverability only; not recommended for the privileged helper |
After install, verify freshness against GitHub Releases:
oyst-cli version --check
Full packaging notes: docs/packaging/release.md. Storefront status: docs/packaging/distro-submit.md.
Health / debug
uv run oyst-cli doctor --json
uv run oyst-cli status assess --json
uv run oyst-cli serve --foreground # RPC for the GUI
Docs
License
GPL-3.0-or-later — GNU General Public License v3 or later.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oysterav-0.2.2.tar.gz.
File metadata
- Download URL: oysterav-0.2.2.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1d7707842bca1dc74bba5832a957d04305c5dd15275bc6083b2729d4d1c4ba6
|
|
| MD5 |
79f6a2fc72da4475647993b990ffce60
|
|
| BLAKE2b-256 |
59ceec44df76c31da98cfa9633719e32256f75c641ba22b6b4593b0a6eac36b6
|
Provenance
The following attestation bundles were made for oysterav-0.2.2.tar.gz:
Publisher:
publish-pypi.yml on asafelobotomy/oysterAV
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oysterav-0.2.2.tar.gz -
Subject digest:
d1d7707842bca1dc74bba5832a957d04305c5dd15275bc6083b2729d4d1c4ba6 - Sigstore transparency entry: 2276676897
- Sigstore integration time:
-
Permalink:
asafelobotomy/oysterAV@5814a963dbe89cebdfe162b543c32b0d558a5156 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/asafelobotomy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5814a963dbe89cebdfe162b543c32b0d558a5156 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file oysterav-0.2.2-py3-none-any.whl.
File metadata
- Download URL: oysterav-0.2.2-py3-none-any.whl
- Upload date:
- Size: 438.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaa6129f1558f8236f444144977280311b4ef7716d09ba6c5ef6d907ebbc2d7d
|
|
| MD5 |
e92485faedb734faab76a5e64daafd50
|
|
| BLAKE2b-256 |
f87caf2de6742e368b96bbdd3905049538101126c86b8471ab1e50bc932fb782
|
Provenance
The following attestation bundles were made for oysterav-0.2.2-py3-none-any.whl:
Publisher:
publish-pypi.yml on asafelobotomy/oysterAV
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oysterav-0.2.2-py3-none-any.whl -
Subject digest:
eaa6129f1558f8236f444144977280311b4ef7716d09ba6c5ef6d907ebbc2d7d - Sigstore transparency entry: 2276676963
- Sigstore integration time:
-
Permalink:
asafelobotomy/oysterAV@5814a963dbe89cebdfe162b543c32b0d558a5156 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/asafelobotomy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5814a963dbe89cebdfe162b543c32b0d558a5156 -
Trigger Event:
workflow_dispatch
-
Statement type: