LIGHTHOUSE CLI
lighthouse Quickstart
This is the shortest path from a fresh checkout to a validated local run of the Lighthouse deployment pipeline.
Table of Contents
Install
From the repository root:
python -m pip install -e .
That installs the lighthouse command into the active Python
environment.
Runtime Layout
By default, the CLI runs under:
~/.lighthouse/
Important subdirectories:
config/command-specific config files such aslighthouse.ymlandharbor.ymlcache/repos/cloned repositoriesstates/per-run state snapshotslogs/append-only run logs
You can override the runtime root with --run-dir.
Configure
Start from the example files:
Copy them into:
~/.lighthouse/config/
The config directory now supports separate command-specific files:
lighthouse.ymlorlighthouse.yamlforLIGHTHOUSE:harbor.ymlorharbor.yamlforHARBOR:
GLOBAL is reserved for future shared settings, but the current
command loaders do not scan global.yml.
If you want weighted-random post ratings, fill in the optional
LIGHTHOUSE.RATINGS block with your OpenRouter credentials, model,
retry budget, and prompt.
If you want deploys to purge Cloudflare automatically, fill in the
optional LIGHTHOUSE.CLOUDFLARE block with the target ZONE_ID and
API token.
If you want local-build and remote-deploy separation for the static
site, fill in the optional LIGHTHOUSE.REMOTE block with either the
local or remote role. The local role uses SSH and SCP to upload and
trigger deployment on the remote host, bootstraps the remote
lighthouse-cli checkout, and syncs the remote runtime config before
invoking remote deployment.
If portable content metadata differs between local and remote, the CLI
will stop and ask you to type local or remote before it continues.
RSS feed policy also lives in config. The LIGHTHOUSE.RSS block
controls whether feeds are emitted and the minimum combined post
rating required for an item to appear. Keep
UPDATED_DIFF_RATING_THRESHOLD at <= 0 to use the mechanical
updated-post path without an additional LLM pass.
If your site repo contains resume.tex, make sure make4ht and
latexmk are installed so the CLI can generate the embedded HTML
resume fragment and downloadable PDF artifact.
If you want to use Harbor, fill in HARBOR: with:
- exactly one Harbor source mode:
SOURCE_DIR- or
CLONE_URL+BRANCH
- Harbor runtime and deploy roots
- Harbor
DATABASE_URL - Harbor bind host/port
- embedded OIDC config for local e2e
- docked apps and their config-file paths
For production-facing Harbor testing, point the schedule app config at a
normal PostgreSQL database on your local cluster. Harbor apps do not
read apps/.env; Harbor passes each app a config file path and the app
loads database settings from that file. The todo app remains useful as
an e2e-only validation app.
Validate
Validate only the merged configuration:
lighthouse validate --config-only
Run the full pre-build validation:
lighthouse validate
Check whether the current environment supports the configured feature set:
lighthouse check-deps
Force the run to ignore saved rating metadata and treat the next build as fresh:
lighthouse validate --fresh
Clear the cached checkouts if you want the next run to re-clone every configured repository:
lighthouse clean
Narrow that to one target if needed:
lighthouse clean --target lighthouse
lighthouse clean --target harbor
Build or Deploy
Build without deployment:
lighthouse build
Force a full rerating pass during the build:
lighthouse build --fresh
Deploy a new release:
lighthouse apply
Serve a local build directly:
lighthouse local 4000
local ignores DEPLOY_ROOT; it only builds and serves the site from
the local cache.
Build a remote deployment artifact locally:
lighthouse remote build
Upload the most recent artifact to the configured remote cache:
lighthouse remote send
Trigger remote deployment from the already-uploaded artifact:
lighthouse remote apply
Build Harbor and its docked apps:
lighthouse build --target harbor
Validate Harbor config only:
lighthouse validate --target harbor --config-only
Deploy Harbor and restart or install the Harbor user service when the Harbor target changed:
lighthouse apply --target harbor
Clone-backed Harbor app updates participate in the Harbor apply fingerprint, so app-only repo changes also trigger Harbor redeploy.
Initialize Harbor’s Postgres-backed mutable state:
lighthouse harbor migrate-db
Run Harbor locally on its configured localhost port:
lighthouse harbor local
Override the Harbor localhost port for one run:
lighthouse harbor local --port 5090
Inspect Harbor runtime status:
lighthouse harbor status
lighthouse harbor apps
lighthouse harbor ps
Manage Harbor users and direct permissions:
lighthouse harbor add-user Alice_User --name "Alice Example" --email alice@example.test
lighthouse harbor set-password alice_user
lighthouse harbor list-permissions
lighthouse harbor list-all-permissions
lighthouse harbor add-permissions alice_user todo.write
lighthouse harbor delete-permissions alice_user todo.write
lighthouse harbor delete-user alice_user
HARBOR.OIDC.EMBEDDED_USERS are bootstrap-only seed users. After
lighthouse harbor migrate-db initializes the Harbor database, Harbor
reads mutable users, permissions, preferences, and maintenance state
from Postgres instead of YAML. Once the Harbor database is initialized,
it is safe to remove EMBEDDED_USERS from Harbor config.
Harbor normalizes canonical usernames to lowercase and only allows
a-z, 0-9, _, and -. The raw username you provide is preserved as
the display name unless you set DISPLAY_USERNAME explicitly in
Harbor config.