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:
[]
= ["scripts/tmux-nudge.sh", "--team", "atm-dev"]
= ["team-lead"]
= ["arch-ctm", "*"]
Behavior:
post_send_hookis a command argv array. If the first entry is a relative path, ATM resolves it relative to the directory containing.atm.toml.post_send_hook_sendersmatches the resolved sender identity.post_send_hook_recipientsmatches the resolved recipient agent name.- Omitted or empty sender/recipient lists do not match on that axis.
*in either list matches all senders or all recipients unconditionally.- If both sender and recipient lists are omitted or empty, the hook is effectively disabled and ATM does not emit a skip warning for that case.
- The hook runs once if either sender or recipient matching succeeds.
- ATM rejects retired
post_send_hook_memberswith a migration error. - ATM sets
ATM_POST_SENDto a JSON payload with{from, to, message_id, requires_ack, hook_match}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