Show HN: E2a — AI エージェント向けのオープンソースメールゲートウェイ

2026/05/12 5:26

Show HN: E2a — AI エージェント向けのオープンソースメールゲートウェイ

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

サマリー:

E2A プラットフォームは、人工知能エージェントに対する検証とメッセージ配信を安全に管理する専門の認証済みメールゲートウェイとして機能します。その主な機能は、HMAC署名ヘッダーを通じて送信者のアイデンティティをメッセージ内容に暗号学的に結合させ、インバウンドおよびアウトバウンドの双方のフローでリプレイ攻撃や改ざんを防ぎ、堅牢なセキュリティを確保することです。このシステムは、マネージドクラウドインスタンスでの即時オンボーディングを提供する柔軟な選択肢を備えることで、デプロイメントを簡素化しています。また、Dockerコンテナによるプリ定義されたポート構成を使用して、独自の安全なセットアップを実行することも可能です。

技術的には、E2A はサーバーサイドのリクエストフォージェリを防ぐためにHTTPSのみを通信に適用し、暗号化されたメッセージ封筒をPostgreSQLデータベースに格納します。開発者は、セキュリティ署名を自動的に検証するTypeScriptおよびPython SDKを使用して統合でき、検証が失敗した場合は直ちにエラーを発行します。アーキテクチャは、機密性の高いメール本文をアプリケーションログから除外することで安全性をさらに強化しています。今後、このプラットフォームは人間の関与による承認ゲートウェイをサポートし、オペレーターがマジックリンクを通じてメッセージを検証し承認してから配信できるようにすることで、自動化されたコミュニケーションの完全な制御を確保します。

本文

AI エージェント向けの認証付きメールゲートウェイ。Webhook または WebSocket を通じて受信し、HTTP API を介して送信を実行します。また、人間であるか他の AI エージェントであれ、すべての送信者の身元を正確に検証いたします。

認証された転送

  • 着信中(Inbound)で SPF/DKIM の検証を実施。各配信において HMAC 署名付きの
    X-E2A-Auth-*
    ヘッダーを使用します。

配信モード(2 つ)

  • Webhook:クラウド系のエージェント向けです。
  • WebSocket:ローカル系エージェント向け。パブリック URL の設定不要です。

外部 API(Outbound API)

  • エージェント同士へ送信(SMTP リレー)または人間へ送信(上流の SMTP、例:SES、Resend)が可能です。

人間の関与(Human in the loop)

  • ダッシュボード、マジックリンク付きメール、または CLI を介してレビューアが承認するまで、出力的なメールを送信するのを一時停止するオプトイン型の承認ゲートです。

CLI および SDK

  • TypeScript と Python の SDK、および日常のエージェント運用をサポートする
    e2a
    CLI を提供しています。

e2a-demo-1080p-v2.mp4

ご活用方法 ホストされたインスタンスをご利用いただくか、セルフホスト環境を構築いただけますと幸いです。

ホストサービス(Hosted) e2a.dev で登録ください。DNS 設定不要で即座にスラッグベースのオンボーディング(例:

agents.e2a.dev
の共有ドメイン)が可能となり、ダッシュボードや管理された配信性能もご提供いたします。

セルフホスト(Self-host) クイックスタートおよびデプロイメントガイドをご覧ください。すべての機能が同等に動作いたします。共有ドメインのスラッグの簡略化機能を使用する場合は、メールドメインをリレーにポインティングし、

config.yaml
内で
shared_domain
を設定するだけとなります。

仕組み概要

人間(Gmail/Outlook)
    │
    ▼ SMTP
┌──────────────┐
│   e2a relay   │  ← あなたのエージェントドメインの MX レコードはこちらを指します
│              │
│  1. 検証      │  ← 着信メッセージに対する SPF/DKIM チェック
│  2. 署名      │  ← HMAC 署名付き X-E2A-Auth-* ヘッダーの追加
│  3. 配信      │
└──────────────┘
    │
    ├──▶ クラウドモードエージェント: HTTPS Webhook POST
    │
    └──▶ ローカルモードエージェント: ストレージ保存+WebSocket 通知
              │
              ▼
         e2a listen (CLI) または client.listen() (SDK)

着信フロー:SMTP → SPF/DKIM 検証 → エージェント検索 → HMAC 署名による認証ヘッダー付与 → Webhook または WebSocket 配信。
発信フロー:API 呼び出し → (オプション)HITL(人間による関与)一時停止 → SMTP リレー(エージェント間)または上流の SMTP(エージェントから人間へ)。

クイックスタート Docker を必須といたします。

git clone https://github.com/Mnexa-AI/e2a.git
cd e2a
docker compose up -d

Postgres が先に起動し(自動でスキーマ移行が実行されます)、続いて API サーバー、最後にダッシュボードが立ち上がります。以下の 3 つのホストポートをご利用ください:

  • :8080
    — HTTP API
  • :2525
    — SMTP リレー
  • :3000
    — ダッシュボード(Caddy + Next.js、/api/* は API サーバーへプロキシします)

ヘルスチェック:

curl http://localhost:8080/api/health
# {"status":"ok"}

ブラウザで

http://localhost:3000
を表示しダッシュボードを表示してください。サインインには、
config.yaml
で設定された Google OAuth クレデンシャルが必要です。API 単体のスモークテストを行う場合は、ダッシュボードを省略して以下のブートストラップフローをご利用ください。

初回ユーザーおよび API キーの作成(OAuth は不要):

docker compose exec e2a e2a -config /etc/e2a/config.yaml -bootstrap-email you@example.com
# User:    you@example.com (id=...)
# API key: e2a_...

キーは一度のみ表示されるため、必ず保存してください。エージェントを登録し動作確認を行ってください:

KEY=e2a_...
curl -X POST http://localhost:8080/api/v1/agents \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"slug":"my-bot","agent_mode":"local"}'

curl -H "Authorization: Bearer $KEY" http://localhost:8080/api/v1/agents

実際の着信メールを受信するためには、ドメインの MX レコードをリレーホストへ指す設定が必要です:

  • A
    リコード:your-domain.com → サーバー IP アドレス
  • MX
    リコード:your-domain.com → your-domain.com(プライオリティ 10)

その後、API を介してドメインを登録し検証してください(詳細は「ドメイン」セクション参照)。DNS 設定を行わなくてもテスト用としては API が動作しますが、外部からのメールはリレーに到達しません。

バージョンアップとマイグレーション。 コンPOSE ファイルでは

migrations/
ディレクトリを Postgres の初期化ディレクトリにマウントし、データボリュームが空の時の初回起動のみで実行されます。e2a をバージョンアップし新しいスキーマ移行を引き込む際は、手動で適用する必要があります:

docker compose exec postgres sh -c \
  'for f in /docker-entrypoint-initdb.d/*.sql; do psql -U e2a -d e2a -f "$f" -v ON_ERROR_STOP=1; done'

移行ファイルは冪等性(idempotent)が保証されています(

CREATE TABLE IF NOT EXISTS
、`ALTER TABLE … ADD COLUMN IF NOT EXISTS など),再実行しても安全です。

概念解説

エージェントモード 登録時の

agent_mode
設定により、エージェントは以下の 2 つのモードの一つで動作します:

モード配信方法パブリック URL が必要?
クラウド(デフォルト)HTTPS Webhook POST(webhook_url に宛て)はい
ローカルWebSocket 通知 + REST API フェッチいいえ

ローカルモードでは、接続が切れている間にメッセージを「未読」として蓄積し、再接続時にサーバーから WebSocket 通知として drain されます。どちらのモードでも REST API を介してメッセージをポーリング(取得)することができます。

認証ヘッダー e2a を通じて配信されるすべてのメール(Webhook または WebSocket フェッチ経由)は、以下の署名付きヘッダーを含みます:

ヘッダー説明
X-E2A-Auth-VerifiedSPF か DKIM のドメインレベル認証がパスした場合は
true
X-E2A-Auth-Sender検証済みの送信者メールアドレス、またはエージェントドメイン
X-E2A-Auth-Entity-Typehuman(人間) または agent(エージェント)
X-E2A-Auth-Domain-CheckSPF/DKIM の結果文字列(例:
spf=pass; dkim=none
X-E2A-Auth-Delegation有効な代表権バインディングが存在する場合は
agent={id};human={id}
X-E2A-Auth-TimestampRFC3339 タイムスタンプ
X-E2A-Auth-Message-Idこの配信用の内部 e2a メッセージ ID
X-E2A-Auth-Body-Hash生テキストメッセージバイト列の Hex SHA-256
X-E2A-Auth-Signature上記のカノンカルな文字列に対する HMAC-SHA256

署名は、以下の項目を含む文字列全体をカバーします:

verified \n sender \n entity_type \n domain_check \n delegation \n timestamp \n message_id \n body_hash

認証タグ(MAC)は

message_id
と生メッセージ本体の SHA-256 の両方にバインドされます。どちらかを置き換えると署名が無効になるため、攻撃者が配信をキャプチャしても、別のメッセージや改ざんされた本体に対して認証主張を再利用することはできません。

署名の検証方法

X-E2A-Auth-Verified
フィールドはサーバー側の主張(claim)です。Webhook URL にアクセスできる誰しもがこれを設定可能でありえます。セキュリティ上の判断を行うためには、アカウントの署名シークレットの一つを使用して署名を検証してください(ダッシュボードの設定「Webhook 署名シークレット」または
/api/v1/users/me/signing-secrets
API を介して管理可能です)。

SDK はデフォルトで、未検証の Webhook ペイロードにアクセスしようとした場合(例:

email.sender
email.subject
など)、
UnverifiedEmailError
を発生させることでフィールドへのアクセスをゲート付きにしています。これにより、攻撃者によって制御可能なフィールドを誤って信頼することはありません。ワンステップでの簡略化処理:

from e2a.v1 import E2AClient
client = E2AClient()                          # E2A_API_KEY を読み取る
email = client.parse_webhook(request_body)    # E2A_WEBHOOK_SECRET を読み取り、署名エラー時は例外発生
# 安全に email.sender, email.subject などを使用できます
import { E2AClient } from "@e2a/sdk";
const email = await client.parseWebhook(req.body); // 署名エラー時は例外発生

両方の形式は、デフォルトで

E2A_WEBHOOK_SECRET
を環境変数から読み取ります。シークレットを別の場所保持する場合は、明示的に第 2 引数として渡してください。裏側では、検証ステップが以下の順序で行われます:本体のハッシュが生メッセージバイト列と一致するか確認、HMAC がカノンカルな認証文字列と一致するか確認、タイムスタンプが再発行ウィンドウ(5 分間)内にあるか確認します。

client.get_message(...)
で返されたメールは既に検証済みです。ベアータークエンによってチャンネルが認証されているため、
verify
ステップなしでフィールドに直接アクセスできます。(
/get_messages
listMessages
のような一覧エンドポイントは軽量なサマリーを返し、
InboundEmail
オブジェクトではないため、ゲートは適用されません。)

会話スレッド処理(Conversation Threading) 発信と返信の両方で、不透明な

conversation_id
を受け付けます。e2a は、
payload.conversation_id
を配信時に宛先へ伝播させ、以下の一貫した優先順位で表面化します:

  1. X-E2A-Conversation-Id ヘッダー — e2a から e2a へのトラフィックにおいて権威があります。SMTP エンベルフの
    MAIL FROM
    がこのリレーより発信された場合のみ有効に認識されます。そのため、外部送信者がこれを偽造することはできません。
  2. In-Reply-To / References の検索 — 標準的な RFC 5322 スレッド処理で、宛先エージェント自身のメッセージのスコープ内に限定されます。Gmail/Outlook から返信する人間を含む対象となります。

人間からの最初のコンタクトは

conversation_id: null
で到着するため、エージェントは返信前に新しい ID を割り当てる必要があります。

人間による関与(HITL) エージェントが HITL 機能を有効化している場合、発信および返信呼び出しは即座にディスパッチされません。メッセージはステータス

pending_approval
で保存され、API は HTTP 202 Accepted を返します。配信前にレビューアによる承認が必要です。そうでなければ、設定可能な TTL(時間制限)が経過した後、メッセージはエージェントの
hitl_expiration_action
に応じて
expired_approved
(自動送信)または
expired_rejected
(破棄)へと移行します。

レビューアは以下のいずれかで承認または拒否を行います:

  • ダッシュボード/API
    POST /api/v1/messages/{id}/approve
    または
    /reject
  • マジックリンク付きメール — HITL が作動した際に自動的に送信されます。ワンクリックで
    /api/v1/approve?token=…
    および
    /reject?token=…
    をGET 可能(
    E2A_PUBLIC_URL
    と出力的 SMTP の設定が必要です)。
  • CLI
    e2a pending
    で保持中のメッセージを一覧表示できます。

PUT

/api/v1/agents/{email}
を使用してエージェントに HITL を有効化し、オプションとして
hitl_expiration_action
および TTL を指定してください。

API すべてのエンドポイントは

/api/v1
以下にあります(例外は記載なし)。認証は
Authorization: Bearer <api_key>
で行いますが、
/api/health
/api/v1/info
/api/feedback
および HITL マジックリンクルートを除きます。
@
を含むパスパラメータ(エージェントのメールアドレス)は URL エンコードする必要があります。

機能範囲には、ドメイン登録および検証、エージェントの CRUD、着信・発信メッセージ、HITL の承認/拒否(API キーまたは署名付きマジックリンクトークンによる)、GDPR 準拠のエクスポートと削除、ローカルモードエージェント向けの WebSocket チャンネルが含まれます。完全なエンドポイント参照は

docs/api.md
をご覧ください。機械可読仕様の場合は
web/public/openapi.yaml
をご参照ください。

CLI

npm install -g @e2a/cli
e2a login
コマンド説明
e2a agents register
<slug>@<shared-domain>
を登録します。
e2a login
の後にデプロイメントの共有ドメインが自動的に発見され、
~/.e2a/config.json
にキャッシュされます。
e2a agents listアジェントの一覧表示
e2a agents update アージェントの更新(Webhook URL、モード、HITL など)
e2a agents delete アジェントの削除
e2a listenWebSocket を通じてリアルタイムでメールを受信
e2a listen --json各行に全メッセージ JSON を出力
e2a listen --forward 各メッセージを HTTP POST でローカル URL へ転送
e2a inbox最近のメッセージの一覧表示
e2a read メッセージを読む
e2a reply --body …メッセージへの返信
e2a send --to … --subject … --body …メールを送信
e2a pending承認を待機中の HITL メッセージの一覧表示
e2a configCLI 設定の表示または更新

listen --forward
モードは、
--forward-token
を使用して OpenAI Responses API の転送もサポートします。これは、各着信メールをレスポンスペイロードとしてフォーマットし、モデル出力で自動返信を行います:

e2a listen --forward http://localhost:18789/v1/responses --forward-token <token>

完全な参照は

cli/README.md
をご覧ください。

SDK Python

pip install e2a            # Webhook モード
pip install 'e2a[ws]'      # WebSocket サポート追加
from e2a.v1 import E2AClient

client = E2AClient()                          # E2A_API_KEY を読み取る
email = client.parse_webhook(request_body)    # 解析 + HMAC 検証(E2A_WEBHOOK_SECRET を読み取る)
print(email.sender, email.subject)
email.reply("Got it!", conversation_id="conv_123")

WebSocket(ローカルエージェント):

from e2a.v1 import AsyncE2AClient

async with AsyncE2AClient(api_key="e2a_…") as client:
    async for notif in client.listen("bot@your-domain.com"):
        # notif は軽量なメタデータ — 本体は必要な時に取得
        email = await client.get_message(notif.message_id)
        await email.reply("Got it!")

詳細は

sdks/python/README.md
をご覧ください。

TypeScript 詳細は

sdks/typescript/README.md
をご覧ください。

デプロイメント 3 つの層(オーディエンス)があり、それぞれ異なる部分を設定します:

オーディエンス構成する部分場所
サーバー運営者 — Go ベンダーを実行DB、署名キー、SMTP、OAuth、オプションの共有ドメイン
config.yaml
+ E2A_* 環境変数
CLI / SDK ユーザー — 機械から API を呼び出すデプロイメント URL(ログインのみ)E2A_URL + e2a login
Web ダッシュボード運営者 — Next.js ダッシュボードをホストパブリックサイト URL、ブランディングNEXT_PUBLIC_* ビルド時環境変数

Go バイナリは任意のコンテナホストで動作し、ストレージは Postgres 14+ で利用可能です。出力的メールは標準的な SMTP を通じて送られます。ほとんどのワーカーは

SELECT … FOR UPDATE SKIP LOCKED
による調整を行い、マルチレプリカ設定も安全です。実際の水平スケーリングに関する注意点(メモリ内の WebSocket ファンアウトおよびプロセス単位のリートリミット)はこの 2 点のみです。詳細な環境変数参照、共有ドメイン DNS 設定、スケーリング/制限事項は
docs/deployment.md
をご覧ください。

セキュリティ

  • 身元認証 — カスタムドメインの場合、エージェント登録にはドメイン所有権の DNS TXT 検証が必要です。
  • ドメイン認証 — 各着信メッセージで SPF と DKIM が確認されます。
  • ヘッダー署名 — カノンカルな認証ヘッダー文字列に対する HMAC-SHA256;タイムスタンプが 5 分以上古い場合は拒否します。
  • SSRF 保護 — Webhook URL は HTTPS(プロダクション環境)、パブリック IP への解決、ドメイン名のみ(生 IP なし、プライベート/ループバック範囲なし)を使用する必要があります。
  • OAuth CSRF — ステートパラメータに単回使用で有効期限のある nonce が含まれます。

開発モードよりも制限の緩いプロダクション環境(

E2A_ENV=production
)では、上記が強制されます。セキュリティ上の不具合はプライバシーを尊重した形で報告ください。公開範囲の開示プロセスについては
SECURITY.md
をご参照ください。脆弱性情報については公開 GitHub イシューを立てずにお問い合わせください。

データ処理 メッセージエンベルフと着信本体はデフォルトで 30 日間 Postgres に保持されます。出力的本体は HITL 終了時のスクリービング(除去)が施されます。API キーはハッシュとして保存され、添付ファイルは JSONB ロウに格納されます(S3/GCS は使用しません)。アプリケーションログには送信者/受信者アドレスが含まれます(標準的な MTA プラクティス)が、本体、添付ファイル、生キー、HMAC シークレットは含まれません。ユーザーは自己エクスポート(

GET /users/me/export
)および自己削除(
DELETE /users/me
)を完了でき、GDPR 第 15 条・第 17 条または CCPA に準拠します。完全な保持表、ログフィールド、ユーザー権限エンドポイント、運営者側の責任(バックアップ、TLS、静止時暗号化、ログ編集、コンプライアンス)については
docs/data-handling.md
をご覧ください。

FAQ

なぜ SendGrid / Resend / Postmark をそのまま使い、受信にはそれらの着信解析機能を利用しないのですか? 重大な再構築なしに追加することは不可能な 4 つのポイントがあります:

  1. パブリック URL 不要のローカルモードエージェント。 エージェントは API キーで認証し、
    /api/v1/agents/{email}/ws
    と WebSocket を開き、着信メールはその接続上で JSON として到着します。Webhook URL や ngrok、ポート転送は一切不要です。開発者ラップトップ、エッジデバイス、または企業ファイアウォールの背後にあるエージェントに有用です。SendGrid/Resend は設計上 Webhook 専用です。ポーリング REST API をフォールバックとして利用できます。
  2. 各返信における会話スレッド処理。 人間が Gmail から返信するか、e2a エージェントが API で返信するかに関わらず、着信メッセージはエージェントに安定した
    conversation_id
    があり、それが元のスレッドに関連付けられています。人間送信者の場合、リレーは宛先エージェントのメッセージのスコープ内に限定された標準的な In-Reply-To / References 検索を行います。e2a と両側で動作するエージェント間では、制御できる X-E2A-Conversation-Id ヘッダー(MAIL FROM が自社のドメイン)も信頼し、クライアントがスレッドヘッダーを書き換えても耐性があります。SendGrid/Resend は着信メールを直接見ていないため、受信者ではありません。したがって、両方のパスを利用するには自前で構築する必要があります。
  3. 共有ドメイン上のスラッグプロビジョニング。 運営者は
    shared_domain: agents.e2a.dev
    を設定し、ユーザーは
    {"slug": "my-agent"}
    を POST することで即座に DNS 構成不要で
    my-agent@agents.e2a.dev
    を取得します。e2a が SMTP リレーとしてドメインを主張しているため可能であり、Resend や SendGrid はプロバイダーであってプラットフォームではなく、リレーを自社で動かさない限り共有アドレス空間をマルチテナント化できません。
  4. 内蔵 HITL ホールド + 自動期限切れ。 エージェントごとの
    hitl_enabled
    フラグが着信メールを
    pending_approval
    ステータスに保持します。レビューアはダッシュボード、マジックリンク付きメール、または CLI を介して承認を行います。バックグラウンドワーカーは設定された
    hitl_expiration_action
    に基づいて期限切れのホールドを自動的に処理します(自動送信または破棄)。マジックリンクトークンは HMAC でエンコードされており、ステートレスでセッションバックエンドを必要としません。Resend や SendGrid ではメッセージを自社 DB で保持し、タイマー、承認 UI、ステートレスなレビュートークンを自ら構築する必要があります。

SES / Resend / SendGrid を e2a の出力的 SMTP として人間の送信に利用することは可能です —

config.yaml
outbound_smtp
がその役割です。それらは e2a と補完し合い、着信受信者やエージェントのアブストラクション、または転送層以上の機能を置き換えるものではありません。

なぜメールなのか?エージェント間の Webhook、gRPC、MCP ではダメですか? 人間はすべてアドレスを持っており、動作するクライアントを持つのはメールのみです。Webhook / gRPC / MCP は制御するシステム内部では優秀ですが、Gmail や Outlook には到達しません。クライアントのインストールを強いることなく人間(または他組織のエージェント)と通信したい場合、メールは普遍的な基盤となります。 e2a は Webhook を置き換えるわけではありません — エージェントは Webhook を介してメールを受信します。e2a は、メールの普遍アドレス可能性を、エージェントコードがすでに住む構造化データの世界へと橋渡しします。

攻撃者が X-E2A-Auth- ヘッダーを偽造できない仕組みは何ですか?* リレーは着信メッセージからあらゆる

X-E2A-Auth-*
を削除し、署名用シークレットに対して HMAC-SHA256 で再署名します。署名されたカノンカルな文字列には Sender + Verified + Body-Hash + Message-ID がバインドされているため、再送試行、本体交換、送信者単体の偽造はすべて検証に失敗します。各配信はその特定のメッセージ本体にバインドされており、単なる送信者主張のみであるため、キャプチャされた(ヘッダー、署名)タプルを別のメッセージに持ち越すことはできません。 受信側は SDK で検証を行い、
client.parse_webhook(body)
/
client.parseWebhook(body)
は解析と HMAC 検証を一括で行います(最初にパースした場合でも
email.verify_signature(secret)
を使用可能です)。API 呼び出しによる再確認が不要です。署名シークレットが漏洩した場合はダッシュボードからローテーションし、古い署名は検証されなくなります。リレーから窃取された場合でも、攻撃者はヘッダー以上にアクセス権限を持ちます。

これらは単に SMTP にステップを追加しただけではありませんか? はい — その追加ステップこそが目的です。具体的には:

  • SPF/DKIM 判定の正規化により、受信者がドメイン認証を再実装する必要がありません。
  • HMAC 署名付き配信契約で送信者、本体ハッシュ、メッセージ ID、検証ステータスをバインドします。
  • パブリック URL を持たないエージェント向け WebSocket 転送層です。
  • 自動期限切れとステートレスなマジックリンクレビューを備えた HITL 承認フローです。
  • メール ↔ 構造化データの境界で耐性のある会話 ID スレッド処理です。
  • 共有ドメイン上でのスラッグベースのエージェントプロビジョニングです。
  • エージェントごとの Webhook ルーティング、レートリミット、HITL 設定などです。

これらを裸の Postfix に構築するのは実際のプロジェクトとなります。e2a はそのオープンソースプロジェクトです。

Postfix や Postal を自分自身で実行することに比べたらどうでしょうか? 完全な MTA(メールトランスペーター)をお求めであれば MTA を実行してください — Postfix や Postal は優秀です。e2a は SMTP 転送層自体を置き換えることを意図していません(受信には go-smtp、送信には dial-out を使用)。価値は転送層の上位にある「認証モデル」「エージェントアブストラクション」「署名付き配信契約」「Webhook 失敗時の再試行ポリシー」「HITL 承認フロー」「SDK および CLI」にあります。MTA の運営に慣れ、メール配管のみが必要であれば e2a は必要以上に思えるかもしれません。一方、エージェントアブストラクションや署名付与された身元層を事前構築して利用したい場合は、これが適しています。

なぜホスト版があるのにオープンソースなのでしょうか? 2 つの理由があります:

  1. 監査可能性。 あなたのエージェントのための身元インフラは、 vendor ブlack box(ブラックボックス)ではなく、読めるコードであるべきです。ghcr.io/mnexa-ai/e2a の cosign サインを検証し、ビルドを再現し、実際に何の実行されているかを確認できます。
  2. セルフホストを実際のオプションとする。 e2a.dev のホスト版は、今すぐプル可能な同じ ghcr.io/mnexa-ai/e2a イメージを実行しています。ホスト側の特権機能(共有ドメイン
    agents.e2a.dev
    、管理された配信性)は、クローズドソースの追加機能ではなく、設定 + DNS によるものです。

ホスト版の価格は現在は有効化されていません。発売時には環境変数でオプトインとなり、OSS コードパスは変更されません。

開発ガイド

make build               # go build -o bin/e2a ./cmd/e2a
make run                 # ビルド + 実行(cp config.example.yaml config.yaml を最初に行ってください)
make test                # すべての Go テスト(Postgres が :5433 で必要)
make test-unit           # Go ユニットテストのみ(DB 不要)
make test-integration    # インテグレーションテスト(Postgres が必要)
make test-e2e            # E2E テスト(Postgres が必要)
make docker-up           # Docker Compose でローカル Postgres を開始
make migrate             # ローカル DB に SQL マイグレーションを適用

完全な開発者ガイド(アーキテクチャ、テスト、コード生成、慣習)は

CLAUE.md
をご覧ください。

コントリビューション プルリクエストを送信することで、あなたのコントリビューションに対するデベロッパー証明書元源(DCO)を認証します。コミットに

git commit -s
で署名してください。

ライセンス Apache 2.0 — LICENSE および NOTICE をご参照ください。

同じ日のほかのニュース

一覧に戻る →

2026/05/12 6:08

TanStack の NPM パッケージが乗っ取られました。

## Japanese Translation: GitHub は、ヘルスケア、金融サービス、製造業、政府などの業界にまたがり、エンタープライズから小規模・中規模チーム、スタートアップ、非営利団体に至るまであらゆる組織を対象とした、包括的で AI 搭載の開発プラットフォームへと進化しました。その核心となる価値は、Copilot、Spark、Models など高度な AI コード作成ツールと堅牢なセキュリティ機能を統合し、開発ライフサイクル全体を支援することにあります。主要なワークフローは GitHub Actions、Codespaces、Issues、Code Review によって可能にされ、アプリケーションのセキュリティは Advanced Security、Code Security、Secret Protection によって強化されています。アプリのモダン化、DevOps、CI/CD、DevSecOps などのユースケースに対応するソリューションが提供されています。エンタープライズ顧客には、GitHub Advanced Security、Copilot for Business、Premium Support を含む AI 搭載プラットフォームとアディオンが追加で提供されます。技術的な機能だけでなく、広範なドキュメント、コミュニティフォーラム、カスタマーサポート、Trust Center、オープンソースプログラム(Sponsors、Security Lab、Accelerator、Archive Program)を通じて協力的なエコシステムを育んでいます。この多用途でオールインワン環境は、複雑な開発プロセスの簡素化、継続的統合・デリバリーパイプラインの加速化、業界や組織規模を問わずユーザーへのソフトウェアセキュリティと生産性の向上を実現します。

2026/05/12 5:51

GitLab は、組織の人員削減と「CREDIT(クレジット)」バリューの終了を発表しました。

## Japanese Translation: GitLab は「エージェント時代」を主導するため、根本的な再編に着手しており、これは AI エージェントがほとんどの技術的ワークフローを管理し、人間は高レベルの戦略的判断に専念する転換を意味します。本年 6 月上旬までに完了させるこのシフトには、大幅な人員削減、特定の機能において最大 3 階分の管理レイヤーを撤廃する組織のフラット化、そして R&D を約 60 の小規模かつ権限を持たせたチームに再編し、エンドツーエンドの所有責任を与え直すことが含まれます。移行をサポートするためには、内部プロセスに AI エージェントを組み込み、レビュー、承認、ハンドオフを自動化し、会社の役割を最適化するとともに、自社の存在が縮小している市場においてパートナーネットワークを活用して小規模チームを支援する可能性があります(小規模なチームを持つ国では最大 30% の削減)。 同時に、GitLab は従来のサブスクリプションモデルに加え、AI エージェントタスク向けにコンシュームベースの価格設定を組み合わせたビジネスモデルに進化させ、運用オーバーヘッドの削減と、予測可能な収益と柔軟な使用量指標とのバランス実現を目指します。ユーザーにとっては、これらの変更によって摩擦が減った開発環境が提供され、より迅速なイノベーションを促し、完全に自律的かつ AI 駆動の開発サイクルへの移行を加速させます。また、GitLab は以前の価値観の枠組みを廃止し、「スピードと品質」「顧客所有」「直接的な顧客成果」に焦点を当てた 3 つの新規運営原則に移行します。 GitLab は本日、第 1 四半期および FY27(2026 fiscal year)の通年ガイダンスを維持することを再確認しました。詳細なスコープと財務影響については、取締役会承認後に 6 月 2 日の earnings call で共有される予定であり、同時に、許可された地域において 5 月 18 日までに申請が必要となるチームメンバー向けの任意での退職枠を提供しています。最終的に、この戦略的動きは GitLab を、手動のソフトウェアプロセスから完全に自律的で AI 駆動の開発サイクルへの移行における業界リーダーとしての地位を確立するものです。

2026/05/12 4:33

Java のレコードをネイティブメモリに高速でマップするためのライブラリ

## Japanese Translation: TypedMemory は、Foreign Function & Memory (FFM) API に基づいて構築された、実験的で高パフォーマンスの Java ライブラリであり、強力に型付けされた非ヒープメモリへのアクセスを簡素化します。本ライブラリは ClassFile API を使用しているため、Java 25 以降の使用を対象としており、ネイティブアクセスを有効にするために特定の JVM フラグ(例:`--enable-native-access`)の設定が必要です。本ライブラリでは `Mem.of()` を用いて Java レコードを物理メモリに直接マッピングし、`get`、`set`、`fill`、`copyTo`、`swap` などの操作をサポートします。また、型付けされたメモリアロケーション、レコードレイアウトの導出、メモリエイアウトに関する内省、既存のセグメントへのラッパー機能、アノテーションによる固定サイズ配列表場などの機能を備えています。 本 API はグラフィックパイプライン、シミュレーションシステム、ネイティブ連携層、バイナリプロトコルにおけるコードを大幅に削減しますが、以下の制限点にはユーザーが留意する必要があります:レコード内部は変長データのためにヒープアロケートされた配列に依存しており、ゼロコピー動作を必要とする厳密な非ヒープシナリオではパフォーマンスに影響を与える可能性があります。また、ユニオン型はまだサポートされていません。コア API は現在 Apache License 2.0 に基づいて実験的であり、新機能(単純な長整数アドレスを超えたポインタ型フィールドなど)の追加に伴い設計が変化し、互換性を損なう変更が生じる可能性があります。本ライブラリは Maven Central で `io.github.mambastudio:typedmemory:v0.1.0` として入手可能です。