Skip to content

Review and land the agent's work

This page fetches the agent’s commits and uncommitted work from the sandbox into your local checkout, where you review them with your own tools and merge them or open a pull request.

Run these from your checkout of the repo, while the sandbox is running. Each one finds the sandbox for this checkout, preferring one on your current branch. If you have more than one, pass --id <id>.

  1. See what changed.

    Terminal window
    droneship diff

    It opens in your pager: the sandbox’s commits since origin/<branch>, plus its uncommitted and untracked files. After the patch you get a one-line summary:

    <id>: 2 commits ahead of origin/main · 1 uncommitted

    droneship diff --stat lists only the files. droneship diff > agent.patch writes a patch that git apply takes.

  2. Fetch it into a local branch.

    Terminal window
    droneship pull
    Fetched <id> into branch droneship/feat-login (2 commits + 1 "uncommitted changes" commit).
    Your working tree was not touched.
    git log main..droneship/feat-login review
    git merge --ff-only droneship/feat-login take it

    The agent’s commits arrive as they are, and its uncommitted changes come as one extra commit. Your working tree and current branch stay as they were.

  3. Review it and merge it.

    Terminal window
    git log main..droneship/feat-login
    git merge --ff-only droneship/feat-login

    Review it as you would a teammate’s branch: in your editor, with your tests.

  4. Or open a pull request instead.

    Terminal window
    droneship pr
    Pushed feat-login from <id> (2 commits). Opening a PR:

    The push runs inside the sandbox. The pull request opens from your machine: with gh if it’s signed in, otherwise on GitHub’s compare page in your browser. The title is the last commit’s subject, and the body lists the commits. Change them with --title, --body and --base.

droneship pr needs committed work on a branch other than the default one. It tells you what’s missing:

<id> is on main, the default branch; a PR comes from another one. In the box: git switch -c <name>, then droneship pr.
<id> has 1 uncommitted change, which a PR would leave out. Commit in the box first, or droneship pull.

If you ask Claude to work on a branch and commit as it goes, pr has what it needs. To run the fix yourself, open a shell with droneship shell.

The push also needs a GitHub credential. A task always has one when GitHub is connected. A live sandbox has one only on a private repo, so on a public repo pr stops and says what to do instead:

<id> has no GitHub credential to push with: a live sandbox gets one only for a private repo. Run droneship pull, then push the branch yourself.

If GitHub refuses the push, the Highflame Forge app is usually not installed on the repo:

GitHub refused the push from <id> (403): your GitHub connection cannot write to this repo. Install the Highflame Forge app on it at https://github.com/apps/highflame-forge/installations/new, check that you can push to the repo, then run droneship pr again.
Flag On Does
--base REF diff, pull Compare with REF instead of origin/<branch>
--stat diff Only the files changed
--dry-run pull, pr Show what would happen, fetch or push nothing
--force pull Replace droneship/<branch> even if you’ve committed on it
--title, --body, --base pr The pull request’s title, body and target branch

A later pull updates droneship/<branch> in place. If you’ve committed on that branch yourself, pull refuses to replace it unless you pass --force.

More: droneship diff, droneship pull, droneship pr.