Skip to content

Inputs & Outputs

SWEny ships three GitHub Actions, each with its own input surface. This page documents all inputs for all three.

Action Use case Docs
swenyai/triage@v1 SRE triage — monitors alerts, files tickets, opens fix PRs Triage inputs
swenyai/e2e@v1 Agentic E2E browser tests E2E inputs
swenyai/sweny@v5 Generic runner — any workflow YAML Generic inputs

swenyai/sweny@v5 — runs any SWEny workflow YAML. Minimal input surface.

Input Description Default
workflow Path to the workflow YAML file to execute (relative to working-directory) required
claude-oauth-token Claude Code OAuth token from a Max/Pro subscription –
anthropic-api-key Anthropic API key for Claude (pay-per-use billing) –
agent Coding agent that runs the nodes: claude or codex claude
openai-api-key OpenAI API key for agent: codex (passed to Codex as CODEX_API_KEY) –
codex-version Version of @openai/codex to install for agent: codex . Defaults to the version the Codex capabilities were tested against; a newer one runs with a warning 0.159.2
harness-policy strict refuses a node whose policy the agent cannot enforce; warn runs it and lists it as degraded in the receipt. Empty uses the CLI default (strict under GitHub Actions) –
max-tokens Run-wide token budget (input plus output). Forwarded as --max-tokens only when set; the lowest of this and the workflow’s budget.tokens wins. The step fails on a CLI too old to enforce it, so a cap is never silently dropped –
max-cost Run-wide cost budget in US dollars (harness-reported cost, never estimated). Forwarded as --max-cost only when set. See Spend budgets –
show-output Print the workflow’s final answer in the job log. Off by default: the CLI prints only the path of the saved answer (.sweny/runs/<run-id>/output.md), since job logs are often readable by more people than the repo’s secrets. Redacted either way. Forwarded as --show-output only when set false
cli-version Version of @sweny-ai/core to install. The floating v5 tag defaults to latest; an immutable v5.<version> tag defaults to that exact version latest
node-version Node.js version to install 24
working-directory Working directory to run from .
pr-comment On pull_request events, post or update one comment on the PR with the run receipt, a status-colored DAG, and per-node status and duration. Metadata only: no prompts, tool inputs, or model output. No-op on every other event. Set to false to opt out true

With agent: claude you must provide either claude-oauth-token or anthropic-api-key; with agent: codex, openai-api-key.

The comment needs pull-requests: write on the job’s GITHUB_TOKEN. Grant it only when pr-comment is enabled:

permissions:
contents: read
pull-requests: write

The comment is created once and updated in place on later runs (found by a hidden <!-- sweny-run-comment:<workflow-id> --> marker). If posting fails (for example a fork PR with a read-only token), the step warns and the job is unaffected. Needs a @sweny-ai/core version with --comment-file.

On other CI systems, run sweny workflow run <file> --comment-file comment.md and post the file with your runner’s API.

Pass any additional credentials your workflow needs via env: on the step — the CLI auto-loads environment variables.


swenyai/triage@v1 — the full triage preset with observability, issue tracking, notification, and investigation inputs.

Input Description Default
anthropic-api-key Anthropic API key for Claude (pay-per-use billing) –
claude-oauth-token Claude Code OAuth token from a Max/Pro subscription (predictable monthly cost) –
github-token GitHub token for API access and PR creation ${{ github.token }}
bot-token Optional bot token with elevated permissions for cross-repo dispatch or pushing to protected branches –

You must provide either anthropic-api-key or claude-oauth-token. The github-token is auto-provided by GitHub Actions.

Input Description Default
agent Agent backend. Only claude (headless Claude Code) is supported; other values are rejected. claude
Input Description Default
observability-provider Provider to query for logs, errors, and metrics datadog

Supported values: datadog, sentry, betterstack, cloudwatch, splunk, elastic, newrelic, loki, honeycomb, axiom, heroku, opsgenie, pagerduty, prometheus, vercel, supabase, netlify, fly, render, file.

Input Description Default
dd-api-key Datadog API key –
dd-app-key Datadog Application key –
dd-site Datadog site (e.g., datadoghq.com, datadoghq.eu) datadoghq.com
Input Description Default
sentry-auth-token Sentry auth token –
sentry-org Sentry organization slug –
sentry-project Sentry project slug –
sentry-base-url Sentry base URL (for self-hosted instances) https://sentry.io
Input Description Default
cloudwatch-region AWS region for CloudWatch Logs us-east-1
cloudwatch-log-group-prefix CloudWatch log group name or prefix –
Input Description Default
betterstack-api-token Better Stack API token –
betterstack-source-id Better Stack Telemetry source ID –
betterstack-table-name Better Stack Telemetry ClickHouse table name –
Input Description Default
splunk-url Splunk REST API base URL (e.g., https://splunk.example.com:8089) –
splunk-token Splunk authentication token –
splunk-index Splunk index to search main
Input Description Default
elastic-url Elasticsearch base URL (e.g., https://elastic.example.com:9200) –
elastic-api-key Elasticsearch API key –
elastic-index Elasticsearch index pattern logs-*
Input Description Default
newrelic-api-key New Relic API key (NRAK-...) –
newrelic-account-id New Relic account ID –
newrelic-region New Relic region: us or eu us
Input Description Default
loki-url Loki base URL (e.g., https://loki.example.com) –
loki-api-key Loki API key (optional for unauthenticated instances) –
loki-org-id Loki tenant/org ID (optional) –
Input Description Default
honeycomb-api-key Honeycomb API key –
honeycomb-dataset Honeycomb dataset name –
Input Description Default
axiom-api-token Axiom API token –
axiom-dataset Axiom dataset name –
axiom-org-id Axiom org ID (required for multi-org accounts) –
Input Description Default
pagerduty-api-key PagerDuty API key –
Input Description Default
opsgenie-api-key OpsGenie API key –
opsgenie-region OpsGenie region: us or eu us
Input Description Default
prometheus-url Prometheus base URL (e.g., http://prometheus.internal:9090) –
prometheus-token Prometheus bearer token (optional, for secured instances) –
Input Description Default
vercel-token Vercel personal access token –
vercel-project-id Vercel project ID (prj_...) –
vercel-team-id Vercel team ID (team_..., optional for team-owned projects) –
Input Description Default
supabase-management-key Supabase management API key –
supabase-project-ref Supabase project reference ID –
Input Description Default
netlify-token Netlify personal access token –
netlify-site-id Netlify site ID (find in Site Settings > General) –
Input Description Default
fly-token Fly.io personal access token –
fly-app-name Fly.io application name –
Input Description Default
render-api-key Render API key –
render-service-id Render service ID (srv-...) –
Input Description Default
heroku-api-key Heroku API key –
heroku-app-name Heroku application name –
Input Description Default
log-file-path Path to a local JSON log file –

Use the file provider for testing without connecting to an external service.

Input Description Default
issue-tracker-provider Issue tracker to use: github-issues, linear, or jira github-issues
Input Description Default
linear-api-key Linear API key –
linear-team-id Linear team UUID –
linear-bug-label-id Linear label UUID for bugs –
linear-triage-label-id Linear label UUID for agent-triage issues –
linear-state-backlog Linear workflow state UUID for Backlog –
linear-state-in-progress Linear workflow state UUID for In Progress –
linear-state-peer-review Linear workflow state UUID for Peer Review –

Only linear-api-key and linear-team-id are required. The label and state UUIDs are optional and let you control where issues land in your workflow.

Input Description Default
jira-base-url Jira base URL (e.g., https://myco.atlassian.net) –
jira-email Jira user email for API authentication –
jira-api-token Jira API token –

GitHub Issues requires no extra configuration. It uses the github-token input, which is auto-provided by GitHub Actions.

Input Description Default
source-control-provider Source control provider: github or gitlab github
gitlab-token GitLab personal access token –
gitlab-project-id GitLab project ID or path (e.g., my-group/my-project) –
gitlab-base-url GitLab instance base URL https://gitlab.com
Input Description Default
notification-provider Where to send results: github-summary, slack, teams, discord, email, webhook, or file github-summary
notification-webhook-url Webhook URL (required for slack, teams, discord, and webhook providers) –
sendgrid-api-key SendGrid API key (required when notification-provider is email) –
email-from Sender email address (required when notification-provider is email) –
email-to Recipient email addresses, comma-separated (required when notification-provider is email) –
webhook-signing-secret HMAC-SHA256 signing secret for generic webhook notifications –
output-dir Directory for file-based provider output (dry-run and file provider artifacts) .github/sweny-output
Input Description Default
time-range Time window to analyze (e.g., 1h, 6h, 24h, 7d) 24h
severity-focus What to focus on: errors, warnings, or all errors
service-filter Service filter pattern (e.g., my-service, api-*, *) *
investigation-depth How deep the agent should investigate: quick, standard, or thorough standard
max-investigate-turns Maximum Claude turns for the investigation phase (1–500) 50
max-implement-turns Maximum Claude turns for the implementation phase (1–500) 30
Input Description Default
base-branch Target branch for PRs (e.g., main, master, develop) main
pr-labels Comma-separated list of labels to apply to created PRs agent,triage,needs-review
Input Description Default
dry-run Analyze only – the executor runs every node read-only and stops at the first natural-language conditional edge. Enforced by the executor, not by prompt. false
review-mode PR merge behavior: auto (enable GitHub auto-merge when CI passes, automatically suppressed for high-risk changes like migrations, auth, lockfiles, or >20 files) or review (open PR and wait for human approval) review
novelty-mode Only report novel issues not already tracked in your issue tracker true
issue-override Existing issue identifier to work on (e.g., ENG-123). Skips log scanning and works directly on this issue. –
additional-instructions Extra guidance for the agent (e.g., "focus on the webhook handler") –
Input Description Default
service-map-path Path to the service ownership map YAML file .github/service-map.yml

See Service Map for the file format and usage guide.

Input Description Default
workspace-tools Comma-separated list of workspace integrations to enable. Each tool injects its MCP server when the corresponding credential environment variable is present –

Supported values: slack, notion, pagerduty, monday, asana.

Example: workspace-tools: "slack,notion"

Input Description Default
mcp-servers-json Additional MCP servers as a JSON object. Each key is a server name; each value is an MCPServerConfig with fields: type, command, args, env, url, headers –

Provider-based MCP servers (GitHub, Linear, Datadog) are injected automatically based on your configured providers – you do not need to add them here.

mcp-servers-json: |
{
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem@latest", "/workspace"]
}
}

See MCP Servers for the full server catalog.

Input Description Default
cli-version Version of @sweny-ai/core to install latest
node-version Node.js version to install 24
working-directory Working directory to run from .

After the triage workflow completes, SWEny sets these outputs on the action step. Use them in subsequent workflow steps with ${{ steps.<step-id>.outputs.<output> }}.

Output Description Example
issues-found Whether any issues were found during investigation true
recommendation Investigation recommendation implement, +1 existing ENG-456, skip
issue-identifier Issue identifier from the configured tracker ENG-123, #42
issue-url URL of the created or found issue https://linear.app/team/issue/ENG-123
pr-url URL of the created pull request https://github.com/org/repo/pull/99
pr-number Number of the created pull request 99
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- uses: swenyai/triage@v1
id: sweny
with:
claude-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
dd-api-key: ${{ secrets.DD_API_KEY }}
dd-app-key: ${{ secrets.DD_APP_KEY }}
- name: Post to Slack if issues found
if: steps.sweny.outputs.issues-found == 'true'
run: |
curl -X POST "${{ secrets.SLACK_WEBHOOK }}" \
-H 'Content-type: application/json' \
-d '{"text": "SWEny found issues: ${{ steps.sweny.outputs.issue-url }}"}'

swenyai/e2e@v1 — runs agentic browser tests against a deployed app.

Input Description Default
workflow Path to the E2E workflow YAML file to execute required
claude-oauth-token Claude Code OAuth token –
anthropic-api-key Anthropic API key for Claude –
base-url Base URL of the deployed app under test (exposed as BASE_URL) –
cli-version Version of @sweny-ai/core to install latest
agent-browser-version Version of agent-browser to install latest
node-version Node.js version to install 24
working-directory Working directory to run from .
screenshots-path Path where the workflow writes screenshots and artifacts results/
artifact-name Name of the uploaded screenshots artifact e2e-screenshots
artifact-retention-days How long to retain the screenshots artifact (days) 14

You must provide either claude-oauth-token or anthropic-api-key.