Beta
Guides / CLI

CLI

Use DailyTube from your terminal — summaries, chat, feeds, delivery channels, and settings.

The DailyTube CLI brings the whole account to your terminal with one command: dailytube. It speaks to the same API with the same permissions and limits — OAuth sign-in for people, API keys for scripts.

Release preview: the CLI is implemented locally but has not been published to npm. The install command below will work after publication. Requires Node.js 20 or later.

npm install -g @dailytube/cli

Connect

On a machine with a browser:

dailytube login

Your browser opens DailyTube sign-in and asks you to approve DailyTube CLI — the same consent screen used by MCP clients. No client ID, secret, or port to configure. Tokens refresh automatically. How often re-approval happens stays controlled by the server; approval is not one-time-forever.

Headless machines (servers, CI) use an API key instead — through your secret manager's environment variable, or entered privately (never as a command argument):

dailytube login --key            # hidden prompt
dailytube login --key --stdin < /path/to/private-key-file

Create a key on the console's API Keys page. An environment DAILYTUBE_API_KEY always wins over a stored login — ideal for automation; unset it to return to your interactive session.

dailytube auth status shows the credential method and source, never its value. dailytube logout clears local stored credentials while keeping your callback registration for next time. Server-side keys and OAuth grants are not revoked, and an environment key remains active until you unset it. Disconnect CLI sign-ins from Connected applications on the console's MCP page. Already-issued access tokens can remain usable until they expire (up to an hour).

Everyday commands

dailytube summary list --q "machine learning"
dailytube summary read <id>
dailytube chat send "What changed today?"
dailytube feed add @veritasium --platform youtube
dailytube account read

Find the right command

FamilyWhat it doesStart here
summaryList, search, read, save, share, generatedailytube summary --help
chatSend messages and work with exchangesdailytube chat --help
feedFollow, inspect, enable, or remove Feedsdailytube feed --help
deliveryConnect, verify, test, and manage destinationsdailytube delivery --help
manage chatEnable or disable the chatbotdailytube manage chat --help
manage summaryConfigure automation, schedule, timezone, languagedailytube manage summary --help
accountView account identity and statisticsdailytube account read
subscriptionRead your Subscription, list Plans, upgradedailytube subscription --help
help supportRead, reply to, mark read, or close ticketsdailytube help support --help
help feature-requestRead or withdraw your requestsdailytube help feature-request --help
docsSearch public documentation and read documentsdailytube docs --help

Families are singular — summary, chat, feed, delivery, manage, account, subscription, help, docs — and help is the Help Center (support tickets, feature requests). Multi-word queries and messages are one quoted argument. Every command family, subfamily, and leaf has offline help:

dailytube --help
dailytube manage --help
dailytube summary trigger --help

Running a family bare shows its help; a missing required argument fails fast with corrective usage. Each leaf's help states its effects — sharing makes a Summary public, send-early delivers now, help support reply can attach up to five files (8 MB total).

Output for humans and scripts

Commands print readable text by default. Pass --json for the API's exact success/error envelope on stdout — nothing else — so it composes with jq:

dailytube summary list --json | jq '.data.pageInfo'

HTTP 204 produces empty output. Progress and rate-limit waits go to stderr and never pollute JSON. Exit codes are stable: 0 success, 1 operation failure (the API's machine code and request_id are shown), 2 usage error detected locally with no request sent. Pagination prints a footer with the exact next command, filters preserved.

docs read follows a long document's pages automatically in human mode; with --json it returns one segment at a time (--cursor for the next).

Files and longer documents

Support replies can include files in the same request. The server enforces up to five files and 8 MB total; if a file is rejected, the reply can still send and the rejection is reported explicitly.

dailytube help support reply <ticket-id> "Here is the screenshot" --file ./screenshot.png

A documentation search returns document IDs. Use one to read the content and citation:

dailytube docs read <document-id>
dailytube docs read <document-id> --json
dailytube docs read <document-id> --json --cursor "<nextCursor>"

Human reads follow continuation automatically. JSON returns one unchanged API segment; use its nextCursor explicitly. A failure partway through a human read exits nonzero and labels the output as partial.

Safety

subscription upgrade <plan-id> is the only command gated behind typed confirmation — it can charge your payment method, and the display always says the server computes the amount due. Non-interactive runs without --yes refuse before any request.

Reads retry rate limits automatically and visibly, honoring valid server guidance: at most three retries within a 30-second automatic-wait budget. If the wait is too long or guidance is missing, the error is returned instead. Actions that change your account never auto-retry: an interrupted command reports the outcome as unknown so you can check state before repeating.

Troubleshooting

  • auth.invalid_key — the active credential is wrong or revoked. Run dailytube login; if DAILYTUBE_API_KEY is set, replace or unset it.
  • Login won't open a browser — use the API-key path above. Browser sign-in needs a local interactive terminal.
  • subscription.api_not_enabled — account operations need a plan with API access; docs commands work on every plan.
  • "not found" for a resource you own — IDs are exact; another account's resources are indistinguishable from nonexistent ones.
  • Still stuck? Help.