Postil

Install

Choose your forge. Start reviewing pull requests.

On GitHub, one identity can start 30-day hosted trials for up to three organizations without a card. Additional organizations use BYOK. GitLab, Bitbucket, and Azure DevOps run the Postil CLI inside their own CI.

01

GitHub App

Thirty days free. No card required.

Choose all repositories or a selected set during installation. The 30-day hosted trial starts automatically for up to three organizations installed by one GitHub identity. Additional organizations start with BYOK access; connect a provider in organization settings. New non-draft pull requests are reviewed after setup. Draft pull requests are skipped until they are marked ready. Existing open pull requests are not reviewed retroactively unless a review is requested again.

Private reviews pause when the trial ends unless a paid plan is active. Public repositories remain free when you use your provider.

You can disable individual repositories from the organization dashboard. The App also answers @postil mentions on PRs and issues. It reviews and answers only; it never opens PRs or pushes commits.

The App uses the same review engine as the CLI, GitHub Action, and self-hosted stack.

Permissions requested: contents (read), pull requests (write), checks (write), metadata (read). Never write access to your code. See the security page.

02

GitHub Action

Optional CI reviews and merge blocking with your own model key.

.github/workflows/review.yml
on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  postil:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
      checks: write
    steps:
      - uses: actions/checkout@v4
      - uses: postil-dev/postil-action@00442e2340edaa4a681955dbb25e20650ca1514c
        with:
          cli-ref: dcf4e34c4804d4bf64705ab6367c883cea23b33a
          cli-release: v0.7.2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          MODEL_API_KEY: ${{ secrets.MODEL_API_KEY }}
          POSTIL_API_KEY: ${{ secrets.MODEL_API_KEY }}

The action requires a full 40-character commit SHA for cli-ref. Require postil/gate in branch protection when review failures should block merges. The GitHub App starts reviewing during the hosted trial without this CI workflow.

CLI

Installation and verification

Shared by local workflows and every self-run forge integration. Apache-2.0.

install: one line
# install script (verifies the published SHA-256 over HTTPS)
$ curl -fsSL https://postil.dev/install.sh | sh

The script detects your OS and architecture, downloads the matching prebuilt binary from the GitHub release, verifies it against the SHA-256 checksum published alongside the release, and installs it to ~/.local/bin (no sudo required). Inspect it first if you prefer: curl -fsSL https://postil.dev/install.sh | less.

Release artifacts are signed with Sigstore keyless signing (cosign) via GitHub OIDC in release CI, alongside SHA-256 checksums. If cosign is installed, the script additionally verifies the keyless signature against the release workflow's certificate identity. There is no long-lived published key to manage. Without cosign it falls back to checksum verification only. Cross-check the published SHA-256 on the releases page if you want a second source.

install: build from source
# Rust toolchain, build from the repository
$ cargo install --git https://github.com/postil-dev/postil-cli --locked

Prebuilt targets: Linux x86_64 and aarch64, macOS arm64 and x86_64.

first run
$ export MODEL_API_KEY=sk-or-...
$ export POSTIL_API_KEY="$MODEL_API_KEY"
$ postil doctor

Always run postil doctor before your first review. It checks the resolved config, the git work tree, your API key, a live probe of the model endpoint, and any forge tokens. A captured successful run reports:

postil doctor
$ postil doctor

[ok  ] config           loaded from defaults (model: local-doctor-probe, gate failOn: error, minConfidence: 0.6)
[ok  ] git              inside a git work tree
[ok  ] api key          POSTIL_API_KEY, OPENROUTER_API_KEY, MODEL_API_KEY, LLM_API_KEY is set (value not shown)
[ok  ] model endpoint   http://127.0.0.1:3117/v1 answered for model local-doctor-probe
[ok  ] forge tokens     presence only: GITHUB_TOKEN unset, GITLAB_TOKEN unset (only needed for remote review)

postil doctor: ready.

This transcript was captured from the CLI against a loopback OpenAI-compatible endpoint. Your provider URL and model name will differ; key values are not printed.

Then review your staged changes with postil review --staged. See the quickstart and the full command reference.