---
title: "GitHub & pull requests"
description: "The GitHub App, the PR rail, and the review loop"
canonical_url: "https://hoplite.sh/docs/github"
markdown_url: "https://hoplite.sh/docs/github.md"
---

# GitHub & pull requests
URL: /docs/github
LLM index: /llms.txt
Description: The GitHub App, the PR rail, and the review loop
Related: /docs/threads, /docs/agent/tools, /docs/getting-started

# GitHub & pull requests

Hoplite works through a GitHub App installed on your organization or account. It powers repo access, branch operations, commits, pull requests, and the webhooks that keep threads in sync with review activity.

## From thread to PR

Ask the agent to open a pull request, or type [`/pr`](/docs/agent/slash-commands) to create a draft PR from the thread's current diff. The agent can open PRs as **draft or ready**, promote an existing draft without recreating it, comment on them, list files and checks, resolve review threads, and merge (merge, rebase, or squash) — all PR-mutating actions [require your approval](/docs/threads#approvals).

Pull requests link to the thread that produced them, so the conversation, the diff, and the PR stay one unit of work.

## The PR rail

Once a thread has a live PR, the **PR rail** slides out alongside the conversation:

- **Head and base** branches, PR state, and status checks
- **Reviews and unresolved comments**, each with author, file and line reference, and age
- **Add all to chat** — pulls the reviewer comments into the thread as context, so your next message can just be "address the review"
- **Merge** — squash-merge from right inside the thread

## The review loop

Hoplite tracks your PR's review threads, comments, and checks via webhooks. When reviewers leave feedback or checks fail, that state is waiting for the agent on its next run — unresolved comments feed back into the conversation instead of getting lost in GitHub notifications.

## In the sandbox

Every sandbox comes with a repo-scoped git identity, credentials, and the `gh` CLI preconfigured. Commits and pushes are attributed correctly, and the agent can fall back to `gh` for anything the first-party [GitHub tools](/docs/agent/tools#github) don't cover.

## Sitemap

See the full [sitemap](/docs/sitemap.md) for all pages.
Well-known sitemap: [/docs/.well-known/sitemap.md](/docs/.well-known/sitemap.md).
