agent-team-mail (atm)
agent-team-mail is the retained 1.0 CLI and core library for local ATM
mailbox workflows.
This repository is now the source of truth for publishing:
agent-team-mailagent-team-mail-core
The installed command remains atm.
What 1.0 Includes
The retained 1.0 release scope is the daemon-free CLI/core pair:
agent-team-mail— theatmCLIagent-team-mail-core— the core Rust library used by the CLI
This release line continues to consume the published sc-observability family
for retained logging and health reporting:
sc-observabilitysc-observability-typessc-observability-otlp
This repo does not publish the retired legacy daemon, MCP, TUI, or CI-monitor
artifacts as part of the retained 1.0 surface.
Installation
GitHub Releases
Download the latest release from GitHub Releases.
Published archives:
| Platform | Archive |
|---|---|
| Linux (x86_64) | atm_<version>_x86_64-unknown-linux-gnu.tar.gz |
| macOS (Intel) | atm_<version>_x86_64-apple-darwin.tar.gz |
| macOS (Apple Silicon) | atm_<version>_aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | atm_<version>_x86_64-pc-windows-msvc.zip |
Extract the archive and place atm or atm.exe somewhere on your PATH.
Homebrew
crates.io
The library crate is also published as:
winget
winget install randlee.agent-team-mail
winget is a new required 1.0 Windows channel rather than a historical
parity channel from the old repo. Public winget installability may lag by
1-2 days after release because Microsoft reviews new submissions and updates
before they become broadly visible.
Build From Source
Quick Start
ATM works against the local Claude team mailbox layout under ~/.claude/teams.
Typical flows:
Send a message
Read your mailbox
Acknowledge or clear messages
Inspect health and retained logs
Manage teams
Run atm --help or atm <command> --help for the full command surface.
CLI Surface
The retained CLI includes:
sendreadackclearlogdoctorteamsmembers
The teams command also contains retained team-administration subcommands:
add-memberbackuprestore
Configuration Notes
ATM resolves runtime identity and team context from the current CLI/config surface and uses the local Claude team directory layout for mailbox storage.
Post-Send Hook
atm send can run an optional post-send hook configured in .atm.toml:
[[]]
= "team-lead"
= ["scripts/atm-nudge.sh", "team-lead"]
[[]]
= "arch-ctm"
= ["scripts/atm-nudge.sh", "arch-ctm"]
Behavior:
- Each
[[atm.post_send_hooks]]rule binds onerecipientand onecommand. recipientmatches either one exact member name or*for all recipients.- Multiple matching rules all run, in config order.
- If
command[0]is path-like, ATM resolves it relative to the directory containing.atm.toml. - Bare executables like
bash,python3, ortmuxuse normalPATHresolution. - Recipient non-match is silent.
- ATM rejects retired
post_send_hook,post_send_hook_senders,post_send_hook_recipients, andpost_send_hook_memberskeys with migration guidance. - ATM sets
ATM_POST_SENDto a JSON payload with{from, to, sender, recipient, team, message_id, requires_ack}plus optionaltask_idwhen present. - The hook gets 5 seconds to complete.
- Hook stderr is suppressed. Hook stdout may optionally return one JSON object with
level,message, and optionalfieldsfor ATM to log. - For troubleshooting hook diagnostics, combine
--stderr-logswithATM_LOG=debugto surface debug-level hook results on stderr. - If the hook exits non-zero, fails to start, or times out,
atm sendstill succeeds and prints a warning.
Example ATM_POST_SEND payload:
Example tmux auto-nudge hook for a Codex pane:
#!/usr/bin/env bash
recipient=""
team=""
Optional structured hook result on stdout:
Useful docs in this repo:
Development