lighthouse-cli 0.17.0__tar.gz → 0.17.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. {lighthouse_cli-0.17.0/lighthouse_cli.egg-info → lighthouse_cli-0.17.1}/PKG-INFO +1 -1
  2. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/README.md +23 -22
  3. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/__init__.py +2 -2
  4. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/__main__.py +1 -1
  5. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/agents.py +14 -14
  6. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/builds.py +5 -5
  7. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/collectors.py +7 -7
  8. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/connect.py +11 -11
  9. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/connections.py +9 -9
  10. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/evals.py +8 -8
  11. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/kb.py +8 -8
  12. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/language.py +3 -3
  13. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/limits.py +3 -3
  14. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/login.py +6 -6
  15. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/models.py +4 -4
  16. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/offline.py +69 -10
  17. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/runs.py +7 -7
  18. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/spend.py +6 -6
  19. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/stack.py +4 -4
  20. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/terms.py +3 -3
  21. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/whoami.py +4 -4
  22. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/config.py +1 -1
  23. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/credentials.py +2 -2
  24. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/device.py +1 -1
  25. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/exits.py +1 -1
  26. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/flags.py +2 -2
  27. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/i18n.py +1 -1
  28. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ar.json +10 -7
  29. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/de.json +10 -7
  30. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/en.json +10 -7
  31. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/es.json +10 -7
  32. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/fr.json +10 -7
  33. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ga.json +10 -7
  34. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/it.json +10 -7
  35. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ja.json +10 -7
  36. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/nl.json +10 -7
  37. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/pt.json +10 -7
  38. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/zh-Hans.json +10 -7
  39. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/locales/zh-Hant.json +10 -7
  40. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/main.py +20 -5
  41. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/out.py +1 -1
  42. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/sealing.py +1 -1
  43. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1/lighthouse_cli.egg-info}/PKG-INFO +1 -1
  44. lighthouse_cli-0.17.1/lighthouse_cli.egg-info/entry_points.txt +3 -0
  45. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/pyproject.toml +5 -3
  46. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_collectors.py +1 -1
  47. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_commands.py +10 -10
  48. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_connect_finav.py +1 -1
  49. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_connect_library.py +1 -1
  50. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_dev_surface.py +10 -10
  51. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_golden.py +4 -4
  52. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_i18n.py +1 -1
  53. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_installers.py +21 -0
  54. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_offline.py +71 -19
  55. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_sealing.py +7 -7
  56. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_stack.py +1 -1
  57. lighthouse_cli-0.17.1/tests/test_version.py +63 -0
  58. lighthouse_cli-0.17.0/lighthouse_cli.egg-info/entry_points.txt +0 -2
  59. lighthouse_cli-0.17.0/tests/test_version.py +0 -19
  60. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/LICENSE +0 -0
  61. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/NOTICE +0 -0
  62. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/commands/__init__.py +0 -0
  63. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/http.py +0 -0
  64. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse/py.typed +0 -0
  65. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/SOURCES.txt +0 -0
  66. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/dependency_links.txt +0 -0
  67. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/requires.txt +0 -0
  68. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/top_level.txt +0 -0
  69. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/setup.cfg +0 -0
  70. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_ci_credential.py +0 -0
  71. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_connect_erp_hr.py +0 -0
  72. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_fixtures.py +0 -0
  73. {lighthouse_cli-0.17.0 → lighthouse_cli-0.17.1}/tests/test_plumbing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lighthouse-cli
3
- Version: 0.17.0
3
+ Version: 0.17.1
4
4
  Summary: The LightHouse command line: sign in, connect your estate, deploy agents, watch runs
5
5
  License-Expression: Apache-2.0
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,4 +1,4 @@
1
- # The `lighthouse` command line for LightHouse™
1
+ # The `lighthouse-ai` command line for LightHouse™
2
2
 
3
3
  LightHouse from a terminal: sign in through the browser, see what is connected,
4
4
  read spend and limits, scaffold an agent, follow the runs. In the manner of the
@@ -6,10 +6,10 @@ Stripe CLI — one command to install, one to sign in, and everything else
6
6
  scriptable.
7
7
 
8
8
  ```sh
9
- brew install atlantic-agentic-labs/tap/lighthouse # or npm, pip, curl (below)
10
- lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
11
- lighthouse whoami
12
- lighthouse spend --by model --json | jq '.rows[0]'
9
+ brew install atlantic-agentic-labs/tap/lighthouse-ai # or npm, pip, curl (below)
10
+ lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
11
+ lighthouse-ai whoami
12
+ lighthouse-ai spend --by model --json | jq '.rows[0]'
13
13
  ```
14
14
 
15
15
  ## Why Python
@@ -36,7 +36,7 @@ and the CLI ships as packages only.
36
36
  | Route | Command | Platforms |
37
37
  |---|---|---|
38
38
  | pipx or pip | `pipx install lighthouse-cli` (or `pip install lighthouse-cli`) | Linux, macOS, Windows |
39
- | Homebrew | `brew install atlantic-agentic-labs/tap/lighthouse` | macOS, Linux (`installers/lighthouse.rb`) |
39
+ | Homebrew | `brew install atlantic-agentic-labs/tap/lighthouse-ai` | macOS, Linux (`installers/lighthouse-ai.rb`) |
40
40
 
41
41
  **Nothing is published yet.** From a clone:
42
42
 
@@ -51,12 +51,12 @@ credential is stored for PyPI.
51
51
  ## Signing in
52
52
 
53
53
  ```
54
- $ lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
54
+ $ lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
55
55
 
56
56
  Your pairing code is: WXKM-7T4P
57
57
  Approve it at https://t7m2kqx9vbn.atlanticagenticlabs.com/device
58
58
  Press Enter to open the browser, or Ctrl-C to stop…
59
- Signed in to Example Air as ops@example.test (client_admin).
59
+ Signed in to Example Org as ops@example.test (client_admin).
60
60
  ```
61
61
 
62
62
  A device code, exactly as `stripe login` does it. The person approves in their
@@ -68,8 +68,8 @@ the repository, not in a dotfile, not in an environment file. One entry per
68
68
  host, so you can be signed in to several tenants at once:
69
69
 
70
70
  ```sh
71
- lighthouse whoami --profiles
72
- lighthouse logout --all # revokes at the service, then forgets
71
+ lighthouse-ai whoami --profiles
72
+ lighthouse-ai logout --all # revokes at the service, then forgets
73
73
  ```
74
74
 
75
75
  **What the credential can do** is in
@@ -99,9 +99,9 @@ spend-report:
99
99
  # LIGHTHOUSE_ACCESS_CLIENT_SECRET are masked CI/CD variables.
100
100
  script:
101
101
  - pip install -q lighthouse-cli
102
- - lighthouse whoami --json
103
- - lighthouse evals list --fail-below 0.8 --json
104
- - lighthouse spend --json > spend.json
102
+ - lighthouse-ai whoami --json
103
+ - lighthouse-ai evals list --fail-below 0.8 --json
104
+ - lighthouse-ai spend --json > spend.json
105
105
  ```
106
106
 
107
107
  **Why two credentials.** Every tenant host sits behind Cloudflare Access except
@@ -115,7 +115,7 @@ service token is missing or wrong and names the two variables.
115
115
  token (`lhat-...`), but that expires after **eight hours** and is not refreshed
116
116
  under the variable: there would be nowhere to put the new one. A machine key
117
117
  does not expire by time and has no refresh; revoke it on the Keys page. A
118
- machine key has no person behind it, so `lighthouse tokens` says so rather than
118
+ machine key has no person behind it, so `lighthouse-ai tokens` says so rather than
119
119
  failing, and `whoami` shows the key's kind.
120
120
 
121
121
  When `LIGHTHOUSE_TOKEN` is set, the CLI reads and writes **no** credential
@@ -125,7 +125,7 @@ store at all.
125
125
  keychain with the delegated token:
126
126
 
127
127
  ```sh
128
- printf '%s\n' "$ACCESS_SECRET" | lighthouse login --access-client-id "$ACCESS_ID" \
128
+ printf '%s\n' "$ACCESS_SECRET" | lighthouse-ai login --access-client-id "$ACCESS_ID" \
129
129
  --access-client-secret-stdin
130
130
  ```
131
131
 
@@ -156,6 +156,7 @@ a terminal, and when `CI`, `NO_COLOR` or `TERM=dumb` is set.
156
156
  | `runs export <run> [--format json\|pdf] [-o file]` | one run's content-free export, as JSON or a branded PDF (contract 1.32); audited |
157
157
  | `telemetry import <bundle>`, `telemetry status --deployment D` | upload a telemetry bundle from a deployment with no network path, and see the batches held and missing (contract 1.33; client_admin or the `offline` scope) |
158
158
  | `commands export --deployment D --out <file>` | the waiting commands as a signed command file for the deployment's `apply-file` (contract 1.33); audited |
159
+ | `commands import-results <answers.json>` | upload the signed answers the deployment's `apply-file --results` wrote; each is verified and matched to an exported command (contract 1.35); audited |
159
160
  | `spend` | spend by day, model, pack, agent or connection; the forecast; the estimated savings |
160
161
  | `limits` | the limits in force, and whether the engines applied them |
161
162
  | `terms` | the commercial terms in force |
@@ -166,7 +167,7 @@ a terminal, and when `CI`, `NO_COLOR` or `TERM=dumb` is set.
166
167
  pass, or its metric is below the threshold or missing (it fails closed), so
167
168
  a pipeline can evaluate, then deploy only what passed. Deploying and running
168
169
  an evaluation need a person's delegated token with the `deploy` scope
169
- (`lighthouse login --scope "telemetry:read agents:read deploy"`, eight hours,
170
+ (`lighthouse-ai login --scope "telemetry:read agents:read deploy"`, eight hours,
170
171
  in `LIGHTHOUSE_TOKEN`); a machine key reads but never deploys or spends.
171
172
 
172
173
  ```yaml
@@ -174,8 +175,8 @@ release:
174
175
  image: python:3.13-slim
175
176
  script:
176
177
  - pip install -q lighthouse-cli
177
- - lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8 --json
178
- - lighthouse agents deploy research:summary --version "$CI_COMMIT_TAG" --wait --json
178
+ - lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8 --json
179
+ - lighthouse-ai agents deploy research:summary --version "$CI_COMMIT_TAG" --wait --json
179
180
  ```
180
181
 
181
182
  `agents deploy --wait` exits 0 when the version is current, 1 when the
@@ -188,15 +189,15 @@ A rate limit (`429`) is waited out and retried by the CLI itself.
188
189
  **Language.** `--lang <tag>` (or `LIGHTHOUSE_LANG`) picks the language of help,
189
190
  prompts, errors and table headers for one run: `en` (British English, the
190
191
  default and the source), `fr`, `de`, `es`, `it`, `pt`, `nl`, `ga`, `ja`, `zh-Hans`, `zh-Hant` or `ar`. Without
191
- either, the CLI uses the language you set in the portal (kept by `lighthouse
192
- whoami` and `lighthouse language`), then `LANG`. `--json` is never translated: its
192
+ either, the CLI uses the language you set in the portal (kept by `lighthouse-ai
193
+ whoami` and `lighthouse-ai language`), then `LANG`. `--json` is never translated: its
193
194
  keys, values and the `error` code are the same in every language. The translations
194
195
  are machine-drafted, pending native review; the command-specific notes not yet in a
195
196
  catalogue are shown in English.
196
197
 
197
198
  `--json` on every command: one JSON document on standard output and **nothing
198
199
  else** — prose, prompts and progress go to standard error, so
199
- `lighthouse spend --json | jq` works while the command is still talking to you.
200
+ `lighthouse-ai spend --json | jq` works while the command is still talking to you.
200
201
  `runs tail --json` writes JSON Lines, one object per change.
201
202
 
202
203
  | Code | Meaning | What a pipeline should do |
@@ -204,7 +205,7 @@ else** — prose, prompts and progress go to standard error, so
204
205
  | 0 | it worked | carry on |
205
206
  | 1 | the command failed | stop; the message says why |
206
207
  | 2 | the command line was wrong | stop; fix the invocation |
207
- | 3 | not signed in, or the credential expired | `lighthouse login` |
208
+ | 3 | not signed in, or the credential expired | `lighthouse-ai login` |
208
209
  | 4 | signed in, but the role or scope does not reach this | ask an administrator |
209
210
  | 5 | refused for now: a rate limit, or a retryable 5xx | retry later |
210
211
  | 7 | it needed a person and none is there | stop |
@@ -1,6 +1,6 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """The `lighthouse` command line for LightHouse."""
3
+ """The `lighthouse-ai` command line for LightHouse."""
4
4
  from __future__ import annotations
5
5
 
6
- __version__ = "0.17.0"
6
+ __version__ = "0.17.1"
@@ -1,6 +1,6 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`python -m lighthouse`, the same as the `lighthouse` script."""
3
+ """`python -m lighthouse`, the same as the `lighthouse-ai` script."""
4
4
  from __future__ import annotations
5
5
 
6
6
  from lighthouse.main import run
@@ -1,13 +1,13 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse agents`: list, inspect, scaffold, deploy, read logs, roll back.
3
+ """`lighthouse-ai agents`: list, inspect, scaffold, deploy, read logs, roll back.
4
4
 
5
- lighthouse agents # every agent, with its state
6
- lighthouse agents show research:summary
7
- lighthouse agents init my-agent # scaffold agent.toml here
8
- lighthouse agents logs research:summary --limit 20
9
- lighthouse agents deploy research:summary --version 1.4.0 --wait
10
- lighthouse agents rollback research:summary --to 1.3.0
5
+ lighthouse-ai agents # every agent, with its state
6
+ lighthouse-ai agents show research:summary
7
+ lighthouse-ai agents init my-agent # scaffold agent.toml here
8
+ lighthouse-ai agents logs research:summary --limit 20
9
+ lighthouse-ai agents deploy research:summary --version 1.4.0 --wait
10
+ lighthouse-ai agents rollback research:summary --to 1.3.0
11
11
 
12
12
  **`init` is local and complete.** It writes an `agent.toml` next to you, with
13
13
  every field the pipeline will ask for and a comment on each: instructions, the
@@ -20,7 +20,7 @@ with `--trace`, one run's spans, which is what anybody actually wants when an
20
20
  agent misbehaves.
21
21
 
22
22
  **`deploy` and `rollback` make a released version current** (the `deploy`
23
- scope: sign in with `lighthouse login --scope "telemetry:read agents:read
23
+ scope: sign in with `lighthouse-ai login --scope "telemetry:read agents:read
24
24
  deploy"`). Each sends `release.add` for the agent and version; rolling back is
25
25
  the same with an earlier version (`--to`, or the last version that passed its
26
26
  gate before the current one). The service decides what happens:
@@ -47,7 +47,7 @@ from lighthouse.flags import inherited
47
47
  from lighthouse.main import Command, Context
48
48
  from lighthouse.out import Out
49
49
 
50
- SCAFFOLD = '''# An agent for LightHouse. `lighthouse agents deploy` reads this file.
50
+ SCAFFOLD = '''# An agent for LightHouse. `lighthouse-ai agents deploy` reads this file.
51
51
  #
52
52
  # Everything here is checked before an agent runs: the model policy against the
53
53
  # model library's evidence scores, the knowledge bases against what this tenant
@@ -63,7 +63,7 @@ instructions = """
63
63
  You are …
64
64
  """
65
65
 
66
- # Knowledge bases this agent may read, by index name (`lighthouse kb`).
66
+ # Knowledge bases this agent may read, by index name (`lighthouse-ai kb`).
67
67
  knowledge_bases = []
68
68
 
69
69
  # Tools, by name. Write access is a separate, named tool and sits behind an
@@ -142,8 +142,8 @@ def _init(ctx: Context) -> dict[str, Any]:
142
142
  hint="pass --force to overwrite it")
143
143
  target.write_text(SCAFFOLD.format(name=ctx.args.name))
144
144
  return {"ok": True, "wrote": str(target), "agent": ctx.args.name,
145
- "next": ["edit it", "lighthouse evals run <pack:card> --cap 5 --wait",
146
- "lighthouse agents deploy <pack:card> --version <version> --wait"]}
145
+ "next": ["edit it", "lighthouse-ai evals run <pack:card> --cap 5 --wait",
146
+ "lighthouse-ai agents deploy <pack:card> --version <version> --wait"]}
147
147
 
148
148
 
149
149
  def _logs(ctx: Context) -> dict[str, Any]:
@@ -165,10 +165,10 @@ def agents(ctx: Context) -> dict[str, Any]:
165
165
  return _logs(ctx)
166
166
  if which == "deploy":
167
167
  return _release(ctx, str(ctx.args.version), "deploy",
168
- ctx.args.reason or "deployed from the lighthouse CLI")
168
+ ctx.args.reason or "deployed from the lighthouse-ai CLI")
169
169
  if which == "rollback":
170
170
  return _release(ctx, ctx.args.to or _previous(ctx), "rollback",
171
- ctx.args.reason or "rolled back from the lighthouse CLI")
171
+ ctx.args.reason or "rolled back from the lighthouse-ai CLI")
172
172
  if which == "show":
173
173
  agent = ctx.args.agent
174
174
  if not agent:
@@ -1,11 +1,11 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse builds`: agents built with the agent builder, and where each is.
3
+ """`lighthouse-ai builds`: agents built with the agent builder, and where each is.
4
4
 
5
- lighthouse builds
6
- lighthouse builds --status publish_requested
7
- lighthouse builds show 5f0c...e1 # one, with its scores and estimated cost
8
- lighthouse builds --json | jq '.proposals[] | select(.status == "evaluated")'
5
+ lighthouse-ai builds
6
+ lighthouse-ai builds --status publish_requested
7
+ lighthouse-ai builds show 5f0c...e1 # one, with its scores and estimated cost
8
+ lighthouse-ai builds --json | jq '.proposals[] | select(.status == "evaluated")'
9
9
 
10
10
  Reads `GET /api/v1/builder/proposals` (contract 1.24). Read only, on purpose:
11
11
  an agent is drafted, sent to your deployment, evaluated and approved in the
@@ -1,9 +1,9 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse collectors`: ask Atlantic for a collector, and follow the request.
3
+ """`lighthouse-ai collectors`: ask Atlantic for a collector, and follow the request.
4
4
 
5
- lighthouse collectors requests # your tenant's requests and their stage
6
- lighthouse collectors request --vendor "Invented CRM" --product "Sales Suite" \\
5
+ lighthouse-ai collectors requests # your tenant's requests and their stage
6
+ lighthouse-ai collectors request --vendor "Invented CRM" --product "Sales Suite" \\
7
7
  --reads "Accounts and opportunities" --cloud aws [--kind crm] [--access read] \\
8
8
  [--urgency normal] [--docs-url https://...]
9
9
 
@@ -15,7 +15,7 @@ client already asked for the same vendor and product, your request joins
15
15
  that issue instead of opening another.
16
16
 
17
17
  **Asking needs the handler or client_admin role**; reading needs viewer. Both
18
- use the CLI's own sign-in (`lighthouse login`). At a terminal, a field left
18
+ use the CLI's own sign-in (`lighthouse-ai login`). At a terminal, a field left
19
19
  off the command line is asked for; under `--no-input`, or with standard input
20
20
  not a terminal, a missing required field is exit 7.
21
21
 
@@ -108,10 +108,10 @@ def _ask(ctx: Context) -> dict[str, Any]:
108
108
  except Refused as e:
109
109
  if e.error in ("invalid", "bad_query", "names_your_organisation"):
110
110
  raise CliError(e.message, code=USAGE, error=e.error,
111
- hint="see `lighthouse collectors request --help`") from None
111
+ hint="see `lighthouse-ai collectors request --help`") from None
112
112
  if e.error == "conflict":
113
113
  raise CliError(e.message, code=e.code, error=e.error,
114
- hint="`lighthouse collectors requests` shows it") from None
114
+ hint="`lighthouse-ai collectors requests` shows it") from None
115
115
  raise
116
116
  return {"ok": True, "action": "request", **_row(got), "access": got.get("access"),
117
117
  "deployment_cloud": got.get("deployment_cloud"), "urgency": got.get("urgency")}
@@ -140,7 +140,7 @@ def _show(out: Out, body: dict[str, Any]) -> None:
140
140
  [[r["id"], f"{r['vendor']} {r['product']}", r["stage"], _issue(r),
141
141
  r["request_count"] if r["request_count"] else "-", r["created_at"] or "-"]
142
142
  for r in body["requests"]])
143
- out.note("`lighthouse collectors request --vendor ... --product ...` asks for another")
143
+ out.note("`lighthouse-ai collectors request --vendor ... --product ...` asks for another")
144
144
 
145
145
 
146
146
  COMMANDS = (Command("collectors", "ask Atlantic for a collector, and follow your requests",
@@ -1,15 +1,15 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse connect <provider>`: open the provider's own approval.
3
+ """`lighthouse-ai connect <provider>`: open the provider's own approval.
4
4
 
5
- lighthouse connect # what is connected, and what can be
6
- lighthouse connect github
7
- lighthouse connect aws --no-browser
8
- lighthouse connect gitlab --reuse-local # offers `glab`'s sign-in; asks first
5
+ lighthouse-ai connect # what is connected, and what can be
6
+ lighthouse-ai connect github
7
+ lighthouse-ai connect aws --no-browser
8
+ lighthouse-ai connect gitlab --reuse-local # offers `glab`'s sign-in; asks first
9
9
  security find-generic-password -s gh-ci -w | \
10
- lighthouse connect github --credential-stdin --access read_write \
11
- --target organisation=example-air # an existing token, as you
12
- ... | lighthouse connect github --credential-stdin \
10
+ lighthouse-ai connect github --credential-stdin --access read_write \
11
+ --target organisation=example-org # an existing token, as you
12
+ ... | lighthouse-ai connect github --credential-stdin \
13
13
  --deployment-key "$(terraform output -raw deployment_public_key)"
14
14
 
15
15
  **What this command does and does not do.** It opens the portal's Connect page
@@ -302,7 +302,7 @@ def _read_credential(ctx: Context) -> str:
302
302
  if len(got.strip()) < 8:
303
303
  raise CliError("no credential on standard input", code=USAGE, error="no_credential",
304
304
  hint="pipe it in: security find-generic-password -s <name> -w | "
305
- "lighthouse connect <provider> --credential-stdin")
305
+ "lighthouse-ai connect <provider> --credential-stdin")
306
306
  return got
307
307
 
308
308
 
@@ -546,7 +546,7 @@ def _show_listing(out: Out, body: dict[str, Any]) -> None:
546
546
  p["scopes"]] for p in body["providers"]])
547
547
  if not body["providers"]:
548
548
  out.note("no connector matches; ask for one from Help, or tell your Atlantic contact")
549
- out.note("`lighthouse connect <provider>` opens the approval; `--all` lists the coming "
549
+ out.note("`lighthouse-ai connect <provider>` opens the approval; `--all` lists the coming "
550
550
  "ones too; `connect list --family F --kind K --search WORDS` narrows the list")
551
551
 
552
552
 
@@ -559,7 +559,7 @@ def connect(ctx: Context) -> dict[str, Any]:
559
559
  if provider is None:
560
560
  raise CliError(f"{name!r} is not a provider LightHouse knows", code=USAGE,
561
561
  error="unknown_provider",
562
- hint="run `lighthouse connect --all` to see every one")
562
+ hint="run `lighthouse-ai connect --all` to see every one")
563
563
  if getattr(ctx.args, "credential_stdin", False):
564
564
  return _connect_token(ctx, provider)
565
565
  url = connect_url(ctx.host)
@@ -1,12 +1,12 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse connections`: what is connected, how often each syncs, and Sync now.
3
+ """`lighthouse-ai connections`: what is connected, how often each syncs, and Sync now.
4
4
 
5
- lighthouse connections # every connection, its schedule, next sync
6
- lighthouse connections schedule cx-abcdef123456 --mode hourly
7
- lighthouse connections schedule cx-abcdef123456 --mode daily --at 06:30 --tz Europe/London
8
- lighthouse connections schedule cx-abcdef123456 --mode off
9
- lighthouse connections sync cx-abcdef123456 --reason "a page was fixed this morning"
5
+ lighthouse-ai connections # every connection, its schedule, next sync
6
+ lighthouse-ai connections schedule cx-abcdef123456 --mode hourly
7
+ lighthouse-ai connections schedule cx-abcdef123456 --mode daily --at 06:30 --tz Europe/London
8
+ lighthouse-ai connections schedule cx-abcdef123456 --mode off
9
+ lighthouse-ai connections sync cx-abcdef123456 --reason "a page was fixed this morning"
10
10
 
11
11
  **The listing** reads `GET /api/v1/connectors`, the same connections the
12
12
  Connect page shows, with each one's schedule as the deployment reports it
@@ -124,7 +124,7 @@ def _act(ctx: Context, method: str, suffix: str, body: dict[str, Any]) -> dict[s
124
124
  except Refused as e:
125
125
  if e.error == "invalid":
126
126
  raise CliError(e.message, code=USAGE, error="invalid",
127
- hint="see `lighthouse connections schedule --help`") from None
127
+ hint="see `lighthouse-ai connections schedule --help`") from None
128
128
  if e.error == "commands_disabled":
129
129
  raise CliError(e.message, code=e.code, error=e.error,
130
130
  hint=f"a client administrator switches connector.schedule and "
@@ -180,8 +180,8 @@ def _show(out: Out, body: dict[str, Any]) -> None:
180
180
  if c.get("check"):
181
181
  out.note(f"{c['id']} ({c['connector']}) is failing: {c['check_words']} "
182
182
  f"({c['check']}).{' ' + c['fix'] if c.get('fix') else ''}")
183
- out.note("`lighthouse connections schedule <id> --mode ...` sets one; "
184
- "`lighthouse connections sync <id>` syncs one now")
183
+ out.note("`lighthouse-ai connections schedule <id> --mode ...` sets one; "
184
+ "`lighthouse-ai connections sync <id>` syncs one now")
185
185
  return
186
186
  if body["action"] == "schedule":
187
187
  out.pairs([("connection", body["connection"]), ("schedule", body["schedule"]),
@@ -1,9 +1,9 @@
1
- """`lighthouse evals`: evaluation results, and running a set.
1
+ """`lighthouse-ai evals`: evaluation results, and running a set.
2
2
 
3
- lighthouse evals # the latest results
4
- lighthouse evals list --pack research --json
5
- lighthouse evals list --fail-below 0.8 # a release gate on metrics.f1
6
- lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8
3
+ lighthouse-ai evals # the latest results
4
+ lighthouse-ai evals list --pack research --json
5
+ lighthouse-ai evals list --fail-below 0.8 # a release gate on metrics.f1
6
+ lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8
7
7
 
8
8
  `evals` reads `GET /api/v1/evals`, every page of it: each row is one measurement
9
9
  of one suite for one agent version, with `passed` (did it meet its own bar) and
@@ -30,8 +30,8 @@ new row did not pass, and, with `--fail-below N`, when a new row's metric is
30
30
  below N or missing (the same closed gate as `evals list --fail-below`). In a
31
31
  pipeline:
32
32
 
33
- lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8 \
34
- && lighthouse agents deploy research:summary --version "$VERSION" --wait
33
+ lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8 \
34
+ && lighthouse-ai agents deploy research:summary --version "$VERSION" --wait
35
35
  """
36
36
  from __future__ import annotations
37
37
 
@@ -100,7 +100,7 @@ def _run(ctx: Context) -> dict[str, Any]:
100
100
  raise CliError("--fail-below gates on the results, so it needs --wait", code=USAGE,
101
101
  error="usage")
102
102
  body: dict[str, Any] = {"cap_usd": f"{a.cap:.2f}",
103
- "reason": a.reason or "evaluation run from the lighthouse CLI"}
103
+ "reason": a.reason or "evaluation run from the lighthouse-ai CLI"}
104
104
  if a.eval_set:
105
105
  body["set"] = a.eval_set
106
106
  if a.deployment:
@@ -1,12 +1,12 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse kb`: knowledge bases, their freshness, and ingesting into them.
3
+ """`lighthouse-ai kb`: knowledge bases, their freshness, and ingesting into them.
4
4
 
5
- lighthouse kb # every knowledge base, with its freshness
6
- lighthouse kb show <index>
7
- lighthouse kb ingest ops --source confluence --wait
8
- lighthouse kb ingest ops --source cx-abcdef123456
9
- lighthouse kb upload <file> [--deployment NAME] (contract 1.21)
5
+ lighthouse-ai kb # every knowledge base, with its freshness
6
+ lighthouse-ai kb show <index>
7
+ lighthouse-ai kb ingest ops --source confluence --wait
8
+ lighthouse-ai kb ingest ops --source cx-abcdef123456
9
+ lighthouse-ai kb upload <file> [--deployment NAME] (contract 1.21)
10
10
 
11
11
  `kb` and `kb show` read `GET /api/v1/knowledge-bases` and
12
12
  `/api/v1/knowledge-bases/{index}` (contract 1.14): the indexes, what is in
@@ -143,7 +143,7 @@ def _resolve(ctx: Context, connections: list[dict[str, Any]]) -> dict[str, Any]:
143
143
  if not hit:
144
144
  raise CliError(f"no live connection matches {a.source!r}"
145
145
  + (f" and {a.repo!r}" if a.repo else ""), code=USAGE,
146
- error="no_connection", hint="`lighthouse connections` lists them")
146
+ error="no_connection", hint="`lighthouse-ai connections` lists them")
147
147
  if len(hit) > 1:
148
148
  raise CliError(f"{len(hit)} connections match {a.source!r}: name one", code=USAGE,
149
149
  error="ambiguous_connection",
@@ -165,7 +165,7 @@ def _ingest(ctx: Context) -> dict[str, Any]:
165
165
  try:
166
166
  got = person.post(f"/api/v1/connections/{cid}/sync", {k: v for k, v in {
167
167
  "deployment": base.get("deployment"),
168
- "reason": a.reason or f"ingest into {a.index} from the lighthouse CLI"}.items()
168
+ "reason": a.reason or f"ingest into {a.index} from the lighthouse-ai CLI"}.items()
169
169
  if v is not None}) or {}
170
170
  finally:
171
171
  person.close()
@@ -1,10 +1,10 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse language`: the language this CLI, the portal, MCP and the
3
+ """`lighthouse-ai language`: the language this CLI, the portal, MCP and the
4
4
  assistant speak to you (contract 1.29).
5
5
 
6
- lighthouse language your setting, your organisation's, and what is in use
7
- lighthouse language --list only the languages on offer
6
+ lighthouse-ai language your setting, your organisation's, and what is in use
7
+ lighthouse-ai language --list only the languages on offer
8
8
 
9
9
  Read only. A person sets their own language in the portal under Preferences
10
10
  (and a client administrator the organisation's under Settings): a delegated
@@ -1,9 +1,9 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse limits`: the spend limits in force, and whether they reached the engines.
3
+ """`lighthouse-ai limits`: the spend limits in force, and whether they reached the engines.
4
4
 
5
- lighthouse limits
6
- lighthouse limits --json
5
+ lighthouse-ai limits
6
+ lighthouse-ai limits --json
7
7
 
8
8
  Reads `GET /api/v1/limits`: each limit's scope (`scope_kind` and `scope`),
9
9
  its period, its cap (`cap_usd`), what has been spent against it (`spent_usd`,
@@ -1,11 +1,11 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse login`, `logout` and `tokens`.
3
+ """`lighthouse-ai login`, `logout` and `tokens`.
4
4
 
5
- lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
6
- lighthouse login --scope "telemetry:read agents:read knowledge:read"
7
- lighthouse logout [--all]
8
- lighthouse tokens # every delegated token of mine, and revoke one
5
+ lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
6
+ lighthouse-ai login --scope "telemetry:read agents:read knowledge:read"
7
+ lighthouse-ai logout [--all]
8
+ lighthouse-ai tokens # every delegated token of mine, and revoke one
9
9
 
10
10
  `login` runs the device flow (device.py), stores the token in the OS keychain
11
11
  (credentials.py), remembers the host in the profile file (config.py), and then
@@ -47,7 +47,7 @@ def _configure_login(ap: argparse.ArgumentParser) -> None:
47
47
  "(default: telemetry:read agents:read)")
48
48
  ap.add_argument("--no-browser", action="store_true", dest="no_browser",
49
49
  help="print the URL instead of opening a browser")
50
- ap.add_argument("--name", default="the lighthouse CLI",
50
+ ap.add_argument("--name", default="the lighthouse-ai CLI",
51
51
  help="how this sign-in is described in the portal and the audit log")
52
52
  ap.add_argument("--access-client-id", dest="access_client_id", metavar="ID",
53
53
  help="the tenant's Cloudflare Access service token id, to keep with "
@@ -1,10 +1,10 @@
1
1
  # Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
- """`lighthouse models`: the model library, with its evidence scores.
3
+ """`lighthouse-ai models`: the model library, with its evidence scores.
4
4
 
5
- lighthouse models
6
- lighthouse models --provider bedrock
7
- lighthouse models --json | jq '.items[] | select(.state == "available") | .model'
5
+ lighthouse-ai models
6
+ lighthouse-ai models --provider bedrock
7
+ lighthouse-ai models --json | jq '.items[] | select(.state == "available") | .model'
8
8
 
9
9
  Reads `GET /api/v1/models`. Price cards are shown to a client administrator and
10
10
  to AAL staff only, and the service decides that, not this command: a viewer's