Automate GitHub + Slack
Where the code — and half the process — lives. Team chat where operations actually surface. Put an agent between them and the hand-off stops being manual: it reads, decides, acts, and shows its work.
First-Pass Reviewer already works across GitHub and Slack — free, and it runs on your machine.
Automations teams run
Each of these runs with a reasoning step between the two tools, so what reaches Slack is a decision about the GitHub event rather than a transcription of it.
When a PR opens or merges in GitHub…
…an agent can post a rich channel message in Slack — after reading the context and deciding it should.
When an issue is filed in GitHub…
…an agent can DM a teammate in Slack — after reading the context and deciding it should.
When a release is cut in GitHub…
…an agent can open a thread with findings in Slack — after reading the context and deciding it should.
When a message hits a channel in Slack…
…an agent can comment on PRs and issues in GitHub — with the reasoning recorded in the run’s receipt.
When a keyword or mention fires in Slack…
…an agent can open issues with structured detail in GitHub — with the reasoning recorded in the run’s receipt.
When a reaction is added in Slack…
…an agent can draft release notes in GitHub — with the reasoning recorded in the run’s receipt.
GitHub to Slack, setup template
Start with the github-api node and the slack-api node. Configure the GitHub source payload, the agent input, and the Slack operation. The sequential template does not implement conditional writes or approval by itself.
This is a schema-checked starting point, not an end-to-end tested automation. Replace every CONFIGURE_ value, choose the operations you intend, connect credentials and map source outputs into later inputs. An edge orders steps; it does not supply a condition, an approval gate or a field mapping. Add and test those controls explicitly before any write. Cloud APIs and model providers may receive data. Keep the workflow inactive until tested with fixtures.
{
"id": "fbdccef6-06cf-4bb9-a4d1-e1f98f24409e",
"name": "GitHub → Slack",
"nodes": [
{
"id": "db8f22ed-f37f-4680-a363-282d95592220",
"text": "Run on a schedule",
"x": 512,
"y": 144,
"isEditing": false,
"type": "trigger-timer",
"icon": "connect",
"category": "trigger",
"isSelected": false,
"parameters": {
"fireOnStart": "No",
"scheduleType": "Interval",
"schedule": "Every 15 Minutes"
},
"description": "Setup template for Timer Trigger. This trigger node fires the workflow at specified intervals or at a specific time. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "42835f43-7dee-4f8f-a756-649c8c97b2ba",
"text": "Read GitHub",
"x": 512,
"y": 336,
"isEditing": false,
"type": "github-api",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"action": "GET_AUTHENTICATED_USER",
"owner": "CONFIGURE_OWNER",
"repo": "CONFIGURE_REPO"
},
"description": "Setup template for GitHub API. Interact with GitHub: repos, branches, files, issues, comments, pull requests, reviews, releases, Actions/CI, and search. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "f065637f-bad6-4720-accf-613dbed679c8",
"text": "Review source and draft",
"x": 512,
"y": 528,
"isEditing": false,
"type": "agnt-agent",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"agentId": "CONFIGURE_AGENTID",
"message": "Read the GitHub item. Decide whether it warrants action in Slack, and explain why.\nSource input: CONFIGURE_SOURCE_INPUT. Produce a reviewable draft only; do not take external actions."
},
"description": "Setup template for Agent Chat. Chat with an AI agent from your agent library. Select an agent and send messages to interact with it within your workflow. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "65329ae9-f104-4c45-aac1-6bf42c79337a",
"text": "Configure destination in Slack",
"x": 512,
"y": 720,
"isEditing": false,
"type": "slack-api",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"action": "SEND_MESSAGE",
"channelId": "CONFIGURE_CHANNELID",
"message": "CONFIGURE_MESSAGE"
},
"description": "Setup template for Slack API. Interact with Slack to perform various operations such as sending messages, uploading files, managing reactions, and more. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
}
],
"edges": [
{
"id": "b443dc8c-281e-4491-a37c-6fbd17c3038e",
"start": {
"id": "db8f22ed-f37f-4680-a363-282d95592220",
"type": "output"
},
"end": {
"id": "42835f43-7dee-4f8f-a756-649c8c97b2ba",
"type": "input"
},
"startX": 800,
"startY": 168,
"endX": 512,
"endY": 360
},
{
"id": "44dc1c0e-994e-4f62-a272-f6865b2add8c",
"start": {
"id": "42835f43-7dee-4f8f-a756-649c8c97b2ba",
"type": "output"
},
"end": {
"id": "f065637f-bad6-4720-accf-613dbed679c8",
"type": "input"
},
"startX": 800,
"startY": 360,
"endX": 512,
"endY": 552
},
{
"id": "d9c49cd0-8673-4851-a075-a72f534e110e",
"start": {
"id": "f065637f-bad6-4720-accf-613dbed679c8",
"type": "output"
},
"end": {
"id": "65329ae9-f104-4c45-aac1-6bf42c79337a",
"type": "input"
},
"startX": 800,
"startY": 552,
"endX": 512,
"endY": 744
}
],
"zoomLevel": 1,
"canvasOffsetX": 0,
"canvasOffsetY": 0,
"isTinyNodeMode": false
}
Configure GitHub API
Interact with GitHub: repos, branches, files, issues, comments, pull requests, reviews, releases, Actions/CI, and search.
- action — The action to perform on GitHub Current example:
GET_AUTHENTICATED_USER. - owner — The owner of the repository (not needed for account-level or search actions) Current example:
CONFIGURE_OWNER. - repo — The name of the repository (for CREATE_REPO: the name of the new repository) Current example:
CONFIGURE_REPO.
Configure Slack API
Interact with Slack to perform various operations such as sending messages, uploading files, managing reactions, and more.
- action — The action to perform on Slack Current example:
SEND_MESSAGE. - channelId — The ID of the Slack channel Current example:
CONFIGURE_CHANNELID. - message — The message to send Current example:
CONFIGURE_MESSAGE.
Install First-Pass Reviewer
First-Pass Reviewer already uses both GitHub and Slack, so installing it gives you this exact hand-off wired up — connected, editable, and running on your own machine.
Runs on your own machine · See what it does
Build it in AGNT
- Install AGNT — it runs on your own machine and needs no account to start.
- Authorise Slack (one OAuth sign-in) and GitHub (one OAuth sign-in). Nothing is stored anywhere but your disk.
- Describe the job in plain language, or paste the definition above; github-api does the reading and slack-api the writing.
- Gate anything you would not want done unattended, then let it run and read the first receipt end to end.
GitHub and Slack — common questions
Can I connect GitHub to Slack without writing code?
No code is required. Add both connections in the vault (GitHub uses one OAuth sign-in, Slack uses one OAuth sign-in), then either install a marketplace workflow for this pair or drag the two nodes onto the canvas and put an agent between them.
How is this different from a field-mapping GitHub to Slack automation?
A field mapping copies values and breaks on the first record nobody anticipated. The middle step here reads the GitHub item in full and decides — whether it matters, how to summarise it, and what belongs in Slack. Deciding to do nothing is a valid outcome, which no mapping can express.
Does my GitHub and Slack data leave my machine?
Your credentials stay in a vault on your own disk rather than in someone else’s cloud. The only calls made are the ones the workflow needs: GitHub, Slack, and your chosen model provider — which can be a local one.
What does a GitHub and Slack run leave behind?
Every run is recorded end to end — the GitHub items examined, the decision and its reasoning, the resulting Slack write. That record is what makes it reasonable to let this run unattended, and what lets you widen its remit on evidence.