freshcrate
Home > Security > airut

airut

Airut is a system for running Claude Code tasks from email and Slack. It handles workspace provisioning, container isolation, network sandboxing, session persistence, and cleanup — a secure foundation

Description

Airut is a system for running Claude Code tasks from email and Slack. It handles workspace provisioning, container isolation, network sandboxing, session persistence, and cleanup — a secure foundation for autonomous agentic development.

README

Airut logo

Airut

Sandboxed Claude Code over email and Slack. Named "Airut" (Finnish: herald/messenger). Created by Pyry Haulos.

What It Does

Send a message — email or Slack — with instructions, and get results back in the same thread. Starting a new task is as simple as starting a new conversation. Airut provisions an isolated container, runs Claude Code, and cleans up when done.

Self-hosted: your code and conversations never leave your infrastructure.

You → Email/Slack → Airut → Claude Code (container) → PR → Reply → You

This project is developed entirely through its own workflow — from the first working version onward, all development has been done by sending instructions to Airut and reviewing the resulting PRs.

Key features:

  • Zero-friction tasking: Send a message to start a task. No workspace setup, no session management, no cleanup. Airut provisions an isolated environment automatically and tears it down when done.
  • Defense-in-depth sandboxing: Container isolation, network allowlist via proxy, and credential masking limit blast radius when agents run with full autonomy.
  • Conversation persistence: Reply to continue where you left off. Claude Code session context is maintained across messages.
  • Task-to-PR foundation: Combined with repo configuration (CLAUDE.md, CI tooling, branch protection), enables end-to-end autonomous workflows where agents push PRs for human review.
  • Email and Slack channels: Authenticate via DMARC (email) or workspace membership (Slack), with sender authorization per repo.
  • Scheduled tasks: Run Claude on a cron schedule — daily code reviews, nightly health checks, weekly summaries. Results are delivered via email, and recipients can reply to continue the conversation.
  • Web dashboard: Monitor running tasks, view network activity logs, and configure the server.

Why Email and Slack?

Mature Tools You Already Use

Email and Slack already handle threading, search, notifications, and mobile access. Agent interactions show up where your team already works.

Send a message from any device, get results when ready. No terminal session to keep open, no custom client to install.

Parallel Agent Management

Running multiple Claude Code agents requires isolation — each needs its own workspace, session state, and credentials. Airut provides this automatically: each conversation is fully isolated, and a configurable thread pool manages concurrent execution.

Code Review as Feedback

The recommended workflow has agents push PRs for review. You review the PR, leave comments, then reply to the thread. The agent reads review feedback and iterates. This provides:

  • Human oversight before code lands
  • Natural checkpoint for feedback
  • Audit trail via git history
You: "Add user authentication"
    ↓
Agent: works → pushes PR → replies with PR link
    ↓
You: review PR, leave comments
    ↓
You: reply "Address the review comments"
    ↓
Agent: reads comments → fixes → updates PR → replies
    ↓
You: approve and merge

CI Sandboxing

When an agent pushes a PR, CI workflows run the agent's code on the runner — outside the container sandbox. The airut-sandbox CLI and airutorg/sandbox-action GitHub Action solve this by running CI commands inside the same container isolation and network allowlisting used by the gateway. See doc/ci-sandbox.md for setup and security requirements.

Example project

The airut.org website is a minimal Airut-managed repository that demonstrates the message-to-deploy workflow with Cloudflare Pages. Its .airut/ directory and CLAUDE.md serve as a good starting point for onboarding your own projects.

Screenshots

Dashboard — task monitoring
Dashboard showing running and completed tasks

Config editor — server settings
Config editor showing global server settings

Network log — live request tracking
Network log showing allowed and blocked requests during task execution

Documentation

High-Level Documentation

Channel Setup

Implementation Specifications

  • spec/ — Detailed specs for channels, config schema, dashboard, and tooling

Agent Instructions

  • CLAUDE.md — Operating instructions for Claude Code agents

Quick Start

Prerequisites

  • Linux (dedicated VM recommended, Debian 13 tested)
  • uv, Git, and Podman (rootless)
  • At least one channel per repository:
    • Email: Dedicated email account with IMAP/SMTP access
    • Slack: Slack workspace with app installation permissions

Install

uv tool install airut          # Install from PyPI
airut check                    # Validate system dependencies
airut install-service          # Install and start systemd service

Configure

Open http://localhost:5200 in your browser. Click Configure to open the config editor. From there you can add repositories, set up channels, configure credentials, and adjust resource limits.

See deployment.md for the full guide including channel setup, secrets management, and git credentials.

Onboard your repository by creating the .airut/ directory with container Dockerfile, network allowlist, and CLAUDE.md instructions.

Alternative: You can also edit ~/.config/airut/airut.yaml directly. See airut.example.yaml for the full schema. Changes are picked up automatically via file watching.

Send Your First Message

Email:

To: airut@example.com
Subject: Fix the typo in README

Please fix the typo in the README file.

Slack: Open a new chat with your Airut app and type your instructions.

Update

airut update                   # Stop service, upgrade, restart

Project Structure

airut/
├── CLAUDE.md              # Agent operating instructions
├── doc/                   # High-level documentation
├── spec/                  # Implementation specifications
├── .airut/                # Repo-specific Airut configuration
├── config/                # Server configuration templates
├── airut/                   # Library code
│   ├── _bundled/          # Static resources bundled into wheel
│   │   ├── assets/        # Logo SVG
│   │   └── proxy/         # Network sandbox (proxy filter, DNS, AWS signing)
│   ├── conversation/      # Conversation directory layout and preparation
│   ├── dashboard/         # Web dashboard server
│   ├── gateway/           # Protocol-agnostic gateway service
│   ├── gh/                # GitHub API wrappers
│   └── sandbox/           # Sandboxed execution (container, proxy, session, image)
├── scripts/               # CLI tools
│   ├── airut.py           # CLI entry point (uv run airut)
│   ├── ci.py              # Local CI runner
│   └── pr.py              # PR workflow tool
└── tests/                 # Unit and integration tests

Testing

Airut enforces 100% unit test coverage in CI — every line must be tested, with no skips or exceptions. Integration tests verify end-to-end workflows including email, Slack, config reload, and session recovery. Config schema migrations are independently tested for correctness and idempotency. See doc/testing.md for details.

Development

This project is developed with Claude Code. See CLAUDE.md for conventions and workflow tools.

# Run local CI (auto-fix + all checks)
uv run scripts/ci.py --fix

# Monitor PR status
uv run scripts/pr.py ci --wait -v
uv run scripts/pr.py review -v

License

This project is licensed under the MIT License. See LICENSE for details.

Release History

VersionChangesUrgencyDate
v0.24.1### Highlights **Preserve substantive replies** — Fixed a bug where the email/Slack reply dropped the substantive part of the agent's response when the model emitted a short closing remark after tool calls (e.g. "Memory saved…" following the real reply). The reply builder now anchors on the latest substantive text and concatenates everything after it. (#574) **GraphQL repository scoping hardening** — Follow-up to the v0.24.0 scope checker: `createCommitOnBranch` bypassed repo-scope checks High4/18/2026
v0.24.0### Highlights **GraphQL repository scoping** — GitHub App installation tokens can perform GraphQL mutations on any public repository, creating an exfiltration channel where a sandboxed agent could post secrets to attacker-controlled issues. The proxy now resolves configured repository node IDs at token refresh time and rejects any GraphQL mutation targeting an out-of-scope repository. A second defense layer decodes GitHub node IDs in all `*Id` input fields to verify repository ownership, catHigh4/15/2026
v0.23.0### Highlights **Markdown rendering rewrite** — The hand-rolled ~690-line markdown-to-HTML converter has been replaced with [mistune](https://github.com/lepture/mistune) v3, a proper CommonMark parser with a custom email renderer. This eliminates formatting issues with paragraphs, blockquotes, list continuations, and table spacing in email output. The earlier incremental fixes to the old parser (paragraph handling, blockquote support, list continuation lines) were superseded by the full migraHigh4/14/2026
v0.22.1### Highlights - **Claude Code CDN downloads** — Binary downloads now use `downloads.claude.ai` as the primary source with automatic fallback to GCS, improving reliability and aligning with Anthropic's official distribution channel. (#511, #512) - **GitHub Actions security hardening** — All third-party actions are pinned to commit SHAs with minimal permissions per job, plus a new `check_actions.py` tool to verify and auto-update pins. (#504, #505) ### Other Changes - Added Markdown cHigh4/11/2026
v0.21.1### Bug Fixes - **Conversation cleanup with container-created files** — Fixed `PermissionError` when deleting conversation directories containing files created inside rootless Podman containers (subordinate UID ownership). Cleanup now falls back to `podman unshare rm -rf` when `shutil.rmtree()` fails. (#486) - **Dashboard 404 during config reload** — Dashboard API endpoints for active conversations returned 404 when the repo was in `RELOAD_PENDING` or `RELOADING` state. Fixed the work-direHigh4/8/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

AGENTS.md_generator🤖 Generate secure, automated repo documentation and pull request checks with a safe-by-default toolchain for coding agents.main@2026-04-21
awesome-lark-botsProvide open-source AI bots for Lark to automate tasks like brainstorming, project planning, content creation, and monitoring within a secure chat interface.main@2026-04-21
Secure-Agent-LauncherBlock AI agent access to sensitive macOS paths and log all actions to protect private data during command execution.main@2026-04-21
cuaOpen-source infrastructure for Computer-Use Agents. Sandboxes, SDKs, and benchmarks to train and evaluate AI agents that can control full desktops (macOS, Linux, Windows).computer-server-v0.3.39
OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.docker/execd/v1.0.13