# benchweave serve


Run a BenchWeave gateway locally (foreground; systemd Type=simple).


``` bash
benchweave serve [OPTIONS]
```


Wires the environment into :func:`app_entry.build` -- the same composition the integration suites boot -- and runs it under uvicorn in the FOREGROUND (`uvicorn.run` blocks; daemonization belongs to the service manager, which is why the unit is `Type=simple`). The production secret posture is enforced inside `build`: with `BENCHWEAVE_ENV=production` a default/absent `BENCHWEAVE_SECRET` refuses before anything touches disk.

Issue \#422 increment 1: the data-dir locator (`--data-dir` / `BENCHWEAVE_DATA_DIR`, or today's `BENCHWEAVE_DB` parent) also auto-bridges `<data-dir>/benchweave.env` into the environment, set-if-not-set, before `build()` -- the secret `setup` wrote to disk no longer needs the operator's grep/cut/export dance. A systemd `EnvironmentFile` still wins by construction (process environment first), and the file may only carry allowlisted service keys (:func:`benchweave.cli.env_file.serve_env_file_keys`); anything else refuses typed with the `env_file:` prefix.


<span class="gd-details-chevron" aria-hidden="true"></span>Full --help output


    Usage: benchweave serve [OPTIONS]

      Run a BenchWeave gateway locally (foreground; systemd Type=simple).

      Wires the environment into :func:`app_entry.build` -- the same composition
      the integration suites boot -- and runs it under uvicorn in the FOREGROUND
      (``uvicorn.run`` blocks; daemonization belongs to the service manager, which
      is why the unit is ``Type=simple``). The production secret posture is
      enforced inside ``build``: with ``BENCHWEAVE_ENV=production`` a
      default/absent ``BENCHWEAVE_SECRET`` refuses before anything touches disk.

      Issue #422 increment 1: the data-dir locator (``--data-dir`` /
      ``BENCHWEAVE_DATA_DIR``, or today's ``BENCHWEAVE_DB`` parent) also auto-
      bridges ``<data-dir>/benchweave.env`` into the environment, set-if-not-set,
      before ``build()`` -- the secret ``setup`` wrote to disk no longer needs the
      operator's grep/cut/export dance. A systemd ``EnvironmentFile`` still wins
      by construction (process environment first), and the file may only carry
      allowlisted service keys
      (:func:`benchweave.cli.env_file.serve_env_file_keys`); anything else refuses
      typed with the ``env_file:`` prefix.

    Options:
      --host TEXT      Bind address (loopback by default -- the gateway is local-
                       only).  [default: 127.0.0.1]
      --port INTEGER   Bind port.  [default: 8125]
      --data-dir PATH  At-rest data directory (holds state.sqlite + content/).
                       serve: this locates benchweave.env, whose allowlisted keys
                       are bridged into the environment set-if-not-set (explicit
                       process environment always wins; BENCHWEAVE_DB is derived
                       from the directory when unset).
      --help           Show this message and exit.


# Options


`--host: TEXT = 127.0.0.1`  
Bind address (loopback by default -- the gateway is local-only). Environment variable: `BENCHWEAVE_HOST`.

`--port: INTEGER = 8125`  
Bind port. Environment variable: `BENCHWEAVE_PORT`.

`--data-dir: PATH`  
At-rest data directory (holds state.sqlite + content/). serve: this locates benchweave.env, whose allowlisted keys are bridged into the environment set-if-not-set (explicit process environment always wins; BENCHWEAVE_DB is derived from the directory when unset). Environment variable: `BENCHWEAVE_DATA_DIR`.
