O que github faz?
Use gh para GitHub. Use git para commits/branches/push/pull locais. Use ferramentas de leitura de código para revisões aprofundadas.
Autenticação
gh auth status
gh auth login
O HOME do gateway pode ser diferente do HOME do operador. Se a autenticação gh existir em outro local, defina GH_CONFIG_DIR no ambiente do serviço de gateway e reinicie.
PRs
gh pr list --repo owner/repo --json number,title,state,author,url
gh pr view 55 --repo owner/repo --json title,body,author,files,commits,reviews,reviewDecision
gh pr checks 55 --repo owner/repo
gh pr diff 55 --repo owner/repo
gh pr create --repo owner/repo --title "feat: titulo" --body-file /tmp/pr.md
Ao criar ou atualizar o corpo de um PR, acrescente este rodapé final somente quando a linha de Runtime fornecer sessionUrl=<url-exata>. Substitua <sessionUrl> por essa URL exatamente; não construa nem modifique-a. sessionUrl é fornecida apenas para uma sessão explicitamente pública. Omita o rodapé quando estiver ausente; nunca substitua por uma URL de chat privado nem habilite compartilhamento para obter uma. Preserve qualquer marcador de publicação antes de exatamente um rodapé e mantenha o rodapé ao final:
---
[View the OpenClaw team session](https://raw.githubusercontent.com/clawdbot/clawdbot/main/<sessionUrl>)
As URLs funcionam diretamente: gh pr view https://github.com/owner/repo/pull/55.
Merges assíncronos
Use o fluxo de landing nativo do repositório quando fornecido. Para merges programáticos autorizados em outros lugares, use a API de merge assíncrono do GitHub por meio de gh api; gh pr merge não seleciona esta API. Forneça o SHA da head revisada, preserve revisões/checks obrigatórios e verifique primeiro a associação à pilha: submeter um PR empilhado também mescla ou enfileira seus PRs abertos downstream, que precisam de sua própria revisão e autorização.
gh api -H 'X-Octopool-Require: merge-async-v1' \
--method PUT repos/owner/repo/pulls/55/merge-async \
-H 'X-GitHub-Api-Version: 2026-03-10' \
-f sha=REVIEWED_HEAD_SHA -f merge_method=squash -f merge_action=direct_merge
gh api -H 'X-Octopool-Require: merge-async-v1' \
repos/owner/repo/pulls/55/merge-async/REQUEST_UUID \
-H 'X-GitHub-Api-Version: 2026-03-10' -H 'Cache-Control: max-age=0'
Mantenha o cabeçalho de guarda Octopool primeiro após api. Wrappers antigos protegidos rejeitam antes de poderem reescrever a autoridade de merge; use uma build do Octopool contendo a guarda assíncrona se for recusado. O wrapper suportado preserva SHA/método/ação/bypass e reescreve apenas o texto do commit. O gh nativo pode passar o cabeçalho. Não o remova, desabilite a política nem selecione um binário bruto para contornar uma rejeição.
Retenha details.uuid de uma resposta 202 antes de consultar. pending significa aguarde; merged inclui details.sha, que ainda precisa de verificação final do PR/head. enqueued significa enfileirado, não mesclado: monitore o PR em si. Para honrar uma fila configurada, use merge_action=default (ou merge_queue para enfileirar explicitamente), omitindo campos exclusivos de direto como método/título/mensagem. Nunca ative bypass_rules sem autorização.
Em caso de failed, relate details.message. Um 409 identifica uma requisição existente; inspecione seu UUID e opções sem reenviar. Respostas perdidas, erros de consulta e expiração de resultado após 24 horas exigem reconciliação, nunca uma nova tentativa cega ou fallback síncrono. Consulte com esperas limitadas e leituras atualizadas. O processamento assíncrono não arma auto-merge para checks não atendidos; use o fluxo nativo ou gh pr merge --auto quando esse comportamento for autorizado.
Responsabilidade pelo landing
Quando o usuário pedir para fazer o landing ou merge de um PR, o resultado final é o estado verificado do PR no GitHub, não o fim de uma revisão, turno de trabalhador ou observação de CI.
- Mantenha o trabalho ativo até que
gh pr view ... --json state,mergedAt,mergeCommitprove questateéMERGED. - Trate descobertas de revisão, conflitos de merge, checks com falha e alterações solicitadas como trabalho de continuação quando estiverem no escopo. Corrija-os, reexecute as portas obrigatórias e reavalie a head exata atualizada.
- Um check pendente é um estado de espera, não de conclusão. Use o fluxo de espera ou merge suportado pelo repositório; não reivindique sucesso a partir de checks verdes parciais.
- Se o trabalho foi delegado a uma sessão persistente e essa execução parar antes do merge, continue a mesma sessão em vez de tratar seu relatório como resultado final.
- Pare como bloqueado somente quando continuar exigir nova autoridade, credenciais indisponíveis ou uma decisão de produto que não possa ser inferida com segurança. Relate o bloqueador exato e deixe o PR sem merge.
Issues
gh issue list --repo owner/repo --state open --json number,title,labels,url
gh issue view 42 --repo owner/repo --json title,body,comments,labels,state
gh issue create --repo owner/repo --title "Bug: ..." --body-file /tmp/issue.md
gh issue comment 42 --repo owner/repo --body-file /tmp/comment.md
gh issue close 42 --repo owner/repo --comment "Fixed in ..."
CI/execuções
gh run list --repo owner/repo --limit 10
gh run view <run-id> --repo owner/repo --json status,conclusion,headSha,url
gh run view <run-id> --repo owner/repo --log-failed
gh run rerun <run-id> --repo owner/repo --failed
API
gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'
gh api repos/owner/repo/labels --jq '.[].name'
gh api --cache 1h repos/owner/repo --jq '{stars: .stargazers_count, forks: .forks_count}'
Use --json + --jq para saída estruturada. Use --body-file para comentários/corpos contendo crases, trechos de shell, nomes de ambiente ou texto do usuário.