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 run は apps.<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 を通ることはありません。ユニットの ExecStartPre が envsubst を実行することで $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 = { /* … */ }; };
};
オプション
すべてのオプション項目(package、user、group、createUser、dataDir、settings、environmentFile、extraConfig、bindReadOnlyPaths)とシークレットのパターンについては、nix/README.md に記載されています。serviceConfig フィールドを上書きするには、モジュールオプションではなく、標準的な NixOS のエスケープハッチを使用してください。
nix
systemd.services."zeroclaw-me".serviceConfig.MemoryMax = "512M";
次へ
- サービス管理: ZeroClaw が非 Nix ホスト上で生成する systemd ユニット
- プロバイダー → 設定: 設定スキーマの
settingsは次を反映します