Configuration reference¶
luplo has two configuration surfaces: a client-side one used by the CLI and MCP server, and a server-side one used only by the Remote-mode FastAPI app. They are deliberately separated — the server never imports the client module, so adding a field to one does not touch the other.
Client: .luplo file + env vars¶
Resolution order¶
Highest priority wins:
CLI flag (
--project,--actor,--db-url, …)Environment variable (
LUPLO_*).luplofile (walked up from the current working directory)Built-in defaults
.luplo file¶
TOML. Created by lp init, editable by hand:
[backend]
type = "local" # or "remote"
db_url = "postgresql://localhost/luplo"
server_url = "https://luplo.example.com" # only for remote
[project]
id = "myapp"
name = "MyApp"
[actor]
id = "<uuid4>"
name = "Ryan"
email = "ehanyul99@gmail.com"
[research]
ttl_days = 90 # expiry for research items
find_config_file() walks up from CWD, so any subdirectory of the
project inherits the root .luplo.
Environment variables (client)¶
Variable |
Replaces |
Notes |
|---|---|---|
|
|
Used in Local mode. |
|
|
Used in Remote mode. |
|
|
Override the active project. |
|
|
Override the active actor. |
Defaults¶
db_url:postgresql://localhost/luplobackend_type:localresearch_ttl_days:90
Server: env + luplo-server.toml¶
The Remote server (FastAPI, started via uvicorn luplo.server.app:app)
reads configuration via [pydantic-settings]. Priority:
Environment variables (
LUPLO_*).envfile in the working directory (auto-loaded by pydantic-settings)luplo-server.tomlin the working directoryDefaults
The server does not authenticate callers — it trusts the network layer in front of it. See Running the Remote server for the shape.
All server settings¶
Setting |
Env variable |
TOML key |
Default |
|---|---|---|---|
PostgreSQL URL |
|
|
|
Default attribution actor |
|
|
|
Start worker in lifespan |
|
|
|
Public base URL |
|
|
|
Attribution (X-Actor header)¶
Every write handler resolves the actor id in this order:
X-Actor: <uuid>on the request.LUPLO_DEFAULT_ACTOR_IDif set.HTTP 400 otherwise.
Reads do not require it. The actor referenced by X-Actor must exist
in the actors table; provision it with lp init or directly in SQL.