@gent
Docs

How it works

One local program reads your Gmail Sent folder, queues each task, runs your agent and replies in the same thread.

Any email client → Gmail Sent → IMAP/TLS → local SQLite queue
                                              ↓
                                     Codex / Claude Code
                                              ↓
Email thread     ← Gmail     ← SMTP/TLS ← result + session ID

Only your mail starts a task

Intake reads Gmail's authenticated Sent folder, not your Inbox. A spoofed sender cannot submit a task. A task must come from the mailbox owner and go to the +agents address. Automatic notifications are skipped, so the runner never answers itself.

Threads map to sessions

The first subject picks the agent and the project. Replies find their task through the email's References and In-Reply-To headers, never by guessing. A new email starts a new task. A reply that matches no task is ignored.

The queue

SQLite records message IDs, threads, turns, sessions, process identity, approvals and delivery state. No cloud database or public listener is involved. A task is marked running before the agent starts. After a crash, interrupted turns are held, not replayed.

Mail delivery

A reply that Gmail may or may not have accepted is never sent twice. atgent status shows the delivery state of each notification. A task can finish even when its email fails.

Mail content

The runner prefers plain text. HTML mail is converted to text without running scripts or loading remote content. Quoted replies are removed. Attachments are saved with safe names in a private task folder, and their paths go into the agent's prompt. Nothing is unzipped or run.

Limits of this design

The computer must be awake, online and, on macOS, logged in. Task text and results pass through Gmail and your agent provider. Anyone who can add mail to your Sent folder can send tasks, so protect your Gmail account.

Checked against @gent 0.4.4, the current release on PyPI.