<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>email on tomrochette.com</title>
    <link>https://tomrochette.com/tags/email/</link>
    <description>Recent content in email on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Sun, 11 Oct 2026 23:45:59 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/email/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Airut</title>
      <link>https://tomrochette.com/agents/executions/airut/</link>
      <pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/executions/airut/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category><category>executions</category><category>email</category><category>slack</category><category>claude-code</category><category>self-hosted</category>
      <description>&lt;p&gt;Airut is a self-hosted MIT gateway that starts sandboxed Claude Code tasks from email or Slack messages and returns results as thread replies and pull requests, with each task running in a container behind a network allowlist.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It is the first execution layer in this category whose trigger is your inbox, and its guardrail is architecture rather than configuration: per-task rootless containers, an egress allowlist proxy, and surrogate credentials, which is the stack every other member asks you to assemble yourself.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What it is&#xA;    &lt;div id=&#34;what-it-is&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-it-is&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;You send a message (email or Slack) describing a task; Airut authenticates the sender (DMARC for email, workspace membership for Slack, with per-repo sender authorization), provisions an isolated container with the repository cloned, runs Claude Code, pushes a pull request, and replies in the same thread.&#xA;Replying to the thread continues the session, so conversation state, not a terminal, carries the task across days; a cron scheduler runs periodic tasks (daily reviews, nightly checks) and delivers results to email, where a reply re-opens the conversation.&#xA;The gateway is Python, installed from PyPI with &lt;code&gt;uv tool install airut&lt;/code&gt; onto a Linux host with rootless Podman, configured through a web dashboard with live network-activity logs.&#xA;It is built by Pyry Haulos, MIT-licensed, and developed through its own workflow: the README states all development since the first working version happened by sending instructions to Airut and reviewing the PRs.&#xA;A companion &lt;code&gt;airut-sandbox&lt;/code&gt; CLI and &lt;code&gt;airutorg/sandbox-action&lt;/code&gt; extend the same container and allowlist isolation to CI, covering the code an agent&amp;rsquo;s PR triggers on the runner side.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Status&#xA;    &lt;div id=&#34;status&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#status&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Young, active, and nearly invisible.&lt;/strong&gt;&#xA;84 stars, 3 forks, and 2 open issues as of 2026-10-11 (GitHub API), created 2026-02-03 and pushed 2026-10-10.&#xA;PyPI carries 0.26.0, with 287 downloads in the trailing month (2026-09-11 to 2026-10-10).&#xA;The community footprint is three self-posted Show HN threads (2, 1, and 2 points, zero comments, February through March 2026), so there is no independent coverage or adoption evidence, and that absence is itself the signal for a project with this much documentation depth.&lt;/p&gt;&#xA;&lt;picture&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: dark)&#34; srcset=&#34;https://api.star-history.com/chart?repos=airutorg/airut&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: light)&#34; srcset=&#34;https://api.star-history.com/chart?repos=airutorg/airut&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;  &lt;img alt=&#34;Star History Chart&#34; src=&#34;https://api.star-history.com/chart?repos=airutorg/airut&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Strengths&#xA;    &lt;div id=&#34;strengths&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#strengths&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The trigger is a message thread, and reply-to-continue persistence means an agent task survives across days with no terminal, app, or workflow file in the loop.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Defense-in-depth is architecture: each task gets a rootless Podman container, egress restricted through an allowlisting proxy, and credential masking with surrogate keys, so the sandbox is not a permission setting someone can flip.&lt;/li&gt;&#xA;&lt;li&gt;Scheduled tasks deliver results into email, and replies continue the conversation, the rare scheduler in this category with a human channel built in.&lt;/li&gt;&#xA;&lt;li&gt;The web dashboard exposes live network-activity logs per task, making the allowlist auditable rather than documented.&lt;/li&gt;&#xA;&lt;li&gt;The CI sandbox action closes the gap most agent workflows leave open: your own CI running the agent&amp;rsquo;s code outside the agent&amp;rsquo;s sandbox.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Cautions&#xA;    &lt;div id=&#34;cautions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cautions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;One maintainer and no visible adoption&lt;/strong&gt;: 84 stars, single-digit forks, and a self-reported community footprint of three zero-comment Show HN threads as of 2026-10-11.&lt;/li&gt;&#xA;&lt;li&gt;Self-hosting is the only mode, and the prerequisites (Linux, rootless Podman, a dedicated IMAP/SMTP account or Slack app per repository) put the operations burden on you.&lt;/li&gt;&#xA;&lt;li&gt;Claude Code only, and the autonomy pitch (a full-permission agent inside the container) presumes the boundary holds; the security-model documentation is the audit artifact you must read yourself.&lt;/li&gt;&#xA;&lt;li&gt;The email channel inherits email&amp;rsquo;s failure modes: DMARC-verified senders plus per-repo authorization are all that stands between a stranger and an agent task on your code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Pricing&#xA;    &lt;div id=&#34;pricing&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pricing&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Free and MIT-licensed, self-hosted only.&#xA;The costs are your VM, your Claude subscription or API key, and the email or Slack infrastructure the channels ride on.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compared to&#xA;    &lt;div id=&#34;compared-to&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compared-to&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/executions/n8n/&#34; &gt;n8n&lt;/a&gt;: the general trigger canvas with chat nodes and 1,500+ integrations; Airut is a purpose-built coding-agent gateway where the sandbox is included rather than assembled.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/executions/claude-code-routines/&#34; &gt;Claude Code routines&lt;/a&gt;: scheduled sessions in Anthropic&amp;rsquo;s cloud with no messaging channel; Airut is self-hosted, thread-driven, and runs on your hardware.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/executions/aeon/&#34; &gt;Aeon&lt;/a&gt;: the Actions-based unattended framework with Telegram inbound; Airut keeps execution off Actions entirely, inside containers on your own VM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Bottom line&#xA;    &lt;div id=&#34;bottom-line&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#bottom-line&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended for solo engineers or small teams who want to drive Claude Code from their inbox with credible isolation and will operate a small server.&lt;/strong&gt;&#xA;Not for anyone needing a supported product, multi-harness execution, or evidence of adoption beyond the author.&#xA;My disagreeable claim: at 84 stars this is the least proven member of the category, and it still has the best default security architecture in it, because container, allowlist, and surrogate credentials are what every other member&amp;rsquo;s guardrails row describes piecewise.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Changes&#xA;    &lt;div id=&#34;changes&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#changes&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026-10-11 - Created from the 2026-10-11 entrant scan, with the thin community footprint recorded as the critical signal.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/sandboxing/&#34; &gt;Sandboxing&lt;/a&gt; - the category holding the boundary tools Airut builds in&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/executions/n8n/&#34; &gt;n8n&lt;/a&gt; - the general trigger canvas Airut specializes against&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/executions/claude-code-routines/&#34; &gt;Claude Code routines&lt;/a&gt; - the hosted scheduled-session alternative&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/harnesses/claude-code/&#34; &gt;Claude Code&lt;/a&gt; - the harness every Airut task runs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/airutorg/airut&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://github.com/airutorg/airut&lt;/a&gt; - repository, 84 stars, MIT license, description, as of 2026-10-11&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/airutorg/airut&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/airutorg/airut&lt;/a&gt; - exact counters (84 stars, 3 forks, 2 open issues, pushed 2026-10-10, created 2026-02-03)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/airutorg/airut/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/airutorg/airut/main/README.md&lt;/a&gt; - the channel model, sandbox architecture, scheduled tasks, dashboard, CI sandbox action, and the dogfooding claim&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.org/pypi/airut/json&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=pypi.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://pypi.org/pypi/airut/json&lt;/a&gt; - the PyPI package at 0.26.0, &amp;ldquo;Sandboxed Claude Code over email and Slack&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypistats.org/api/packages/airut/recent&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=pypistats.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://pypistats.org/api/packages/airut/recent&lt;/a&gt; - 287 trailing-month downloads (2026-09-11 to 2026-10-10)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://airut.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=airut.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://airut.org&lt;/a&gt; - the project site: the message-to-deploy pitch and the surrogate-credential walkthrough&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hn.algolia.com/api/v1/search?query=airut&amp;amp;tags=story&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=hn.algolia.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://hn.algolia.com/api/v1/search?query=airut&amp;tags=story&lt;/a&gt; - the three self-posted Show HN threads (2, 1, and 2 points, zero comments), the footprint record as of 2026-10-11&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=46947714&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=news.ycombinator.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://news.ycombinator.com/item?id=46947714&lt;/a&gt; - the first Show HN thread, &amp;ldquo;Sandboxed Claude Code sessions over email&amp;rdquo; (2026-02-09, 2 points, zero comments)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
