---
url: https://docs-standcast.usefachada.dev/pt-BR/members/cli.md
---
# CLI

```text
standcast <comando> [opções]
```

Os comandos imprimem o resultado em JSON na saída padrão e as mensagens na saída de erro, para scripts e agentes conseguirem ler. Para instalar a CLI, veja [Primeiros passos](/pt-BR/members/getting-started#_1-instale-a-cli).

## Comandos

### `standcast login`

Entra com o GitHub pelo device flow. A CLI mostra uma URL e um código, abre o navegador quando consegue e espera você autorizar. Depois, guarda a sua sessão e as organizações onde o Standcast está instalado e você é membro.

```bash
standcast login
```

Entrar também liga o seu usuário do Slack para as menções no consolidado. Rode de novo quando entrar numa organização nova, quando o app for instalado em outra organização, ou quando o admin conectar o Slack ou mudar o seu mapeamento de identidade. No Google Chat, o vínculo é feito mandando uma mensagem direta para o app do Standcast, não ao entrar.

### `standcast logout`

Revoga a sessão no servidor e apaga o arquivo local de credenciais. Ele mostra "Credenciais removidas." mesmo se você não tinha entrado.

### `standcast whoami`

Mostra o seu login e as suas organizações a partir das credenciais guardadas, sem chamar a API.

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

### `standcast draft`

Mostra o rascunho da sua daily na organização:

```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`: a data a que esta daily vai pertencer.
* `since`: o início da janela de atividade.
* `teams`: os seus times nesta organização.
* `activity`: até 50 itens, do mais recente para o mais antigo. `kind` é `pr_opened`, `pr_merged`, `review`, `commits`, `card_started` ou `card_done`. Os commits vêm agrupados por repositório, com `count`. Nos cards, `repo` é a chave do time no Linear e `url` é o link do card, que você pode usar como link de um impedimento.
* `suggestions`: possíveis impedimentos que o Standcast percebeu por você, cada um `{ id, kind, ref, since }`. `kind` é `pr_no_review` (pull request seu sem revisão), `ci_failing` (checks falhando nele há 24 horas) ou `card_stale` (um card seu no Linear em andamento há `card_stale_days`). Só você vê. Veja [`standcast suggestion`](#standcast-suggestion).

#### Com as suas sessões de IA

```bash
standcast draft --sessions
```

O `--sessions` também lê as suas sessões locais do Claude Code na janela do rascunho e adiciona o `work` ao mesmo JSON: uma entrada por trabalho, agrupando os pull requests, cards, commits e sessões que andam juntos.

```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": "Adicionar rate limit na API pública",
          "cwd": "/home/alice/acme/api",
          "branch": "feat/rate-limit",
          "startedAt": "2026-10-27T14:05:00.000Z",
          "endedAt": "2026-10-27T17:40:00.000Z",
          "prompts": ["Coloque um rate limit por API key nas rotas públicas"],
          "files": ["src/rate-limit.ts"]
        }
      ]
    }
  ]
}
```

* As sessões vêm de `~/.claude/projects`, ou de `STANDCAST_CLAUDE_DIR`. Uma sessão se junta a um pull request pelo repositório e pela branch, e a um card quando a branch cita o card; senão, ela ganha uma entrada própria, com o nome do projeto.
* Cada sessão guarda até cinco dos seus prompts, cortados em 300 caracteres, e até 20 caminhos de arquivos editados. Trechos que parecem segredos viram `[redacted]`.
* A CLI lê os arquivos na sua máquina. Os dados das sessões nunca vão para a API do Standcast, para logs nem para webhooks: só a daily que você envia sai da sua máquina.
* `STANDCAST_SESSIONS=off` desliga a leitura: o `work` passa a ser montado só com a sua atividade. Sem `--sessions`, a saída é a mesma de antes.

### `standcast submit`

Envia a sua daily. Lê o JSON do `--file`, ou da entrada padrão quando não há `--file`.

```bash
standcast submit --file daily.json
```

```json
{
  "org": "acme",
  "yesterday": [
    {
      "text": "Entreguei o rate limiting",
      "ref": { "kind": "pull_request", "url": "https://github.com/acme/api/pull/42", "title": "Add rate limiting" }
    }
  ],
  "today": [{ "text": "Escrever os guias para integradores" }],
  "blockers": [{ "text": "Esperando o banco de staging" }],
  "support": [{ "text": "Preciso de um review na migração antes de sexta" }]
}
```

| Campo | Regras |
| --- | --- |
| `org` | Opcional no arquivo. Quando falta, vale o `--org`, ou a sua única organização. |
| `yesterday` | Até 30 itens. Pode ficar vazio. |
| `today` | De 1 a 30 itens. |
| `blockers` | Até 10 itens. Pode ficar vazio. |
| `support` | Opcional. Até 10 itens: o que você precisa de outra pessoa sem estar travado. Quando falta, fica vazio. |
| `text` | De 1 a 500 caracteres, numa linha. |
| `ref` | Opcional. `kind` é `pull_request`, `issue`, `commit` ou `card`; `url` usa `http` ou `https`; `title` tem até 200 caracteres. |

Textos, URLs e títulos não podem ter caracteres de controle (incluindo quebras de linha e tabs), controles bidirecionais nem separadores de linha.

O resultado:

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

`late: true` quer dizer que o consolidado já tinha sido publicado, então a sua daily foi como resposta na thread dele.

O `standcast submit` envia o que você passar. Quando um agente o chama por você, o agente tem que mostrar a daily e pedir a sua confirmação antes. A [skill do Claude Code](/pt-BR/members/claude-code) e o [servidor MCP](/pt-BR/members/mcp) garantem isso.

### `standcast suggestion`

Responde a um impedimento sugerido do rascunho:

```bash
standcast suggestion confirm <id>
standcast suggestion ignore <id>
```

* `confirm` marca como um impedimento de verdade. Adicione aos `blockers` da sua daily, com o `ref` dele; enviar a daily também confirma.
* `ignore` esconde a sugestão. Ela só volta se o sinal mudar: um novo commit head que ainda falha, ou o pull request voltar a ficar sem revisão.
* Use `--org <login>` quando você está em mais de uma organização.
* Um id desconhecido, ou que não é seu, dá `error not_found`. A decisão oposta à já tomada dá `error suggestion_already_decided`. Repetir a mesma decisão funciona.

### `standcast mcp`

Inicia o servidor MCP local pela entrada e saída padrão, para clientes de IA. Veja [Servidor MCP](/pt-BR/members/mcp).

## Opções

| Opção | Descrição |
| --- | --- |
| `--org <login>` | A organização, quando você está em mais de uma. |
| `--file <caminho>` | O arquivo JSON da daily para o `submit`. |
| `--sessions` | No `draft`: adiciona o `work`, montado com as suas sessões locais de IA. |
| `--api-url <url>` | A API do Standcast. Sem ela, a CLI usa `STANDCAST_API_URL` e, sem essa variável, a API do Standcast em `https://api.standcast.app`. |
| `--help` | Mostra o uso. |
| `--version` | Mostra a versão. |

## Ambiente

| Variável | Descrição |
| --- | --- |
| `STANDCAST_API_URL` | A API do Standcast, quando não há `--api-url`. |
| `STANDCAST_LANG` | Idioma das mensagens da CLI, `en` ou `pt-BR`. Se não houver, usa `LC_ALL`, depois `LANG` e, por fim, inglês. |
| `XDG_CONFIG_HOME` | Onde fica o arquivo de credenciais. O padrão é `~/.config`. |
| `STANDCAST_SESSIONS` | `off` impede a CLI e o servidor MCP de lerem as suas sessões locais de IA. |
| `STANDCAST_CLAUDE_DIR` | Onde estão as suas sessões do Claude Code. O padrão é `~/.claude/projects`. |

A URL da API tem que usar `https`. `http` só é aceito para `localhost`, `127.0.0.1` e `[::1]`. Uma sessão guardada só funciona com a API em que foi criada: usá-la com outra URL falha com o código de saída 2 e pede para você entrar de novo com `--api-url`.

## Códigos de saída

| Código | Significado |
| --- | --- |
| `0` | Sucesso. |
| `1` | Erro: falha de rede, erro da API, arquivo ilegível, argumentos inválidos ou comando desconhecido. A mensagem diz qual. |
| `2` | Você não entrou, a sessão expirou ou foi revogada, ou a sessão guardada é de outra API. Rode `standcast login`. |
| `3` | Mais de uma organização sem `--org`, ou nenhuma organização com o Standcast instalado. |
| `4` | O JSON da daily é inválido ou falhou na validação. A mensagem lista cada problema. |

Os erros da API aparecem como `error <código>: <mensagem>`, mais o tempo de espera quando você atinge o limite de taxa.

## Credenciais

O `standcast login` guarda a sua sessão em `~/.config/standcast/credentials.json`, ou em `$XDG_CONFIG_HOME/standcast/credentials.json` quando essa variável existe. A pasta é criada com modo `700` e o arquivo com modo `600`, legível só por você. O arquivo guarda a URL da API, o token da sessão (`sc_...`), o seu login e as suas organizações.

A sessão expira depois de 90 dias sem uso. O `standcast logout` revoga a sessão e apaga o arquivo.
