Slack Coding Agent logo

Slack Coding Agent

OrganizationPopular
omnara-ai
slack-coding-agent

Deploy or update the Slack Coding Agent on Omnara, a coding agent people mention in Slack, in Discord, or on a GitHub pull request that works on a GitHub repository and opens pull requests. Use when the user asks to deploy, set up, update, or remove the Slack coding agent.

Overview

Publisheromnara-ai
Repositoryomnara
Skill nameslack-coding-agent
Stars
2.9K
Forks
235
Bundled files
1
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by omnara-ai on GitHub. Read the source before you install it.

Installation

Install the Slack Coding Agent AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/omnara-ai/omnara/tree/main/examples/slack-coding-agent
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/omnara-ai/omnara.git /tmp/omnara
mkdir -p .claude/skills
cp -r /tmp/omnara/examples/slack-coding-agent .claude/skills/slack-coding-agent
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Slack Coding Agent in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Slack Coding Agent on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Slack Coding Agent is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Deploy the Slack Coding Agent

You are setting up an Omnara agent for the user from agent.yaml in this folder. The goal: a coding agent the user's team can mention in Slack, in Discord, or on a GitHub pull request, which works on one of their GitHub repositories and opens pull requests, and which the user has watched answer once.

The steps below are the usual path and have the exact commands. Skip anything that's already done (for example, the token and profile exist and the user only wants a different model), follow the user's lead if they want a different order, and narrate briefly as you go.

  • Start from agent.yaml as written. If the user wants something different (the instruction, tools, or model), change it and tell them what you changed.
  • If the user wants the agent to read their issue tracker (Linear, Jira, and so on), add the tracker's MCP server in an mcp: block, store its credential with npx omnara secrets mcp-oauth (OAuth) or as a generic secret (API key), and add a short instruction section on how to use it. Tell the user that an OAuth connection acts as whoever approves it, so its writes appear under that person's name.
  • If a command fails, read the error and fix it; npx omnara <command> --help and docs.omnara.com have the details. If you're stuck, show the user the error.

The commands use the Omnara CLI (npx omnara) because its login handles auth in one step; add --json when you need to read IDs from the output. They're a reference, not a requirement: the Omnara MCP tools, the REST API, or the SDK work too, and the flags map directly to API fields. What matters is the result: a secret with the GitHub token, a profile from the filled-in agent.yaml, and the integrations the user picks in step 5. Slack and Discord setup is simplest with the CLI; registering a GitHub App needs the Omnara dashboard.

1. Connect to Omnara

  1. Run npx omnara whoami. If it reports that you aren't logged in, run npx omnara login in an interactive terminal, share the approval link it prints, and wait until the user approves.

  2. Pick the org and project. npx omnara whoami --json lists the user's orgs, and npx omnara projects list --org <org-id> --json lists an org's projects.

    • If there's only one org and one project, use them.
    • If there are several of either, ask the user which to use. Suggest the current defaults from npx omnara config if they're set, otherwise the project named Default.

    Save the choice with npx omnara config --org <org-id> --project <project-id>.

Remember the project ID; later steps need it.

2. Choose the repository and store a GitHub token

Ask which repository the agent works on (GITHUB_REPO, as owner/name). One repository is supported as written.

The agent pushes branches and opens pull requests, so it needs a token with write access. Recommend a fine-grained token limited to that repository, with Contents and Pull requests set to read and write. Optional extras: Issues read (to read linked issues), Actions read (to read CI logs), and Workflows read and write (only if it should edit .github/workflows). Commits and pull requests appear under the token owner's account, so a dedicated bot account keeps them separate from a person's. If the repository belongs to an organization, its owners may need to approve the token.

  1. Check for an existing secret: npx omnara secrets list --owner-kind project --owner-project-id <project-id> --name slack-coding-agent-github --json. If one exists, ask whether to reuse it. To reuse it, note its id and skip to step 3. To change its value, have the user update it on the Secrets page of the Omnara dashboard (the ID stays the same) and skip to step 3.

  2. Ask the user to add the token to a .env file in the current directory and tell you when it's saved (pasting it in the chat also works):

    sh
    AGENT_GITHUB_TOKEN=github_pat_...
  3. Create the secret:

    sh
    set -a && . ./.env && set +a
    npx omnara secrets create --owner-kind project --owner-project-id <project-id> \
      --name slack-coding-agent-github --material-kind generic \
      --material-value "$AGENT_GITHUB_TOKEN" --json

    Note the id (sec_…) as GITHUB_TOKEN_SECRET_ID.

3. Pick the model and machine pool

  1. npx omnara grant models list --json: each item has model.provider_config and model.name. Ask the user which model to use. Suggest anthropic/claude-opus-5.5 on omnara-openrouter if it's granted (agent.yaml runs it at high reasoning effort); otherwise suggest the strongest coding model on the list. Name a couple of alternatives rather than the whole list, and show everything if they ask. The choice gives MODEL_PROVIDER_CONFIG and MODEL_NAME.
  2. npx omnara grant pools list --json; each grant's machine_pool.name is a candidate MACHINE_POOL. Suggest default-pool if it's granted: its machines come with git, gh, and common language toolchains. Otherwise use the only pool, or ask if there are several. If there are none, tell the user the project needs a machine pool; the agent can't work on code without one. On a custom pool, the image needs git and gh.

4. Create the agent

  1. Copy agent.yaml from this folder to ./slack-coding-agent.yaml in the current directory. If this folder isn't available locally, download https://raw.githubusercontent.com/omnara-ai/omnara/main/examples/slack-coding-agent/agent.yaml instead.

  2. In the copy, replace every placeholder:

    PlaceholderValue
    {{GITHUB_REPO}}from step 2 (it appears twice)
    {{GITHUB_TOKEN_SECRET_ID}}from step 2
    {{MODEL_PROVIDER_CONFIG}}from step 3
    {{MODEL_NAME}}from step 3
    {{MACHINE_POOL}}from step 3

    Then confirm nothing is left: grep -n '{{' slack-coding-agent.yaml must print nothing.

  3. Check for an existing profile: npx omnara profiles list --name slack-coding-agent --json.

    • None: npx omnara profiles create --name slack-coding-agent --file ./slack-coding-agent.yaml --json
    • Exists: npx omnara profiles update <agent-profile-id> --file ./slack-coding-agent.yaml --json

    If it rejects the reasoning effort, the chosen model doesn't support high: remove the reasoning block and retry. Note the profile id.

5. Choose where the team reaches it

Ask where the team should mention the agent: Slack, Discord, GitHub pull requests, or any combination. Wherever it's mentioned, it answers in that thread or pull request, and replies there go to the same agent.

Slack. If npx omnara integrations list --json already has an integration named slack-coding-agent-slack from an earlier run of this skill, reuse it whatever its state, since names are unique in a project. If npx omnara integrations get <integration-id> --json doesn't list this profile under settings.launcher.profiles, add it with npx omnara integrations profiles <integration-id> --profile-ids <agent-profile-id>; the flag replaces the list, so repeat each profile already there. Then, if its state is active, skip to its last step. If it's disconnected, setup didn't finish: skip step 2, and redo step 1 only if the token in .env has expired.

  1. The user creates an app configuration token at api.slack.com/apps under Your App Configuration Tokens → Generate Token. It expires after about 12 hours. Have the user add it to .env as SLACK_APP_CONFIG_TOKEN=....

  2. Create the integration with this profile in its launcher, so a mention starts this agent, and note the itg_… ID it returns:

    sh
    npx omnara integrations create --name slack-coding-agent-slack \
      --integration-kind slack_thread \
      --settings '{"launcher":{"profiles":["<agent-profile-id>"]}}' --json

    The name is permanent and names the agent's Slack tools (int__slack-coding-agent-slack__post_message).

  3. Create the Slack app and connect it:

    sh
    set -a && . ./.env && set +a
    npx omnara integrations slack <integration-id> --app-name "Coding Agent" \
      --app-configuration-token "$SLACK_APP_CONFIG_TOKEN"

    Ask before choosing a different app name; it's how the team mentions the bot. It opens a Slack authorization page that the user approves before it expires.

  4. Tell the user to invite the bot to a channel (/invite @Coding Agent). A private channel suits it, since threads often include internal details.

Discord. The bot answers in a new thread wherever it's mentioned in a server channel; it doesn't answer direct messages.

If an integration named slack-coding-agent-discord already exists, reuse it the same way: add this profile if it's missing. If it's active, skip to step 5; Omnara can't tell whether steps 5 and 6 were done in Discord, so check them with the user. If it's disconnected, skip step 3 and do the steps that weren't done, passing the current setup_revision from npx omnara integrations get <integration-id> --json in step 4.

  1. The user creates an application named "Coding Agent" in the Discord Developer Portal; ask before choosing a different name, since it's how the team mentions the bot. They copy the Application ID and Public Key from General Information. Under Bot, they select Reset Token to copy the bot token, turn on Message Content Intent, and turn off Public Bot so only they can add it (if Discord refuses, first set Installation → Install Link to None). Have the user add the values to .env:

    sh
    DISCORD_APPLICATION_ID=...
    DISCORD_PUBLIC_KEY=...
    DISCORD_BOT_TOKEN=...
  2. Store the bot token and note the sec_… ID. If a secret named slack-coding-agent-discord-bot-token already exists (npx omnara secrets list --owner-kind project --owner-project-id <project-id> --name slack-coding-agent-discord-bot-token --json), reuse its ID; if the user has reset the token since, have them paste the new one into it on the dashboard's Secrets page (the ID stays the same). Otherwise:

    sh
    set -a && . ./.env && set +a
    npx omnara secrets create --owner-kind project --owner-project-id <project-id> \
      --name slack-coding-agent-discord-bot-token --material-kind generic \
      --material-value "$DISCORD_BOT_TOKEN" --json
  3. Create the integration with this profile in its launcher, and note the itg_… ID and setup_revision it returns:

    sh
    npx omnara integrations create --name slack-coding-agent-discord \
      --integration-kind discord_thread \
      --settings '{"launcher":{"profiles":["<agent-profile-id>"]}}' --json

    The name is permanent and names the agent's Discord tools (int__slack-coding-agent-discord__post_message).

  4. Connect the bot. Omnara checks the token and finds the bot's user:

    sh
    set -a && . ./.env && set +a
    npx omnara integrations configure <integration-id> \
      --expected-setup-revision <setup-revision> \
      --provider-tenant-id "$DISCORD_APPLICATION_ID" \
      --credential-secret-id <secret-id> \
      --provider-config "{\"public_key\":\"$DISCORD_PUBLIC_KEY\"}" --json
  5. Under General Information, the user sets Interactions Endpoint URL to https://app.omnara.com/api/integrations/discord/<application-id>/interactions and saves; the buttons on the bot's questions need it. Discord checks the URL when it's saved, so this has to come after step 4.

  6. The user adds the bot to their server by opening this link, which asks only for the permissions the bot needs: https://discord.com/oauth2/authorize?client_id=<application-id>&scope=bot&permissions=309237746752&integration_type=0. A private channel suits it, since threads often include internal details; the user adds the bot to it under the channel's Permissions.

GitHub pull requests. Someone with write access mentions the GitHub App in a pull request comment, and the agent works on that pull request: it reviews it, answers in comments, or pushes fixes to its branch.

If an integration named slack-coding-agent-github already exists, reuse it whatever its state: if npx omnara integrations get <integration-id> --json doesn't show this profile under settings.launcher.profile, set it with the update command below. Then skip to step 3 if it's active, since Omnara can't tell whether it was done on GitHub, or to step 2 if it's disconnected; the integration's page shows what's left.

  1. Create the integration with this profile in its launcher, and note the itg_… ID it returns:

    sh
    npx omnara integrations create --name slack-coding-agent-github \
      --integration-kind github_pr \
      --settings '{"launcher":{"trigger":"mention","profile":"<agent-profile-id>"}}' --json

    The name is permanent and names the agent's pull request tools (int__slack-coding-agent-github__discussion_comment). "mention" starts the agent only when someone mentions the App; "both" also starts one for every new pull request, so ask before using it. To change it later, run npx omnara integrations update <integration-id> --settings '...' with the whole settings object.

  2. Registering the GitHub App happens in the browser. Have the user open https://app.omnara.com/projects/<project-id>/integrations/<integration-id>, pick the account that owns GITHUB_REPO, and select Continue to GitHub. On GitHub they name the App. Names are unique across GitHub, so suggest one with the team's name, such as "Acme Coding Agent"; its slug (acme-coding-agent) is how the team mentions it. Back in Omnara they select Choose repositories on GitHub, grant only GITHUB_REPO, and then Connect integration. An organization's owners may need to approve the installation first.

  3. Omnara gives the App read-only access to code, so it can't push fixes yet. In the App's settings on GitHub (Settings → Developer settings → GitHub Apps → the App → Edit, under the organization's settings if an organization owns it), the user opens Permissions & events, sets Repository permissions → Contents to Read and write, and saves. Whoever installed the App then accepts the new permission on the installation's settings page; until then pushes fail. On the App's General page, also check that Webhook URL is https://app.omnara.com/api/integrations/github/events, and correct it if not; mentions don't reach Omnara otherwise.

  4. Tell the user to comment on an open pull request in GITHUB_REPO: "@acme-coding-agent summarize this PR", with their App's slug.

6. Give it a first task

Have the user mention the bot in Slack or Discord with a question that doesn't change anything:

@Coding Agent what does this repo do, and how do I run its tests?

The first reply takes a minute or two while the machine starts and clones the repository. The conversation also shows up as an agent in the Omnara console (app.omnara.com), where the user can watch every command it runs. Once the answer looks right, suggest a small real fix as the next message, such as a known bug or a typo, so they see it open a pull request. With only GitHub connected, the comment from step 5 is the first task.

7. Wrap up

Summarize what you created: the secret, the profile, and the Slack, Discord, or GitHub integrations. Then tell the user:

  • Start it from elsewhere too: anything that can call the API (a Linear webhook, a CI job) can launch an agent from the profile with the task as the message; see docs.omnara.com. The instruction assumes a Slack or Discord thread or a pull request, so for those entry points adjust its Reporting Guidelines.
  • Change the instruction, model, or anything else: ask a coding agent with this skill. It reuses the secret and updates the profile in place.
  • Remove it: delete the Slack, Discord, and GitHub integrations, if any (npx omnara integrations delete <integration-id>), or, if other agents share a Slack or Discord one, rerun npx omnara integrations profiles with only their profiles. Then run npx omnara profiles delete <agent-profile-id> and npx omnara secrets delete <secret-id> for each secret. Revoke the GitHub token in GitHub's settings as well, and delete the Discord application or GitHub App if there is one.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Slack Coding Agent AI skill do?

Deploy or update the Slack Coding Agent on Omnara, a coding agent people mention in Slack, in Discord, or on a GitHub pull request that works on a GitHub repository and opens pull requests. Use when the user asks to deploy, set up, update, or remove the Slack coding agent.

Why use Slack Coding Agent on TypingMind?

Because you install it once and use it with any model. Slack Coding Agent is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Slack Coding Agent in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/omnara-ai/omnara/tree/main/examples/slack-coding-agent. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Slack Coding Agent?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Slack Coding Agent?

As many as you like. As long as a model supports skills, you can use Slack Coding Agent with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Slack Coding Agent AI skill free?

Yes. It is published on GitHub by omnara-ai under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇