Ringtail
Reference

CLI

The `ringtail` command โ€” print the plan, boot the cockpit, or emit agent-readable JSON.

The ringtail bin is the terminal surface. It reads ./.env.example (the manifest) from the directory you run it in and never prints secret values โ€” the plan and --json emit key names and status only.

ringtail โ€” provision every API key a new project needs.

Usage:
  ringtail            Print the plan (reads ./.env.example โ€” the manifest).
  ringtail up         Boot the daemon (serving the dashboard) and open the cockpit.
  ringtail up --project <path>
                      Same, preselecting the project at <path> (skips the picker).
  ringtail --json     Agent mode: JSON status of what's MISSING (no secret values).
  ringtail --help     Show this help.

ringtail

Prints the plan โ€” every credential the project needs, grouped by section, with a โœ“ for present and โ—‹ for missing, and a count of how many are left to provision.

ringtail up

Boots the daemon on a free localhost port and opens the cockpit in your browser. The daemon serves the built dashboard itself (apps/dashboard/dist), so the UI, /api/*, /events, and /mcp are ALL one origin on one port โ€” one process, no Vite dev server. If the dashboard isn't built yet, up builds it first. Ctrl-C stops the daemon.

Pass --project <path> to preselect the project (the daemon rebuilds the grid from that dir's .env.example and skips the picker); otherwise the dashboard's project picker handles it.

ringtail --json

Agent mode. Emits the missing keys as JSON โ€” names + section only, never values โ€” so a coding agent can read what's left to do:

{
  "missing": [{ "key": "RESEND_API_KEY", "section": "Email" }],
  "total": 7
}

--json also works with up as a dry-run: it reports what up would serve (the dashboard dist path + whether it's built) without spawning anything โ€” testable and CI-safe.