世界を動かす技術を、日本語で。

Show HN: Emdash – オープンソースのエージェント型開発環境

概要

  • Emdash は、複数のコーディングエージェントを並列実行できる デスクトップアプリ
  • 各エージェントは 独立したgit worktree で動作し、ローカル・リモートどちらにも対応
  • 21種類以上のCLIエージェント をサポートし、チケット管理・レビュー・CI/CD連携も可能
  • SSH経由でリモート開発、セキュアな認証・ストレージ機能を提供
  • オープンソース・MITライセンス で、Windows/Mac/Linuxに対応

Emdashとは

  • Emdash は、プロバイダーに依存しない Agentic Development Environment (ADE) のデスクトップアプリ
  • 複数のコーディングエージェントを 並列・独立して実行 できる環境
  • 各エージェントは 専用のgit worktree で動作、ローカル/リモートのどちらにも対応
  • SSH/SFTP接続 により、リモートサーバー上のコードベースでも同じワークフローを実現
  • セキュアな認証 (SSHエージェント・鍵・OSキーチェーン)と ローカルDB保存 による安全性

主な機能

  • 21種類以上のCLIエージェント (Claude Code, Qwen Code, Codex, Amp, など)をサポート
  • Linear, GitHub, Jiraのチケット を直接エージェントに割り当て可能
  • diffのレビュー・テスト・PR作成・CI/CDチェック・マージ まで一括管理
  • ローカル・リモート両対応、SSH経由でリモートプロジェクトも並列開発
  • 高速なタスク起動、ワークツリーの事前確保で起動時間を大幅短縮(約500–1000ms)

インストール方法

サポートしているCLIプロバイダー

  • Amp: npm install -g @sourcegraph/amp@latest
  • Auggie: npm install -g @augmentcode/auggie
  • Charm: npm install -g @charmland/crush
  • Claude Code: curl -fsSL https://claude.ai/install.sh | bash
  • Qwen Code: npm install -g @qwen-code/qwen-code
  • Codex: npm install -g @openai/codex
  • Gemini, Droid, Cursor, Continue, GitHub Copilot, etc. もサポート

チケット連携・認証

  • Linear: Linear APIキーで接続
  • Jira: サイトURL・メール・Atlassian APIトークンで認証
  • GitHub Issues: GitHub CLI (gh auth login)で認証

テレメトリー・プライバシー

  • 匿名・許可リスト済みイベント のみをPostHogに送信
    • 例:アプリ起動/終了、機能利用名、バージョン情報
  • コード・ファイルパス・リポジトリ名・PIIは送信しない
  • テレメトリー無効化 方法
    • アプリ内: 設定 → 一般 → プライバシー&テレメトリー(オフに切替)
    • 環境変数: TELEMETRY_ENABLED=falseで起動

データ保存とリセット

  • アプリデータはローカルのSQLite DB へ保存
    • macOS: ~/Library/Application Support/emdash/emdash.db
    • Windows: %APPDATA%\emdash\emdash.db
    • Linux: ~/.config/emdash/emdash.db
  • エージェント利用時は各プロバイダーのクラウドAPIにデータ送信
    • 各プロバイダーのデータ保持ポリシーに依存
  • DBリセット はファイル削除(アプリ終了後)、次回起動時に再生成

GitHub CLI・新規プロバイダー追加

  • GitHub CLI はGitHub連携機能利用時のみ必須
  • 新規プロバイダー追加 は、CONTRIBUTING.mdに従いPR提出
    • CLIコマンド・認証方法・セットアップ手順を記載
    • CLIリンクやコマンド例もIssueで提案可能

よくある質問・トラブルシューティング

  • ネイティブモジュール(sqlite3/node-pty/keytar)クラッシュ時
    • npm run rebuildで再ビルド
    • 失敗時はnpm run resetでクリーンインストール
  • 必要な権限
    • ファイルシステム/Git:リポジトリ読み書き・worktree作成
    • ネットワーク:選択したプロバイダーCLIやGitHub連携時のみ
    • ローカルDB:アプリ状態保存
  • リモートプロジェクト対応
    • 設定→SSH接続でサーバー情報追加
    • 認証方法:SSHエージェント(推奨)・鍵・パスワード
    • サーバー要件:SSHアクセス・Gitインストール
    • 詳細手順はdocs/ssh-setup.mddocs/ssh-architecture.md参照

開発者・コミュニティ

  • オープンソース・MITライセンス
  • コントリビューション歓迎Contributing Guide参照
  • Discord で議論・フィードバック受付中

まとめ・特徴

  • 複数エージェントの並列開発リモート/ローカル両対応
  • CLIプロバイダーに依存しない設計 で、将来のエージェント追加も容易
  • 開発ループの大部分をアプリ内で完結 (レビュー・テスト・PR・マージ等)
  • 高速なタスク起動柔軟なワークフロー
  • 個人・チームの多様な開発スタイルに最適

参考リンク


Emdash は、複雑な開発フローをシンプルにし、複数のAIコーディングエージェントを自由に活用できる新しい開発環境。複数エージェントの活用やリモート開発に関心がある方は、ぜひ試してみてください。

Hackerたちの意見

ここ数週間、エージェント(CC、今はPiをテスト中)をEmdash経由で運転してる。やっと生産的なワークツリーのセットアップができたよ。始めた頃はまだ粗い部分があったけど、チームはすごいスピードで進んでるし、懸念事項もすぐに解消してくれてる。ネイティブCLIの上に構築するのは正しい戦略だと思う。

質問なんだけど、もしエージェントがRLでどんどん良くなっていったら、この環境やUIは将来的にどうなるんだろう?5〜10のエージェントを管理するのは大変だってみんな知ってるよね。5〜10のエージェントから100%の集中力で良いPRを出せてるとは思えないんだけど、間違いを犯してる可能性が高いし(他の人もそうだと思う)。だったら、1つのエージェントが5〜10のエージェントを管理する方がいいんじゃない?開発ループのほとんどはbashで進んでるし、エージェントがbashを使うのが上手くなれば、6ヶ月後にはどうなるんだろう?エージェントがワークツリーを横断してエージェントを調整できるなら、これは高い抽象レベルで動いてるとは言えないと思う。

面白い考えだね、ありがとう!方向性には同意するよ。エージェントがどんどん良くなってるから、彼らがオーケストレーションをどんどん自分たちでやるようになるだろうね。それでも、開発者にはこれらのエージェントとやり取りするためのインターフェースが必要だと思ってる。ステータスを確認したり、彼らの作業をレビュー・テストするために。Emdashは未来のためのこのインターフェースを構築するためのアプローチなんだ - ADE :)

それで、ビジネスモデルはどうなってるの?これはYCの製品なの?それともYCの製品を作ってるときに開発したツールなの?

ビジネスモデルを模索中だよ。主に考えているのは2つの道筋で、(1) コーディングエージェントのサブスクリプションと、(2) 認証、チーム管理、エージェントのインタラクションの共有を含むエンタープライズ版。正直、まだ初期段階だし、変わる可能性もある。変わらないのは、複数のコーディングエージェントを動かすためのこのUIレイヤーはオープンソースであること。Emdash自体はYCから資金提供を受けてる。別の製品を開発しているときにツールとして初めて開発したけど、その時は資金がなかった。

こんな開発スタイルを試しているところで、今のところの経験から言うと、構築の複雑さがストーリー作成や手動テストのフェーズにシフトしている感じがする。タスクを完全に引き継いで、エージェントに実装を一発でやらせる必要があるから、具体的で明確にコンテキストや目標を伝えないと、ただコードを積み上げるだけになって、管理できないゴミの山ができちゃうかも。新しいUIコンポーネントが必要な変更は、手動調整やUXの詳細なテストが必要になることが多いし、ユーザーがこの段階で期待する体験の仕上げレベルも求められる。こういう風にできるタスクの感覚が出てきて、普通のスプリントの20〜30%くらいはこれに該当すると思う。残りの70%は、AIに改善・修正を指示する前にコードに慣れる必要があるから、リターンが減っていくか、場合によってはマイナスになるかも。これを作る上での経験から、以下についてどう思う?1. あなたの製品は、各タスクを十分な精度で完了させるためのプロジェクト管理や要件収集をどのように減らすの?2. あなたの強みは並列処理にあるようだけど、私の分析を考えると、小さなチームにとっては本当に痛手だとは思えない。これは、主にメンテナンスや強化モードの安定した製品をスケールアップするためのツールとして意図されているの?3. このツールが各タスクのコードを実際にe2eテストする自動化された方法を実装することを想像してる?

ありがとう!どんなツールを試してるの?同意するよ。この進化は、多くの作業を望ましい結果を説明したり、十分なコンテキストを与えたりすることに押し込んでるね。質問に対して:Emdashは、隔離されたgitワークツリーを開くことで各環境のセットアップコストを減らすのに役立ってる。環境変数や他の望ましいコンテキストをコピーして、タスクごとの会話を保存することもできる。ただ、明確な目標を書いて、正しい方向に指示する必要があるよ。チームの規模よりも、個々のスループットに関することだと思う。私の作業スタイルは、一つか二つのタスクに積極的に取り組んで、片方が進行中のときにもう片方に切り替える感じ。サイドバーには、もっと探索的なオープンタスクの長いリストがあって、クイックレビューや問題作成などをしてる。だから、私にとってはタスクを一発で終わらせることではなく、進行中のタスクの間を簡単に移動することが大事なんだ。自動化されたe2eテストは難しい、特にレンダリングに関しては。roborev(https://github.com/roborev-dev/roborev)は正しい方向に進んでると思う。コミットごとにバグレポートを生成して、PRを作成したときだけじゃなくてね。今日、https://cursor.comがリリースしたコンピュータ使用エージェントがインターフェースをテストするのもすごく面白いと思う。

こんにちは!新しいものを作ったこと、おめでとう!すぐに調べてみるつもりだけど、ここにいるかもしれないから聞いてみるね:効率的にワークツリーを作成する方法をシステムに簡単に伝える方法はある?私の問題は、いくつかのこと、特にフロントエンド関連の手動テストをしたいんだけど、各ワークツリーにはそれぞれのポートや特有の設定が必要なんだ(例えば、dockerボリュームが衝突しないように)。git config --worktreeがこれを助けるはずなんだけど(すぐに見てみるつもり)、なんか原始的に感じる。Emdashに「新しいワークツリーを作成するときは、このスクリプトを実行する必要がある」って伝える方法はあるのかな?前もってありがとう、そして再度、新しいものを作ったこと、おめでとう!私たちが進んでいる方向に明らかに合ってるね。

そうそう!デフォルトでは、新しいタスクはそれぞれ独自の作業ツリーで実行されるよ。.emdash.jsonの設定(またはプロジェクトページのUI)で、セットアップや実行、テアダウンのスクリプトを指定できるんだ。例えば、pnpm installやpnpm run devみたいな感じね。それに、便利な環境変数も各タスクに注入されるよ。例えば、$EMDASH_PORTを使うと、各タスクにユニークなポートが与えられるから、PORT=$EMDASH_PORT pnpm run devってやれば、開発サーバーでのポートの衝突がなくなるんだ。詳しくはこちらにあるよ https://docs.emdash.sh/project-config これで助けになるかな?

GitHubのイシューを読むアプリを作ったんだ。特定のタグが付いていると、バックグラウンドのエージェントがプランを作成するよ。別のタグがあれば、サーバーのエージェントがイシューの会話全体をコンテキストとして考慮してPRを作成するんだ(上のプランを使ったというアイデアだけど、技術的には必須じゃないよ)。PRにコメントすると、エージェントがまたそのコメントをコンテキストとして読み込んで、対応しようとするんだ。すべてがgitとGitHubにあるから、自動的にCIも拾ってくれる。シンプルに見えるけど、何か見落としてるかも。

リモートやモバイルのコントロールプレーンを追加する予定はあるの?CLIを使ったアプローチが好きなんだ。https://yepanywhere.com/も似たようなアプローチだけど、主にモバイル経由のアクセスに焦点を当ててるよ。[デスクから離れていることが多いから] あ、実際に君のアプローチを見てみると、エージェントSDKや--json出力を使ってないみたいだね。ターミナルウィンドウを埋め込んでるだけなんだ。それだとモバイルインターフェースは難しいね。デスクトップに集中している理由がわかるよ、他のプロバイダーとの統合が楽になるから。

こういうカスタムAIツールは、なかなか厳しい戦いを強いられるよね。webdevcodyのAutomaker[0]がその例だ。彼は他の人たちと一緒にオープンソースのエージェンティックコーディングツールを作ったんだけど、これがGitHubで人気を集めたんだ。彼はそれをストリーミングで宣伝したりしてたんだけど、数週間後に「もう自分では使ってない」って理由を語った動画[1]を投稿したんだ。彼はClaude Codeに戻ったんだけど、これは時間が経つにつれてツールやスキルが増えて、みんなが慣れ親しんでいるターミナルにあるんだ。私も似たような経験があるよ。新しい開発時代のためにいろんなツールやIDEをダウンロードしたけど、CLIのClaude Codeや時々Codex(無料トークンがあるから)以外は何も定着しなかった。ターミナルを何回でも簡単に分割できるし、カスタムリクエストでターミナルに書いたり話したりできるからね。そして、誰かがClaudeが持っているものの上に賢いアイデアを思いついたら、次の数週間以内に何らかの形で追加されると思うよ。ベイジアンカーブのミームがここにぴったりだね:- すべてにClaude Code、カスタムIDE/ツール、すべてにClaude Code。[0] https://github.com/AutoMaker-Org/automaker [1] https://www.youtube.com/watch?v=3H_t78QcueA&t=382s

作業ツリーの分離は賢いけど、シェルアクセスで複数のエージェントを並行して実行する場合のセキュリティモデルが気になるな。CLIベースのエージェントを実行した経験から言うと、一番のリスクはエージェントが「暴走する」ことじゃなくて、長時間のセッション中のコンテキストウィンドウのずれなんだ。エージェントが履歴を圧縮して、どの作業ツリーにいるかを見失って、間違ったブランチのファイルを編集し始めることがある。もっと悪いことに、間違ったデータベースに対してテストを実行することも。Gitの作業ツリーはファイルの分離に役立つけど、同じ.gitディレクトリを共有しているから、並行操作中(リベースやreflogの競合)にお互いに干渉することがあるよ。5つ以上の並行エージェントでこれに直面したことはある?ネイティブCLIアプローチはプロバイダーの機能に追いつくために賢いけど、各プロバイダーのサンドボックスを信頼することになるね。プロバイダーによっては、より良いものもあれば、そうでないものもある。ターミナルを完全に置き換えようとするのではなく、このワークフローのためにツールを作っている人がいるのはいいね。

なんでMITライセンスなの?GPLがユーザーの障壁になるなら、彼らが望む例外付きの有料ライセンスを提供すればいいのに。でもMITだと商業団体が君のコードを取り込んで、クローズドソースにして商業化することができるんだ。GPL-3(カスタム商業ライセンスのオプション付き)は、この点でMITよりも優れているように思えるんだけど。この選択がそんなに人気なのはどうしてか、教えてもらえる?