Skip to main content

Headless Claude Code interaction via email

Project description

Airut

Headless Claude Code interaction via email. Named "Airut" (Finnish: herald/messenger).

Send an email with instructions, receive Claude Code's response. Airut runs Claude Code in isolated containers, maintains conversation state, and handles the full email-to-PR workflow.

You → Email → Airut → Claude Code (container) → PR → Email reply → You

Key Features

  • Defense-in-depth sandboxing — container isolation, surrogate credentials, and network allowlist limit blast radius in case of agent misbehavior
  • Email-native authentication — DMARC verification with sender allowlist, no API keys to manage
  • Model selection via subaddressing — choose the model per email (e.g., airut+haiku@example.com for fast/cheap, airut+opus@example.com for complex tasks)
  • Conversation threading — reply to continue conversations across sessions
  • File attachments — send files to the agent, receive files back
  • Web dashboard — monitor running tasks and view network activity logs

Quick Start

Prerequisites

  • Linux VM (tested on Debian 13)
  • Rootless Podman (for container execution)
  • Python 3.13+ (via uv)
  • Git and GitHub CLI (gh)
  • Dedicated email account with IMAP/SMTP access

Install

# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install Airut from PyPI
uv tool install airut

Or install the latest development version from main:

uv tool install airut --from git+https://github.com/airutorg/airut.git

Configure

# Generate initial config at ~/.config/airut/airut.yaml
airut init

# Validate config and system dependencies
airut check

Deploy

# Install and start the systemd service
airut install-service

# Verify it's running
systemctl --user status airut

Update

uv tool upgrade airut
systemctl --user restart airut

How It Works

Each email conversation runs in an isolated container with its own git workspace, Claude Code session, and sandboxed network. The recommended workflow has agents push PRs for your review — you review, leave comments, and reply to the email to iterate.

You: "Add user authentication"
    ↓
Agent: works → pushes PR → replies with PR link
    ↓
You: review PR, leave comments
    ↓
You: reply to email "Address the review comments"
    ↓
Agent: reads comments → fixes → updates PR → replies
    ↓
You: approve and merge

Documentation

Full documentation is available on GitHub:

Links

License

MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

airut-0.8.3.tar.gz (760.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

airut-0.8.3-py3-none-any.whl (203.5 kB view details)

Uploaded Python 3

File details

Details for the file airut-0.8.3.tar.gz.

File metadata

  • Download URL: airut-0.8.3.tar.gz
  • Upload date:
  • Size: 760.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for airut-0.8.3.tar.gz
Algorithm Hash digest
SHA256 1ec4923dd0c0845d19182ac26f95c00b6996f084fc503cd80d157b6d34e1c2f4
MD5 4e82b67d7001c1dfc1723a8b3f0e7048
BLAKE2b-256 a12ca42d321a3b9cdae2e0d79363026d1d147acabb51f8db94046061abd65fcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for airut-0.8.3.tar.gz:

Publisher: publish.yml on airutorg/airut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airut-0.8.3-py3-none-any.whl.

File metadata

  • Download URL: airut-0.8.3-py3-none-any.whl
  • Upload date:
  • Size: 203.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for airut-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9b737f338c7db2c3512fff5545fe2ddcb31287ea548da5fb129d59dc7c6122fb
MD5 138478623231cee3b38a40b26e54ad65
BLAKE2b-256 17707f6d6a8b1913e3cd63baef541d57ae035f5511a9764659797e354a23375a

See more details on using hashes here.

Provenance

The following attestation bundles were made for airut-0.8.3-py3-none-any.whl:

Publisher: publish.yml on airutorg/airut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page