Skiller — エージェントガイダンス
Skiller は、複数のエージェント(Claude Code、Cursor、Copilot CLI など)向けに AI エージェントスキル のインストール、同期、編集を行うための クロスプラットフォームデスクトップアプリ (Electron) です。バンドル ID: com.beautyfree.skiller。
スタック
| レイヤー | 技術 |
|---|---|
| メイン / ネイティブ | Electron (src/electron-main/index.ts)、Node 20 |
| UI | React 19、Vite 7 (ルート src/mainview)、Tailwind CSS 4、react-router-dom |
| API | tRPC over HTTP on 127.0.0.1 + main→renderer イベント用 ipcMain プッシュチャネル |
| ビルド | electron-vite (dev + バンドル) + electron-builder (パッケージング、署名、自動アップデート) |
| アップデーター | electron-updater (GitHub Releases、latest-*.yml + blockmaps) |
リポジトリ構成
| パス | 役割 |
|---|---|
src/electron-main/ | Electron メインプロセス: BrowserWindow、トレイ、tRPC サーバー、macOS vibrancy、プラットフォームアダプター |
src/preload/ | contextBridge — window.api.{invoke,on,platform} をレンダラーに公開 |
src/main/ | プラットフォーム非依存のメインサイドコード: スキルウォッチャー、tRPC ルーター、マーケットプレイスキャッシュ、アプリアップデータラッパー、設定、スキャナー |
src/mainview/ | Vite アプリ: App.tsx、ページ、コンポーネント、index.html、CSS トークン |
src/shared/ | メインとレンダラー間で共有される型 / RPC スキーマ(AppPlatform インターフェースを含む) |
agents/ | バンドルされたエージェントメタデータ(electron-builder.yml の extraResources でアプリにコピー) |
assets/icons/ | ランタイムアイコン: AppIcon.iconset/、app.icns、app.ico、app/icon-512.png |
assets/icons/Skiller.icon/ | ソースのみ (Icon Composer): scripts/build-app-icons.py が Assets/Image.png を icon.json 経由で読み取り |
build-resources/ | Hardened Runtime 用 entitlements.mac.plist |
scripts/ | build-app-icons.py、normalize-skiller-icon-layer.py、repack-dmg.sh |
docs/DEVELOPMENT.md | セットアップ、HMR、署名、CI、DMG 再パッケージ — リリース/署名を変更する前に必ず読んでください |
DESIGN.md | UI トークンとプロダクトデザインメモ |
AppIcon.iconset/、app.icns、app.ico、app/icon-512.png 配下の生成アイコンは 手動で編集しないでください — ソースから再生成してください(以下参照)。
コマンド
bun install
開発
bun run dev— electron-vite dev: main + preload を監視、レンダラー用に Vite をポート 5180 で起動 (HMR)。Electron ウィンドウが Vite URL を読み込んで開きます。bun run dev:debug—devと同じですがAGENTSKILLS_DEVTOOLS=1が設定され(レンダラーの DevTools が起動時に開く)。
チェック
bun run typecheck— レンダラーはtsc --noEmit、main/preload はtsc -p tsconfig.node.json --noEmit。
プロダクションバンドル(web + main + preload)
bun run build—electron-vite build→out/{main,preload,renderer}/。electron-builderによって使用されます。
プラットフォームインストーラー(ターゲット OS 上で実行。electron-builder はネイティブモジュールをクロスコンパイルしません)
bun run dist:mac—electron-vite build && electron-builder --mac && bash scripts/repack-dmg.shbun run dist:win—electron-vite build && electron-builder --winbun run dist:linux—electron-vite build && electron-builder --linux
署名用の環境変数とアーティファクトの場所については docs/DEVELOPMENT.md を参照してください。
アイコン
- 正規レイヤーを編集:
assets/icons/Skiller.icon/Assets/Image.png(必要に応じてpython3 scripts/normalize-skiller-icon-layer.pyを実行)。 - プラットフォームアセットを再生成:
python3 scripts/build-app-icons.py
AppIcon.iconset/、app.ico、app.icns、app/icon-512.pngを更新します。
macOS DMG のスタイリングはassets/icons/app.icnsをscripts/repack-dmg.sh経由で使用します。
エージェントに関する規約
- スクリプトやローカル実行には Bun を優先する (
bun、bunx)。Electron のメインプロセスは Node (Electron にバンドルされた Node 20) で動作するため、Node 互換の API のみ使用してください。 - UI 文字列(ユーザー向けコピー):
src/mainview/i18n/以下にキーを追加(英語はen.ts)。コードコメントは 英語 で記述してください。 - 既存のパターンに従う:
src/mainviewからの@/インポート(electron.vite.config.ts/tsconfig.jsonを参照)。 - スコープの拡大を避ける: タスクで必要でない限り、
node_modules/や無関係なマーケティング専用パスは変更しないでください。 - RPC または共有型の変更後は、メイン ハンドラー (
src/main/rpc-handlers.ts) とレンダラーの呼び出し元の両方が整合性を保つようにしてください(src/shared/またはローカルスキーマモジュール)。 - ネイティブ Node モジュール (
better-sqlite3) は、Electron の ABI に対して再ビルドするためにelectron-builder install-app-depsが必要です。bun installだけでは再ビルドされません。
環境変数(非網羅的)
| 変数 | 目的 |
|---|---|
AGENTSKILLS_TRPC_PORT | tRPC HTTP ポート(デフォルト 17888、競合時は +48 にフォールスルー) |
AGENTSKILLS_DEVTOOLS | 起動時にレンダラーの DevTools を自動的に開く(開発時のみ) |
AGENTSKILLS_DISABLE_WINDOW_BLUR | 1 → 設定でオンになっていても macOS の vibrancy を強制オフにする |
CSC_NAME、APPLE_API_KEY、APPLE_API_KEY_ID、APPLE_API_ISSUER、APPLE_ID、APPLE_APP_SPECIFIC_PASSWORD、APPLE_TEAM_ID | macOS の署名 + 公証。docs/DEVELOPMENT.md を参照。 |
関連資料
README.md— 製品概要とインストールリンク。docs/DEVELOPMENT.md— 開発、DMG、アップデーター、GitHub Actions リリース、およびdocs/ランディングページの GitHub Pages について。