Documentation Index
Fetch the complete documentation index at: https://allhandsai-add-verification-stack-docs.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Beta Feature: Event-based automations are in beta for OpenHands Cloud and OpenHands Enterprise users.
Built-In vs. Custom Integrations
| Type | Setup | Best For |
|---|---|---|
| Built-in (GitHub) | One-time org setup, then create automations | PR reviews, issue triage, push-triggered tasks |
| Custom Webhooks | Register webhook first, then create automation | Linear, Stripe, Slack, and other services |
GitHub Events (Built-In)
GitHub is a built-in integration. Create automations that respond to GitHub events without any webhook setup.Example: Auto-Review PRs with a Specific Label
When a PR is labeled withopenhands, automatically review it:
- Trigger type:
event - Source:
github - Event:
pull_request.labeled - Filter: Matches PRs labeled
openhands
Example: Respond to @openhands Mentions
Available GitHub Events
| Event | Common Actions | Use Case |
|---|---|---|
pull_request | opened, labeled, synchronize, ready_for_review | PR automation |
issues | opened, labeled, assigned | Issue triage |
issue_comment | created | Mention responses |
push | — | Branch-based triggers |
release | published | Release workflows |
pull_request.* to match all actions for an event type.
Filtering Events
Filters let you narrow which events trigger your automation. They use JMESPath expressions to match fields in the event payload—so you can trigger only on specific labels, users, branches, or other conditions. Common filter patterns:Prerequisites for GitHub Event Automations
GitHub event automations require some one-time setup before events will flow. If any step is missing, automations will appear to work (manual triggers succeed) but GitHub events will silently never arrive.1. Install the OpenHands GitHub App
The OpenHands GitHub App must be installed on the GitHub organization that owns the repositories you want to monitor. Install it from your GitHub integration settings. The app needs access to the repositories that will generate events.2. Create an OpenHands Team Organization
If you’re working with repositories owned by a GitHub organization (e.g.,myorg/my-repo), you need an OpenHands team organization — not just a personal account. GitHub events for org repos are routed to team orgs, not personal orgs.
If you don’t already have one, create a team organization from the OpenHands Cloud settings.
3. Claim Your GitHub Organization
Your OpenHands team org must claim the GitHub organization to establish the link between GitHub webhooks and your OpenHands org. Claiming tells the event router: “Events for repos in this GitHub org should go to this OpenHands team org.” To claim a GitHub org:- Switch to your team org using the org switcher in the sidebar
- Go to Organization Settings
- In the Git Conversation Routing section, find your GitHub org
- Click Claim
4. Create the Automation Under the Team Org
Make sure you are switched to the team org (not your personal org) when creating the automation. The automation must live in the same org that claimed the GitHub organization — otherwise events won’t match.5. (Optional) Add Service Accounts to the Team Org
If you’re using a service account (like a bot account) to create or own automations, that account must be a member of the team org. Invite them from the Organization Members page.Example: Setting Up a PR Review Bot
Here’s a complete walkthrough for setting up an event-driven PR review automation:- Install the GitHub App on your GitHub org with access to the target repo
- Switch to your team org in OpenHands Cloud
- Claim the GitHub org in Organization Settings → Git Conversation Routing
- Create the automation:
- Test it: Open a PR in the target repo and add the trigger label. Check your automation runs to verify it was triggered.
Troubleshooting
If your automation doesn’t trigger on GitHub events:GitHub org not claimed
GitHub org not claimed
The most common cause. Go to Organization Settings → Git Conversation Routing and check if your GitHub org shows as claimed. If not, click Claim. See Claiming Git Organizations.
Automation in personal org instead of team org
Automation in personal org instead of team org
GitHub events for org repos are routed to the team org that claimed the GitHub org. If you created the automation under your personal org, events will never reach it. Switch to the team org and recreate the automation.
Event type or filter mismatch
Event type or filter mismatch
Double-check that the event type (e.g.,
pull_request.labeled) and filter expression match the action you’re testing. Use wildcards like pull_request.* to match all actions during debugging.Automation is disabled
Automation is disabled
Verify the automation is enabled. You can check via the automations list or by asking OpenHands to list your automations.
Custom Webhooks
For services beyond GitHub—like Linear, Stripe, or Slack—register a custom webhook first, then create automations that use it.Two-phase workflow for custom webhooks:
- Webhook registration (one-time setup): You execute the curl command yourself to register the webhook. This keeps your signing secrets secure—the agent provides the command but never handles your credentials directly.
- Automation creation (repeatable): Once the webhook is registered, the agent can create, update, and manage automations for that webhook source conversationally—no manual curl commands needed.
Walkthrough: Linear Integration
This example walks through setting up a Linear webhook to auto-triage new issues.Step 1: Get Your Webhook Secret from Linear
Linear provides the webhook signing secret—you cannot configure your own.- Go to Linear Settings → API → Webhooks
- Click New webhook
- Copy the signing secret that Linear displays (you’ll need this in the next step)
- Leave the webhook URL blank for now—you’ll get it from OpenHands
Step 2: Register the Webhook with OpenHands
First, set up your environment variables:- Create an OpenHands API key at app.all-hands.dev/settings/api-keys
- Export the API key and the webhook secret from Step 1:
webhook_url that you’ll configure in Linear.
Understanding event_key_expr
Understanding event_key_expr
The With
event_key_expr is a JMESPath expression that extracts the event type from incoming webhook payloads. This extracted value is what you match against in the automation’s on field.For example, Linear sends payloads like:event_key_expr: "type", the system extracts "Issue" as the event type. Then in your automation, you set on: "Issue" to match it.Step 3: Complete the Linear Webhook Configuration
- Return to the Linear webhook you started in Step 1
- Paste the
webhook_urlfrom the previous step - Select which events to send (e.g., Issues, Comments)
- Save the webhook
Step 4: Create the Automation
Now the webhook is registered, the agent can create automations for you end-to-end. Just describe what you want:- Source:
linear(your registered webhook) - Event:
Issue(Linear’s event type) - Filter:
action == 'create'
Custom Webhook Parameters
When registering any custom webhook, these parameters define how OpenHands processes incoming events:| Parameter | Required | Description |
|---|---|---|
name | Yes | Human-readable name |
source | Yes | Unique identifier (lowercase, alphanumeric with hyphens) |
event_key_expr | No | JMESPath to extract event type (default: type) |
signature_header | No | Header containing HMAC signature (default: X-Signature-256) |
webhook_secret | No | Signing secret—provide yours or let the system generate one |
Common Services
These are example configurations for popular services. Always verify with each service’s webhook documentation, as signature headers and payload formats may change.| Service | Signature Header | Event Key |
|---|---|---|
| Linear | Linear-Signature | type |
| Stripe | Stripe-Signature | type |
| Slack | X-Slack-Signature | type |
| Twilio | X-Twilio-Signature | type |
Next Steps
New to automations? Start with the Automations Overview for the bigger picture, including cron-based scheduling and general concepts.- Automations Overview — Cron-based automations and general concepts
- Managing Automations — Update, disable, or delete automations

