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.

Category Purpose Skills
git Source control GitHub
observability Logs, errors, metrics, incidents Sentry, Datadog, BetterStack
tasks Issue tracking Linear
notification Alerting the team Slack, Notification
data Embeddings, vector stores, databases, ETL (custom skills)
general Catch-all when no other category fits Supabase, (custom skills)
ID Name Category Required env vars
github GitHub git GITHUB_TOKEN
linear Linear tasks LINEAR_API_KEY
sentry Sentry observability SENTRY_AUTH_TOKEN, SENTRY_ORG
datadog Datadog observability DD_API_KEY, DD_APP_KEY
betterstack BetterStack observability BETTERSTACK_API_TOKEN, BETTERSTACK_QUERY_ENDPOINT, BETTERSTACK_QUERY_USERNAME, BETTERSTACK_QUERY_PASSWORD
supabase Supabase general SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY
slack Slack notification SLACK_WEBHOOK_URL or SLACK_BOT_TOKEN
notification Notification notification DISCORD_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