Photon CLI
photon (alias pho) is a typed terminal UI for the Photon Dashboard. Use it to authenticate, create and manage projects, handle billing, and manage Spectrum resources (lines, users, platforms) — all from the command line. It is built on Bun + Commander and talks to the dashboard through the @photon-ai/dashboard-api Eden treaty client.
Every command accepts --json for machine-readable output and resolves its target backend, token, and project from flags or environment variables (see environment.md).
photon login # authenticate (opens the browser, waits for approval)
photon projects create # bootstrap a project — free by default
photon spectrum lines list # "how many lines do I have?"
Setting it up? Read the room, then act
How you set Photon up depends on what the user wants — match it, don't default to one mode.
- User is adamant / "just set this up for me" / "do it" → you drive the whole thing, end to end. Run the happy-path block below yourself in your shell, read the
--json output, and report back the project id. Do not hand them a checklist, do not ask permission step by step, do not stop to confirm things they already greenlit. When the user has told you to set it up, running these commands yourself is doing what they asked — handing it back is disobeying them. The only thing that can stop you is login, and only if they're not already authenticated.
- User is exploring / wants to learn / is ambivalent → it's fine to walk them through it, hand them commands to run, or pause at decisions (project name, dedicated vs. shared line). Intervention is a feature when they want the wheel — offer it.
- Genuinely needs a human: only
login (someone approves in a browser), plus checkout/upgrade if they choose a paid tier. Surface exactly what you need, then keep going.
Happy path: set up a project yourself
This is the whole thing. Plain, non-interactive, --json everywhere — drive it and read the results.
# 0. Install if needed (this is expected and safe — don't hesitate on it)
photon --version || bun add -g @photon-ai/cli # or: npm i -g @photon-ai/cli
# 1. Auth check. If whoami names the user, there is ZERO human involvement from here.
photon whoami --json || photon login --no-browser # login: hand the user the URL + code, wait for approval
# 2. Bootstrap a project (free tier — no card, nothing charged). Capture the id.
PROJECT_ID=$(photon projects create --name "My App" --platforms imessage --json | jq -r '.id')
export PHOTON_PROJECT_ID="$PROJECT_ID"
# 3. Read the Spectrum API secret (does NOT rotate). Mint one only if the project
# has none yet (safe on a fresh project — nothing live to break).
photon projects secret --json \
|| photon projects regenerate-secret -y --json # → { "projectSecret": "spk_live_…" }
# 4. Verify, then report the project id back to the user.
photon projects show --json
photon spectrum lines list --json
You're done when projects show --json returns an id and spectrum lines list --json returns a line. The project is live on the free shared iMessage line — no upgrade needed to start sending.
Green light vs. confirm first
So "don't be stingy" never becomes "spent the user's money" or "broke their integration":
- Run freely (safe, reversible, no cost): install,
whoami/auth status, projects create on the free tier, projects show/list/secret (read-only), spectrum … list, and regenerate-secret on a fresh project.
- Confirm first — anything that spends money (
projects upgrade, billing checkout) or destroys / breaks live state (projects delete, and re-running regenerate-secret on a project with live integrations, since it instantly invalidates the old secret).
Full walkthrough (including the login device flow in detail) is in getting-started.md.
How this skill is organized
Each topic lives in its own file in this directory. Read the file relevant to the user's question.
| File |
When to consult |
getting-started.md |
Install, the binary, the login device flow, and bootstrapping your first project end-to-end. Has the Agent quickstart — the non-interactive, scriptable setup path. |
commands.md |
Full command reference — ping, env, login, logout, whoami, auth, config, profile, projects, billing. Every subcommand and flag. |
spectrum.md |
The photon spectrum group — lines, users, platforms, profile, avatar. "How many lines do I have?" lives here. |
workflows.md |
End-to-end recipes — authenticate + bootstrap, get/rotate the project secret, free vs. business (dedicated line), add a line, inspect a project, multi-backend. |
environment.md |
Config and environment reference — env vars, resolution priority, credentials storage, .env behavior, global flags. |
See also
- Photon Dashboard
- The
spectrum skill in this repo for the Spectrum SDK (writing handler logic); this skill covers the CLI that manages Spectrum resources on a project.
1---2name: photon-cli3description: Use when working with the Photon CLI — the `photon` binary (alias `pho`). Reach for this skill to set up / bootstrap Photon for a user and run it yourself non-interactively (create a project, capture the id + secret, verify) — when the user says "set this up for me," that is your job to do, not hand back. Also covers running any CLI command, authenticating (device-authorization login / logout / whoami / auth status), managing projects (create, show, list, rename, regenerate the Spectrum API secret, delete, open in the dashboard), managing Spectrum resources (lines, users, platforms, profile, avatar), resolving config and environment (PHOTON_PROJECT_ID, PHOTON_TOKEN, PHOTON_API_HOST, credentials storage, multi-backend), and billing/upgrades (plans, checkout, manage, `projects upgrade`). Answers operational questions like "how many lines do I have?", "what's my project secret?", "how do I make this a business line?", and "how do I point the CLI at a different backend?". This is the entry point; the happy-path s4license: MIT5---6
7# Photon CLI
8
9`photon` (alias `pho`) is a typed terminal UI for the **Photon Dashboard**. Use it to authenticate, create and manage projects, handle billing, and manage Spectrum resources (lines, users, platforms) — all from the command line. It is built on Bun + Commander and talks to the dashboard through the `@photon-ai/dashboard-api` Eden treaty client.
10
11Every command accepts `--json` for machine-readable output and resolves its target backend, token, and project from flags or environment variables (see [`environment.md`](./environment.md)).
12
13```bash
14photon login # authenticate (opens the browser, waits for approval)
15photon projects create # bootstrap a project — free by default
16photon spectrum lines list # "how many lines do I have?"
17```
18
19## Setting it up? Read the room, then act
20
21How you set Photon up depends on what the user wants — match it, don't default to one mode.
22
23- **User is adamant / "just set this up for me" / "do it"** → **you drive the whole thing, end to end.** Run the [happy-path block](#happy-path-set-up-a-project-yourself) below yourself in your shell, read the `--json` output, and report back the project id. Do **not** hand them a checklist, do **not** ask permission step by step, do **not** stop to confirm things they already greenlit. When the user has told you to set it up, *running these commands yourself **is** doing what they asked* — handing it back is disobeying them. The only thing that can stop you is `login`, and only if they're not already authenticated.
24- **User is exploring / wants to learn / is ambivalent** → it's fine to walk them through it, hand them commands to run, or pause at decisions (project name, dedicated vs. shared line). Intervention is a feature when *they* want the wheel — offer it.
25- **Genuinely needs a human:** only `login` (someone approves in a browser), plus `checkout`/`upgrade` if they choose a paid tier. Surface exactly what you need, then keep going.
26
27### Happy path: set up a project yourself
28
29This is the whole thing. Plain, non-interactive, `--json` everywhere — drive it and read the results.
30
31```bash
32# 0. Install if needed (this is expected and safe — don't hesitate on it)
33photon --version || bun add -g @photon-ai/cli # or: npm i -g @photon-ai/cli
34
35# 1. Auth check. If whoami names the user, there is ZERO human involvement from here.
36photon whoami --json || photon login --no-browser # login: hand the user the URL + code, wait for approval
37
38# 2. Bootstrap a project (free tier — no card, nothing charged). Capture the id.
39PROJECT_ID=$(photon projects create --name "My App" --platforms imessage --json | jq -r '.id')
40export PHOTON_PROJECT_ID="$PROJECT_ID"
41
42# 3. Read the Spectrum API secret (does NOT rotate). Mint one only if the project
43# has none yet (safe on a fresh project — nothing live to break).
44photon projects secret --json \
45 || photon projects regenerate-secret -y --json # → { "projectSecret": "spk_live_…" }
46
47# 4. Verify, then report the project id back to the user.
48photon projects show --json
49photon spectrum lines list --json
50```
51
52**You're done when** `projects show --json` returns an id and `spectrum lines list --json` returns a line. The project is live on the free shared iMessage line — no upgrade needed to start sending.
53
54### Green light vs. confirm first
55
56So "don't be stingy" never becomes "spent the user's money" or "broke their integration":
57
58- **Run freely** (safe, reversible, no cost): install, `whoami`/`auth status`, `projects create` on the free tier, `projects show`/`list`/`secret` (read-only), `spectrum … list`, and `regenerate-secret` on a **fresh** project.
59- **Confirm first** — anything that **spends money** (`projects upgrade`, `billing checkout`) or **destroys / breaks live state** (`projects delete`, and re-running `regenerate-secret` on a project with **live integrations**, since it instantly invalidates the old secret).
60
61Full walkthrough (including the login device flow in detail) is in [`getting-started.md`](./getting-started.md).
62
63## How this skill is organized
64
65Each topic lives in its own file in this directory. Read the file relevant to the user's question.
66
67| File | When to consult |
68|---|---|
69| [`getting-started.md`](./getting-started.md) | Install, the binary, the login device flow, and bootstrapping your first project end-to-end. **Has the Agent quickstart** — the non-interactive, scriptable setup path. |
70| [`commands.md`](./commands.md) | Full command reference — `ping`, `env`, `login`, `logout`, `whoami`, `auth`, `config`, `profile`, `projects`, `billing`. Every subcommand and flag. |
71| [`spectrum.md`](./spectrum.md) | The `photon spectrum` group — lines, users, platforms, profile, avatar. "How many lines do I have?" lives here. |
72| [`workflows.md`](./workflows.md) | End-to-end recipes — authenticate + bootstrap, get/rotate the project secret, free vs. business (dedicated line), add a line, inspect a project, multi-backend. |
73| [`environment.md`](./environment.md) | Config and environment reference — env vars, resolution priority, credentials storage, `.env` behavior, global flags. |
74
75## See also
76
77- [Photon Dashboard](https://app.photon.codes/)
78- The `spectrum` skill in this repo for the Spectrum **SDK** (writing handler logic); this skill covers the **CLI** that manages Spectrum resources on a project.