Skip to main content

cyberxyz-scanner

CyberXYZ Security CLI. Real-time supply-chain protection for npm, PyPI, Go and .NET (NuGet) on macOS, Linux and Windows.

PyPI version Python License

The CLI pairs with the CyberXYZ platform to give you per-machine package inventory, proxy enforcement on every npm, pip, go and dotnet install, and CI/CD gating on flagged dependencies. It is the implementer's interface to a platform that also exposes the same controls in a web dashboard.

Install

The package is published on PyPI as cyberxyz-scanner. The CLI binary it installs is named xyz.

With pip

pip install cyberxyz-scanner

With uv

uv pip install cyberxyz-scanner

Verify the install:

xyz --help

Quick start (one-time per machine)

# 1. Sign in. Opens your browser at app.cyberxyz.io; sign in the way you do on the
#    dashboard (password + authenticator app or passkey, or SSO), check the code
#    matches the terminal, and approve. The CLI never sees your password.
xyz login

# 2. Enroll this machine. One command:
#    - Registers the device with your organization
#    - Points npm (~/.npmrc), pip, Go (GOPROXY) and NuGet at the CyberXYZ proxy,
#      for each one that is installed
#    - Installs the background service for dashboard "Scan now" support
#      (LaunchAgent on macOS, systemd --user on Linux, Task Scheduler on Windows)
xyz proxy setup --machine-name "Alex's MacBook"

Over SSH or on a headless box, xyz login --no-browser prints the link and code to open on any other device (the browser is also skipped automatically when SSH_CONNECTION is set or Linux has no display). The legacy email and password prompt is still available as xyz login --password (or $XYZ_EMAIL / $XYZ_PASSWORD for scripts); accounts with MFA or an SSO-enforcing organization must use the browser login. xyz logout revokes the session on the server and removes it locally.

The CLI session stays signed in while you use it and expires after 90 days without use. While the CyberXYZ agent runs on the machine it refreshes the session daily, so you only sign in once; a machine that stays off for 90 days signs out. It is stored owner-only in ~/.xyz/config.json. Each machine's session is listed under Settings > CLI sessions in the dashboard, where you (or an org admin) can revoke it. Login codes expire after 10 minutes and work once: only approve a code you just requested yourself, never one someone sent you.

That's it. Every later install on this device goes through the CyberXYZ proxy: the exact package version is checked before it downloads, blocked or quarantined packages are refused with the reason, and the install shows up in your dashboard.

For fleets, skip the interactive login: an org admin creates an enrollment token in the dashboard (Machines > Enrollment) and MDM runs xyz proxy setup --enrollment-token pxe_xyz_... (or places the token at /Library/Application Support/CyberXYZ/enrollment-token).

For environments that should not run a long-running background process (CI build agents, sealed builds), pass --no-install-daemon.

On company-managed machines, install the agent at system level so developers cannot stop it:

sudo xyz proxy setup --system          # macOS / Linux
xyz proxy setup --system               # Windows, from an elevated PowerShell

This installs a root/SYSTEM service (macOS LaunchDaemon io.cyberxyz.agent, Linux cyberxyz-agent.service, Windows scheduled task CyberXYZAgent) that starts at boot and restarts if it is killed. The macOS .pkg does the same, and enrolls automatically when MDM places an enrollment token at /Library/Application Support/CyberXYZ/enrollment-token. Without --system (or without admin rights) setup installs the per-user service as before.

Always-on protection

Every minute the background agent checks what each package manager will actually use, repairs anything that no longer points at the CyberXYZ proxy, and reports the result to the dashboard with its heartbeat. Repairs never remove a private or internal registry, and config files are only written for tools that are installed:

Tool What is checked and repaired
npm, pnpm ~/.npmrc registry + token, pnpm's global rc; as root also <npm prefix -g>/etc/npmrc
yarn ~/.yarnrc.yml npmRegistryServer (token scoped to the proxy host under npmRegistries) and registry in ~/.yarnrc
bun ~/.bunfig.toml [install] registry
pip user pip.conf / pip.ini: the proxy is the index-url; extra indexes on pypi.org are removed, private indexes are kept; as root also the system file
uv uv.toml: the proxy is the default [[index]]; pypi.org indexes are removed, private indexes are kept; as root also the system uv.toml
Go GOPROXY=<proxy>,direct (the proxy refuses blocked modules with 403, so there is no fall-through); <proxy> only while the network lock is on; as root also $GOROOT/go.env
NuGet NuGet.Config: the CyberXYZ source is added and nuget.org sources removed; private feeds are kept
Poetry cannot be forced globally, so it is covered by the network lock only

The system-level agent does this for every local user account, writing files owned by that user. The machine token is stored where the agent can always read it (/Library/Application Support/CyberXYZ/machine-token, /etc/cyberxyz/machine-token, %ProgramData%\CyberXYZ\machine-token, or ~/.xyz/machine-token per user), so deleting a config file only gets it rewritten. Registry overrides in shell startup files (NPM_CONFIG_REGISTRY, PIP_INDEX_URL, GOPROXY=direct, ...) and in the Windows user environment are reported, never edited.

Network lock. When an org admin turns it on, the system-level agent also maps the public registries (registry.npmjs.org, registry.yarnpkg.com, registry.npmmirror.com, pypi.org, files.pythonhosted.org, proxy.golang.org) to 0.0.0.0 in the hosts file, so tools that ignore config still cannot reach them. NuGet is not locked yet (it relies on config). Edits to the lock are reverted and reported, and the block is removed when the org turns it off.

xyz proxy remove and uninstalling the service are reported to the dashboard before anything is removed. Under the system service, only an administrator can remove it (sudo xyz proxy remove). xyz proxy status shows the per-tool report, the service level and the network lock state.

If CyberXYZ is unreachable

The proxy reuses its verdict for any package it checked in the last 24 hours. For anything else, your org's setting decides: block (the default; the developer sees "retry in a minute") or allow unchecked. Org admins change it in Settings > Supply-chain proxy.

Audit installed packages

Each command below audits the matching ecosystem on this machine, runs the CyberXYZ watchlist + deep check on suspect packages, and uploads the full inventory to the platform.

xyz audit npm                  # local + global node_modules
xyz audit python               # active Python environment via pip
xyz audit go                   # $GOPATH module cache
xyz audit nuget                # packages.lock.json files under cwd
xyz audit                      # npm + python + go back-to-back

By default each command uses the watchlist pre-filter for speed (~25-40s on a typical machine). Pass --full to skip the pre-filter and deep-check every package (slower but covers advisory-only matches at scan time).

Other useful commands

# One-off safety check on a single package + version
xyz check axios 1.14.1 -e npm

# CI/CD gate. Non-zero exit on flagged packages.
xyz depalert scan --package-lock package-lock.json --fail-on block
xyz depalert scan --requirements requirements.txt --fail-on quarantine
xyz depalert scan --requirements poetry.lock      # also Pipfile.lock, uv.lock
xyz depalert scan --go-sum go.sum
xyz depalert scan -p axios@1.14.1 -p lodash@4.17.21

# SBOM upload (CycloneDX or SPDX)
xyz inventory upload ./my-app
xyz inventory upload --sbom syft.json

# Diagnostic / housekeeping
xyz --version
xyz proxy status               # proxy config per tool, service level, network lock
xyz proxy whoami               # what (org, machine) does my token resolve to
xyz proxy remove               # restore default registries (reported to your dashboard)
xyz scans list                 # history of recent scans for your org
xyz upgrade                    # pull the latest release from PyPI

CI/CD integrations

Set XYZ_API_KEY as a secret and add one of these; any push or PR that pulls in a malicious or vulnerable package fails the build with a clear reason.

  • GitHub Actions: uses: CyberXYZSecurity/depalert-action@v1 (GitHub Marketplace)
  • GitLab CI/CD catalog: gitlab.com/cyberxyz/depalert
  • Azure DevOps Pipelines: integrations/azure-pipelines/cyberxyz-supply-chain.yml
  • Or generate one: xyz ci init

Route the job's own installs through the proxy (protect)

scan checks lockfiles after the fact. protect runs early in the job and points npm, yarn, pip, uv, Go and NuGet at the CyberXYZ proxy, so a malicious version is refused at install time, the same way it is on laptops. Recommended: protect before the install steps, scan as the gate.

# GitHub Actions
- uses: CyberXYZSecurity/depalert-action@v1
  with:
    api-key: ${{ secrets.XYZ_API_KEY }}
    mode: protect          # network-lock: true also blocks the public registries on the runner
- run: npm ci              # goes through the proxy
- uses: CyberXYZSecurity/depalert-action@v1
  with:
    api-key: ${{ secrets.XYZ_API_KEY }}   # mode: scan (default) gates on the lockfiles

GitLab: include gitlab.com/cyberxyz/depalert/protect@1.1.0 and add extends: .cyberxyz-protect (or - !reference [.cyberxyz-protect, before_script]) to the jobs that install dependencies. Any other CI: eval "$(xyz ci protect --format shell)" with XYZ_API_KEY set. If CyberXYZ is unreachable, protect warns and the build carries on unprotected; pass --strict (strict: true) to fail it instead.

All of them run the same xyz depalert scan engine your laptops use. It reads package-lock.json, requirements*.txt, Pipfile.lock, poetry.lock, uv.lock and go.sum.

depalert scan exit codes

Exit Meaning
0 Allowed
1 Block
2 Quarantine
3 Alert
4 Error, including a manifest that could not be read (it is never treated as clean)

Re-enroll, rotate, remove

To rotate the proxy token on a device, re-run xyz proxy setup --machine-name "..." as the same user who enrolled it. The platform replaces the old token and the daemon picks up the new one at next restart. A machine name registered by another member of your org can only be re-issued by an org admin; pick a different --machine-name otherwise.

To remove a device cleanly, delete it from the dashboard Fleet view. The deletion sweeps proxy_install_log, proxy_tokens, cli_scans, customer_inventory_uploads, customer_package_inventory and scan_jobs in one transaction. Re-enroll with the same command above.

Platform

License

Proprietary. See LICENSE.

Contact

Email: amro@cyberxyz.io

Release files for cyberxyz-scanner 1.4.61

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cyberxyz-scanner 1.4.61
File Size Uploaded
cyberxyz_scanner-1.4.61.tar.gz 230.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cyberxyz-scanner 1.4.61
File Interpreter ABI Platform
cyberxyz_scanner-1.4.61-py3-none-any.whl Python 3 none any Details

Total release size: 416.9 kB

Release files / cyberxyz_scanner-1.4.61.tar.gz

Download URL cyberxyz_scanner-1.4.61.tar.gz
Size 230.1 kB
Tags Source
SHA-256 checksum
How to use checksums
194af6669619222f5be42802ea399c991fe83c431f7b824fdb186beb6af32c1f
BLAKE2b-256 checksum
How to use checksums
a31a72f9559daf98471be96f5a5b47bb079d381c07d6145aa0338b3707c7bbbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / cyberxyz_scanner-1.4.61-py3-none-any.whl

Download URL cyberxyz_scanner-1.4.61-py3-none-any.whl
Size 186.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5a160363cfc3489c5147139f63d69c62cd4c8ddfc57583c3d65e7b512708f501
BLAKE2b-256 checksum
How to use checksums
0cd10fe5f8a85b3dd71ec3d6c6f95fcfd744a0ca776dc61ecb9270ae54955093
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.61 This release

2 release files

1.4.60

2 release files

1.4.59

2 release files

1.4.57

2 release files

1.4.55

2 release files

1.4.54

2 release files

1.4.50

2 release files

1.4.49

2 release files

1.4.48

2 release files

1.4.47

2 release files

1.4.46

2 release files

1.4.45

2 release files

1.4.44

2 release files

1.4.43

2 release files

1.4.42

2 release files

1.4.41

2 release files

1.4.40

2 release files

1.4.39

2 release files

1.4.38

2 release files

1.4.37

2 release files

1.4.36

2 release files

1.4.35

2 release files

1.4.34

2 release files

1.4.33

2 release files

1.4.28

2 release files

1.4.27

2 release files

1.4.26

2 release files

1.4.25

2 release files

1.4.24

2 release files

1.4.23

2 release files

1.4.22

2 release files

1.4.21

2 release files

1.4.20

2 release files

1.4.9

2 release files

1.4.8

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page