¿Qué hace github?
Usa gh para GitHub. Usa git para commits/ramas/push/pull locales. Usa herramientas de lectura de código para revisiones profundas.
Autenticación
github status
gh auth login
El HOME de la puerta de enlace puede diferir del HOME del operador. Si existe autenticación gh en otro lugar, define GH_CONFIG_DIR en las variables de entorno del servicio de la puerta de enlace y reinicia.
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: título" --body-file /tmp/pr.md
Al crear o actualizar el cuerpo de un PR, agrega este pie de página final solo cuando la línea de Entorno de ejecución proporcione sessionUrl=<url-exacta>. Reemplaza <sessionUrl> con esa URL textualmente; no la construyas ni modifiques. Omite el pie de página cuando sessionUrl esté ausente. Conserva cualquier marcador de publicación antes de exactamente un pie de página, y mantén el pie de página al final:
---
[Ver la sesión del equipo OpenClaw](https://raw.githubusercontent.com/clawdbot/clawdbot/main/<sessionUrl>)
Las URLs funcionan directamente: gh pr view https://github.com/owner/repo/pull/55.
Fusiones asíncronas
Usa el flujo de trabajo nativo del repositorio cuando se proporcione. Para fusiones programáticas autorizadas en otros lugares, usa la API de fusión asíncrona de GitHub a través de gh api; gh pr merge no selecciona esta API. Proporciona el SHA de la cabeza revisada, conserva las revisiones/verificaciones requeridas y primero verifica la pertenencia a la pila: enviar un PR apilado también fusiona o encola sus PRs abiertos de la pila inferior, que necesitan su propia revisión y autorización.
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'
Mantén el encabezado de protección Octopool primero después de api. Los wrappers protegidos más antiguos lo rechazan antes de que puedan reescribir la autoridad de fusión; usa una compilación de Octopool que contenga el guardia asíncrono si es rechazado. El wrapper compatible conserva SHA/método/acción/derivación y solo reescribe el texto del commit. El gh nativo puede pasar el encabezado. No lo elimines, desactives políticas ni selecciones un binario sin procesar para evitar un rechazo.
Conserva details.uuid de una respuesta 202 antes de hacer polling. pending significa espera; merged incluye details.sha, que aún necesita verificación final del PR/cabeza. enqueued significa en cola, no fusionado: monitorea el PR en sí. Para honrar una cola configurada, usa merge_action=default (o merge_queue para encolar explícitamente), omitiendo campos solo directos de método/título/mensaje. Nunca habilites bypass_rules sin autorización.
En caso de failed, reporta details.message. Un 409 identifica una solicitud existente; inspecciona su UUID y opciones sin reenviar. Respuestas perdidas, errores de polling y expiración de resultados después de 24 horas requieren reconciliación, nunca un reintento ciego o un respaldo síncrono. Haz polling con esperas acotadas y lecturas frescas. El procesamiento asíncrono no activa la fusión automática para verificaciones no cumplidas; usa el flujo de trabajo nativo o gh pr merge --auto cuando ese comportamiento esté autorizado.
Propiedad de la fusión
Cuando el usuario solicite fusionar un PR, el resultado final es el estado verificado del PR en GitHub, no el final de una revisión, turno de trabajador u observación de CI.
- Mantén el trabajo activo hasta que
gh pr view ... --json state,mergedAt,mergeCommitdemuestre questateesMERGED. - Trata los hallazgos de revisión, conflictos de fusión, verificaciones fallidas y cambios solicitados como trabajo de continuación cuando estén dentro del alcance. Parchearlos, vuelve a ejecutar las puertas requeridas y reevalúa la cabeza actualizada exacta.
- Una verificación pendiente es un estado de espera, no de finalización. Usa el flujo de trabajo de espera o fusión compatible del repositorio; no reclames éxito con verificaciones verdes parciales.
- Si el trabajo fue delegado a una sesión persistente y esa ejecución se detiene antes de la fusión, continúa la misma sesión en lugar de tratar su informe como el resultado final.
- Detente como bloqueado solo cuando continuar requiera nueva autoridad, credenciales no disponibles o una decisión de producto que no se pueda inferir de manera segura. Reporta el bloqueador exacto y deja el PR sin fusionar.
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 "Corregido en ..."
CI/ejecuciones
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}'
Usa --json + --jq para salida estructurada. Usa --body-file para comentarios/cuerpos que contengan comillas invertidas, fragmentos de shell, nombres de entorno o texto de usuario.