本文へスキップ

エンタープライズプロファイル

English: Enterprise profile

Kurahi は汎用のエージェントランタイムから生まれたため、コンシューマー向けのチャットチャネル、個人向け OAuth ログイン、無料枠のデータフィードも引き継いでいました。業務での利用にはどれも不要で、セキュリティレビューでそれらを読む必要もあるべきではありません。リリース 2.2 から エンタープライズプロファイル を用意しています。

  • エンタープライズパッケージ(ランタイムバンドルと npm tarball):コアと、エンタープライズに分類された拡張だけを含みます。
  • オプションプラグイン:それぞれ別のアーカイブで、管理者が意図して導入・有効化します。
  • ランタイムガード:エンタープライズプロファイルでは、除外された拡張をプラグインディレクトリにコピーして有効化しても、ゲートウェイが読み込みを拒否し、監査ログに記録します。

分類は src/packaging/profiles/enterprise.json の 1 ファイルです。extensions/ のディレクトリごとに 1 項目あり、区分(tier)と理由を持ちます。ビルド、ランタイムガード、パッケージ検査はすべてこのファイルを読みます。項目のない拡張があるとテストが失敗するため、新しい拡張が分類されないままパッケージに入ることはありません。リポジトリから拡張は削除していません。プロファイルはパッケージングとランタイムの制御だけです。

含めるもの・含めないもの

「含めるもの・含めないもの」の見出し

エンタープライズ(同梱・許可)

「エンタープライズ(同梱・許可)」の見出し
拡張 理由
microsoft-365、entra、gmail 業務のメール、予定表、ファイル、ディレクトリ。既定は読み取り専用。Entra は OIDC サインインを提供します。
box、kintone、line-works 業務コネクタ。既定は読み取り専用、件数を制限したクエリ、項目の許可リスト。
freee、money-forward、smarthr 国内の会計・請求・人事コネクタ。読み取り専用。SmartHR は業務項目のみを返します。
office、legacy-analyzer Office 文書(PPTX、DOCX、XLSX)をプロジェクトに書き出す機能と、COBOL/JCL の解析。ローカルのみ。
scholar-sources Kurahi Scholars 向けの読み取り専用の研究メタデータ(arXiv、OpenAlex、Crossref、PubMed)。
a2a エンタープライズのエージェント基盤との Agent2Agent 相互運用。ゲートウェイ認証と署名付きエージェントメッセージの内側で動きます。
diagnostics-otel お客様自身のコレクターへの OpenTelemetry 送信。
watsonx-orchestrate、ibm-data IBM watsonx Orchestrate のエージェント呼び出し(許可リストのエージェントのみ、応答は信頼できない内容として扱う)と、watsonx.data・Db2 REST の読み取り専用クエリ(許可リスト、行数・バイト数の上限)。既定はオフ。
msteams お客様の Entra テナント内の Azure ボット経由の Teams。DM は既定でペアリング(オーナー承認)、グループチャットは許可リスト。
slack お客様が導入したアプリ経由の Slack ワークスペースと Enterprise Grid。DM は既定でペアリング。エンタープライズプロファイルでは、未設定のチャンネルポリシーは許可リストになります。
memory-core、llm-task ローカルのメモリ検索(既定のメモリスロット)、設定済みモデルで動く JSON 専用タスクツール。
health-watchdog、self-check、log-rotation ローカルの運用機能:監査付き死活監視、セキュリティ自己点検、ログ保持の上限。

Teams と Slack を含めるのは、どちらもお客様自身の業務テナントであり、承認なしにエージェントへ届く会話がないためです。DM で未知の送信者が来るとペアリングコードが発行され、オーナーの承認が必要です。チャンネルやグループチャットは許可リストに載っている必要があります。Slack では channels.slack.groupPolicy が未設定のときのランタイム既定値は open(メンション必須)でしたが、エンタープライズプロファイルでは allowlist です。設定ファイルに明示した値は引き続き優先されます。

オプション(別アーカイブ・明示的なオプトイン)

「オプション(別アーカイブ・明示的なオプトイン)」の見出し
拡張 パッケージに含めない理由
whatsapp 2.1.0 から別配布。依存する libsignal が GPL-3.0 のため。
memory-lancedb LanceDB のネイティブランタイム(約 250 MB)が必要。
ocr-space 文書の内容を無料枠の OCR.space クラウドに送信します。お客様のデータ処理レビューが必要です。
brave-search、opencorporates 独自のキーとライセンスを持つ外部 API。問い合わせ内容が社外に出ます。
libretranslate 既定の公開インスタンスには文書のテキストが届きます。自社ホストのサーバーを指定してください。
googlechat、mattermost、nextcloud-talk、matrix 業務でも使えるチャットですが、2.2 でレビューしたチャネルの範囲外です(Matrix はネイティブ暗号アドオンとフェデレーションも伴います)。
voice-call 電話と通話録音には別途レビューが必要です。

それぞれ kurahi-<id>-<version>.tgz として、隣に .sha256 を付けてビルドします(node scripts/pack-plugin.mjs --tier optional)。エンタープライズプロファイルでは、オプションプラグインは管理者が明示的にオプトインしたときだけ読み込まれます。plugins.entries.<id>.enabled: true、plugins.allow への記載、または(memory-lancedb の場合)plugins.slots.memory です。マニフェストにないプラグイン(お客様独自のプラグインなど)にも同じ規則が適用されます。

除外(同梱しない・ランタイムで拒否)

「除外(同梱しない・ランタイムで拒否)」の見出し
拡張 理由
telegram、discord、signal、imessage、bluebubbles、line、nostr、tlon、twitch、zalo、zalouser コンシューマー向けチャネル(個人アカウント、公開ネットワーク、配信)。業務向けの LINE は line-works です。
copilot-proxy、google-gemini-cli-auth、minimax-portal-auth、qwen-portal-auth 個人のサブスクリプションや個人向け OAuth ログインをモデルの認証情報に流用するもの。業務環境では契約済みの API キーを使います。
alpha-vantage、newsdata、wolfram-alpha、locationiq、open-meteo 個人向けブリーフィング用の無料枠データフィード。
circadian、proactive-triggers、memory-boot-inject ある非公開環境のペルソナ・継続性の機能。エージェントが自分から会話を始める機能は業務製品には不要です。
lobster、open-prose 同梱もレビューもしていない外部ツール(ワークフロー CLI、独自のテレメトリを持つスキルパック VM)に依存します。

すべての拡張の理由は、src/packaging/profiles/enterprise.json に原文のまま記載しています。

次の どちらか が設定されていればプロファイルが有効になり、一方で他方を無効にすることはできません。

  • 環境変数 KURAHI_PROFILE=enterprise(エンタープライズバンドルのランチャーは常に設定します)
  • 設定ファイルの profile: "enterprise"

両方を設定してください。ランチャーは通常の起動を、設定ファイルは Node で lib/kolo.mjs を直接起動した場合(ランチャーを通らない場合)をカバーします。

プロファイル有効時、プラグインローダーはプラグインのモジュールを読み込む前に判定します。

区分 標準プロファイル エンタープライズプロファイル
enterprise 通常の規則 通常の規則
optional、または分類なし 通常の規則 明示的なオプトイン(上記)がある場合のみ読み込む
excluded 通常の規則 設定内容や置き場所にかかわらず拒否

拒否されたプラグインは kurahi plugins list に理由付きの disabled として表示され、ゲートウェイは警告をログに出し、拒否 1 件ごとに監査ログへ 1 行を書きます(action plugin.refused、outcome denied、プラグイン ID、プロファイル、区分、由来、パス)。kurahi audit tail で確認でき、kurahi audit verify の対象にもなります。

エンタープライズのインストールは、エンタープライズのアセットにだけ更新されます。kurahi update は kolo-<version>-<os>-<arch>-enterprise.* を取得し、マニフェストがエンタープライズプロファイルでないバンドルは拒否します。

ターミナルウィンドウ
pnpm build
node scripts/bundle.mjs --profile enterprise --verify # kolo-<v>-<os>-<arch>-enterprise.tar.gz(Windows は .zip)
node scripts/npm-pack.mjs --profile enterprise --out <dir> # kurahi-<v>-enterprise.tgz
node scripts/pack-plugin.mjs --tier optional --out <dir> # オプションプラグインごとに kurahi-<id>-<v>.tgz

エンタープライズバンドルは次のように作られます。

  • エンタープライズ区分の拡張だけをコピーします。
  • コアとそれらの拡張の本番依存をインストールし、除外した拡張だけが必要とするパッケージを削除します(コアや同梱する拡張も必要とするものは残します)。
  • bundle-manifest.json に profile: "enterprise" と、除外した拡張とその理由を書きます。
  • ステージングしたツリーにパッケージ検査(下記)を実行し、指摘があればビルドを失敗させます。

一部の拡張は、コアのモジュールをソースのパスで読み込みます。パッケージに入るのはビルド済みのコア(dist/)でソースではないため、バンドルと npm tarball の両方に、ビルド済みモジュールを再エクスポートする小さな生成ファイルを src/ 以下に入れています。これがないとそれらのプラグインは読み込めません。拡張の import の参照先がパッケージにない場合、パッケージ検査は失敗します。

パッケージを自分で検証する

「パッケージを自分で検証する」の見出し
  1. 公開されたチェックサムと照合します:sha256sum -c --ignore-missing SHA256SUMS.txt

  2. 展開して bundle-manifest.json を確認します。profile が enterprise、extensions.included にはエンタープライズ区分の拡張だけが並び、extensions.omitted には残りの拡張それぞれの理由があります。ls lib/extensions でも同じ一覧になります。

  3. 同じタグのソースからパッケージ検査を実行します(CI は変更ごとに Linux、macOS、Windows で実行しています)。

    ターミナルウィンドウ
    node scripts/enterprise-check.mjs kolo-&lt;v>-linux-x64-enterprise.tar.gz

    次のいずれかがあると失敗します(終了コード 1)。

    • エンタープライズ区分でない拡張(excluded、optional、分類なし)
    • dist/ または拡張のソースにある非公開環境固有の識別子(scripts/family-internal-check.mjs のパターンと、レビュー済みの例外)
    • 強いコピーレフトのライセンス(GPL、AGPL、SSPL など。scripts/sbom.mjs の分類)を持つインストール済み依存
    • 同梱する拡張の静的 import で、参照先がパッケージにないもの

    弱いコピーレフトと不明なライセンスは警告として表示します。--strict を付けると不明なライセンスでも失敗します。--json で結果全体を出力します。

  4. 起動してプラグインを一覧します:kurahi plugins list --json。除外された拡張を <KOLO_HOME>/extensions/ にコピーして有効化すると、拒否とその監査ログを確認できます。

  • コアには、コアに組み込まれたコンシューマー向けチャネルのコード(dist/ 以下の Telegram、Discord、Signal、iMessage、LINE、WhatsApp Web のモジュールなど)とそのライブラリが残っています。これらはチャネルプラグインが登録したときだけ動作し、そのプラグインはパッケージに含まれず、ランタイムでも拒否されます。コアのビルドからモジュールを取り除く作業は今後の予定です。
  • 弱いコピーレフトのライブラリが残ります:libvips(LGPL-3.0、sharp 経由)と lightningcss(MPL-2.0)。動的リンクまたは無改変で使用しており、検査のたびに警告として表示されます。
  • npm tarball には node_modules がないため、依存のライセンスはバンドルで検査し、SBOM(node scripts/sbom.mjs)に記載します。
  • KURAHI_PROFILE はランタイムが読む環境変数です。あるシェルの環境だけで設定しても、別の場所から起動したサービスには適用されません。設定ファイルに profile: "enterprise" を書いてください。