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 つ以上のエージェントを実行します。

パッケージ

上流のflakeはZeroClawをソースからビルドします。Nixの実験的機能であるnix-commandとflakesを有効にした状態で、システムサービスをインストールせずにCLIを確認してください:

nix run github:zeroclaw-labs/zeroclaw -- --version
nix run github:zeroclaw-labs/zeroclaw -- --help

デフォルトのパッケージは ZeroClaw CLI です。開発用ツールチェーンは nix develop を通じて別途提供されます。キャッシュがない状態でのパッケージのビルドには時間がかかる場合があります。ローカルのチェックアウトを確認するには:

nix build .#zeroclaw
./result/bin/zeroclaw --version
nix flake check

Ńnix run で CLI を実行しても、ログインシェルの PATH には追加されません。NixOS に永続的にインストールする場合は、Nixpkgs が提供する pkgs.zeroclaw を利用してください:

nix

environment.systemPackages = [ pkgs.zeroclaw ];

NixpkgsのパッケージバージョンはNixpkgsのpinに従いますが、上流のflakeは選択されたZeroClawのリビジョンに従います。両者は異なる場合があります。以下のモジュールはデフォルトでpkgs.zeroclawを使用し、zeroclaw daemonコマンドを起動します。別のパッケージを使用するには、システムflakeに本リポジトリを指すzeroclaw入力がある場合、services.zeroclaw.instances.<name>.packageを設定します(例: inputs.zeroclaw.packages.${pkgs.stdenv.hostPlatform.system}.zeroclaw)。

単一インスタンス

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";

次へ