Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

NixOS

ZeroClaw は nix/module.nix でマルチインスタンス対応の NixOS モジュールを提供しています。これは services.restic.backups をモデルにしており、インターネットに公開されるプロセスに適したハードニングのデフォルト設定とともに、systemd 配下で 1 つ以上のエージェントを実行します。

パッケージ

このモジュールは ${pkgs.zeroclaw}/bin/zeroclaw daemon を呼び出します。pkgs.zeroclaw はまだ nixpkgs に含まれておらず、#5987 で追跡されています。これがマージされるまでは、バイナリを自分でビルドし、package オプションでモジュールにそのバイナリを指定してください。

nix

services.zeroclaw.instances.me.package =
  pkgs.callPackage ./zeroclaw.nix { };

同じ理由で、nix run github:zeroclaw-labs/zeroclaw はエージェントを起動しません。nix runapps.<system>.default を解決し、次に packages.<system>.default を解決しますが、この flake は apps を定義しておらず、その packages.default は(開発シェル用の)Rust ツールチェインであるため、このコマンドは ZeroClaw ではなくツールチェインの derivation を実行することになります。その他のプラットフォームでは、install.sh がサポートされている方法です。

単一インスタンス

services.zeroclaw.instances.<name> への登録が有効化のシグナルとなります。トップレベルの enable はありません。各インスタンスには、それぞれ専用の systemd ユニット、状態ディレクトリ、システムユーザーが割り当てられます。

nix

{ config, pkgs, ... }: {
  imports = [ ./path/to/zeroclaw/nix/module.nix ];

  age.secrets.zeroclaw-bot-token.file = ./secrets/zeroclaw-bot-token.age;

  services.zeroclaw.instances.me = {
    environmentFile = config.age.secrets.zeroclaw-bot-token.path;
    settings = {
      providers.models.anthropic.home.model = "claude-sonnet-4-6";
      agents.assistant = {
        model_provider = "anthropic.home";
        risk_profile = "assistant";
        channels = [ "telegram.home" ];
      };
      risk_profiles.assistant = { };
      channels.telegram.home = {
        enabled = true;
        bot_token = "$BOT_TOKEN";   # systemd $VAR、起動時に environmentFile から置換される
        allowed_users = [ "12345" ];
      };
    };
  };
}

settings~/.zeroclaw/config.toml を Nix の attrset としてミラーリングし、${dataDir}/config.toml(モード 0600)にレンダリングされます。シークレットは environmentFile 経由で渡され、settings を通ることはありません。ユニットの ExecStartPreenvsubst を実行することで $VAR の参照が起動時に解決され、/nix/store のコピーには平文が含まれないようになっています。設定スキーマ(セクションヘッダー、型/エイリアスの規約)は、他のすべてのプラットフォームと同一です。

複数のインスタンス

モジュールは attrsOf submodule 形式なので、1台のホスト上のN個のテナントは1個のテナントと同じように読めます。インスタンスは、正確に1個のインスタンスがユーザーを作成し、残りが createUser = false を設定する場合に、ユーザーを共有できます。

nix

services.zeroclaw.instances = {
  alice = { environmentFile = "/run/secrets/alice/identity.env"; settings = { /* … */ }; };
  bob   = { environmentFile = "/run/secrets/bob/identity.env";   settings = { /* … */ }; };
};

オプション

すべてのオプション項目(packageusergroupcreateUserdataDirsettingsenvironmentFileextraConfigbindReadOnlyPaths)とシークレットのパターンについては、nix/README.md に記載されています。serviceConfig フィールドを上書きするには、モジュールオプションではなく、標準的な NixOS のエスケープハッチを使用してください。

nix

systemd.services."zeroclaw-me".serviceConfig.MemoryMax = "512M";

次へ