Skip to content

GitHub Action Setup

SWEny ships three GitHub Actions. Pick the one that matches your use case:

ActionUse caseRepo
swenyai/triage@v1SRE triage — monitors alerts, files tickets, opens fix PRsswenyai/triage
swenyai/e2e@v1Agentic E2E browser tests — AI drives a real browser, uploads screenshotsswenyai/e2e
swenyai/sweny@v5Generic runner — execute any SWEny workflow YAMLthis repo

The triage and e2e actions are preset wrappers that auto-wire credentials, install dependencies, and expose a focused input surface. The generic runner takes any workflow YAML you build with sweny workflow create.

  • A GitHub repository
  • SWEny uses Claude as its AI engine — you’ll need an Anthropic API key or a Claude OAuth token
  • For triage: an observability platform (Datadog, Sentry, CloudWatch, or 17 others)

The most common use case. Create .github/workflows/sweny-triage.yml:

name: SWEny Triage
on:
workflow_dispatch:
permissions:
contents: write
issues: write
pull-requests: write
jobs:
triage:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: swenyai/triage@v1
with:
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
observability-provider: sentry
sentry-auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }}
sentry-org: my-org
sentry-project: my-project

Three secrets and you are running. SWEny uses GitHub Issues by default — no extra issue tracker setup required.

Run any workflow YAML built with sweny workflow create:

name: Weekly Competitive Scan
on:
schedule:
- cron: '0 9 * * 1'
workflow_dispatch:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: swenyai/sweny@v5
with:
workflow: .sweny/workflows/competitive-scan.yml
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}

In your repository Settings > Secrets and variables > Actions, add the credentials for your chosen provider:

SecretWhere to get it
CLAUDE_CODE_OAUTH_TOKENClaude Max subscription > OAuth token
SENTRY_AUTH_TOKENSentry > Settings > Auth Tokens

The GITHUB_TOKEN is provided automatically by GitHub Actions — you do not need to create it. SWEny uses it to create branches, issues, and pull requests.

Your workflow needs these permissions for SWEny to create issues and PRs:

permissions:
contents: write # Create branches and push commits
issues: write # Create and update issues
pull-requests: write # Open pull requests

For read-only analysis (dry run), contents: read and issues: write are sufficient.

  1. Push the workflow file to your repository
  2. Go to the Actions tab
  3. Select your workflow from the sidebar
  4. Click Run workflow
  5. Check the Actions summary for results

For triage, consider adding dry-run: true to analyze without creating any issues or PRs:

- uses: swenyai/triage@v1
with:
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
observability-provider: sentry
sentry-auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }}
sentry-org: my-org
sentry-project: my-project
dry-run: true

Review the output, then remove dry-run and put it on a schedule.

The example above uses Sentry. To use Datadog instead:

- uses: swenyai/triage@v1
with:
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
observability-provider: datadog
dd-api-key: ${{ secrets.DD_API_KEY }}
dd-app-key: ${{ secrets.DD_APP_KEY }}

SWEny supports 20 observability providers including CloudWatch, Splunk, Elastic, New Relic, Loki, Vercel, Supabase, Fly.io, and more. See the full list in Inputs & Outputs.

Using Linear or Jira instead of GitHub Issues

Section titled “Using Linear or Jira instead of GitHub Issues”

Set issue-tracker-provider and add the relevant credentials:

- uses: swenyai/triage@v1
with:
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
dd-api-key: ${{ secrets.DD_API_KEY }}
dd-app-key: ${{ secrets.DD_APP_KEY }}
issue-tracker-provider: linear
linear-api-key: ${{ secrets.LINEAR_API_KEY }}
linear-team-id: ${{ vars.LINEAR_TEAM_ID }}

For Jira:

issue-tracker-provider: jira
jira-base-url: https://mycompany.atlassian.net
jira-email: ${{ secrets.JIRA_EMAIL }}
jira-api-token: ${{ secrets.JIRA_API_TOKEN }}