メインコンテンツへ移動
AIチュートリアル

SkyDot セルフホスティングガイド:ゼロから構築する複数Dot AIワークスペース

SkyDotのアーキテクチャと主要機能を紹介し、ローカルインストール、モデル設定、HostまたはDockerの実行モード、デスクトップ版の接続、複数Dotの連携設定までを解説します。

SkyDot セルフホスティングガイド:複数Dot AIワークスペースの構築

SkyDot とは

SkyDot は Pi Agent Runtime を基盤とする、オープンソースでセルフホスト可能なマルチユーザー向け Agent ワークベンチです。複数の名前付き・設定可能な Dot を作成し、それぞれに異なる役割を担わせることができます。また、複数の Dot をグループチャットに参加させ、スケジュールタスク、Skills、MCP、Plugins、Memory によって長期的な作業能力を拡張できます。

単なるチャットページではありません。Workspace はファイル、セッション、メモリ、実行境界を分離し、Backend は認証、権限、キュー、スケジューリング、Provider、メッセージチャネルを処理します。Host または Docker Runner が Agent を実際に実行します。ユーザーの確認が必要なツール認可、デバイスリクエスト、タスクの進捗も、同じワークベンチに返されます。

SkyDot システムアーキテクチャ

コアアーキテクチャと実行境界

SkyDot はインターフェース、コントロールプレーン、実行プレーンを分離しており、個人利用にもチームでのセルフホスト運用にも適しています。

  • Backend:Node.js、TypeScript、Hono、SQLite、WebSocket を基盤とし、認証、永続化、キュー、スケジューリング、Provider、チャネル、認可を担当します。
  • Runner:Pi Agent Runtime を使用して実際の Agent タスクを実行します。ローカルの Host モードまたは非 root の Docker コンテナを選択できます。
  • Workspace:ファイル、Session、Memory、チャネルの紐付け、実行境界を決定します。
  • Web、PWA、Electron:React の業務フロントエンドを共有します。Electron Renderer はインターフェースのみを担当し、データベース、ファイルシステム、認証情報、Docker、shell/process 権限には直接アクセスしません。

あるレイヤーで許可されても、他の境界を自動的に越えられるわけではありません。チーム環境をデプロイする前に、権限マトリクスとセキュリティポリシーを確認してください。

主な機能

個人 Dot とセッション

各 Dot には、名前、アバター、Prompt、モデル、思考レベル、Skills、MCP、実行ポリシーを個別に設定できます。会話はストリーミング出力、Markdown、コードブロック、ファイル添付、中止、後続メッセージ、セッション復元に対応しています。

SkyDot 個人 Dot の会話

Workspace 間は相互に分離されており、同じインターフェースに入っただけでファイル、セッション、メモリ、チャネルの紐付け、実行権限が混在することはありません。実行時には Host モードまたは Container モードを選択できます。

複数 Dot のグループチャットと協業

ネイティブグループチャットを有効にすると、同じタイムラインで複数の Dot のメッセージ、タスク応答、進捗、結果を確認できます。明示的なメンションと制御された委任によって協業範囲を管理します。再接続またはページの再表示では状態を読み取るだけで、新しいタスクが自動的に送信されることはありません。

SkyDot 複数 Dot の協業

グループチャットはデフォルトで無効です。ネイティブグループチャットを有効にするには SKYDOT_BOT_GROUPS=true を設定します。さらに Bot 間の協業実行を許可する場合は、SKYDOT_BOT_HANDOFFS=true も設定し、管理者が実行権限と呼び出し予算を構成する必要があります。

スケジュールタスク、Skills、Memory

Scheduler は Cron、固定間隔、一回限りのタスクに対応し、即時実行、一時停止、キャンセル、実行履歴、結果の配信を提供します。Skills、MCP、Plugins は一元管理し、Dot ごとに有効範囲を設定できます。

Memory は Workspace 単位で事実、好み、決定事項、経験、フォローアップ項目を保存し、検索、新規作成、編集、削除、バージョン履歴に対応しています。Session は具体的な会話コンテキストを保存し、Workspace Memory は複数の Session で再利用できる知識を保存します。両者は独立しています。

インストール前の準備

  • Node.js:22.19 以上。Node.js 24 LTS を推奨します。Pi Durable ストレージには Node.js 組み込み SQLite が必要です。
  • npm:Node.js に付属し、各サブプロジェクトの依存関係のインストールに使用します。
  • Docker:Container 実行モードを使用する場合のみ必要です。
  • Model Provider:実際の AI 会話には利用可能なモデル Provider が必要です。API Key がなくても、先にインターフェースを起動できます。
  • GNU Make:任意。型チェック、バックアップ、運用コマンドに使用します。

SkyDot をゼロからインストールする

1. リポジトリをクローンして依存関係をインストール

ターミナルで次のコマンドを実行し、メインプロジェクト、Web フロントエンド、Agent Runner の依存関係をそれぞれインストールします。

git clone https://github.com/2SinceJuly/SkyDot.git
cd SkyDot

npm install
npm --prefix web install
npm --prefix container/agent-runner install

2. ビルドしてサービスを起動

依存関係のインストール後、すべてのコンポーネントをビルドして Backend を起動します。

npm run build:all
npm start

http://127.0.0.1:3000 を開き、画面の指示に従って管理者の初期設定を完了します。Provider とメッセージチャネルは後から設定できますが、モデル設定がない場合、実際の AI 会話は実行できません。

3. 開発環境を起動

開発時は Backend と Vite Web Client を同時に起動できます。

npm run dev:all

開発ページのデフォルトアドレスは http://127.0.0.1:5173 です。ローカルでインターフェースをすばやく確認するだけなら、ループバックアドレスのログイン不要 Demo を使用できます。

SKYDOT_DEMO_OPEN=true PROVIDER_SETUP_SKIPPED=true npm start

公開ネットワークや信頼できないネットワークでは Demo モードを有効にしないでください。このモードの詳細な制限については、リポジトリの DEMO.md を参照してください。

モデル Provider を設定

SkyDot では、まずインターフェースの初期設定を完了し、その後設定画面で Provider を補完できます。実際のモデルに接続するには、対応する API Key、Session Cookie、その他の認証情報を準備し、認証情報をスクリーンショット、コマンドライン履歴、Git リポジトリに記録しないようにしてください。

サードパーティの OpenAI Completions API を使用する場合は、Provider のカスタム環境変数に次を設定します。

SKYDOT_MODEL_API=openai-completions

デフォルトのプロトコルは anthropic-messages です。この設定は通常の Dot 会話における Host と Container Runner の両方で使用されます。

Agent 実行モードを選択

Host モード

Host モードはローカルの Runner を直接使用し、Docker は不要です。ローカル開発や迅速な検証に適しています。実行権限は引き続き Workspace、ユーザー、実行ポリシーによって制限されます。

Container モード

Container モードでは Docker を利用可能にし、Agent Runner イメージを準備する必要があります。デフォルトのイメージは 2sincejuly/skydot-agent:latest です。現在のソースからビルドすることもできます。

docker build --pull -t 2sincejuly/skydot-agent:latest container

別のイメージを使用する場合は SKYDOT_CONTAINER_IMAGE を設定できます。互換設定項目は CONTAINER_IMAGE です。サービスとイメージのビルドは同じ Docker daemon に接続する必要があります。make start または make dev はローカルイメージを優先して使用し、存在しない場合は取得を試みます。

デスクトップ版 Electron を実行

Backend と Vite がすでに起動している場合は、別のターミナルで Electron を実行できます。

SKYDOT_RENDERER_URL=http://127.0.0.1:5173 npm run desktop:dev

Backend がビルド済みのページを提供している場合は、直接実行することもできます。

npm run desktop:dev

Electron はリモート Backend に接続することもできます。

SKYDOT_SERVER_URL=https://your-skydot.example.com npm run desktop:dev

ローカルでのパッケージ化には次のコマンドを使用できます。

npm run desktop:package:dir
npm run desktop:package

プロジェクトではデフォルトで macOS arm64 のパッケージ設定を提供し、Windows と Linux のターゲットも維持しています。正式リリース前に、対象プラットフォーム向けの署名と公証を設定する必要があります。

主要な環境変数

  • WEB_PORT:Backend の待ち受けポート。デフォルト値は 3000 です。
  • SKYDOT_SERVER_URL:Electron が接続する Backend のアドレス。デフォルト値は http://127.0.0.1:3000 です。
  • SKYDOT_RENDERER_URL:Electron が読み込む Renderer のアドレス。
  • SKYDOT_CONTAINER_IMAGE:Agent Runner のコンテナイメージ。
  • PROVIDER_SETUP_SKIPPED:システム設定ファイルがない場合に Provider のセットアップをスキップします。
  • SKYDOT_BOT_GROUPS:ネイティブの複数 Dot グループチャットを有効にします。
  • SKYDOT_BOT_HANDOFFS:グループチャット内の Bot 間協業実行を有効にします。
  • SKYDOT_PERSONAL_GOALS:個人 Goal の実験機能を有効にします。

個人 Goal と Durable Runtime はデフォルトで無効です。通常のスケジュールタスクはこれらのスイッチに依存しません。具体的な実行条件については、Goals and Tasks ドキュメントを確認してください。

基本的な利用手順

  1. SkyDot にログインし、管理者の初期設定を完了します。
  2. 設定で利用可能な Model Provider を構成します。
  3. Dot を作成し、名前、Prompt、モデル、実行ポリシーを設定します。
  4. Dot に Workspace を選択し、ファイルとメモリの境界が想定どおりであることを確認します。
  5. 会話でタスクを送信し、ストリーミング出力、ツール認可、実行結果を確認します。
  6. 長期的に実行する必要がある場合は、Cron、固定間隔、または一回限りのタスクを作成します。
  7. 複数の役割で協業する必要がある場合は、グループチャット機能を有効にし、Bot の協業権限を明確に設定します。

たとえば、コード分析を担当する Dot と資料整理を担当する Dot を作成し、同じグループチャットに追加できます。明示的なメンションや制御された委任によってタスクを割り当てることで、ユーザーは共有タイムライン上で進捗と結果を確認しながら、それぞれの Workspace の権限境界を維持できます。

運用とセキュリティに関する推奨事項

実行時データはデフォルトでリポジトリの data/ ディレクトリに保存されます。ここには SQLite、Workspace、Session、Memory、実行設定が含まれます。このディレクトリは Git の対象外ですが、バックアップには機密設定やデータベースが含まれる可能性があるため、元データと同等に保護してください。

  • make status を使用して Backend、ログ、Docker の状態を確認します。
  • make stop を使用して、現在のポートで稼働している SkyDot サービスを停止します。
  • make backup を使用して、実行時データのバックアップを作成します。
  • make restore FILE=... を使用して、指定したバックアップを復元します。
  • make typecheck を使用して、Backend、Web、Agent Runner、ドキュメントのチェックを実行します。
  • npm test -- --run を使用して Vitest テストを実行します。

リモートデプロイでは HTTPS と WSS を使用し、リバースプロキシ、Cookie、アクセス制御を適切に設定してください。Renderer、データベース、Docker daemon を信頼できないユーザーに直接公開しないでください。また、手間を省くためにパブリック Demo を有効にしないでください。

さらなる拡張

SkyDot の能力ライブラリは、組み込み、ホストマシン、プロジェクト、ユーザー、Workspace、Plugin などのソースをサポートします。Agent の実行前に有効な能力一覧が生成され、ポリシーに基づいて Prompt、リソース、コンテキストに注入されます。プロジェクトは Plugin のバージョンスナップショット、Subagents、Host と Container で一貫した能力境界もサポートしています。

メッセージの入口については、Web、PWA、Electron が同じ業務フロントエンドを共有し、Feishu、Telegram、QQ、DingTalk、WeChat、Discord、WhatsApp などのチャネルに接続できます。チャネルは指定した Workspace または Session にバインドできます。

まとめ

SkyDot は、複数の Dot による対話、Workspace の分離、Agent の実行、スケジュールタスク、拡張機能、チーム権限を、1 つのセルフホスト型ワークベンチに統合します。本稿に従って Node.js 環境の準備、依存関係のインストール、ビルドと起動、Provider の設定を完了すれば、まず個人用 Dot を実行し、その後 Docker、Electron、グループチャット、Scheduler、Skills、MCP、Memory などの機能を段階的に有効化できます。

プロジェクトは現在も継続的に開発されているため、実際のモデル、Docker、外部チャネル、リモートデプロイには、それぞれの認証情報と実行環境が必要です。Goal、Durable、Cloud Runtime などの実験的な機能も、デフォルトで有効になっている機能とみなさないでください。