Skip to content

CLI ​

text
standcast <command> [options]

Commands print their result as JSON on standard output and messages on standard error, so scripts and agents can read them. To install the CLI, see Getting started.

Commands ​

standcast login ​

Signs in with GitHub using the device flow. The CLI shows a URL and a code, opens the browser when it can, and waits until you authorize. It then saves your session and the organizations where Standcast is installed and you are a member.

bash
standcast login

Signing in also links your Slack user for mentions in the digest. Run it again when you join a new organization, when the app is installed in a new one, or when your admin connects Slack or changes your identity mapping. Google Chat users are linked by sending the Standcast app a direct message, not by signing in.

standcast logout ​

Revokes the session on the server and deletes the local credentials file. It prints "Credentials removed." even when you were not signed in.

standcast whoami ​

Prints your login and organizations from the saved credentials, without calling the API.

json
{"login":"alice","orgs":[{"installationId":12345678,"login":"acme"}]}

standcast draft ​

Prints the draft of your daily for the organization:

json
{
  "org": "acme",
  "date": "2026-10-28",
  "since": "2026-10-27T03:00:00.000Z",
  "teams": ["backend"],
  "activity": [
    {
      "kind": "pr_merged",
      "title": "Add rate limiting",
      "url": "https://github.com/acme/api/pull/42",
      "repo": "acme/api",
      "at": "2026-10-27T18:20:00.000Z"
    },
    {
      "kind": "commits",
      "title": "Fix retry backoff",
      "url": "https://github.com/acme/worker/commit/9f2c1e0",
      "repo": "acme/worker",
      "at": "2026-10-27T15:02:00.000Z",
      "count": 3
    }
  ],
  "suggestions": [
    {
      "id": "6f1c2b8e-3a4d-4c55-9d0e-1a2b3c4d5e6f",
      "kind": "pr_no_review",
      "ref": { "kind": "pull_request", "url": "https://github.com/acme/api/pull/57", "title": "Retry webhooks" },
      "since": "2026-10-26T14:00:00.000Z"
    }
  ]
}
  • date: the standup date this daily will count for.
  • since: the start of the activity window.
  • teams: your teams in this organization.
  • activity: up to 50 items, newest first. kind is pr_opened, pr_merged, review, commits, card_started or card_done. Commits are grouped per repository, with count. For cards, repo is the Linear team key and url is the card link, which you can use as the link of a blocker.
  • suggestions: possible blockers Standcast noticed for you, each { id, kind, ref, since }. kind is pr_no_review (your pull request without review), ci_failing (checks failing on it for 24 hours) or card_stale (one of your Linear cards in progress for card_stale_days). Only you see them. See standcast suggestion.

With your AI sessions ​

bash
standcast draft --sessions

--sessions also reads your local Claude Code sessions from the draft window and adds work to the same JSON: one entry per piece of work, grouping the pull requests, cards, commits and sessions that belong together.

json
{
  "work": [
    {
      "key": "pr:https://github.com/acme/api/pull/42",
      "title": "Add rate limiting",
      "refs": [{ "kind": "pull_request", "url": "https://github.com/acme/api/pull/42", "title": "Add rate limiting" }],
      "activity": [{ "kind": "pr_merged", "title": "Add rate limiting", "url": "https://github.com/acme/api/pull/42", "repo": "acme/api", "at": "2026-10-27T18:20:00.000Z", "branch": "feat/rate-limit" }],
      "sessions": [
        {
          "id": "3f9a…",
          "title": "Add rate limiting to the public API",
          "cwd": "/home/alice/acme/api",
          "branch": "feat/rate-limit",
          "startedAt": "2026-10-27T14:05:00.000Z",
          "endedAt": "2026-10-27T17:40:00.000Z",
          "prompts": ["Add a rate limit per API key on the public routes"],
          "files": ["src/rate-limit.ts"]
        }
      ]
    }
  ]
}
  • The sessions come from ~/.claude/projects, or STANDCAST_CLAUDE_DIR. A session joins a pull request by its repository and branch, and a card when the branch names it; otherwise it gets its own entry, named after the project.
  • Each session keeps up to five of your prompts, cut to 300 characters, and up to 20 edited file paths. Tokens that look like secrets are replaced by [redacted].
  • The CLI reads the files on your machine. Session data is never sent to the Standcast API, logs or webhooks: only the daily you submit leaves your machine.
  • STANDCAST_SESSIONS=off turns it off: work is then built from your activity only. Without --sessions, the output is the same as before.

standcast submit ​

Sends your daily. It reads the JSON from --file, or from standard input when --file is missing.

bash
standcast submit --file daily.json
json
{
  "org": "acme",
  "yesterday": [
    {
      "text": "Shipped rate limiting",
      "ref": { "kind": "pull_request", "url": "https://github.com/acme/api/pull/42", "title": "Add rate limiting" }
    }
  ],
  "today": [{ "text": "Write the integrator guides" }],
  "blockers": [{ "text": "Waiting for the staging database" }],
  "support": [{ "text": "Need a review on the migration before Friday" }]
}
FieldRules
orgOptional in the file. When missing, --org is used, or your only organization.
yesterdayUp to 30 items. Can be empty.
today1 to 30 items.
blockersUp to 10 items. Can be empty.
supportOptional. Up to 10 items: what you need from someone else without being blocked. When missing, it is empty.
text1 to 500 characters, on one line.
refOptional. kind is pull_request, issue, commit or card; url uses http or https; title has up to 200 characters.

Text, URLs and titles cannot contain control characters (newlines and tabs included), bidirectional controls or line separators.

The result:

json
{"date":"2026-10-28","teams":["backend"],"late":false}

late: true means the digest had already been posted, so your daily went as a reply in its thread.

standcast submit sends what you give it. When an agent calls it for you, the agent must show you the daily and get your confirmation first. The Claude Code skill and the MCP server enforce that.

standcast suggestion ​

Answers a suggested blocker from the draft:

bash
standcast suggestion confirm <id>
standcast suggestion ignore <id>
  • confirm marks it as a real blocker. Add it to blockers in your daily, with its ref; submitting the daily confirms it too.
  • ignore hides it. It comes back only if the signal changes: a new head commit that is still failing, or the pull request going back to no review.
  • Use --org <login> when you belong to more than one organization.
  • An unknown id, or one that is not yours, gives error not_found. The opposite decision to the one already made gives error suggestion_already_decided. Repeating the same decision works.

standcast mcp ​

Starts the local MCP server over standard input and output, for AI clients. See MCP server.

Options ​

OptionDescription
--org <login>The organization, when you belong to more than one.
--file <path>The daily JSON file for submit.
--sessionsFor draft: adds work, built with your local AI sessions.
--api-url <url>The Standcast API. Without it, the CLI uses STANDCAST_API_URL, and without that, the Standcast API at https://api-standcast.usefachada.dev.
--helpShows the usage.
--versionShows the version.

Environment ​

VariableDescription
STANDCAST_API_URLThe Standcast API, when --api-url is not given.
STANDCAST_LANGLanguage of the CLI messages, en or pt-BR. Falls back to LC_ALL, then LANG, then English.
XDG_CONFIG_HOMEWhere the credentials file goes. Defaults to ~/.config.
STANDCAST_SESSIONSoff stops the CLI and the MCP server from reading your local AI sessions.
STANDCAST_CLAUDE_DIRWhere your Claude Code sessions are. Defaults to ~/.claude/projects.

The API URL must use https. http is accepted only for localhost, 127.0.0.1 and [::1]. A saved session works only with the API it was created for: using it with another URL fails with exit code 2 and asks you to sign in again with --api-url.

Exit codes ​

CodeMeaning
0Success.
1Error: network failure, API error, unreadable file, invalid arguments or an unknown command. The message says which.
2Not signed in, the session expired or was revoked, or the saved session belongs to another API. Run standcast login.
3More than one organization and no --org, or no organization with Standcast installed.
4The daily JSON is invalid or failed validation. The message lists each issue.

API errors are printed as error <code>: <message>, plus the wait time when you hit a rate limit.

Credentials ​

standcast login saves your session in ~/.config/standcast/credentials.json, or $XDG_CONFIG_HOME/standcast/credentials.json when that variable is set. The folder is created with mode 700 and the file with mode 600, readable only by you. The file holds the API URL, the session token (sc_...), your login and your organizations.

The session expires after 90 days without use. standcast logout revokes it and deletes the file.