Skip to content

Skills Overview

Skills are the connectors between your workflows and external services. Each skill is a logical group of tools that share configuration — set the required environment variables and the skill is ready. No boilerplate, no adapters, no code.

SWEny workflows are directed acyclic graphs (DAGs). At each node in the graph, you declare which skills are available. When the executor reaches that node, it gathers the tools from those skills and hands them to Claude. Claude calls the tools as needed to complete the node’s instruction, then the executor evaluates edge conditions to decide what runs next.

nodes:
gather:
name: Gather Context
instruction: Pull error details and recent commits...
skills: [github, sentry, datadog]

In this example, the gather node has access to all tools from the GitHub, Sentry, and Datadog skills. Claude can search code, query errors, and pull log data — all within a single node.

Skills resolve their configuration from environment variables. If the required env vars are set, the skill is available. There is no registration step.

Terminal window
# Set these and the GitHub + Sentry skills are ready
export GITHUB_TOKEN="ghp_..."
export SENTRY_AUTH_TOKEN="sntrys_..."
export SENTRY_ORG="my-org"

The configuredSkills() helper returns only the skills whose required env vars are present. The executor uses this to build the tool set for each node at runtime.

Every skill belongs to a category. Categories are used for validation — the executor checks that each node has at least one configured skill per category it needs.

CategoryPurposeSkills
gitSource controlGitHub
observabilityLogs, errors, metrics, incidentsSentry, Datadog, BetterStack
tasksIssue trackingLinear
notificationAlerting the teamSlack, Notification
IDNameCategoryRequired env vars
githubGitHubgitGITHUB_TOKEN
linearLineartasksLINEAR_API_KEY
sentrySentryobservabilitySENTRY_AUTH_TOKEN, SENTRY_ORG
datadogDatadogobservabilityDD_API_KEY, DD_APP_KEY
betterstackBetterStackobservabilityBETTERSTACK_API_TOKEN
slackSlacknotificationSLACK_WEBHOOK_URL or SLACK_BOT_TOKEN
notificationNotificationnotificationDISCORD_WEBHOOK_URL, TEAMS_WEBHOOK_URL, NOTIFICATION_WEBHOOK_URL, or SMTP_URL

Before executing a workflow, SWEny validates that every node’s skill requirements can be satisfied. For each node, it groups the declared skills by category and checks that at least one skill per category is configured.

Missing notification skills produce warnings. Missing skills in other categories produce errors that block execution.

Run sweny check to verify your configuration without executing a workflow.

Terminal window
npx sweny check --workflow triage
import { github, sentry, slack, createSkillMap, configuredSkills } from "@sweny-ai/core";
// Explicit skill map
const skills = createSkillMap([github, sentry, slack]);
// Or auto-detect from environment
const skills = createSkillMap(configuredSkills());
await execute(workflow, input, { skills, claude });

In addition to built-in skills, you can create custom instruction skills and MCP-backed skills. See the Custom Skills guide for details on:

  • Creating SKILL.md files with instruction content
  • Declaring MCP server integrations
  • Inline workflow skill definitions
  • Multi-harness skill discovery