
Research
Shai-Hulud Descends to Hades: Miasma Worm Campaign Spreads with New PyPI Wave
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.
caduseusmail
Advanced tools
☤CaduceusMail lets your OpenClaw automate an enterprise-level communications stack with one domain/mailbox combo.
Inbox-reliability optimization engine: automates sender trust hardening, identity rotation, and scale-ready outreach/support flows designed to keep your mail out of junk.
☤CaduceusMail lets your OpenClaw automate an enterprise-level communications stack with one domain/mailbox combo.
src/ Node CLI entrypoints and thin runtime wrappers
scripts/ Operational bash + Python tooling
credentials/ Strict credential templates
Key entrypoints:
scripts/install.sh: one-line installer for local operator usescripts/caduceusmail.sh: stack bootstrap and orchestration entrypointscripts/caduceusmail-doctor.py: readiness diagnosticsscripts/email_alias_fabric_ops.py: alias fabric operationsscripts/send_mail_graph.py: Graph sendMail helpersrc/cli.ts: packaged Node CLI wrapperFor live operations:
bashpython3jqpwsh for full Microsoft 365 bootstrapFor source builds and tests:
If pwsh is unavailable, the bootstrap flow still supports --simulate-bootstrap for CI and dry-run validation.
curl -fsSL https://raw.githubusercontent.com/lmtlssss/caduceusmail/main/scripts/install.sh | bash
This installs the repo into ~/.local/share/caduceusmail and creates:
~/.local/bin/caduseusmail~/.local/bin/caduceusmail~/.local/bin/caduceusmail-doctorThe preferred command is caduseusmail. The legacy alias caduceusmail still works. If you want the subcommand-style Node CLI shown later in this README, build the project from source with npm run build.
If ~/.local/bin is not on your PATH yet:
export PATH="$HOME/.local/bin:$PATH"
git clone https://github.com/lmtlssss/caduceusmail.git
cd caduceusmail
npm install
npm run build
After the build:
node dist/cli.js help
CaduceusMail reads strict credential files from credentials/ by default. The first non-empty line must be:
CADUCEUSMAIL_CREDENTIALS_V1
Example credentials/entra.txt:
CADUCEUSMAIL_CREDENTIALS_V1
ENTRA_TENANT_ID=<your-entra-tenant-id>
ENTRA_CLIENT_ID=<your-entra-app-client-id>
EXCHANGE_DEFAULT_MAILBOX=<primary-mailbox@yourdomain.com>
ENTRA_CLIENT_SECRET=<entra-client-secret>
EXCHANGE_ORGANIZATION=<tenant-primary.onmicrosoft.com>
ORGANIZATION_DOMAIN=<your-root-domain>
Example credentials/cloudflare.txt:
CADUCEUSMAIL_CREDENTIALS_V1
CLOUDFLARE_API_TOKEN=<cloudflare-api-token>
CLOUDFLARE_ZONE_ID=<cloudflare-zone-id>
Runtime state defaults to:
~/.caduceusmail/.env~/.caduceusmail/intel/The tooling attempts to keep these owner-only (600 files, 700 directories).
From a source checkout:
python3 scripts/caduceusmail-doctor.py --json --base-dir .
From an installed environment:
caduceusmail-doctor --json
bash scripts/caduceusmail.sh \
--organization-domain example.com \
--mailbox ops@example.com \
--bootstrap-auth-mode device
Useful bootstrap flags:
--dry-run to audit without mutation--simulate-bootstrap for CI or sandbox validation--skip-m365-bootstrap to skip PowerShell auth/bootstrap--persist-env to save non-secret runtime values--persist-secrets to save secrets as wellIf you used the one-line installer, the equivalent command is:
caduseusmail \
--organization-domain example.com \
--mailbox ops@example.com \
--bootstrap-auth-mode device
python3 scripts/email_alias_fabric_ops.py provision-lane \
--mailbox ops@example.com \
--local support \
--domain example.com \
--ttl 300
Or through the packaged CLI:
node dist/cli.js provision-lane \
--mailbox ops@example.com \
--local support \
--domain example.com
node dist/cli.js verify-lane \
--mailbox ops@example.com \
--alias-email support@example.com \
--domain example.com
node dist/cli.js retire-lane \
--mailbox ops@example.com \
--alias-email support@example.com \
--dry-run
node dist/cli.js send \
--from support@example.com \
--mailbox ops@example.com \
--to user@example.net \
--subject "Test" \
--body "Hello from CaduceusMail" \
--dry-run
After npm run build, the Node CLI at node dist/cli.js exposes:
doctor: run readiness diagnosticsbootstrap: run the bootstrap scriptprovision-lane: create a new alias lane and optional DNS recordsverify-lane: verify an existing laneretire-lane: remove a lane, with optional fallback mailbox handlingawareness: list current awareness data for domains and mailbox statecontrol-json: execute one or more operations from JSONsend: send mail through Microsoft Graphself-test: run the fabric self-testThe hosted shell at https://caduseus.pro is only a control surface. Mail stays on the operator
machine running caduseusmail dashboard or caduseusmail codex, and the browser talks straight
to that local or tunneled gateway with header-token auth.
Typical admin flow:
npm install -g caduseusmail
caduseusmail codex
caduseusmail token
Then:
https://caduseus.proEach shared login gets:
press.desk@caduseusmail.lmtlssss.comThe owner keeps the full terminal surface. Shared logins only see their scoped inbox plus the optional chat-style host session when the owner enables it.
If you already have older docs or wrappers, caduceusmail still works as a compatibility alias.
smoke: run the sandbox smoke testversionhelpcontrol-json accepts either one object or a list of objects:
node dist/cli.js control-json --dry-run --ops-json '[
{"action":"stack.audit","domain":"example.com","mailbox":"ops@example.com"},
{"action":"stack.optimize","domain":"example.com","mailbox":"ops@example.com"}
]'
Install dependencies and build:
npm install
npm run build
Run tests:
npm test
Run the sandbox smoke test:
bash scripts/caduceusmail-sandbox-smoke.sh
4.2.1, as declared in VERSION, src/version.ts, and scripts/caduceusmail/version.py.doctor will recommend --bootstrap-auth-mode device automatically in headless, SSH, CI, and sandbox-like environments.MIT. See LICENSE.
FAQs
☤CaduceusMail lets your OpenClaw automate an enterprise-level communications stack with one domain/mailbox combo.
We found that caduseusmail demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.