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. Use whichever name you prefer:

replylayer --help   # identical to `rly --help`

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 replylayer@<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 — rly@X.Y.Z resolves replylayer@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 replylayer 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 replylayer 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 replylayer 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

rly@X.Y.Z always resolves replylayer@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 rly@X.Y.Z cannot ride a later patch-level replylayer 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 replylayer (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.1.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.1-py3-none-win_amd64.whl (31.4 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 14.0+ x86-64

rly-0.7.1-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.1.tar.gz.

File metadata

  • Download URL: rly-0.7.1.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.1.tar.gz
Algorithm Hash digest
SHA256 29d8b2aca4f3c5668c328e9a00a84bd97fc2e3b62d8420bd251b3f7836bb0f44
MD5 142315094dc01b129560fd132e280e1b
BLAKE2b-256 501db22a4216e2c623f5e5483e280a1ebf79c7fe73adaa87e2525cfaa090f0da

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1.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.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: rly-0.7.1-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.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 93e90fd84bf2e3a4b99dc0c7cfd75832d96df3bc3286e6b3b6471d09b6e46b99
MD5 30696a07e39cb14a0e851ecff41a6076
BLAKE2b-256 6a75e9bdcde069694a44e4def54e6e95d164bc0f5b40e4fc196d4cc78f8c01ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1-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.1-py3-none-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: rly-0.7.1-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.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e97509039f474aeba81cdb05d95cb8b6d40eff790019d28d5e778dcd538e9558
MD5 0005050a399872027a1bd2c0fe8d3e1c
BLAKE2b-256 264e322ce688224f6b1ad0d28104d6b614c347bee823e89b7088a2b3315a51f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1-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.1-py3-none-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: rly-0.7.1-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.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f7f5d9a916cc4d96e4cc29bab124cb3aa84870fd4889bc3e72b69f1d6aee908
MD5 8b27cc0c3381736ba8b71c384a8dfdb3
BLAKE2b-256 0aaeb75f3ea4c47333219e27f35985eb3422bc1fc19b00cd3e1318b72c281850

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1-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.1-py3-none-macosx_14_0_x86_64.whl.

File metadata

  • Download URL: rly-0.7.1-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.1-py3-none-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 64a6137384046b9f9c9b441d6cf0b52d834d3e8daa6b7c2fee749e45937235bb
MD5 27c9e8a413585a98aa19abc10db58dfa
BLAKE2b-256 fb00574b33fc8b892077cd388cdfe204709850b44ec26122f11fcceb99f3d10b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1-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.1-py3-none-macosx_14_0_arm64.whl.

File metadata

  • Download URL: rly-0.7.1-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.1-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 689273e0a1f464fb7b10d1b6898069ce007c5440eacb1d521c37edab95e128a4
MD5 5ca20df7c05df5a90eef62b96f902dc3
BLAKE2b-256 eb1f97102940919f9921784ec0440f9435a00639ba435e895829590927fe2d53

See more details on using hashes here.

Provenance

The following attestation bundles were made for rly-0.7.1-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