Agent Deck i-Willink LLC
winget install --id=iWillink.AgentDeck -e Parallel AI agent terminal orchestrator with git-worktree isolation and built-in diff review.
winget install --id=iWillink.AgentDeck -e Parallel AI agent terminal orchestrator with git-worktree isolation and built-in diff review.
複数のAI CLIエージェント(Claude Code / Antigravity / Codex / Gemini など)を、 それぞれ独立したターミナルで並列に立ち上げて監視するデスクトップアプリです。
node-pty(本物のPTY)+ xterm.js$SHELL、Windows → PowerShell)claude / agy 等を自動実行diff で起動時点からの変更を色分け表示。変更行内の語句レベル強調・シンタックスハイライト(拡張子判定・依存ゼロの自前トークナイザ)・複数ファイル diff のファイル単位ジャンプ(チップ+↑↓+スクロール追従)git merge --no-ff)または GitHub PR 作成(「PR 作成」=push → gh pr create)で取り込み/effort ultracode のようなスラッシュコマンドを自動入力(ビルトインの claude / agy にも設定可・毎回の手入力を省略)userData/schedules.json に永続化、スケジューラは main プロセス常駐で 30 秒間隔の壁時計照合 — スリープ復帰でも取りこぼし/二重発火なし)lib/i18n.js 辞書({key: {ja, en}})で一元管理(中文・韓国語は issue #10 で追加予定)最新版は Releases から取得してください。 バージョンタグを切ると CI が各 OS の成果物を自動ビルドして添付します(RELEASE.md)。
| OS | ファイル | 初回起動 |
|---|---|---|
macOS (Apple Silicon -arm64 / Intel -x64) | .dmg | Gatekeeper 警告 → 右クリック → 開く(または xattr -dr com.apple.quarantine) |
| Windows (x64) | .exe(インストーラ) | SmartScreen → 詳細情報 → 実行 |
| Linux (x64) | .AppImage / .deb | AppImage は chmod +x で実行(要 libfuse2)/deb は apt install ./…deb |
> ⚠️ 未署名の OSS 配布です(GitHub Releases が正本)。上記の初回起動手順で開けます。 > Apple Developer ID 署名・公証や App Store 配布は予定していません(App Store はサンドボックスとシェル起動が非互換のため非対応)。 > アプリは起動時に Releases を参照してアップデートの有無を通知します(自動更新はしません)。
npm install
npm run rebuild # node-pty を Electron 向けに再ビルド
npm start
> npm start で「NODE_MODULE_VERSION mismatch」が出たら npm run rebuild。
> mac は Xcode CLT(xcode-select --install)、Windows はビルドツールが必要な場合あり。
純粋ロジックは lib/ に切り出し、Node 標準テストランナーで検証します(依存ゼロ・電子/PTY不要)。
npm test # = node --test (test/*.test.js を実行)
CI(GitHub Actions)は ubuntu / macOS / windows のマトリクスで node --test に加え、
実ランナー上で Electron をヘッドレス起動するスモーク(npm run smoke — 起動 / preload /
IPC / node-pty を検証。Linux は xvfb 経由)を実行します。
electron-builder で .dmg を生成します(node-pty は asar 外に展開して同梱)。
現在のリリースは未署名で、GitHub Releases を正本に配布します。
npm run pack:unsigned # 未署名 .dmg ← 現在のリリース手順
> Apple Developer ID による署名+公証(npm run dist)は現状は予定していません。
> 将来署名する場合の手順(証明書・公証用 env)と、GitHub Releases 公開・アプリ内
> アップデートチェックの詳細は RELEASE.md を参照してください。
アプリは起動時と 6 時間ごとに Releases feed を確認し、新版があれば右下のトースト+OS 通知(バージョンごとに一度・クリックでダウンロードページを開く)でお知らせします。バックグラウンドでも気づけます(自動更新はしません)。
diff で変更レビュー、kill で終了起動コマンドは agy(antigravity プリセットに設定済み)。agy --model で
モデル指定、agy -p "..." でヘッドレス。インストール先: mac/Linux ~/.local/bin/agy、
Windows C:\Users\\AppData\Local\agy\bin。
willink-oss/agentdeck(i-Willink の OSS 組織)で公開しています。
| パス | 役割 |
|---|---|
.github/workflows/ci.yml | OSマトリクスで npm test + ヘッドレス起動スモーク(npm run smoke) |
.github/pull_request_template.md | PR テンプレート |
.github/ISSUE_TEMPLATE/ | bug / feature テンプレート |
LICENSE | MIT(i-Willink) |
CONTRIBUTING.md | 開発・テスト・PR 規約 |
.gitignore で node_modules/ と .agentdeck-worktrees/ 相当は除外済みです。
agentdeck/
├── main.js # Electron main:PTY・git worktree/diff/merge・リポ登録・スケジューラ・IPC
├── preload.js # contextBridge 経由の IPC
├── lib/ # DOM/Electron 非依存の純粋ロジック(テスト対象)
│ ├── git-utils.js # defaultShell / sanitizeBranch / worktreeFolderName
│ ├── diff.js # classifyLine / diffToSegments
│ ├── attention.js # shouldFlagAttention
│ ├── repos.js # normalizePath / addRepo / findRepo / effectiveRepos / findEff
│ ├── gitstat.js # parseNumstat / parseWorktreeList / formatStat
│ ├── layout.js # normalizeLayoutMode / gridTemplateFor(グリッド列数)
│ ├── workspace.js # toConfig / normalize(デッキ保存/復元)
│ ├── fuzzy.js # score(⌘K パレットの部分列マッチ)
│ ├── version.js # compare / isNewer(アップデートチェック)
│ ├── presets.js # ビルトイン定義 + validate / keyFor / merge(プリセット管理)
│ ├── schedule.js # validate / nextFireAt / shouldFire / markFired(スケジュール起動)
│ └── i18n.js # t(key) / 辞書(ja / en の多言語)
├── renderer/ # UI(順序ロードの classic script 群 — global lexical scope を共有)
│ ├── index.html # script の並び順がロード順(boot を含む 07 → 08 の順を維持)
│ ├── 00-state.js # 共有状態・定数・DOM refs・lib バインディング
│ ├── 01-launch-form.js# 起動フォーム(preset select / quick chips)
│ ├── 02-repos.js # リポジトリパネル(サイドバー・ポーリング・フィルタ)
│ ├── 03-deck.js # レイアウト切替・ペイン並べ替え・デッキ保存/復元
│ ├── 04-sessions.js # セッション起動/kill・attention 検知・PTY ルーティング
│ ├── 05-diff.js # diff ドロワー(merge / PR)
│ ├── 06-keys-palette.js # ⌘ショートカット・リネーム・⌘K パレット
│ ├── 07-overlays-boot.js # プリセット管理・右クリックメニュー・update toast・boot
│ ├── 08-schedules.js # スケジュール起動(⏰ モーダル・schedule:fire ハンドラ)
│ └── styles.css
├── e2e/
│ └── smoke.cjs # CI 用ヘッドレス起動スモーク(3 OS・起動/preload/IPC/node-pty)
└── test/ # node --test 用ユニットテスト(164 cases)
kill では worktree とブランチを残す(作業保全優先。不要分は git worktree prune)。git diff (追跡ファイル)+ untracked 一覧。git merge --no-ff のみ(コミット済み履歴が対象。未コミット分はセッション内で commit してから)。コンフリクト時は git merge --abort で原状復帰。origin リモート+認証済み gh CLI が前提(push → gh pr create)。worktree 隔離セッションのみ対象。portable-pty(Rust)へ移植Issue / PR を歓迎します。1 PR = 1 トピック、npm test がグリーンであることをご確認ください。