Your inbox, on autopilot.
Warning
🚧 Under active development — expect rough edges, breaking changes, and bugs. Contributions and issue reports welcome!
LLM-powered email agent that watches Maildir inboxes, classifies mail, and executes workflows. Docker sidecar for docker-mailserver.
- Multi-inbox support with 5 LLM providers (OpenAI, Anthropic, Gemini, OpenRouter, Groq)
- LLM classification with keyword fallback
- 4 action types:
reply,ignore,notify,webhook— composable - Smart SMTP replies with threading, sent folder sync, and message flagging
- Env var interpolation, JSON Schema autocomplete, global + per-inbox config
- inotify watching, catch-up on restart, debounce, idempotent state
- CLI (
run,validate,test,schema) with rich output - Thread awareness, and reconstruction
- Web dashboard for monitoring and config management
- Calendar-aware scheduling actions
- Plugin system for custom action types ... and more to come(based on feedback and bugs)
Setting up a new mail server? Follow Path A in the setup guide.
Already running docker-mailserver? Follow Path B in the setup guide.
Here's a taste of what the stack looks like:
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
# ... your config
mailagent:
image: ghcr.io/vrag99/mailagent:latest
env_file: ./mailagent.env
volumes:
- ./docker-data/dms/mail-data/:/var/mail/:ro
- ./mailagent.yml:/app/config.yml:ro
- ./mailagent-data/:/app/data/
depends_on:
mailserver:
condition: service_healthy
restart: unless-stopped- Create
mailagent.ymlfrom the starter template - Create
mailagent.envwith your API keys and secrets docker compose up -d
pip install docker-mailagentUsage: mailagent <command> [options]
Commands:
run Start the mail agent daemon (default)
validate Validate the config file and exit
test Dry-run a .eml file through the pipeline
schema Print the JSON Schema to stdout
Options:
-c, --config PATH Config file path (default: /app/config.yml)
-v, --verbose Enable debug logging
mailagent validate -c ./mailagent.yml
mailagent test ./some-email.eml -c ./mailagent.yml
mailagent schema > schema.jsonAdd to the top of your YAML file:
# yaml-language-server: $schema=https://raw.githubusercontent.com/vrag99/mailagent/main/schema.jsonVS Code mapping:
{
"yaml.schemas": {
"https://raw.githubusercontent.com/vrag99/mailagent/main/schema.json": "mailagent.yml"
}
}mailagent is configured via a single mailagent.yml file with four top-level sections: providers, defaults, inboxes, and settings. Workflows are inbox-local and evaluated in order (first match wins).
See the full configuration reference and examples.
pip install -e .
pytest -q
docker build -t mailagent/mailagent:local .