Skip to main content

ReplyLayer CLI — safe email for AI agents (PyPI launcher)

Project description

rly

rly is the command-line interface for ReplyLayer — safe email for AI agents. Send, receive, reply to, and security-scan transactional and operational email from the terminal or an agent loop. Not a bulk or marketing tool.

This package is the PyPI launcher: it ships a bundled native binary, so no Node toolchain is required.

Looking for the Python library? This package is the CLI. For the importable SDK (import replylayer), install replylayer instead: pip install replylayer.

pipx install rly
rly --help

Installing the rly package exposes both the rly and replylayer commands — they are aliases for the same launcher, mirroring the npm package. Examples use the short form:

rly --help   # the `replylayer` command is an identical legacy alias

On Debian and Ubuntu systems that enforce PEP 668, plain pip install rly may fail with externally-managed-environment. Use pipx install rly for a global CLI install, or install inside a virtual environment:

python3 -m venv .venv
. .venv/bin/activate
pip install rly

On the supported binary-wheel install, the rly command execs a bundled native replylayer binary directly — no Node toolchain is involved. The npx rly@<pinned> path is reached only when you explicitly set RLY_FORCE_NPX=1 (the launcher's emergency fallback). If the bundled binary is absent (a source/sdist install on an unsupported platform), rly exits with an actionable error pointing at RLY_FORCE_NPX=1 — it does not fall back to npx automatically. The version-pin contract still holds for that npx fallback — the PyPI rly@X.Y.Z resolves the npm rly@X.Y.Z exactly (see Strict pin policy below).

Requirements

  • Python 3.10+
  • pipx for the recommended global install path

Optional (fallback only): Node 22+ with npx on PATH is required only when you opt into the emergency RLY_FORCE_NPX=1 fallback — which is also how you run a source/sdist install on an unsupported platform (set RLY_FORCE_NPX=1 with Node on PATH; the launcher does not switch to npx on its own). The binary wheel needs neither Node nor npx.

Examples

rly auth login
rly mailbox list
rly inbox list --mailbox support-bot

For the full command reference, run rly --help. The complete CLI_GUIDE.md is also bundled in the npm rly package and readable on GitHub. Public CLI source and package-trust material (signed SHA256SUMS, GPG key, SLSA provenance) live at: https://github.com/replylayer/rly

Environment variables

RLY_TIMEOUT_SECONDS

Opt-in subprocess timeout, in seconds. When set, every rly invocation is bounded by subprocess.run(..., timeout=RLY_TIMEOUT_SECONDS); if the underlying CLI subprocess does not exit in time the launcher prints a diagnostic to stderr and exits with code 124. This bounds the bundled-binary exec on the supported path (and the npx process under RLY_FORCE_NPX=1).

By default there is no timeout, with one narrow exception: the help and version short-circuits (--help, -h, --version, -V) carry a built-in 10-second timeout. Those commands should never need to touch the network beyond an initial registry resolve; bounding them lets you diagnose a restricted-network sandbox without affecting legitimate long-poll commands like rly inbox wait --timeout 60.

RLY_TIMEOUT_SECONDS=30 rly inbox list --mailbox support-bot

Set the value high enough to cover the slowest command you reasonably expect. Setting it to a non-integer string is treated as "no timeout" (graceful fallback rather than a launcher crash).

RLY_OFFLINE

RLY_OFFLINE is a no-op on the default bundled-binary path — it applies only under the RLY_FORCE_NPX=1 fallback (the only path that invokes npx).

Set RLY_OFFLINE=1 to force npx to resolve rly from the local cache only. The launcher passes both --offline on the command line and npm_config_offline=true in the subprocess environment (belt-and-suspenders; --prefer-offline is NOT a no-network guarantee).

If the pinned rly version isn't cached locally, npx exits fast with its own non-zero exit code (typically 1 with ENOTCACHED); the wrapper passes that exit code through verbatim — it does NOT normalize it to 124. Exit code 124 is reserved for the wrapper's own timeout branch.

# RLY_OFFLINE only applies under the RLY_FORCE_NPX=1 fallback. Warm the npx
# cache once, online:
RLY_FORCE_NPX=1 rly --version
# Subsequent fallback calls can then run offline:
RLY_FORCE_NPX=1 RLY_OFFLINE=1 rly --version

RLY_OFFLINE=1 is useful in network-restricted CI sandboxes, air-gapped deployments, or any environment where you want a hard guarantee that the launcher will not reach out to the npm registry.

Strict pin policy

The PyPI rly@X.Y.Z always resolves the npm rly@X.Y.Z exactly — there is no @latest resolution and no semver range. The launcher computes the pinned package string at runtime via importlib.metadata.version('rly'), so the two artifacts always move together.

This means:

  • A published PyPI rly@X.Y.Z cannot ride a later patch-level npm release; both packages must be republished together by ReplyLayer.
  • Source installs from the repository between a launcher-only PR and the paired version bump are intentionally unsupported. Use pipx install rly (PyPI) or npm install -g rly (npm) as the supported install paths.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rly-0.7.5.tar.gz (15.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rly-0.7.5-py3-none-win_amd64.whl (31.4 MB view details)

Uploaded Python 3Windows x86-64

rly-0.7.5-py3-none-manylinux_2_28_x86_64.whl (39.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

rly-0.7.5-py3-none-manylinux_2_28_aarch64.whl (39.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

rly-0.7.5-py3-none-macosx_14_0_x86_64.whl (36.9 MB view details)

Uploaded Python 3macOS 14.0+ x86-64

rly-0.7.5-py3-none-macosx_14_0_arm64.whl (34.9 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file rly-0.7.5.tar.gz.

File metadata

  • Download URL: rly-0.7.5.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5.tar.gz
Algorithm Hash digest
SHA256 7e41d4890bdfc894df60886e9d3e227124ac551d7cdcd47a54bbd898aa5b3945
MD5 100135bc1a63f7951da40d6d83ef18c1
BLAKE2b-256 a9ee055a05496fcd2e4f3f55a01c259a1c3dea148a0d4692250f8db70b6b2fbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5.tar.gz:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rly-0.7.5-py3-none-win_amd64.whl.

File metadata

  • Download URL: rly-0.7.5-py3-none-win_amd64.whl
  • Upload date:
  • Size: 31.4 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 84e15e94473fea200795ac51e095cadbe40a1db889aaaf8a116d1ba8b5136497
MD5 da44e03107e1dca639a1019de64d4e15
BLAKE2b-256 a5f3b9418ed2fe249f2c8cbaf9e0fd176484af9103e9a106fdc1da6e190abfae

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5-py3-none-win_amd64.whl:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rly-0.7.5-py3-none-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: rly-0.7.5-py3-none-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 39.4 MB
  • Tags: Python 3, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a12db26eb51a287d1e56204da2a8ad06e623f9cc9721ea1e81cd5e250cfa7be
MD5 9125c801d1461da1a0ede4d2f0f5bf5b
BLAKE2b-256 bac89b29ad385b00ec2758c0e4bed03da86803f7540aadbb82137219df7c14df

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rly-0.7.5-py3-none-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: rly-0.7.5-py3-none-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 39.0 MB
  • Tags: Python 3, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5f7933ce3989cd3d3c10fbd168658dfa217258238a76ed9805b097b79808addf
MD5 abfe847c0cea64b29494168ab473b055
BLAKE2b-256 de7d225efb4ae33fab3ee21f8189d4d2909836cea605a67afe27ed9b1cf9930f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rly-0.7.5-py3-none-macosx_14_0_x86_64.whl.

File metadata

  • Download URL: rly-0.7.5-py3-none-macosx_14_0_x86_64.whl
  • Upload date:
  • Size: 36.9 MB
  • Tags: Python 3, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5-py3-none-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 b3c3512f5619dab6d30fee20e00acceeabb9ca5a31a1d622688752aece35cb4e
MD5 7de5914e998679ac635d04516a5864a3
BLAKE2b-256 4ea29eec20c872e8549ef3596cc71f43ce502e0d1ce65fa72b9c5d2a07bb6a41

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5-py3-none-macosx_14_0_x86_64.whl:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rly-0.7.5-py3-none-macosx_14_0_arm64.whl.

File metadata

  • Download URL: rly-0.7.5-py3-none-macosx_14_0_arm64.whl
  • Upload date:
  • Size: 34.9 MB
  • Tags: Python 3, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rly-0.7.5-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f03d85ef0d4ddd5b416de668009740a2fdd578609045d206495a68389eb1a171
MD5 2877c00b19383adf815b97492e7a9c7b
BLAKE2b-256 77f2e4abb182d905c771450654c9ef62dd9f6f193e5dbc526cf17d484318eb1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.5-py3-none-macosx_14_0_arm64.whl:

Publisher: release-cli-binaries.yml on replylayer/ReplyLayer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page