Pulls open Dependabot alerts, classifies each CVE by severity and CVSS, opens a Jira ticket carrying the upgrade path, records the finding in Datadog, and posts a digest to your security channel. Every call runs as the engineer who owns the triage, never a shared bot.
This repo keys every connected account on per-connector GITHUB_USER, JIRA_USER, SLACK_USER, and DATADOG_USER identities, defaulting to one security engineer's email. In production, pass each user's real ID as the identifier on every Scalekit call, and send them an authorization link whenever their connector status is not ACTIVE.
for connector_name, identifier in cfg.get_connector_users().items():
resp = actions.get_or_create_connected_account(
connection_name=connector_name, # github / jira / slackmcp / datadog
identifier=identifier, # the security engineer, not a bot
)
if resp.connected_account.status != "ACTIVE":
link = actions.get_authorization_link(
connection_name=connector_name, identifier=identifier,
).link
logger.warning(f"Authorize here: {link}")Four things you'd otherwise build: GitHub security_events grants, Jira OAuth, Slack MCP tokens, Datadog API keys, refresh. Handled.
Clone github.com/scalekit-developers/workflow-agents-demos/tree/main/security-vulnerability-triage-agent and adapt it for my security stack.
I am building for: my security team (or: an AppSec product) <- edit this line
Connectors my users need: GitHub, Jira, Slack, Datadog <- edit this line
Trigger: invoked per triage cycle, manually or on a schedule. Deliver: a Jira ticket per CVE with its CVSS score and upgrade path, a Datadog event per finding, and a digest in the security channel.
Steps:
1. Create Scalekit AgentKit connections for github, jira (the plain JIRA REST connector, not AtlassianMCP -- this agent uses jira_issue_create and jira_issues_search), an MCP-variant slack, and datadog -- copy the exact connection names into GITHUB_CONNECTOR / JIRA_CONNECTOR / SLACK_CONNECTOR / DATADOG_CONNECTOR.
2. Grant the GitHub connection the security_events scope and switch Dependabot alerts on for the repo under Settings > Code security, or Step 1 returns 403 on a private repo.
3. Set GITHUB_OWNER / GITHUB_REPO and JIRA_PROJECT_KEY, and let Step 0.5 confirm JIRA_ISSUE_TYPE is valid for that project before anything is filed.
4. Set MIN_TICKET_SEVERITY to the floor that earns a ticket and MONITOR_SEVERITY to the floor that earns a Datadog monitor; leave ENABLE_DATADOG_MONITORS=false until I want monitors I have to clean up by hand.
5. Invite the connected Slack account into SLACK_CHANNEL, or set it to a literal channel or user ID to DM the digest instead.
6. Run python run_flow.py --dry-run to see the tickets and digest without writing anything, then describe how to schedule it or set POLLING_MODE=true.
Each one runs on delegated identity, scoped per user.