Agent skill

Ak Dev New Messaging Integration

by yaalalabs in yaalalabs/agent-kernel

Step-by-step guide for adding a new messaging platform integration to Agent Kernel.

Apache-2.0Auto-check passedProductivity & Automation

Install Ak Dev New Messaging Integration

skills CLI
$ npx skills add yaalalabs/agent-kernel --skill ak-dev-new-messaging-integration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install yaalalabs/agent-kernel ak-dev-new-messaging-integration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/yaalalabs/agent-kernel.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/ak-dev-new-messaging-integration .claude/skills/ak-dev-new-messaging-integration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ak-dev-new-messaging-integration
GitHub stars
192
Token cost
~4.6k tokens
SKILL.md length
1,345 words
Files
1
Skills in repo
23
Repo updated
First seen
Licence
Apache-2.0

At a glance

Step-by-step guide for adding a new messaging platform integration to Agent Kernel.

  • Works in 12 steps: Create the Integration Directory → Implement the Inbound Adapter → Implement the Outbound Adapter → …
  • You need to add support for a new chat platform (beyond Slack
  • SKILL.md covers Architecture Overview, Step-by-Step and Checklist
  • Calls pip

What it does

Ak Dev New Messaging Integration is an agent skill from yaalalabs/agent-kernel. Step-by-step guide for adding a new messaging platform integration to Agent Kernel. Use this skill when you need to add support for a new chat platform (beyond Slack, WhatsApp, Messenger, Instagram, Telegram, Teams, Gmail). Covers writing the inbound/outbound adapter pair, hosting it, webhook verification, attachments, configuration, and examples.

Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Productivity & Automation, covering Messaging and chat bots, Email management and Webhooks. It works with Gmail, WhatsApp, Instagram and Slack. The repository describes itself as: The Operating System for Scalable Enterprise AI Agents - Run, orchestrate, and deploy Compliant Enterprise AI Agents at scale across frameworks, without lock-in, rewrites or… The licence is Apache-2.0.

When your agent uses it

  • You need to add support for a new chat platform (beyond Slack
  • Tasks that involve Messaging and chat bots
  • Tasks that involve Email management

Example prompts

  • “/ak-dev-new-messaging-integration”

Requirements

  • Python 3

Workflow steps

12 steps, taken from the step headings in SKILL.md.

  1. Create the Integration Directory
  2. Implement the Inbound Adapter
  3. Implement the Outbound Adapter
  4. Reply Context
  5. Attachments
  6. Create the init.py and the Public Alias
  7. Register the Built-in with the Factory
  8. Add Configuration
  9. Add Optional Dependencies
  10. Polling Platforms
  11. Usage Pattern
  12. Add Example

What it can do on your machine

Read from SKILL.md and the folder at commit 97fa8d9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ak Dev New Messaging Integration loads about 4.6k tokens when it runs. Until then it costs about 96 tokens; SKILL.md has 1,345 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~96
When it runs · the whole SKILL.md, loaded when a task matches
~4.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from yaalalabs/agent-kernel at commit 97fa8d9, republished under its Apache-2.0 licence (© yaalalabs). 1,345 words, ~4,619 tokens.

Download SKILL.mdSave it as .claude/skills/ak-dev-new-messaging-integration/SKILL.md (or your agent's skills folder).
name
ak-dev-new-messaging-integration
description
Step-by-step guide for adding a new messaging platform integration to Agent Kernel. Use this skill when you need to add support for a new chat platform (beyond Slack, WhatsApp, Messenger, Instagram, Telegram, Teams, Gmail). Covers writing the inbound/outbound adapter pair, hosting it, webhook verification, attachments, configuration, and examples.
license
Apache-2.0
metadata.author
yaalalabs
metadata.category
developer

Adding a New Messaging Integration

This guide walks through adding a new messaging platform integration to Agent Kernel. Use the WhatsApp adapter (ak-py/src/agentkernel/integration/whatsapp/adapter.py) as the canonical webhook reference, and Gmail (integration/gmail/adapter.py) as the polling one.

Architecture Overview

A platform integration is two pure translation functions with a queue between them (spec #524):

  1. An InboundAdapter turns one platform delivery into normalized InboundRequest envelopes: it verifies the delivery, extracts the text, downloads and stores attachments, and resolves session_id and request_id at the edge. It never runs the agent.
  2. The pipeline carries the request: IntegrationProducer enqueues it, AgentRunner executes it platform-agnostically, and the reply travels back on the output queue with the integration attribute and the reply_-prefixed reply context.
  3. An OutboundAdapter turns the agent's reply back into platform API calls, using nothing but the flat reply_context the inbound half resolved.

This is why the webhook answers in milliseconds: a slow agent run can no longer hold the turn open past the platform's delivery timeout and cause a redelivery.

Hosting depends on how the platform delivers events:

SourceHostEntry point
Source.WEBHOOK (pushed)WebhookRESTRequestHandlerIOHandler.run(handlers=[WebhookRESTRequestHandler(MyInboundAdapter())])
Source.WEBHOOK on AWS LambdaWebhookRESTRequestHandler via LambdaWebhookHosthost = LambdaWebhookHost(WebhookRESTRequestHandler(MyInboundAdapter())) at module scope in the request-handler Lambda, with Lambda.register(<webhook_path>, method="POST")(host.handle) (and GET → host.challenge when the adapter declares a challenge_path) (rest_sync/rest_async, sqs), with the route in gateway_endpoints and APIGatewayAuthorizer(bypass=WebhookRouteMatcher(...)) behind an authorizer
Source.POLLER (pulled)PollerRunnerIOHandler.run(pollers=[PollerRunner(MyInboundAdapter())]) on in_memory, PollerRunner.run(adapter) as its own container on a broker

Adapters must be mounted inside the pipeline. WebhookRESTRequestHandler sets requires_pipeline = True, so RESTAPI.run([...]) refuses it with an AKConfigError: without a queue there would be no runner to drain what it enqueues, and the platform would get its 200 while the user never got a reply.

Step-by-Step

1. Create the Integration Directory
ak-py/src/agentkernel/integration/<platform>/
├── __init__.py
└── adapter.py
2. Implement the Inbound Adapter
python
# ak-py/src/agentkernel/integration/<platform>/adapter.py
import logging
from typing import Any, Dict, List, Optional

from fastapi import HTTPException, Request

from ...core.config import AKConfig
from ...core.model import AgentReply, AgentRequest, AgentRequestImage, AgentRequestText
from ...core.multimodal.storage import AttachmentStorageManager
from ..adapter.base import (
    ATTACHMENTS_DISABLED_ERROR,
    SESSION_CACHE_ERROR,
    InboundAdapter,
    InboundParseResult,
    InboundRequest,
    OutboundAdapter,
)
from ..adapter.routes import BUILTIN_WEBHOOK_ROUTES

NAME = "<platform>"
_log = logging.getLogger("ak.integration.<platform>")


class <Platform>InboundAdapter(InboundAdapter):
    """<Platform> deliveries -> normalized requests."""

    name = NAME
    # A built-in reads its paths from the route table (see step 7), so the Lambda authorizer's
    # WebhookRouteMatcher lets exactly this route through; a bring-your-own adapter spells it out.
    webhook_path = BUILTIN_WEBHOOK_ROUTES[NAME].webhook_path
    challenge_path = BUILTIN_WEBHOOK_ROUTES[NAME].challenge_path  # None unless the platform has a GET handshake

    _log = _log

    def __init__(self):
        config = AKConfig.get()
        self._agent = config.<platform>.agent or None
        self._max_file_size = config.api.max_file_size
        self._client = <Platform>Client()   # your API wrapper

    async def verify(self, raw: Request) -> None:
        """Reject a delivery that did not come from the platform. Runs before parse."""
        if not self._client.verify(await raw.body(), raw.headers.get("x-platform-signature", "")):
            raise HTTPException(status_code=403, detail="Invalid signature")

    async def parse(self, raw: Request) -> InboundParseResult:
        """One delivery can carry several messages; return one InboundRequest per message."""
        body = await raw.json()
        requests = [r for r in [await self._to_request(m) for m in body.get("messages", [])] if r is not None]
        return InboundParseResult(requests=requests)

    async def _to_request(self, message: dict) -> Optional[InboundRequest]:
        text = message.get("text", "")
        sender = message["from"]
        if not text:
            return None   # legitimately ignored: an empty list is not an error

        requests: List[AgentRequest] = [AgentRequestText(prompt=text)]
        # ... download attachments into `requests` here (see step 5) ...

        requests, _ = AttachmentStorageManager.offload(
            sender,
            requests,
            attachments_disabled_error=ATTACHMENTS_DISABLED_ERROR,
            session_cache_error=SESSION_CACHE_ERROR,
        )
        return InboundRequest(
            session_id=sender,             # the platform's conversation key
            request_id=message["id"],      # the platform's own id: this is what dedupes a retry
            requests=requests,
            prompt=text,
            agent=self._agent,
            user_id=sender,
            reply_context={"to": sender},  # flat, string-valued delivery coordinates
        )

Rules the adapter must hold to:

  1. Never execute. No ChatService, AgentService or Runtime import. The only side effects allowed are platform API calls and attachment storage.
  2. Read only your own config block, AKConfig.get().<platform>.
  3. verify before parse, parse before enqueue. verify is concrete and a no-op on the base: override it only when verification is separable from parsing. (Slack and Teams verify inside their SDK's dispatch, so theirs stays the default.)
  4. request_id is the platform's message id wherever one exists; that is what makes a webhook retry deduplicate instead of running the agent twice. Synthesize a stable one only when the platform gives you none (Slack: f"slack:{channel}:{ts}").
  5. An ignored delivery returns an empty request list, never an exception.
  6. Override missing_verification_settings() when verify skips its check for an unset secret (return e.g. ["<platform>.webhook_secret"] while it is empty). LambdaWebhookHost refuses such an adapter on cold start, because behind the authorizer's integration bypass the adapter's own check is the only one. An adapter that refuses to construct without its secret (Slack, Teams) needs no override.
3. Implement the Outbound Adapter
python
class <Platform>OutboundAdapter(OutboundAdapter):
    """Agent replies -> <Platform> messages."""

    name = NAME
    MESSAGE_LIMIT = 4096          # the platform's per-message limit; split_reply chunks to it
    MAX_CHUNKS = None             # or a cap, with TRUNCATION_NOTICE appended past it

    _log = _log

    def __init__(self):
        self._client = <Platform>Client()

    async def acknowledge(self, reply_context: Dict[str, str]) -> Dict[str, str]:
        """Edge-side feedback: a typing indicator, a read receipt, a "thinking" message.

        The returned dict is merged into reply_context, which is how Slack carries the id of
        its placeholder message through to delivery.
        """
        await self._client.typing(reply_context["to"])
        return {}

    async def deliver(self, reply: AgentReply, reply_context: Dict[str, str]) -> None:
        """Raising hands the message back for retry, then deliver_error."""
        await self._client.send(reply_context["to"], self.split_reply(str(reply)))

    async def deliver_error(self, message: str, reply_context: Dict[str, str]) -> None:
        try:
            await self._client.send(reply_context["to"], [message])
        except Exception as e:
            self._log.error(f"Could not deliver the <Platform> error message: {e}")
  • The reply always arrives as an AgentReplyText: the Agent Runner serializes the typed reply to its string form before the output queue.
  • Outbound adapters are cached and shared across consumer threads, and each call runs on its own event loop. Keep no per-message state on self, and build loop-bound clients (an httpx.AsyncClient) per call.
  • deliver_error receives OutboundAdapter.ERROR_MESSAGE, not the raw exception: raw error text is logged, never sent to a platform user.
4. Reply Context

reply_context is flat, string-valued delivery coordinates: everything deliver needs and nothing else. It travels as reply_-prefixed message attributes rather than body fields, because BaseRunRequest is extra="allow" and an unknown body field would reach the agent as AgentRequestAny context.

Budget: 8 KB serialized, enforced in IntegrationProducer with a ValueError naming the adapter. If the platform's reply address is an object rather than strings, JSON-encode it into one value (Teams does this with its ConversationReference).

5. Attachments

Attachment bytes must not ride the queue: brokers cap a message far below api.max_file_size. Download at the edge (that is where the platform token is), then call AttachmentStorageManager.offload, which stores the bytes in the AttachmentStore and replaces each image/file request with an AgentRequestAttachmentRef.

This makes multimodal.enabled: true a requirement for attachment-bearing messages, and rejects multimodal.storage_type: session_cache (it writes into a session copy the runner process never sees). Both messages are shared constants; pass them through as shown in step 2.

6. Create the __init__.py and the Public Alias
python
# ak-py/src/agentkernel/integration/<platform>/__init__.py
from .adapter import <Platform>InboundAdapter, <Platform>OutboundAdapter

Create ak-py/src/agentkernel/<platform>.py with a wildcard import (see ak-py/src/agentkernel/slack.py):

python
from .integration.<platform> import *
7. Register the Built-in with the Factory

The Response Handler holds only the integration attribute string, so the outbound half is resolved by name. Add the platform to IntegrationAdapterFactory (integration/adapter/factory.py): its short name in _BUILTIN_NAMES, and an if/elif branch in _builtin importing the class inside require_extra.

(The inbound half is never resolved by name: the application constructs it and hands it to a host, so bring-your-own inbound is just passing a different instance.)

Add the platform's routes to BUILTIN_WEBHOOK_ROUTES in integration/adapter/routes.py as well, a WebhookRoute(name, webhook_path, challenge_path=...). It is the one definition the adapter's path attributes and WebhookRouteMatcher.for_integrations(...) both read, and IntegrationAdapterContract.test_a_builtin_is_served_where_the_authorizer_expects fails when they drift.

Show full SKILL.md (517 more words)Show less
8. Add Configuration

Add a config section to ak-py/src/agentkernel/core/config.py, following the existing idiom (Field with empty-string defaults). Every platform block carries an outbound_adapter override:

python
class _<Platform>Config(BaseModel):
    agent: str = Field(default="", description="Agent name to handle <Platform> messages")
    bot_token: str = Field(default="", description="<Platform> bot token")
    webhook_secret: str = Field(default="", description="Webhook verification secret")
    outbound_adapter: str = Field(
        default="",
        description="Dotted path to an OutboundAdapter subclass replacing the built-in <Platform> outbound adapter",
    )


class AKConfig(YamlBaseSettingsModified):
    <platform>: _<Platform>Config = Field(description="<Platform> related configurations", default_factory=_<Platform>Config)

Configurable through config.yaml or AK_<PLATFORM>__AGENT / AK_<PLATFORM>__BOT_TOKEN environment variables.

9. Add Optional Dependencies

In ak-py/pyproject.toml:

toml
[project.optional-dependencies]
<platform> = [
    "httpx>=0.27.0",           # for HTTP API calls (most platforms need this)
    "platform-sdk>=x.y.z",     # platform-specific SDK if available
]

The factory imports the built-in inside require_extra("<platform>", ...), so a missing SDK reports pip install "agentkernel[<platform>]" rather than a bare ModuleNotFoundError.

10. Polling Platforms

A platform with no webhook subclasses PollingInboundAdapter instead:

python
class <Platform>InboundAdapter(PollingInboundAdapter):
    name = NAME
    poll_interval = 30.0   # read it from your config block in __init__

    async def poll(self) -> List[Any]:
        """Return the raw events to parse this iteration. Must not run the agent."""

    def mark_handled(self, raw: Any) -> None:
        """Called after an event is enqueued, so the next poll skips it."""

PollerRunner waits on ThreadRunner.shutdown_event between iterations, so a 30-second interval still drains promptly on SIGTERM. Run the poller at one replica: mark_handled state is per process (see Gmail, where a message stays unread until its reply is sent).

11. Usage Pattern
python
# server.py
from agentkernel.integration.adapter import WebhookRESTRequestHandler
from agentkernel.openai import OpenAIModule
from agentkernel.pipeline import IOHandler
from agentkernel.<platform> import <Platform>InboundAdapter
from agents import Agent

agent = Agent(name="general", instructions="You are a helpful assistant.")
OpenAIModule([agent])

if __name__ == "__main__":
    IOHandler.run(handlers=[WebhookRESTRequestHandler(<Platform>InboundAdapter())])
12. Add Example

Create examples/api/<platform>/ with:

  • server.py — minimal working example (the pattern above)
  • pyproject.toml — with agentkernel[api,openai,<platform>] dependency
  • config.yaml — platform configuration
  • server_test.py — health check and basic functional test
  • README.md — setup instructions (bot token, webhook URL, etc.)
13. Add Tests

Two files:

  1. ak-py/tests/test_integration_adapter_contract.py — add a IntegrationAdapterContract subclass for the platform. The contract covers the invariants the queue hop needs: stable identifiers, an ignorable delivery that is not an error, a flat reply context inside its budget, and a clean round trip through IntegrationProducer.
  2. ak-py/tests/test_<platform>_integration.py — the platform's own parsing and formatting. Build the adapter via object.__new__ with a stubbed API client (see test_whatsapp_integration.py), and cover: message parsing, ignored deliveries, rejection paths (oversized, unsupported media, download failure), verification, reply chunking and acknowledgement.
14. Add Documentation

Add docs/docs/integrations/<platform>.md covering:

  • Platform setup (creating a bot, getting tokens)
  • Configuration options, including outbound_adapter
  • Example code using IOHandler.run(handlers=[...])
  • Webhook URL setup
  • The multimodal.enabled requirement if the platform accepts attachments

Then update the landing page inventories in docs/src/components/*/data.tsx: add a tile to the Channels & protocols row in IntegrationsMarquee/data.tsx (role Channel, href to the new page, logo under docs/static/img/integrations/ or a react-icons/si glyph); add pick("<tile name>") to the Messaging channels card in ArchitectureOverview/data.tsx; add the platform to the Messaging Channels card's tags and description under the Connect tab in FeatureExplorer/data.tsx. Logo sourcing and the build check are in ak-dev-sync-docs-from-branch, Docs-Site Landing and Features Pages.

Then the features page: the MESSAGING_PLATFORMS list in docs/src/pages/features.tsx (logo, link to the new page). Grep docs/src/pages/*.tsx, README.md, and docs/docs/intro.md for the platform roll call ("Slack, WhatsApp, ...") and add the new name wherever the others are listed.

Checklist

  • ak-py/src/agentkernel/integration/<platform>/adapter.py with the inbound/outbound pair
  • verify (or a documented reason it stays the base no-op) and challenge if the platform has a handshake
  • request_id set from the platform's own message id
  • Attachments offloaded with AttachmentStorageManager.offload, never inlined
  • reply_context flat, string-valued, inside the 8 KB budget
  • MESSAGE_LIMIT (and MAX_CHUNKS) set to the platform's limits
  • Package __init__.py and public alias at ak-py/src/agentkernel/<platform>.py
  • Registered in IntegrationAdapterFactory._BUILTIN_NAMES and _builtin
  • A WebhookRoute in integration/adapter/routes.py::BUILTIN_WEBHOOK_ROUTES, with the adapter's paths read from it
  • missing_verification_settings() overridden if verify skips its check for an unset secret
  • Configuration class in config.py, including outbound_adapter
  • Optional dependency group in pyproject.toml
  • Example in examples/api/<platform>/ mounting through IOHandler.run
  • IntegrationAdapterContract subclass plus the per-platform test file
  • Documentation in docs/docs/integrations/<platform>.md
  • Landing page inventories: marquee tile (IntegrationsMarquee/data.tsx), pick() chip on the Messaging channels card (ArchitectureOverview/data.tsx), Messaging Channels card tags (FeatureExplorer/data.tsx)
  • Platform inventories on docs/src/pages/features.tsx (MESSAGING_PLATFORMS) and in the README/intro roll calls

© yaalalabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/ak-dev-new-messaging-integration of yaalalabs/agent-kernel.

Open the folder on GitHubat commit 97fa8d9

Compare with similar skills

Ak Dev New Messaging Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ak Dev New Messaging Integration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ak Dev New Messaging Integration this skillyaalalabs/agent-kernel192—~4.6kAutomated safety check: PassApache-2.0
Traul Message Searchdandaka/traul113—~3.9kAutomated safety check: NotesAGPL-3.0
Integration WebhooksBuilderIO/agent-native7.1k—~5.3kAutomated safety check: PassNone
Openloomi Connectorsmelandlabs/openloomi1k—~3.3kAutomated safety check: PassApache-2.0
Messagingvellum-ai/vellum-assistant1.4k—~4.1kAutomated safety check: PassMIT
Ops Inboxdavepoon/buildwithclaude3.6k—~7.2kAutomated safety check: NotesMIT

Similar skills

  • Drives the traul CLI to sync, search and monitor messages from Slack, Telegram, Discord, Linear, Gmail, WhatsApp, Claude Code sessions and Markdown files.

    113 GitHub stars~3.9k tokensUpdated 5 mo ago
    Productivity & AutomationAuto-check: notes
  • Integration Webhooks

    BuilderIO/agent-native

    Cross-platform pattern for handling messaging integration webhooks (Slack, Telegram, WhatsApp, email, etc.) on serverless hosts.

    7.1k GitHub stars~5.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Openloomi Connectors

    melandlabs/openloomi

    openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…

    1k GitHub stars~3.3k tokensUpdated 16 days ago
    Productivity & AutomationAuto-check passed
  • Messaging

    vellum-ai/vellum-assistant

    Read, search, send, and manage messages across Gmail, Outlook, Telegram, and other platforms

    1.4k GitHub stars~4.1k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Ops Inbox

    davepoon/buildwithclaude

    Full inbox management across all channels — WhatsApp (wacli), Email (Gmail MCP), Slack (MCP), Telegram (user-auth MCP), Discord (webhook + REST read), Notion (MCP — comments, mentions, assigned…

    3.6k GitHub stars~7.2k tokensUpdated today
    Productivity & AutomationAuto-check: notes
  • Chat SDK

    databuddy-analytics/Databuddy

    Build multi-platform chat bots with Chat SDK (chat npm package).

    1.2k GitHub stars~2.6k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed

More from yaalalabs/agent-kernel

All 23 skills in this repo
  • Ak Dev Code Quality

    yaalalabs/agent-kernel

    Code quality standards, formatting, Python style rules (classes over script-style functions, configuration-field rules), commit conventions, and PR workflow for Agent Kernel development.

    192 GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Ak Dev New Evaluator Provider

    yaalalabs/agent-kernel

    Step-by-step guide for adding a new built-in test evaluator provider to Agent Kernel (beyond DeepEval, Opik and JEV).

    192 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Ak Dev New Guardrail Provider

    yaalalabs/agent-kernel

    Step-by-step guide for adding a new guardrail provider to Agent Kernel.

    192 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Step-by-step guide for adding a new knowledge base backend to Agent Kernel.

    192 GitHub stars~5.1k tokensUpdated today
    Auto-check passed
  • Ak Dev New Multimodal Storage

    yaalalabs/agent-kernel

    Step-by-step guide for adding a new multimodal attachment storage backend to Agent Kernel.

    192 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Ak Dev New Queue Transport

    yaalalabs/agent-kernel

    Step-by-step guide for adding a new queue transport to Agent Kernel's execution pipeline.

    192 GitHub stars~2.7k tokensUpdated today
    Auto-check passed

Questions about Ak Dev New Messaging Integration

What does Ak Dev New Messaging Integration do?

Step-by-step guide for adding a new messaging platform integration to Agent Kernel. Ak Dev New Messaging Integration is an agent skill from yaalalabs/agent-kernel. Step-by-step guide for adding a new messaging platform integration to Agent Kernel.

When should I use Ak Dev New Messaging Integration?

Ak Dev New Messaging Integration fits situations like: you need to add support for a new chat platform (beyond Slack; tasks that involve Messaging and chat bots; tasks that involve Email management.

How do I install Ak Dev New Messaging Integration in Claude Code?

Run `npx skills add yaalalabs/agent-kernel --skill ak-dev-new-messaging-integration -a claude-code`. Or copy the skill folder (.agents/skills/ak-dev-new-messaging-integration in yaalalabs/agent-kernel) into .claude/skills/ak-dev-new-messaging-integration in your project. Claude Code loads it when a task matches its description.

How do I install Ak Dev New Messaging Integration in Codex?

Run `npx skills add yaalalabs/agent-kernel --skill ak-dev-new-messaging-integration -a codex`. Or copy the skill folder (.agents/skills/ak-dev-new-messaging-integration in yaalalabs/agent-kernel) into .agents/skills/ak-dev-new-messaging-integration in your project. Codex loads it when a task matches its description.

Can I use Ak Dev New Messaging Integration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add yaalalabs/agent-kernel --skill ak-dev-new-messaging-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ak-dev-new-messaging-integration, .gemini/skills/ak-dev-new-messaging-integration, .github/skills/ak-dev-new-messaging-integration and .opencode/skills/ak-dev-new-messaging-integration in your project.

What does Ak Dev New Messaging Integration need to run?

Going by SKILL.md and its folder, Ak Dev New Messaging Integration needs the command-line tools its instructions call (pip). Our summary lists: Python 3.

Does Ak Dev New Messaging Integration access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Ak Dev New Messaging Integration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ak Dev New Messaging Integration use?

Ak Dev New Messaging Integration is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ak Dev New Messaging Integration use?

About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ak Dev New Messaging Integration?

Skills that share tags, products or a category with Ak Dev New Messaging Integration: Traul Message Search (dandaka/traul, 113 stars), Integration Webhooks (BuilderIO/agent-native, 7.1k stars), Openloomi Connectors (melandlabs/openloomi, 1k stars) and Messaging (vellum-ai/vellum-assistant, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ak Dev New Messaging Integration?

yaalalabs (a GitHub organization) maintains it in yaalalabs/agent-kernel, which has 192 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 9, 2026.

Source: yaalalabs/agent-kernel on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.