<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Composio</title>
    <description>The latest articles on Forem by Composio (@composiodev).</description>
    <link>https://forem.com/composiodev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9157%2Fdf89ab52-2d48-474b-a971-087232b09f19.png</url>
      <title>Forem: Composio</title>
      <link>https://forem.com/composiodev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/composiodev"/>
    <language>en</language>
    <item>
      <title>What Is an MCP Gateway — and Why Do Enterprise AI Teams Need One in 2026?</title>
      <dc:creator>Dumebi Okolo</dc:creator>
      <pubDate>Thu, 07 May 2026 14:29:51 +0000</pubDate>
      <link>https://forem.com/composiodev/what-is-an-mcp-gateway-and-why-do-enterprise-ai-teams-need-one-in-2026-1lie</link>
      <guid>https://forem.com/composiodev/what-is-an-mcp-gateway-and-why-do-enterprise-ai-teams-need-one-in-2026-1lie</guid>
      <description>&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/docs/learn/architecture" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; was released by Anthropic in November 2024. Eighteen months later, it had 97 million monthly SDK downloads as of December 2025, backing from every major AI lab, and is now governed as a founding project of the Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation.&lt;/p&gt;

&lt;p&gt;That adoption happened fast, even faster than most protocols manage. But it created an immediate problem: connecting AI agents directly to dozens of MCP servers at scale is operationally unsustainable, and the protocol itself does not solve governance.&lt;/p&gt;

&lt;p&gt;This article explains what an MCP Gateway is, what it does at the infrastructure level, and how to evaluate one for a production enterprise environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is MCP, and What Problem Does It Solve?
&lt;/h2&gt;

&lt;p&gt;Before understanding the gateway, you need to understand what MCP standardizes.&lt;/p&gt;

&lt;p&gt;Enterprise AI teams historically faced what is called the &lt;a href="https://composio.dev/content/mcp-gateways-guide" rel="noopener noreferrer"&gt;N×M integration problem&lt;/a&gt;: connecting N agents to M tools requires N×M custom integrations, each with its own authentication flow, error-handling logic, and credential store. Without MCP, integration complexity rises quadratically as AI agents spread through an organization; with MCP, it scales linearly.&lt;/p&gt;

&lt;p&gt;MCP defines a standardized way for AI models to discover and invoke external tools using &lt;a href="https://www.jsonrpc.org/specification" rel="noopener noreferrer"&gt;JSON-RPC 2.0&lt;/a&gt; over HTTP. An agent sends a &lt;code&gt;tools/list&lt;/code&gt; request to understand what a server exposes, then uses &lt;code&gt;call_tool&lt;/code&gt; to invoke those tools. That handshake is consistent regardless of whether the backend is GitHub, Salesforce, Postgres, or an internal API.&lt;/p&gt;

&lt;p&gt;What MCP does not define is who can call what, under whose identity, with what constraints, and at what cost. Those are governance problems, and they fall outside the protocol specification by design.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an MCP Gateway?
&lt;/h2&gt;

&lt;p&gt;An MCP Gateway is a centralized infrastructure layer that sits between AI agents and one or more MCP servers. It acts as a &lt;a href="https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/" rel="noopener noreferrer"&gt;specialized reverse proxy&lt;/a&gt; purpose-built for MCP traffic: handling authentication, routing, policy enforcement, credential management, and observability in one place.&lt;/p&gt;

&lt;p&gt;From the agent's perspective, nothing changes. It still performs a &lt;code&gt;tools/list&lt;/code&gt; handshake and issues &lt;code&gt;call_tool&lt;/code&gt; requests. The difference is that those requests are now intercepted, evaluated against policies, and routed by the gateway before any backend system executes them.&lt;/p&gt;

&lt;p&gt;Architecturally, the shift looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without a gateway:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A → GitHub MCP Server
Agent A → Slack MCP Server
Agent B → GitHub MCP Server
Agent B → Postgres MCP Server
Agent C → Salesforce MCP Server
... (N×M connections, each managing its own auth and credentials)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With a gateway:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A ──┐
Agent B ──┤──→ [MCP Gateway] ──→ GitHub MCP Server
Agent C ──┘                  ──→ Slack MCP Server
                             ──→ Postgres MCP Server
                             ──→ Salesforce MCP Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gateway becomes the single chokepoint where security policy, access control, and observability can be enforced consistently. As one &lt;a href="https://news.ycombinator.com/item?id=46136222" rel="noopener noreferrer"&gt;Hacker News discussion on MCP gateways&lt;/a&gt; noted, practitioners want features like central MCP registries, OAuth integration, and curated toolset scoping; all things that make MCP viable at organizational scale, not just in a prototype.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does MCP Alone Fall Short in Enterprise Environments?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Credential Sprawl
&lt;/h3&gt;

&lt;p&gt;Without a gateway, each agent carries its own API keys, OAuth tokens, and service account credentials for every tool it accesses. Those credentials end up in environment variables, config files, and secret stores scattered across services. This is not a theoretical risk: GitGuardian's research found 24,008 unique secrets exposed in MCP configuration files in 2025 alone, with Google API keys and PostgreSQL connection strings among the most common leaked types. Rotating credentials becomes a manual exercise across multiple codebases. Revoking access for a compromised agent requires hunting down every integration it touches. There is no single point of revocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  No Centralized Access Control
&lt;/h3&gt;

&lt;p&gt;MCP does not define native role-based access control. If an agent can connect to a server, it can discover every tool that server exposes. A finance agent can see development tools. A support agent can see database administration endpoints. Principle of least privilege has to be implemented outside the protocol, in every agent individually, or not at all. As engineers in the &lt;a href="https://news.ycombinator.com/item?id=45723699" rel="noopener noreferrer"&gt;MCP-Scanner Hacker News thread&lt;/a&gt; observed, people are over-provisioning MCPs the way they install apps on a phone, without applying least-privilege access. &lt;/p&gt;

&lt;p&gt;Least-privilege access is the principle that an agent should only be able to see and invoke the specific tools it needs for its defined task, and nothing beyond that. In an MCP context, this means a support agent should have no visibility into deployment tools, and a read-only analytics agent should have no access to write operations, regardless of what the underlying server exposes..&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability Black Holes
&lt;/h3&gt;

&lt;p&gt;When agents connect directly to tools, there is no aggregated view of what any agent is actually doing. Debugging a multi-step workflow requires stitching together logs from N different servers. There is no unified execution timeline, no trace correlation, no cost attribution. Anomalies go undetected because there is no baseline.&lt;/p&gt;

&lt;h3&gt;
  
  
  No Cost Governance
&lt;/h3&gt;

&lt;p&gt;MCP does not track token consumption or enforce usage limits. An agent can invoke tools repeatedly, triggering LLM calls and paid API operations, with no budget ceiling. At enterprise scale, this becomes a financial control problem, not just a technical one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Attack Surface
&lt;/h3&gt;

&lt;p&gt;In April 2025, security researchers &lt;a href="https://en.wikipedia.org/wiki/Model_Context_Protocol" rel="noopener noreferrer"&gt;published an analysis&lt;/a&gt; identifying multiple outstanding MCP security issues, including prompt injection, tool permissions that allow combining tools to exfiltrate data, and lookalike tools that can silently replace trusted ones. A centralized gateway is the practical enforcement point for mitigating all three.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does an MCP Gateway Actually Do?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Centralized Authentication and Identity Propagation
&lt;/h3&gt;

&lt;p&gt;A production gateway validates incoming identity  (typically via JWT, OAuth 2.0 with PKCE, or OIDC) and propagates that identity downstream to MCP servers. Instead of agents running under shared service accounts, requests execute on behalf of specific authenticated users.&lt;/p&gt;

&lt;p&gt;This closes a real vulnerability. If a user cannot delete a repository, neither can the agent acting for them. Authorization is enforced at the protocol layer, not assumed in prompts. The MCP specification introduced OAuth 2.1 support in the March 2025 revision, with significant refinements in June 2025, but implementation quality varies between gateways. Some handle enterprise SSO automatically; others require manual configuration per server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool-Level RBAC
&lt;/h3&gt;

&lt;p&gt;The gateway intercepts &lt;code&gt;tools/list&lt;/code&gt; responses and filters them based on the requesting agent's role and permissions. Sensitive tools simply do not appear in the agent's context. A configuration like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;virtual_server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;support-scope&lt;/span&gt;
  &lt;span class="na"&gt;allow_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;github.list_issues&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;github.get_comments&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;crm.update_ticket&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...means the agent calling this endpoint never sees database administration tools, deployment controls, or any capability it has no business using. This directly improves model performance, agents reason more accurately when the action space is deliberately constrained, and reduces blast radius when something goes wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intelligent Routing
&lt;/h3&gt;

&lt;p&gt;The gateway examines each request and routes it to the appropriate upstream MCP server based on the tool being called. Session affinity keeps stateful, multi-step agent conversations on the same backend server. Load balancing distributes traffic. Circuit breakers prevent cascading failures when an upstream tool degrades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unified Observability
&lt;/h3&gt;

&lt;p&gt;Every &lt;code&gt;tools/list&lt;/code&gt; and &lt;code&gt;call_tool&lt;/code&gt; invocation is logged with metadata: agent identity, user context, tool arguments, response status, and latency. This creates a coherent audit trail across all connected systems. Metrics export in Prometheus format. Traces follow the &lt;a href="https://opentelemetry.io/docs/what-is-opentelemetry/" rel="noopener noreferrer"&gt;OpenTelemetry standard&lt;/a&gt; for distributed tracing, which matters when debugging multi-step agent tasks that touch six different tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost Management
&lt;/h3&gt;

&lt;p&gt;The gateway can implement caching for repeated tool calls, enforce per-agent or per-user rate limits, and surface usage analytics. Caching strategies for repeated tool calls can meaningfully reduce LLM costs, and the gateway is the practical place to implement this at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credential Vaulting
&lt;/h3&gt;

&lt;p&gt;API keys, OAuth tokens, and service credentials are stored centrally in the gateway. Agents never handle raw credentials directly. Rotation policies apply once at the gateway level rather than across every agent codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does an MCP Gateway Differ from an API Gateway?
&lt;/h2&gt;

&lt;p&gt;A traditional API gateway is designed for stateless, client-server request-response cycles, standard in web and mobile applications. It handles HTTP routing, authentication, rate limiting, and transformation for REST or GraphQL traffic.&lt;/p&gt;

&lt;p&gt;An MCP gateway is designed for stateful, session-aware, and often bidirectional communication patterns specific to AI agents. It understands the context of a long-running agent task. It can propagate user identity across multiple sequential tool calls. It maintains session state so that a multi-step agent workflow does not lose context mid-execution. It understands the &lt;code&gt;tools/list&lt;/code&gt; → &lt;code&gt;call_tool&lt;/code&gt; protocol cycle and can enforce policies at that semantic level, not just at the HTTP layer.&lt;/p&gt;

&lt;p&gt;In modern enterprise architectures, both typically coexist. APIs serve application services. API gateways govern traditional HTTP traffic. MCP servers expose selected capabilities to agents. An MCP gateway governs agent-to-tool communication. The relationship is complementary.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Does an MCP Gateway Differ from an AI Gateway?
&lt;/h3&gt;

&lt;p&gt;This is worth separating out because it's a more common source of confusion in practice. Buyers evaluating AI gateways frequently find themselves looking at MCP gateways instead.&lt;/p&gt;

&lt;p&gt;An AI gateway sits in front of LLM inference. It manages which model gets called, routes traffic between providers (OpenAI, Anthropic, Mistral), enforces token budgets, handles prompt/response logging, and abstracts model provider APIs behind a single interface. Its job is governing &lt;em&gt;model calls&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;An MCP gateway sits between agents and the tools those agents invoke. It governs &lt;em&gt;tool calls:&lt;/em&gt; what an agent can do after the model has already decided to act. The two layers are complementary: an AI gateway controls which brain your agent uses; an MCP gateway controls which hands it has.&lt;/p&gt;

&lt;p&gt;In a mature enterprise architecture, both are present. The AI gateway handles model-level traffic. The MCP gateway handles the downstream tool execution that the model's output triggers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are the Categories of MCP Gateway Available?
&lt;/h2&gt;

&lt;p&gt;Understanding the gateway landscape requires understanding the primary design philosophies, not just the feature checklist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managed Integration Platforms
&lt;/h3&gt;

&lt;p&gt;These prioritize developer velocity by abstracting integration complexity behind a large library of pre-built, maintained connectors. Authentication lifecycle management  (including complex OAuth 2.1 flows) is handled for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://composio.dev/mcp-gateway" rel="noopener noreferrer"&gt;Composio's MCP Gateway&lt;/a&gt; is the primary example. It offers 1000+ tools and actions across major enterprise SaaS applications, a unified authentication layer, SOC2 and ISO certification, action-level RBAC, and zero data-retention architecture. The architecture is designed for teams that need to connect agents to many different tools quickly without owning the integration layer: instead of juggling 22 different MCP servers for 22 different tools, you install one gateway and access a broad library of pre-built integrations with a single authentication flow and audit surface.&lt;/p&gt;

&lt;p&gt;For most enterprise teams moving from pilot to production, this is the most practical starting point. Refer to the &lt;a href="https://composio.dev/content/mcp-gateways-guide" rel="noopener noreferrer"&gt;Composio guide to MCP gateways&lt;/a&gt; for a deeper walkthrough of the architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security-First Proxies
&lt;/h3&gt;

&lt;p&gt;These treat security as the primary constraint and performance as secondary. &lt;a href="https://github.com/lasso-security/mcp-gateway" rel="noopener noreferrer"&gt;Lasso Security&lt;/a&gt; inspects all MCP traffic in real time to detect prompt injection, mask PII, and calculate reputation scores for MCP servers before they are loaded. The tradeoff is latency — deep security scanning adds 100–250ms overhead — which makes this category unsuitable for latency-sensitive workflows but appropriate for regulated environments where compliance is non-negotiable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure-Native Open Source
&lt;/h3&gt;

&lt;p&gt;These integrate into existing container-native DevOps workflows. &lt;a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/" rel="noopener noreferrer"&gt;Docker MCP Gateway&lt;/a&gt; runs MCP servers as isolated Docker containers with familiar &lt;code&gt;docker mcp&lt;/code&gt; CLI tooling and container-based security. &lt;a href="https://obot.ai/" rel="noopener noreferrer"&gt;Obot&lt;/a&gt; is Kubernetes-native and designed for organizations that require full data sovereignty.&lt;/p&gt;

&lt;p&gt;Both require your team to own the integration layer. Your team  brings the MCP servers, and the gateway governs them. The operational overhead is higher than a managed platform, but so is the control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Enterprise Teams Evaluate When Choosing a Gateway?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Deployment Model
&lt;/h3&gt;

&lt;p&gt;Cloud-hosted managed gateways reduce time-to-production but involve data transiting external infrastructure. Self-hosted or VPC-deployed gateways give you data sovereignty. For teams in healthcare, finance, or government where regulated data must stay in your cloud, deployment model is often the first filter, not an afterthought.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication Standards
&lt;/h3&gt;

&lt;p&gt;Verify support for OAuth 2.1 with PKCE, OIDC, and SAML. Check whether the gateway integrates with your existing identity provider (Okta, Microsoft Entra ID, Auth0) and whether it supports on-behalf-of token propagation: the pattern where agents act under the authenticated user's identity rather than a shared service account.&lt;/p&gt;

&lt;h3&gt;
  
  
  RBAC Granularity
&lt;/h3&gt;

&lt;p&gt;Gateway-level RBAC (which tools each role can see) is the baseline. Tool-level RBAC, allowing read but not write within a single server, is more sophisticated and significantly reduces blast radius. Verify what the enforcement model looks like in practice, not just in the marketing copy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability Depth
&lt;/h3&gt;

&lt;p&gt;Prometheus-compatible metrics and OpenTelemetry traces are the minimum. Look for whether the gateway can attribute tool calls to specific users and agents (not just service accounts), whether audit logs meet your compliance format requirements, and whether the dashboard supports anomaly detection or cost attribution, and whether the gateway offers a zero data retention architecture — meaning tool call payloads and credentials are never stored on the gateway provider's infrastructure, which matters for regulated industries and data sovereignty requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration Breadth vs. Governance Depth
&lt;/h3&gt;

&lt;p&gt;Managed platforms offer wide integration libraries but less control over the underlying infrastructure. Governance-first platforms offer deep control but require you to bring your own servers. For teams that need both, a large library of managed integrations and enterprise-grade governance, &lt;a href="https://composio.dev/mcp-gateway" rel="noopener noreferrer"&gt;Composio's MCP Gateway&lt;/a&gt; is the only option currently combining 500+ tools and actions with SOC2 compliance, RBAC, and zero data retention in a single product.&lt;/p&gt;

&lt;p&gt;See the full comparison in &lt;a href="https://composio.dev/content/best-mcp-gateway-for-developers" rel="noopener noreferrer"&gt;Composio's breakdown of the best MCP gateways for developers&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Overhead
&lt;/h3&gt;

&lt;p&gt;Every proxy adds latency. Managed platforms typically run under 10ms overhead. TrueFoundry publishes under 5ms p95. Lunar.dev MCPX publishes approximately 4ms p99. Docker MCP Gateway adds overhead due to container management; warm-path performance is significantly better than cold-start, which can add 50–200ms. Lasso Security adds 100–250ms. For conversational agents where response time is visible to users, this matters. For background automation workflows, it typically does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Your Own MCP Gateway
&lt;/h2&gt;

&lt;p&gt;Building a custom gateway is possible but requires solving non-trivial distributed systems problems: credential rotation, distributed rate limiting, OAuth 2.1 state management, PII redaction, and circuit breakers. The ongoing maintenance burden as the MCP spec grows as tool APIs change and security requirements mature is the real cost, not the initial build. For most teams, a managed gateway has a significantly lower total cost of ownership than a DIY solution, even when accounting for licensing costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Note on the MCP Security Threat Landscape
&lt;/h2&gt;

&lt;p&gt;Security threats against MCP deployments are not theoretical. A representative risk: an agent running with privileged service-role access that processes user-supplied input could inadvertently execute those instructions, exfiltrating sensitive data through legitimate output channels. Principle of least privilege at the gateway level is the primary defense.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP guidance on LLM security&lt;/a&gt; identifies prompt injection as among the highest-risk attack vectors for AI systems. An MCP gateway is the practical enforcement layer for mitigating it through input validation against JSON-RPC schemas, allowlisted actions, PII redaction, and real-time tool reputation scoring.&lt;/p&gt;

&lt;p&gt;Without a gateway, the security posture of your MCP deployment is only as strong as the weakest link among N independently managed agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How much latency does a gateway add?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Managed platforms: typically under 10ms overhead. High-performance purpose-built gateways (TrueFoundry, Lunar.dev MCPX): under 5ms p99. Security-scanning gateways (Lasso Security): 100–250ms depending on inspection depth. Docker MCP Gateway warm-path latency is low; cold-start overhead can add 50–200ms.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next for MCP Gateways
&lt;/h2&gt;

&lt;p&gt;Based on MCP's published direction and community discussions from early 2026, four priority areas have emerged: transport evolution (stateless Streamable HTTP for load balancer compatibility), agent communication primitives (retry semantics and expiry policies for the Tasks primitive), governance maturation (formal contributor processes), and enterprise readiness (audit trails, SSO-integrated auth, and gateway patterns).&lt;/p&gt;

&lt;p&gt;Gateway patterns are now explicitly on the protocol roadmap. The gateway layer is no  longer an addon but is becoming formalized infrastructure for enterprise MCP deployments.&lt;/p&gt;

&lt;p&gt;Start with your primary constraint. If it is integration velocity, a managed platform is the right answer. If it is compliance in a regulated industry, prioritize SOC 2 certification, audit log format, and IdP integration. If it is data sovereignty, evaluate VPC-deployable options. If it is raw performance for a latency-sensitive conversational product, benchmark the p95 numbers against your SLA.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://composio.dev/mcp-gateway" rel="noopener noreferrer"&gt;Composio MCP Gateway&lt;/a&gt; covers the first and most common case: an enterprise team that needs to move from prototype to production with a broad integration library, unified auth, and compliance controls without owning the infrastructure. For teams with narrower requirements or existing MCP server infrastructure, the list of specialized options covered above gives you the tradeoffs needed to make that call.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;For a deeper look at gateway architecture patterns, see &lt;a href="https://composio.dev/content/mcp-gateways-guide" rel="noopener noreferrer"&gt;Composio's developer guide to MCP gateways&lt;/a&gt;. For a full comparison of gateway options by use case, see &lt;a href="https://composio.dev/content/best-mcp-gateway-for-developers" rel="noopener noreferrer"&gt;the best MCP gateways for developers in 2026&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is an MCP Gateway, in one sentence?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A centralized infrastructure layer between AI agents and MCP servers that enforces authentication, routes requests, applies access controls, and provides observability across all agent-tool interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Is an MCP Gateway required for production deployments?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Not required by the protocol specification. Required in practice for any deployment with more than two or three MCP servers, multiple teams, regulated data, or compliance obligations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is the difference between an MCP server and an MCP gateway?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;An MCP server executes tools. It connects to GitHub, Postgres, Slack, or an internal API and performs operations. An MCP gateway governs access to those servers. It handles identity, visibility filtering, policy enforcement, and routing before any tool executes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How do MCP gateways handle prompt injection?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Security-first gateways like Lasso Security scan all traffic in real time and block payloads that trigger injection detection. Governance platforms like MintMCP apply input schema validation and allowlisted actions. Managed platforms like Composio run tool implementations in sandboxed environments. Using multiple layers of defense is the current best practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What authentication standards should my gateway support?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;OAuth 2.1 with PKCE, OIDC, SAML, and support for enterprise IdPs. The MCP specification introduced OAuth 2.1 in the March 2025 revision with refinements in June 2025, but implementation quality varies significantly. Test the on-behalf-of identity propagation flow specifically. This is where implementations most commonly diverge.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 Gumloop Alternatives for AI Workflow Automation in 2026</title>
      <dc:creator>Aakash R</dc:creator>
      <pubDate>Thu, 07 May 2026 08:13:49 +0000</pubDate>
      <link>https://forem.com/composiodev/10-gumloop-alternatives-for-ai-workflow-automation-in-2026-1apn</link>
      <guid>https://forem.com/composiodev/10-gumloop-alternatives-for-ai-workflow-automation-in-2026-1apn</guid>
      <description>&lt;p&gt;Gumloop is a solid starting point for building AI-assisted automations. It has around 100+ platform integrations and MCP servers available. For teams that want a hosted environment where non-technical employees own their automations, Gumloop is one of the more complete options available.&lt;/p&gt;

&lt;p&gt;However, as workflows get more complex, span multiple integrations, or sit alongside agentic products you already run, it may not be the most suitable fit.&lt;/p&gt;

&lt;p&gt;But as workflows expand, the weak spots show up fast: integrations get brittle, edge cases pile up, and it becomes harder to keep outputs consistent.&lt;/p&gt;

&lt;p&gt;This guide covers 10 of the best Gumloop alternatives in 2026. You will see what each tool is best at, where it fits in a modern automation stack, and how to pick the right option based on the exact constraint you are trying to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Here’s the quick way to think about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Composio Connect&lt;/strong&gt;: Best when the workflow breaks at the integration layer and an AI agent needs reliable actions across many apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zapier&lt;/strong&gt;: Best for well-defined, repeatable workflows that must run the same way every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make&lt;/strong&gt;: Best when you need branching, conditions, and detailed control over the flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; or &lt;strong&gt;Pipedream&lt;/strong&gt;: Best when you need custom logic, direct API calls, or code-level control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activepieces&lt;/strong&gt;: Best when self-hosting and data control start to matter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relay.app&lt;/strong&gt;: Best for team workflows that need to stay readable and easy to maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lindy AI&lt;/strong&gt;: Best when you want a goal-driven agent to execute tasks across tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vellum&lt;/strong&gt;: Best when you need to test, version, and monitor AI behavior in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workato&lt;/strong&gt;: Best for enterprise workflows that require governance and scale across teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;AI-first&lt;/th&gt;
&lt;th&gt;Integration depth&lt;/th&gt;
&lt;th&gt;Custom code / API control&lt;/th&gt;
&lt;th&gt;Self-hosting&lt;/th&gt;
&lt;th&gt;Governance / enterprise readiness&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composio Connect&lt;/td&gt;
&lt;td&gt;Agent-to-app actions across many tools&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zapier&lt;/td&gt;
&lt;td&gt;Reliable, well-defined app workflows&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make&lt;/td&gt;
&lt;td&gt;Branching logic and complex flow control&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n8n&lt;/td&gt;
&lt;td&gt;Backend-like workflows with custom steps&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Activepieces&lt;/td&gt;
&lt;td&gt;Simple automations with hosting control&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://Relay.app" rel="noopener noreferrer"&gt;Relay.app&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Readable team workflows with optional AI steps&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lindy AI&lt;/td&gt;
&lt;td&gt;Goal-driven agents executing across tools&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vellum&lt;/td&gt;
&lt;td&gt;Testing, versioning, and monitoring AI in production&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipedream&lt;/td&gt;
&lt;td&gt;Event-driven workflows with code and APIs&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workato&lt;/td&gt;
&lt;td&gt;Enterprise automations across teams and systems&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why Look for Gumloop Alternatives
&lt;/h2&gt;

&lt;p&gt;Gumloop works well in a contained setup. You can add AI steps, connect a few tools, and get useful output quickly. It fits early use cases that stay within clear boundaries.&lt;/p&gt;

&lt;p&gt;Growth changes the shape of the workflow. More tools come into the picture, and integrations that felt simple at first become harder to maintain. Production use raises the bar further. AI responses need to stay consistent across inputs that vary each time.&lt;/p&gt;

&lt;p&gt;Also, on the other hand, agent harnesses like Claude Code, OpenClaw, Hermes, and Codex are getting insanely powerful. They can work reliably without you needing to wire everything. Give them access to your applications and a bash tool, they will write codes to wire API end-points to execute any complex automation tasks.&lt;/p&gt;

&lt;p&gt;And this is almost no-code. You don’t have to intervene.&lt;/p&gt;

&lt;p&gt;If you’re looking for some Gumloop alternatives, I have mapped all that are available in the market. &lt;/p&gt;

&lt;h2&gt;
  
  
  Top Gumloop Alternatives in 2026
&lt;/h2&gt;

&lt;p&gt;Different tools address different breaking points. Tools in this list focus on integration depth, reliability, and AI execution across workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Composio Connect
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; sits between your AI and the tools your workflow depends on. It handles how the agent connects to, authenticates with, and takes actions across systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrjy3w0xhsi8uj0y67s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrjy3w0xhsi8uj0y67s2.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It provides access to 1000+ applications, so one setup can extend across Slack, Gmail, GitHub, CRMs, and other systems you already use. The vast catalog almost never let’s you long for any apps.&lt;/p&gt;

&lt;p&gt;You can wire Claude and Codex with &lt;a href="https://composio.dev/for-you" rel="noopener noreferrer"&gt;Composio Connect&lt;/a&gt; via a single MCP server and voila!&lt;/p&gt;

&lt;p&gt;You have now access to hosted and managed integrations. The best thing about Connect MCP is&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On-demand access to 1000+ application via the MCP eouter. It handles authentication and loads only relevant tools. So, your LLMs context window remains clean.&lt;/li&gt;
&lt;li&gt;Upto 50 parallel tool calls allowing the agents to handle complex automation tasks more efficiently.&lt;/li&gt;
&lt;li&gt;A remote bash tool which allows agents to write their own code to handle data cleaning and app interactions.&lt;/li&gt;
&lt;li&gt;Enterprise grade security&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it stand out against Gumloop&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Composio Connect is simple and harness agnostic. It’s a single MCP URL that you can plug into Claude, ChatGPT, Codex or your custom agents and it will work the same.&lt;/li&gt;
&lt;li&gt;Composio has over 1000 app integrations available via MCP, API, and CLI while Gumloop has 100+ MCP servers.&lt;/li&gt;
&lt;li&gt;With Composio you can bring your own OAuth credentials and API configurations, and configure exactly which scopes and actions an agent is allowed to use per connected account. This matters for teams that need fine-grained control over what an agent can do inside a customer's Gmail or Salesforce, rather than inheriting whatever the platform's connector exposes.&lt;/li&gt;
&lt;li&gt;With Composio you can bring your own OAuth credentials and API configurations, and configure exactly which scopes and actions an agent is allowed to use per connected account. This matters for teams that need fine-grained control over what an agent can do inside a customer's Gmail or Salesforce, rather than inheriting whatever the platform's connector exposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Zapier
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zapier.com/" rel="noopener noreferrer"&gt;Zapier&lt;/a&gt; is an automation platform that connects apps and runs workflows based on triggers and actions. It focuses on reliability and coverage, with support for thousands of integrations. It sits at the app layer. You define a trigger, map the steps, and Zapier handles the execution across tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuvgvb5o3znidhh9m3o2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuvgvb5o3znidhh9m3o2.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast setup across apps:&lt;/strong&gt; Connect tools and build workflows without custom logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large integration ecosystem:&lt;/strong&gt; Covers most common business tools out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stable execution model:&lt;/strong&gt; Workflows follow defined triggers and actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear structure:&lt;/strong&gt; Each step is visible and easy to trace&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it stand out against Gumloop&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop brings AI into workflows, adding flexibility but also introducing variation in outputs and behavior.&lt;/p&gt;

&lt;p&gt;Zapier takes the opposite approach. It focuses on predictable execution. Each step follows a defined path, which makes it easier to maintain workflows that need to run the same way every time. This matters in workflows where consistency is critical and the task can be defined clearly upfront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Choose Zapier when your workflow depends on reliable app-to-app automation and needs consistent, repeatable execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make
&lt;/h2&gt;

&lt;p&gt;If your workflow needs branching logic, conditions, or multiple paths based on inputs, &lt;a href="https://www.notion.so/Top-10-Gumloop-Alternatives-for-Better-Automation-and-AI-Workflows-352f261a6dfe8046b35dd53d8a2ff041?pvs=21" rel="noopener noreferrer"&gt;Make&lt;/a&gt; gives you more control.&lt;/p&gt;

&lt;p&gt;Make is a visual workflow builder that lets you design flows with conditional paths, iterations, and multi-step logic. You can see how data moves through each step and adjust the flow as needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvohb65c126704z3u7wj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvohb65c126704z3u7wj.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflows can branch based on conditions&lt;/li&gt;
&lt;li&gt;Complex logic can be handled inside a single flow&lt;/li&gt;
&lt;li&gt;Data handling is more visible at each step&lt;/li&gt;
&lt;li&gt;You can build multi-step processes across tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop focuses on AI-driven steps, which work well for flexible tasks. When the workflow depends more on structured logic, branching paths, and precise control, that approach can feel limiting. Make is built for that kind of control. You can define exactly how the workflow should behave at each step, which makes it easier to manage complex flows across tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Use Make when your workflow depends on conditional logic, branching paths, and detailed control over execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. n8n
&lt;/h2&gt;

&lt;p&gt;n8n usually comes up after a few rounds with no-code tools. A workflow works, but only up to a point. Then you need one step that does not fit. A custom API call, a transformation, or logic that depends on your own data. That requirement changes the kind of tool you need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forg2kua5g1zvli2haut2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forg2kua5g1zvli2haut2.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;n8n is a workflow tool that treats automation closer to backend logic. You still get a visual builder, but you can write code, call APIs directly, and control how data moves through each step. It also supports self-hosting, so workflows can run on your infrastructure and connect directly with internal systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it starts to matter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the workflow stops being a sequence of app connections and starts behaving like a system, the demands change. Data needs validation, routing, and transformation. Edge cases need handling. The workflow has to adapt based on inputs. Predefined steps start to feel restrictive at that stage.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What changes in practice&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You define how each step behaves instead of fitting into available integrations. API calls, custom logic, and error handling become part of the workflow itself. This also changes how reusable the setup becomes. Logic can be carried across workflows, so new use cases build on existing structure instead of starting from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Use n8n when your workflow needs custom logic, API-level control, and the ability to behave like a system rather than a fixed sequence of steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Activepieces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.activepieces.com/" rel="noopener noreferrer"&gt;Activepieces&lt;/a&gt; is an open-source workflow automation tool with a visual builder. It gives you a familiar way to connect apps and build flows, with the option to host everything on your own infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ky1syyc5n5n7mvwqb5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ky1syyc5n5n7mvwqb5p.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You control where workflows run:&lt;/strong&gt; Host on your own environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data stays within your setup:&lt;/strong&gt; You decide how it flows across systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations can be extended:&lt;/strong&gt; Adjust connections based on your needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows stay easy to build:&lt;/strong&gt; Visual builder keeps the process simple&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop is designed around AI-driven workflows, which work well when the focus is on logic inside the flow. Activepieces becomes a better fit when control over execution and data matters more. It’s the middle ground between fully autonomous AI workflows and programmatic workflows.&lt;/p&gt;

&lt;p&gt;Hosting workflows yourself gives you visibility into how they run and removes dependency on a managed platform. This is useful when workflows connect to internal systems or need tighter control over data handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Use Activepieces when your workflow needs control over hosting, data flow, and integrations as it grows&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Relay.app
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.relay.app/" rel="noopener noreferrer"&gt;Relay&lt;/a&gt; is a workflow tool built around clarity. It keeps each step visible and easy to follow, with optional AI steps that fit into the flow rather than driving it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ciqjgc5l55ck75ito8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ciqjgc5l55ck75ito8.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workflows stay readable:&lt;/strong&gt; Each step is clear, so you can see what is happening without tracing through layers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster iteration:&lt;/strong&gt; Small changes can be made and tested quickly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI fits into the flow:&lt;/strong&gt; Use AI for specific steps like summarizing, drafting, or classification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier handoff:&lt;/strong&gt; Workflows can be understood and managed by others on the team&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop centers the workflow around AI decisions. That works well for flexible tasks, but it also means more time spent shaping prompts, checking outputs, and handling edge cases when results vary.&lt;/p&gt;

&lt;p&gt;Relay takes a different approach. The workflow stays structured, and AI is used for defined steps inside that structure. That makes it easier to reason about what the workflow is doing and adjust it without reworking the whole flow. This becomes useful when the workflow needs to stay clear, easy to maintain, and accessible to others who did not build it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Use Relay when your workflow needs to stay readable, easy to adjust, and manageable across a team&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Lindy AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.lindy.ai/" rel="noopener noreferrer"&gt;Lindy&lt;/a&gt; is a personal AI work assistant. Users delegate inbox triage, meeting attendance and notes, calendar scheduling, follow-ups, and admin work by texting Lindy through iMessage/SMS, the web app, or connected apps like Gmail, Outlook, Slack, HubSpot, Salesforce, and Zoom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9d6vmelsdmhhekofvdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9d6vmelsdmhhekofvdi.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What changes when you use it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delegation by text: Tasks can be assigned from a phone without opening a builder&lt;/li&gt;
&lt;li&gt;Personal context: The assistant works across the user's connected inbox, calendar, and CRM with their voice and preferences&lt;/li&gt;
&lt;li&gt;Full meeting lifecycle: Prep before, notes during, follow-ups after&lt;/li&gt;
&lt;li&gt;Outcome-driven, not flow-driven: Users describe results instead of mapping steps&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop is a workflow platform where teams build automations on a canvas. Lindy is an assistant that runs the recurring loop of professional work — email, meetings, calendar, follow-ups — across a single user's connected tools. &lt;/p&gt;

&lt;p&gt;The two solve different problems: Gumloop fits when teams want to design and own automations; Lindy fits when an individual or team wants to hand off recurring admin work to an AI assistant.&lt;/p&gt;

&lt;p&gt;Best for: Use Lindy when the work is personal admin and coordination across email, meetings, and calendar — not workflow design.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Vellum
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.vellum.ai/" rel="noopener noreferrer"&gt;Vellum&lt;/a&gt; is built for teams running AI in production. It focuses on testing, versioning, and monitoring how AI behaves once workflows are live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiy6j6dsme8je56oydpdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiy6j6dsme8je56oydpdj.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt versioning: Compare prompts, models, and parameters side by side against test cases&lt;/li&gt;
&lt;li&gt;Evaluation framework: Run hundreds of test cases with custom metrics or LLM-as-judge before deployment&lt;/li&gt;
&lt;li&gt;Production monitoring: Track real-time performance of deployed prompts and workflows&lt;/li&gt;
&lt;li&gt;Workflow orchestration: Chain prompts, business logic, APIs, and tool calls with version control&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop is built for shipping AI automations across a team, with the canvas as the place where workflows are designed and run. Vellum sits one layer deeper, focused on the prompts and AI logic inside those workflows. It gives engineering and product teams the tools to test prompt and model combinations, deploy with version control, and watch how AI behaves once it's live.&lt;/p&gt;

&lt;p&gt;The two are not direct substitutes. Teams pick Gumloop when the goal is letting non-technical users build automations. Teams pick Vellum when the AI logic itself is the product and needs the same rigor as any other production system — testing, releases, monitoring, rollback.&lt;/p&gt;

&lt;p&gt;Best for: Use Vellum when AI outputs are core to your product and need to be evaluated, deployed, and monitored with the same discipline as software releases.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Pipedream
&lt;/h2&gt;

&lt;p&gt;Pipedream sits between a workflow tool and a backend. It lets you write code, call APIs, and connect services, all inside an event-driven workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6myj5mc82hw3ox7trmh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6myj5mc82hw3ox7trmh.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code inside workflows:&lt;/strong&gt; Write JavaScript or Python for each step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct API access:&lt;/strong&gt; Connect to any service, not just prebuilt integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-driven execution:&lt;/strong&gt; Trigger workflows based on real-time events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine control over data:&lt;/strong&gt; Transform and route data at each step&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gumloop is designed around structured workflows with AI steps. That works well when integrations are available, and the flow can be defined clearly.&lt;/p&gt;

&lt;p&gt;Pipedream becomes useful when the workflow depends on APIs not covered by standard integrations or requires logic that goes beyond predefined steps. You can write exactly what each step should do, which removes the need to work around tool limitations.&lt;/p&gt;

&lt;p&gt;This makes it a better fit for workflows that behave more like backend processes than visual automations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Use Pipedream when your workflow depends on APIs, custom code, and event-driven execution across services.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Workato
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.workato.com/" rel="noopener noreferrer"&gt;Workato&lt;/a&gt; is an enterprise automation platform designed for large-scale workflows across business systems. It focuses on reliability, governance, and deep integrations with enterprise tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzk4lobx31ra6a2szk2dp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzk4lobx31ra6a2szk2dp.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when you use it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deep enterprise connectors: Pre-built integrations for Workday, NetSuite, SAP, ServiceNow, Salesforce, and other systems of record&lt;/li&gt;
&lt;li&gt;Governance: Role-based access, environment promotion, audit trails, and centralized recipe management&lt;/li&gt;
&lt;li&gt;Scale: Built to run high-volume, mission-critical workflows across business units&lt;/li&gt;
&lt;li&gt;AI agents: Genie agents work alongside automation recipes for natural-language interfaces to enterprise data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why does it work better than Gumloop in this case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Both Gumloop and Workato are used inside enterprises, but they enter the organization from different directions. &lt;/p&gt;

&lt;p&gt;Gumloop is bottom-up — individual employees and teams build automations on a canvas, often without IT involvement. Workato is top-down — IT and integration teams own the platform, model the systems of record, and grant access to business units.&lt;/p&gt;

&lt;p&gt;That changes the workflows each is suited for. Gumloop fits AI-driven, fast-moving automations owned by the people who use them. Workato fits cross-system processes that need IT oversight, formal change management, and integration with enterprise systems where downtime or bad data has real cost.&lt;/p&gt;

&lt;p&gt;Best for: Use Workato when workflows span enterprise systems of record, need IT governance, and serve multiple business units with formal access control.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose the Right Alternative
&lt;/h2&gt;

&lt;p&gt;The choice becomes clearer once you look at where your workflow starts to break.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the issue shows up at the integration layer, where multiple tools need to work together reliably, tools like &lt;a href="http://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; or Workato make more sense.&lt;/li&gt;
&lt;li&gt;If the workflow itself is well-defined and needs to run the same way every time, Zapier or Make are a better fit. If the logic within the workflow becomes the constraint and triggers and webhools become important, n8n or Pipedream fit better.&lt;/li&gt;
&lt;li&gt;If the challenge is AI behavior and its performance in production, Vellum becomes relevant. If the workflow itself needs to shift toward personal execution, Lindy AI is a better direction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right choice depends on the constraint you are trying to solve, not just the features each tool offers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Gumloop is part of a broader shift in how workflows are built. It brings AI into the process and makes it easier to handle tasks that do not fit strict rules.&lt;/p&gt;

&lt;p&gt;That works well up to a point. The limits show up in different places depending on the workflow. Sometimes it is integrations. Sometimes it is control over AI behavior. Sometimes it is how reusable the setup is.&lt;/p&gt;

&lt;p&gt;Tools like Composio highlight how the space is evolving. Instead of focusing only on workflows, they focus on giving AI reliable access to tools and actions across systems.&lt;/p&gt;

&lt;p&gt;Each alternative in this list focuses on one of those areas. There is no single replacement that fits every case.&lt;/p&gt;

&lt;p&gt;The right move is to look at your workflow and identify the exact point where it starts to strain. The tool you choose should solve that specific constraint, not try to cover everything at once.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>13 Best AI Marketing Tools to Beat Your Competitors (2026 Edition)</title>
      <dc:creator>Aakash R</dc:creator>
      <pubDate>Thu, 07 May 2026 08:03:56 +0000</pubDate>
      <link>https://forem.com/composiodev/13-best-ai-marketing-tools-to-beat-your-competitors-2026-edition-1o47</link>
      <guid>https://forem.com/composiodev/13-best-ai-marketing-tools-to-beat-your-competitors-2026-edition-1o47</guid>
      <description>&lt;p&gt;I’ve been doing growth marketing for a while now and if I’ll be honest with you it’s a cut throat competition out there for slightest of attention and winning distribution has become more important then ever before. You have to do everything, SEO, GEO, Reddit, TikTok, YouTube, Performance marketing, Emails, Twitter, and any channel you can think of. And with all the AI tools available right now, there simply is no excuse.&lt;/p&gt;

&lt;p&gt;So, I’ve curated all the AI tools that we use in-house for all thing marketing. It covers the entire spectrum copy writing, short video creation to scheduling tools. So, nothing is missed.&lt;/p&gt;

&lt;p&gt;So, let’s get all the ingredients for building an effective marketing stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Composio&lt;/strong&gt; – Connects your entire marketing stack (ads, analytics, CRM) so AI can act on real campaign data instead of isolated inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT Deep Research&lt;/strong&gt; – Breaks down competitors, content strategies, and market gaps with reasoning, not just surface-level summaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seedance (ByteDance)&lt;/strong&gt; – Converts ideas into full short-form videos (visuals + motion + audio) for rapid content testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lovable&lt;/strong&gt; – Generates and deploys landing pages from prompts, making campaign launches and experiments fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion&lt;/strong&gt; – Central workspace to manage content calendars, campaign planning, and ongoing marketing workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manus&lt;/strong&gt; – Creates presentations, documents, and visuals from simple prompts, helping turn ideas into shareable assets quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Midjourney&lt;/strong&gt; – Produces high-quality, distinctive visuals for ads, thumbnails, and creatives that stand out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; – Generates realistic voiceovers with control over tone and pacing for ads and video content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surfer SEO&lt;/strong&gt; – Guides blog structure, keywords, and depth based on what’s already ranking to improve search performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jasper&lt;/strong&gt; – Generates ad copy, email sequences, and variations optimized for different audiences and campaign goals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HubSpot&lt;/strong&gt; – Manages CRM, tracks leads, and connects campaigns to actual conversions and revenue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hootsuite&lt;/strong&gt; – Schedules and manages social media content across platforms with built-in AI assistance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pebblely&lt;/strong&gt; – Creates clean, ready-to-use product visuals with different backgrounds and styles from a single image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grammarly&lt;/strong&gt; – Refines writing by improving clarity, tone, and correctness across all marketing content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use AI Tools for Marketing
&lt;/h2&gt;

&lt;p&gt;AI works best when it fits into the main parts of your workflow and helps you make better decisions as you go.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email marketing and lifecycle&lt;/strong&gt; — AI can draft sequences, personalize subject lines, segment lists based on behavior, and predict the best send times. This is one of the highest-ROI uses and it's missing entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer research and insights&lt;/strong&gt; — Analyzing reviews, support tickets, survey responses, and social comments to surface pain points, objections, and the actual language customers use. This often feeds everything else (ads, SEO, content).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics and reporting&lt;/strong&gt; — Summarizing campaign performance, pulling insights from GA4 or ad platforms, and turning raw numbers into plain-language reports for stakeholders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image and visual asset creation&lt;/strong&gt; — Product photos, ad creatives, thumbnails, social graphics. You mention video but skip static visuals, which are still a huge chunk of marketing output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalization at scale&lt;/strong&gt; — Dynamic landing pages, tailored email content, and product recommendations based on user behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand voice and consistency&lt;/strong&gt; — Training a custom assistant or style guide so all AI-generated content sounds like &lt;em&gt;your&lt;/em&gt; brand instead of generic AI output. Worth flagging because it's a common failure mode of the workflow you described.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13 Best AI Marketing Tools I’ve tried and tested in 2026
&lt;/h2&gt;

&lt;p&gt;There are way too many AI tools right now, and most of them sound useful until you actually try to fit them into your work. A lot of them overlap, and some just slow you down. The ones that matter are the ones you keep coming back to because they actually help you get things done.&lt;/p&gt;

&lt;p&gt;Here are some of the tools that I used and kept using:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Composio: Connecting Your Marketing apps with Claude and ChatGPT&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/13-Best-AI-Marketing-Tools-to-Beat-Your-Competitors-2026-Edition-350f261a6dfe80c7a1cac56eb562b90d?pvs=21" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; is an AI integration platform that connects with 1000+ tools across marketing, analytics, and productivity. It plugs into tools like &lt;a href="https://composio.dev/toolkits/google_analytics" rel="noopener noreferrer"&gt;Google Analytics&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/metaads" rel="noopener noreferrer"&gt;Meta Ads&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/googleads" rel="noopener noreferrer"&gt;Google Ads&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/ahrefs" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;, and &lt;a href="https://composio.dev/toolkits/googlesuper" rel="noopener noreferrer"&gt;Google Workspace&lt;/a&gt;, and works directly with assistants like ChatGPT and Claude.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F610jujfidrz99pwq1avb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F610jujfidrz99pwq1avb.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After using it across a few campaigns, the biggest shift was how everything started to feel connected. Checking performance, pulling numbers, and figuring out what to do next all happen within a single flow. There is no need to keep jumping across dashboards to piece things together.&lt;/p&gt;

&lt;p&gt;It has been especially useful when multiple campaigns are running simultaneously. Looking at ad performance, spotting patterns, and making changes can all happen without losing context, making day-to-day work feel much smoother.&lt;/p&gt;

&lt;p&gt;Here are a few ways it has been helping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All data in one place:&lt;/strong&gt; Campaign performance, analytics, and content signals come together, so it is easier to see what is working&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less switching during work:&lt;/strong&gt; Metrics, insights, and actions stay in the same flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI with real context:&lt;/strong&gt; Outputs are based on actual campaign data, which makes them more useful&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better day-to-day flow:&lt;/strong&gt; Reviewing performance and making updates feels more continuous&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Getting started is simple. Connect the tools you already use on the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio platform&lt;/a&gt;, link your AI assistant, and start with something basic, like checking campaign performance. From there, it naturally becomes part of how campaigns are managed.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Competitor Research with ChatGPT Deep Research&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chat.openai.com/chat" rel="noopener noreferrer"&gt;ChatGPT’s&lt;/a&gt; Deep Research mode has been one of the tools I keep coming back to for competitor analysis. It started as a quick way to gather info, but after a few uses, it became something I rely on during early research.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2m2blm3z0vlzn1cw77v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2m2blm3z0vlzn1cw77v.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The way it usually plays out is simple. I give it a competitor or a niche and ask for a full breakdown. It pulls their positioning, the type of content they post, how often they publish, how they show up in search, and how people react to them across platforms. Having all of this in one place saves a lot of back and forth and makes it easier to see the full picture.&lt;/p&gt;

&lt;p&gt;Prompting made a big difference over time. Early prompts gave basic summaries. Once I started asking for comparisons, gaps, audience reactions, and reasons behind performance, the output became much more useful. It started to feel less like getting answers and more like having a proper research partner.&lt;/p&gt;

&lt;p&gt;One thing I found genuinely helpful is how it explains patterns. It does not just list what competitors are doing. It shows why something works and where they are missing out. That is usually where new content ideas or campaign angles come from.&lt;/p&gt;

&lt;p&gt;It has been especially useful when looking at a few competitors together before starting a campaign. It gives a clear sense of what is already crowded and what still has space, which makes planning a lot more focused.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3, AI Video Creation with Seedance by ByteDance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://openart.ai/suite/animate-video/byte-plus-seedance-2" rel="noopener noreferrer"&gt;Seedance&lt;/a&gt; is an AI video generation model by ByteDance that can turn text, images, and clips into full videos. It handles visuals, motion, and audio together, making the output feel more complete without requiring multiple tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bk25jnel6v7dyvqycm3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bk25jnel6v7dyvqycm3.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After using it for short-form content, I found it much easier to take an idea and turn it into a video. A simple prompt can turn into a clip with movement, transitions, and sound. It works well for things like Reels, Shorts, and ad creatives, especially when testing different concepts.&lt;/p&gt;

&lt;p&gt;Over time, it became more useful for creating variations. One idea can be turned into multiple versions with different hooks or styles, which helps when testing what actually works. It also works well with references like images or clips, which makes the output feel more intentional.&lt;/p&gt;

&lt;p&gt;Here are a few ways it has been useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast video creation:&lt;/strong&gt; Ideas turn into videos quickly without going through heavy editing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple variations:&lt;/strong&gt; One concept can be tested in different styles, hooks, and formats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good for short-form content:&lt;/strong&gt; Works well for TikTok, Reels, Shorts, and ad creatives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More control over output:&lt;/strong&gt; Prompts can guide scenes, motion, and overall look of the video&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less editing effort:&lt;/strong&gt; Most of the work is handled in one place, so there is less need to jump across tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Website Creation and Launch with Lovable&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I started using &lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;Lovable&lt;/a&gt; recently, and it’s been surprisingly useful for turning simple ideas into clean landing pages. You can describe what you want, and it builds a proper page that actually looks good and is ready to go live. It also handles deployment, so you are not stuck figuring out how to host or publish it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8cr1vkcpdp1anjujk2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8cr1vkcpdp1anjujk2s.png" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For marketing work, this makes a big difference. When there is a new campaign idea or offer, a page can be created and live pretty quickly without getting blocked on design or dev. The first version usually comes out solid, and small tweaks are enough to get it ready.&lt;/p&gt;

&lt;p&gt;It has made testing much easier. Trying different messaging or offers no longer feels heavy, since each version can be turned into its own page. That makes it simpler to validate ideas and move forward with more confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Keeping Everything Organized with Notion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.notion.com/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt; became my go to place for almost everything. It has all the information I need in one place, and it is easy to navigate and organize, which makes managing work much simpler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4g0sizry9wkfsrkpwh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4g0sizry9wkfsrkpwh6.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been really useful for keeping content calendars, tracking campaigns, and writing things out properly. Ideas usually start messy, and Notion makes it easy to shape them into something usable without overthinking the structure.&lt;/p&gt;

&lt;p&gt;What I like most is how flexible it is. Pages can be simple or detailed as needed, and everything stays connected. Campaign notes, content ideas, and tasks all sit in one place, so nothing gets lost.&lt;/p&gt;

&lt;p&gt;Over time, it just became the place I keep going back to. Planning, writing, tracking progress, everything happens there, which makes it easier to stay focused and keep things moving.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Creating Presentations, Docs, and Visuals with Manus&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/13-Best-AI-Marketing-Tools-to-Beat-Your-Competitors-2026-Edition-350f261a6dfe80c7a1cac56eb562b90d?pvs=21" rel="noopener noreferrer"&gt;Manus&lt;/a&gt; is one of those tools I started using when I needed to quickly pull together different types of content. It can generate presentations, documents, simple websites, and even basic graphics from a prompt, making it useful when ideas need to turn into something presentable quickly.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkke0p4qg2etvb9qr7k6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkke0p4qg2etvb9qr7k6m.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It became handy during campaign work and internal reviews. Slides for a pitch, a quick doc to explain a plan, or even visuals for content can be created without starting from scratch. A rough idea is usually enough to get a solid first version, and small edits take it the rest of the way.&lt;/p&gt;

&lt;p&gt;What made it stick is how it handles multiple formats in one place. Instead of jumping between tools for slides, docs, and visuals, everything can be created in a single flow. That makes it easier to keep things consistent and move faster when working on different pieces of the same campaign.&lt;/p&gt;

&lt;p&gt;It has been useful when something needs to be shared quickly, whether it is a presentation, a doc, or a visual asset. It takes away the friction of starting from a blank page and helps get to a usable version much faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Designing Scroll-Stopping Creatives with &lt;a href="https://www.midjourney.com/" rel="noopener noreferrer"&gt;Midjourney&lt;/a&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Midjourney is the tool I reach for when a visual needs to catch attention. The images have a distinct look that feels more styled and less generic, which helps when everything online starts to look similar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xh8n7eddf9metzw1nhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xh8n7eddf9metzw1nhc.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the use has been around ad creatives and thumbnails. A rough idea can turn into a strong visual in a few tries, and those visuals often shape the direction of the content itself. It is not just about filling space; it actually influences how the message is presented.&lt;/p&gt;

&lt;p&gt;Getting better results comes down to how the prompt is written. Small changes in wording, style cues, or references can change the entire feel of the image. Over time, it becomes easier to guide it toward a specific look.&lt;/p&gt;

&lt;p&gt;It also works well for exploring different directions. One concept can be turned into multiple styles, which makes it easier to see what fits and what stands out before using it in a campaign.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8. Voiceovers and Audio with ElevenLabs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/13-Best-AI-Marketing-Tools-to-Beat-Your-Competitors-2026-Edition-350f261a6dfe80c7a1cac56eb562b90d?pvs=21" rel="noopener noreferrer"&gt;ElevenLabs&lt;/a&gt; is what I’ve been using for voiceovers, especially for short videos and ads. It turns text into natural-sounding speech, and the voices actually feel real, which makes a big difference when the content is meant to hold attention.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpensqp4tsed441o2nxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpensqp4tsed441o2nxl.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It became useful while working on video content. Writing a script is one part, but getting a clean voiceover used to take extra effort. With ElevenLabs, a script can turn into a usable voice track in minutes, and small edits are easy to try without redoing everything.&lt;/p&gt;

&lt;p&gt;The control over tone and pacing is what stands out. You can adjust how the voice sounds based on the content type to better match the mood of the video or ad. It also works well when testing different versions of the same script with slight variations.&lt;/p&gt;

&lt;p&gt;It fits well into content workflows where audio matters. Videos feel more complete, and the process of getting from script to final output becomes much smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;9. Writing SEO Blogs That Actually Rank with Surfer SEO&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Figuring out what to include in an SEO blog used to feel like guesswork. &lt;a href="https://www.notion.so/13-Best-AI-Marketing-Tools-to-Beat-Your-Competitors-2026-Edition-350f261a6dfe80c7a1cac56eb562b90d?pvs=21" rel="noopener noreferrer"&gt;Surfer SEO&lt;/a&gt; changed that by providing clear direction on what the content should cover, based on what is already ranking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3774f9s9rmmmymmkqt6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3774f9s9rmmmymmkqt6i.png" alt=" " width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working on blog posts helped shape the structure before writing even started. It shows the kinds of headings, keywords, and depth that top pages have, making planning much easier. The content ends up feeling more complete and aligned with what people are searching for.&lt;/p&gt;

&lt;p&gt;Another thing that helped was staying on track while writing. It is easy to drift or miss important points, and Surfer keeps things focused without forcing a rigid style. The content still feels natural, just more aligned with search intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;10. Writing Ad Copy and Emails with Jasper&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Coming up with good copy on demand is harder than it looks, especially when you need multiple versions for ads or emails. &lt;a href="https://www.jasper.ai/" rel="noopener noreferrer"&gt;Jasper&lt;/a&gt; has been useful in those moments when ideas are there, but the wording needs to be sharper.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8myrmlkxqc338zp21u1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8myrmlkxqc338zp21u1.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It works well for creating variations. A single idea can turn into multiple ad copies, email drafts, or landing page lines, which helps when testing different angles. The output usually feels more structured for marketing compared to general AI tools.&lt;/p&gt;

&lt;p&gt;The part that stands out is how it handles tone and intent. You can guide it based on the audience or goal, and it adjusts the writing to match. That makes it easier to keep the message aligned with the campaign. It works well in workflows where copy needs to be tested and improved. Having multiple options ready makes it easier to pick what works and build on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;11. Managing Marketing and CRM with HubSpot&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.hubspot.com/" rel="noopener noreferrer"&gt;HubSpot&lt;/a&gt; is something that comes in once everything starts growing. Content, leads, emails, campaigns, all of it needs a place to stay organized, and this is where HubSpot starts to help.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05vmcix52xfesjy47sm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05vmcix52xfesjy47sm7.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been useful for tracking leads and seeing how people move from first touch to conversion. Instead of guessing what is working, you can actually see which campaigns or channels are bringing results. That makes it easier to decide where to focus.&lt;/p&gt;

&lt;p&gt;Email campaigns and follow-ups also become easier to manage. Setting up flows, tracking engagement, and keeping everything connected to the same contact data makes things feel more structured.&lt;/p&gt;

&lt;p&gt;It works well when marketing starts getting serious. Everything from campaigns to customer interactions sits in one place, which makes it easier to manage and improve over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;12. Scheduling and Social Media Management with Hootsuite&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Keeping up with multiple social platforms can get messy once posting becomes a regular habit. &lt;a href="https://www.hootsuite.com/" rel="noopener noreferrer"&gt;Hootsuite&lt;/a&gt; made that part easier by bringing everything into one place and adding AI support for content and scheduling.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34zq3g3pz9lnx8d5b1gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34zq3g3pz9lnx8d5b1gc.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been useful for planning posts in advance and maintaining a consistent flow. Content for different platforms can be scheduled in one go, which helps avoid last-minute posting. It also gives a clear view of what is going out and when. The AI features help generate captions and adjust tone based on the platform. &lt;/p&gt;

&lt;p&gt;That saves time when you need variations of the same content. It also helps when you are not sure how to phrase something.&lt;/p&gt;

&lt;p&gt;It works well when managing multiple channels. Posting, tracking engagement, and staying consistent become easier, helping keep the social presence active without too much effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;13. Turning Ideas into Product Shots with Pebblely&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Getting good product images usually takes time or a proper setup. &lt;a href="https://pebblely.com/" rel="noopener noreferrer"&gt;Pebblely&lt;/a&gt; made that part much easier by generating clean product shots from a simple image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5b5trnh1v6dak1nggw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5b5trnh1v6dak1nggw0.png" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been useful for quick creatives, especially when testing ads or trying different visual styles. A basic product image can be turned into multiple backgrounds and setups, helping create variety without a full shoot.&lt;/p&gt;

&lt;p&gt;A big advantage is the speed at which you can try different looks. Changing the setting, style, or feel of the image takes a few clicks, so it becomes easy to explore different directions for a campaign. It works well when visuals are needed quickly. Product images come out clean and ready to use, which helps keep ad creatives and content moving without extra effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI tools can feel overwhelming at first because there are so many options. After trying a bunch of them, it usually comes down to a smaller set that actually fits into your day to day work. Those are the ones that end up sticking.&lt;/p&gt;

&lt;p&gt;Each of these tools solves a different part of marketing, from research and content to ads and tracking. When they start working together, things feel a lot more clear and manageable. You spend less time figuring things out and more time improving what is already working.&lt;/p&gt;

&lt;p&gt;At the end of the day, the tools are just support. The real difference comes from how you use them, how often you test ideas, and how you build on the results.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Workflow Automation Tools Are a Mess, Here’s What I Learned the Hard Way</title>
      <dc:creator>VK</dc:creator>
      <pubDate>Tue, 05 May 2026 13:53:16 +0000</pubDate>
      <link>https://forem.com/composiodev/anyone-else-waste-days-switching-between-automation-tools-before-committing-5flp</link>
      <guid>https://forem.com/composiodev/anyone-else-waste-days-switching-between-automation-tools-before-committing-5flp</guid>
      <description>&lt;p&gt;I spent days testing tools, trying to build a simple AI workflow automation setup, and it was way harder than it should have been.&lt;/p&gt;

&lt;p&gt;What is AI Workflow Automation?&lt;/p&gt;

&lt;p&gt;AI workflow automation is the process of using AI tools to connect, trigger, and execute tasks across apps without manual intervention.&lt;br&gt;
In theory, it should simplify work. In reality, most tools make it fragmented.&lt;/p&gt;

&lt;p&gt;Built a lead routing workflow last week that should've taken two hours. New form submission comes in, gets scored, lands in HubSpot, pings the right Slack channel. Done this before. Should've been an afternoon.&lt;/p&gt;

&lt;p&gt;Took three days. Not because it was hard, because I kept convincing myself the next tool would be cleaner. Got halfway through in one platform, hit some friction, jumped to the next one. By day two I had half-finished automations in four different tools and a creeping feeling that most of the "AI automation" category is just the same three features in different packaging.&lt;/p&gt;

&lt;p&gt;Eventually I did the only reasonable thing: scrapped everything and rebuilt the same workflow in every tool I was curious about. Back to back. Same workflow, every platform.&lt;/p&gt;

&lt;p&gt;Here's what I actually learned from that:&lt;/p&gt;

&lt;p&gt;n8n is the one I keep coming back to for client work. Self-hosted it on a cheap Hetzner box and had something running before lunch. The real moment was when a client needed an audit trail, pulled up the canvas, traced every branch visually, exported something readable in five minutes. Nothing else I tried lets you do that cleanly.&lt;/p&gt;

&lt;p&gt;Make was the surprise for internal stuff. Handed it to my content team with zero hand-holding. Monday someone asked if it was broken. Wednesday I got a screenshot, they'd built an entire RSS-to-Notion briefing pipeline end to end. The economics vs Zapier at any real volume aren't close either.&lt;/p&gt;

&lt;p&gt;Composio was the thing I didn't expect to change how I work. I'd been writing OAuth boilerplate by hand every time I added a new integration to an agent. Connected Gmail, GitHub, Notion, and Slack to a LangChain agent in under an hour with zero auth code. The three devs I've recommended it to are all still using it months later.&lt;/p&gt;

&lt;p&gt;Zapier I've rage-quit twice and come back twice. The docs are just the best in the category, when something breaks at 11pm and a client is waiting, that genuinely matters more than features. Expensive at volume though, that part isn't a myth.&lt;/p&gt;

&lt;p&gt;Also been playing with Claude Cowork for simpler delegation stuff, typed a natural language instruction for a recurring research task and it just ran with no workflow setup at all. Falls apart on anything with real conditional logic but for straightforward recurring tasks it's kind of wild.&lt;/p&gt;

&lt;p&gt;Tried Lindy too. The meeting prep agent is genuinely useful, drops a research brief before every discovery call without me thinking about it. Tried using it for anything beyond that and it struggled. Feels like it has a narrow sweet spot but inside that sweet spot it's really good.&lt;/p&gt;

&lt;p&gt;Hadn't touched Bardeen until a sales rep on my team mentioned she was spending two hours a day copying LinkedIn profiles into our CRM manually. Set her up with a playbook in 25 minutes, cut the task to four minutes. Main limitation is your browser has to stay open, not great for anything you want running in the background overnight.&lt;/p&gt;

&lt;p&gt;Probably the most useful thing I took from the whole exercise: most people are treating these tools like they're interchangeable and they're really not. There's a difference between tools for delegation, tools for structured data routing, tools for agent infrastructure, and tools for browser work. Picking the wrong category for your problem is why people keep jumping between platforms and feeling like nothing works.&lt;/p&gt;

&lt;p&gt;Until AI workflow automation tools become more unified, developers will keep wasting time stitching together workflows instead of building actual products.&lt;/p&gt;

&lt;p&gt;Complete analysis: Read the full blog post: &lt;a href="https://composio.dev/content/top-ai-workflow-automation-tools-you-must-not-miss-in-2026" rel="noopener noreferrer"&gt; top AI Automation tools&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Kimi K2.6 vs. Claude Opus 4.7 in a Weird Game Coding Test ✅</title>
      <dc:creator>Shrijal Acharya</dc:creator>
      <pubDate>Tue, 05 May 2026 13:04:03 +0000</pubDate>
      <link>https://forem.com/composiodev/kimi-k26-vs-claude-opus-47-in-a-weird-game-coding-test-2ck3</link>
      <guid>https://forem.com/composiodev/kimi-k26-vs-claude-opus-47-in-a-weird-game-coding-test-2ck3</guid>
      <description>&lt;p&gt;Kimi K2.6 has been getting a lot of love lately, especially from devs who want a strong coding model without paying premium model prices every time they run a big prompt.&lt;/p&gt;

&lt;p&gt;So I wanted to see how good this model actually is. But this time, I wanted to compare it with something much heavier, the developers darling &lt;strong&gt;Claude Opus 4.7&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On paper, Claude Opus 4.7 and Kimi K2.6 are very different models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9me1tc37trrs3wur8p6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9me1tc37trrs3wur8p6o.png" alt="Kimi K2.6 and Opus 4.7 benchmarks" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One is a premium frontier model from Anthropic. The other is Moonshot AI's much cheaper open model for coding and agentic tasks.&lt;/p&gt;

&lt;p&gt;The pricing difference is pretty wild too. Claude Opus 4.7 costs $5/M input tokens and $25/M output tokens. Kimi K2.6 is listed at $0.95/M input tokens and $4/M output tokens, with cached input going even lower at $0.16/M tokens.&lt;/p&gt;

&lt;p&gt;That is a pretty big gap.&lt;/p&gt;

&lt;p&gt;So in this article, we'll see how the cheaper model, Kimi K2.6, does against Claude Opus 4.7.&lt;/p&gt;

&lt;p&gt;For the test, I gave both models the same coding task: build a small Minetest (similar to Minecraft) bounty board with a TypeScript backend, then extend it with Google Sheets logging through Composio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zpwug27ph8tc9d8dti6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zpwug27ph8tc9d8dti6.gif" alt="Angrybird interacting with a telescope" width="480" height="260"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you want the quick take, Claude Opus 4.7 clearly won this test, but it was painfully expensive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opus was better at the real task.&lt;/strong&gt; The local build was cleaner, and it was the only one that got the real Google Sheets integration working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kimi did pretty well in Test 1.&lt;/strong&gt; It got the local bounty board working for way less money, but it needed more debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 2 changed the whole comparison.&lt;/strong&gt; Opus was expensive, but it finished. Kimi just could not put it all together.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cost difference was wild though.&lt;/p&gt;

&lt;p&gt;For the first local bounty board test, Opus cost around &lt;strong&gt;$3.59&lt;/strong&gt;, while Kimi came in at around &lt;strong&gt;$0.39&lt;/strong&gt;. That is a huge gap. For the basic version, Kimi honestly did pretty well for the price.&lt;/p&gt;

&lt;p&gt;But once the task got a little more real, the gap became way more obvious.&lt;/p&gt;

&lt;p&gt;Opus got it working, even though it needed a little back and forth. The Google Sheets sync worked, and the project was modular enough that I could test the whole flow with two &lt;code&gt;curl&lt;/code&gt; requests without even opening the game.&lt;/p&gt;

&lt;p&gt;The painful part is that the Composio run alone cost &lt;strong&gt;$16&lt;/strong&gt; and took around &lt;strong&gt;28min 52sec API time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Kimi, on the other hand, burned &lt;strong&gt;135k+ tokens&lt;/strong&gt;, took around &lt;strong&gt;25 minutes&lt;/strong&gt;, cost around &lt;strong&gt;$5.03&lt;/strong&gt;, and still did not really get any closer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👀 So yeah, Kimi K2.6 is a usable and interesting cheaper model. But in this test, it could not really come close to Opus 4.7 for real-world coding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Evaluation
&lt;/h2&gt;

&lt;p&gt;I treated this like a real project, not a benchmark chart. Both models got the same prompts, and I compared the results based on whether it actually worked, how clean the code was, how much debugging it needed, how long it took, and how much it cost. That last one matters a lot here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Same tasks and prompts&lt;/strong&gt; for both models (Test 1: local-only bounty board, Test 2: real Composio Google Sheets sync).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same target architecture&lt;/strong&gt;: Minetest/Luanti Lua mod + TypeScript backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same success criteria&lt;/strong&gt;: &lt;code&gt;/bounty&lt;/code&gt; flow works in-game, backend APIs behave correctly, and in Test 2 the completion is appended to Google Sheets via Composio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I measured
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Functional correctness (most important):&lt;/strong&gt; Did it work end-to-end with real verification?

&lt;ul&gt;
&lt;li&gt;Local run: could a player generate, progress, and complete bounties without breaking state?&lt;/li&gt;
&lt;li&gt;Backend: did &lt;code&gt;/health&lt;/code&gt;, &lt;code&gt;/api/bounty/generate&lt;/code&gt;, &lt;code&gt;/api/bounty/complete&lt;/code&gt;, and &lt;code&gt;/api/leaderboard&lt;/code&gt; return the expected shapes?&lt;/li&gt;
&lt;li&gt;Test 2: did the Google Sheets append succeed, and could I validate it from the API without needing to be in the game?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Code quality and structure:&lt;/strong&gt; modularity, clarity, and whether the repo was easy to reason about and test.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Debug burden:&lt;/strong&gt; how many follow-ups were needed, how confusing the failure modes were, and whether issues were “real bugs” vs. “misconfiguration traps.”&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Time:&lt;/strong&gt; API time and wall time for each run.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Cost and token usage:&lt;/strong&gt; input, output, cache behavior, and total run cost.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Practical ergonomics:&lt;/strong&gt; whether I could validate quickly (for example, testing the full backend + Composio flow with &lt;code&gt;curl&lt;/code&gt;).&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  How I verified outcomes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test 1:&lt;/strong&gt; ran the backend locally, joined a local Minetest world, used &lt;code&gt;/bounty&lt;/code&gt;, and confirmed task tracking, rewards, and leaderboard persistence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 2:&lt;/strong&gt; verified the end-to-end sync by generating and completing a bounty via the backend API, and confirming a successful Google Sheets append through Composio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scoring approach
&lt;/h3&gt;

&lt;p&gt;This was not a “unit test leaderboard” benchmark. It was a real build-and-ship check.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A model “wins” when the project works with minimal intervention.&lt;/li&gt;
&lt;li&gt;A model “loses” when it cannot reach a working state in reasonable time/cost, even if parts of the code look promising.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Coding Test
&lt;/h2&gt;

&lt;p&gt;For this test, I used the following CLI coding agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Opus 4.7:&lt;/strong&gt; Claude Code, Anthropic's terminal-based agentic coding tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvc5bfm8a9ump0ebp5f7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvc5bfm8a9ump0ebp5f7o.png" alt="Claude Opus 4.7 model in CC" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kimi K2.6:&lt;/strong&gt; OpenCode via OpenRouter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbg1utbhx6wenvgpszln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbg1utbhx6wenvgpszln.png" alt="Kimi K2.6 in OpenRouter" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ This is a practical coding test, so both models get the same prompt. I will compare time taken, code quality, token usage, cost, and all that stuff.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What are we building?
&lt;/h3&gt;

&lt;p&gt;For this test, I wanted something small enough to verify properly, but still weird enough to show how each model handles an unusual idea.&lt;/p&gt;

&lt;p&gt;So, we're building a simple Minetest/Luanti bounty board.&lt;/p&gt;

&lt;p&gt;A player can join a local world, run &lt;code&gt;/bounty&lt;/code&gt;, get a task like mining dirt or placing torches, and receive a reward after completing it.&lt;/p&gt;

&lt;p&gt;After that, the backend records the completion, logs it to Google Sheets through Composio.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I get it, the concept is a little unusual on purpose.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Test Prompts
&lt;/h3&gt;

&lt;p&gt;Both models received the same prompts for each test.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test 1 Prompt:&lt;/strong&gt; &lt;a href="https://gist.github.com/shricodev/a9fa4512142e74c72afc0e8b6b121384" rel="noopener noreferrer"&gt;Local Bounty Board Prompt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 2 Prompt:&lt;/strong&gt; &lt;a href="https://gist.github.com/shricodev/5e8f4803f1a9af152403e246b7bcd617" rel="noopener noreferrer"&gt;Real Composio Integration Prompt&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Test 1: Local Bounty Board
&lt;/h3&gt;

&lt;p&gt;This first test is the basic version of the idea.&lt;/p&gt;

&lt;p&gt;No external tools, no Composio. Just the game, the backend, and the local bounty flow working properly.&lt;/p&gt;

&lt;p&gt;The goal was simple. A player runs &lt;code&gt;/bounty&lt;/code&gt;, gets a task, completes it inside the game, and the backend tracks the progress without everything falling apart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Opus 4.7
&lt;/h3&gt;

&lt;p&gt;Claude Opus 4.7 handled the first test really well.&lt;/p&gt;

&lt;p&gt;The local bounty board worked end to end. It built the TypeScript backend, the Minetest/Luanti Lua mod, the command flow, progress tracking, rewards, and leaderboard persistence without needing a bunch of follow-up fixes.&lt;/p&gt;

&lt;p&gt;The file structure also felt nice, which I had specifically asked for in the prompt:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ldggdwrwcrk42jgswb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ldggdwrwcrk42jgswb0.png" alt="Claude Opus 4.7 created file structure" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The backend was built with Express, Zod, and Vitest. It also handled the boring stuff properly, which honestly matters a lot here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm test&lt;/code&gt; passed with &lt;strong&gt;11/11 tests&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run build&lt;/code&gt; passed cleanly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/health&lt;/code&gt;, &lt;code&gt;/api/bounty/generate&lt;/code&gt;, &lt;code&gt;/api/bounty/complete&lt;/code&gt;, and &lt;code&gt;/api/leaderboard&lt;/code&gt; returned the right response shapes&lt;/li&gt;
&lt;li&gt;incomplete bounty completions returned a clean &lt;code&gt;400&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It created the Lua files cleanly, used &lt;code&gt;minetest.request_http_api()&lt;/code&gt;, handled &lt;code&gt;secure.http_mods&lt;/code&gt;, tracked digging and placing, stored player bounty state, and handled inventory rewards properly.&lt;/p&gt;

&lt;p&gt;The whole run took around &lt;strong&gt;12 minutes of API time&lt;/strong&gt;, with about &lt;strong&gt;23 minutes wall time&lt;/strong&gt;. That is a bit longer than a quick web app build test, but for this kind of cross-stack project, it felt fair.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwsc4lkcx6f9o43eujev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwsc4lkcx6f9o43eujev.png" alt="Claude Opus 4.7 time taken for the build" width="800" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The cost came out to &lt;strong&gt;$3.59&lt;/strong&gt;, which is definitely not cheap. But to be fair, the output was actually useful. It added a lot of code, but most of it was real implementation, not random filler like &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, &lt;code&gt;INSTALLATION.md&lt;/code&gt;, and all those extra files models sometimes create for no reason.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj4v5gc4wfmy9bov64qq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj4v5gc4wfmy9bov64qq.png" alt="Claude Opus 4.7 cost for the build" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find the code it generated here: &lt;a href="https://github.com/shricodev/opus-kimi-minetest-game-mod/tree/04fe23a6f6eb363ef7cfb6af9e0e91993568a718" rel="noopener noreferrer"&gt;Claude Opus 4.7 Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the demo:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZAB9fTdTV5Y"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; ~$3.59&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration:&lt;/strong&gt; 12min 3sec API time, 23min 53sec wall time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Changes:&lt;/strong&gt; +1,688 lines, 0 lines removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Usage:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; 65&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; 54.8k&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache read:&lt;/strong&gt; 2.8M&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache write:&lt;/strong&gt; 129.8k&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Verdict&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It worked end to end without much tweaking. I only had to configure &lt;code&gt;~/.minetest/minetest.conf&lt;/code&gt; and add this line:&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secure.http_mods = bountyboard
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Pretty much everything else was smooth. Great quick MVP.&lt;/p&gt;

&lt;p&gt;I noticed one small issue: &lt;code&gt;mine_node&lt;/code&gt; bounties can be farmed by placing and then re-mining the same blocks, because vanilla Minetest does not track who placed a node.&lt;/p&gt;

&lt;p&gt;But that's fine. That is not really a code issue here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Kimi K2.6
&lt;/h3&gt;

&lt;p&gt;The core idea worked. Kimi created the TypeScript backend, the Minetest/Luanti mod, the bounty commands, task tracking, completion flow, rewards, and leaderboard logic.&lt;/p&gt;

&lt;p&gt;The backend side looked solid enough. It used Express, Zod, and Vitest, and the main routes were there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/health&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/api/bounty/generate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/api/bounty/complete&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/api/leaderboard&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also created the Lua mod files properly and handled the basic &lt;code&gt;/bounty&lt;/code&gt; flow inside Minetest. The code was not bad either. I just felt like it was not as clean or modular as what Opus 4.7 wrote.&lt;/p&gt;

&lt;p&gt;But there was one really irritating issue.&lt;/p&gt;

&lt;p&gt;Somehow, Kimi wrote the global Minetest config in &lt;code&gt;~/.minetest/minetest.conf&lt;/code&gt; with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;secure.http_mods&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;bountykimi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;But then it also created a world config and added a different mod name there.&lt;/p&gt;

&lt;p&gt;So when I loaded the world, Minetest used the world-level config. That basically overrode the global config behavior I was expecting. Because of that, the HTTP API was not enabled for the actual mod that was running.&lt;/p&gt;

&lt;p&gt;This took me more than half an hour to debug.&lt;/p&gt;

&lt;p&gt;And honestly, because I do not have much experience with Minetest config behavior, this was super annoying.&lt;/p&gt;

&lt;p&gt;The run itself was much cheaper and faster than Opus. Kimi used around &lt;strong&gt;52k context tokens&lt;/strong&gt;, took about &lt;strong&gt;9 minutes 27 seconds&lt;/strong&gt;, and cost around &lt;strong&gt;$0.39&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi3s6ic25sy6620np9wf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi3s6ic25sy6620np9wf.png" alt="Kimi K2.6 token usage and time for the build" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That price difference is pretty wild. Opus cost around $3.59 for the first test, while Kimi came in under $0.40.&lt;/p&gt;

&lt;p&gt;You can find the code it generated here: &lt;a href="https://github.com/shricodev/opus-kimi-minetest-game-mod/tree/5c9033f77f2dff7792578b3fa126f7343643b5d1" rel="noopener noreferrer"&gt;Kimi K2.6 Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the demo:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/kpE4EbWdqu4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; ~$0.39&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration:&lt;/strong&gt; ~9min 27sec&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Changes:&lt;/strong&gt; +4,671 lines, 0 lines removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Used:&lt;/strong&gt; 52,073 tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Window Used:&lt;/strong&gt; 20%&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Verdict&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The local bounty board idea worked, the code was usable, and the model clearly understood the Lua + TypeScript setup. But if you notice, Kimi wrote more than twice as much code as Opus 4.7.&lt;/p&gt;

&lt;p&gt;The main problem was the Minetest config mess. It added &lt;code&gt;secure.http_mods = bountykimi&lt;/code&gt; globally, but then created another world-level config with a different mod name, which made debugging way more painful.&lt;/p&gt;

&lt;p&gt;So yeah, Kimi passed the first test, but not as smoothly as Opus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Test 2: Real Composio Integration
&lt;/h3&gt;

&lt;p&gt;Now this is where the actual test, and the fun, begins.&lt;/p&gt;

&lt;p&gt;The custom mod is ready, so now it is time to integrate Composio and give the game a quick agentic touch.&lt;/p&gt;

&lt;p&gt;The idea is simple. As players progress through the game, their bounty completions get logged into Google Sheets with Composio.&lt;/p&gt;
&lt;h3&gt;
  
  
  Claude Opus 4.7
&lt;/h3&gt;

&lt;p&gt;Claude Opus 4.7 did manage to add the real Composio integration, but this one was not as smooth as Test 1.&lt;/p&gt;

&lt;p&gt;The backend could sync bounty completions to Google Sheets. The nice thing is that I did not even need to open Minetest to test whether it was working. Because the project was structured cleanly, I could test the whole backend flow with just two &lt;code&gt;curl&lt;/code&gt; requests.&lt;/p&gt;

&lt;p&gt;First, generate a bounty:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8787/api/bounty/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"player":"singleplayer","availableTasks":["collect_item"]}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;tee&lt;/span&gt; /tmp/b.json | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then complete it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8787/api/bounty/complete &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-nc&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--argjson&lt;/span&gt; b &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq .bounty /tmp/b.json&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--arg&lt;/span&gt; ts &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; +%Y-%m-%dT%H:%M:%SZ&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="s1"&gt;'{player:"singleplayer", bounty:$b, progress:{current:$b.target.count, required:$b.target.count}, completedAt:$ts}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And if everything is configured correctly, the second response looks like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bounty completed."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"leaderboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"player"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"singleplayer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"points"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completedBounties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sync"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"googleSheets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Google Sheets row appended."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is one of the things I love about Opus the most. It usually creates a pretty modular setup. The game mod, backend logic, and external sync were separated well enough that I could test the Composio part directly from the API without needing to run around inside the game every time.&lt;/p&gt;

&lt;p&gt;It did run into a dev server issue where the &lt;code&gt;tsx&lt;/code&gt; command was parsing &lt;code&gt;watch&lt;/code&gt; incorrectly and treating it like the entry file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mdm9m29o5a7q6mq10oe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mdm9m29o5a7q6mq10oe.png" alt="Claude Opus 4.7 build error" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a bit of back and forth, it fixed the error. It eventually built a small runtime env loader and adjusted the config import so the backend could read the environment properly before the rest of the app booted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4e3gju1m8fore381kvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4e3gju1m8fore381kvx.png" alt="Claude Opus 4.7 build error fix" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, the build worked and the Google Sheets sync started working.&lt;/p&gt;

&lt;p&gt;But that cost was painful. It literally cost me around &lt;strong&gt;$16&lt;/strong&gt;. Like, actually :(. If you are not watching usage, this thing can make you broke real fast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe8rgfuafxakh1oucp9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe8rgfuafxakh1oucp9j.png" alt="Claude Opus 4.7 time and cost" width="800" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It took &lt;strong&gt;28min 52sec API time&lt;/strong&gt;, and about &lt;strong&gt;1hr 17min wall time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Apart from that, the code did work. But it cost way more than I expected for one run.&lt;/p&gt;

&lt;p&gt;You can find the code it generated here: &lt;a href="https://github.com/shricodev/opus-kimi-minetest-game-mod/tree/0c9c0fa3641796fd97890530c4116e05912b04f4" rel="noopener noreferrer"&gt;Claude Opus 4.7 Code - Composio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the demo:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/HWUmlysy18Q"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; $16.03&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration:&lt;/strong&gt; 28min 52sec API time, 1hr 17min 40sec wall time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Changes:&lt;/strong&gt; +1,848 lines, 507 lines removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Usage:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; 100.2k with Claude Haiku 4.5, plus Opus usage shown in the session&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; 3.2k with Claude Haiku 4.5, 123.3k with Claude Opus 4.7&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache read:&lt;/strong&gt; 22.3M&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache write:&lt;/strong&gt; 269.3k&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Verdict:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Opus 4.7 got the real Composio integration working, especially the Google Sheets logging.&lt;/p&gt;

&lt;p&gt;How cool is that? You add a custom agentic feature inside a game. A literal public game.&lt;/p&gt;

&lt;p&gt;So yes, it worked. But $16 for this one run hurt.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Kimi K2.6
&lt;/h3&gt;

&lt;p&gt;Kimi K2.6 did not do well on this test. It was pretty much busted.&lt;/p&gt;

&lt;p&gt;From the start, it ran into a bunch of errors. The dev server broke, tests were failing, and even after a little handholding, it only managed to fix part of the test situation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3viy07x6cen4f8a6lxh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3viy07x6cen4f8a6lxh.png" alt="Kimi K2.6 error in the build" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It eventually got past some of those failures, but the bigger problem was the actual Composio implementation. It did not seem fully sure how to wire the integration cleanly into the existing backend.&lt;/p&gt;

&lt;p&gt;I had to stop and help again and again, but it still could not make meaningful progress with the build.&lt;/p&gt;

&lt;p&gt;After spending more than &lt;strong&gt;25 minutes&lt;/strong&gt; and burning over &lt;strong&gt;130k tokens&lt;/strong&gt;, there was still no real progress. At that point, I had to stop the run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpehtobp7tgmpolmyhr4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpehtobp7tgmpolmyhr4.png" alt="Kimi K2.6 build error" width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why on earth is it reading a &lt;code&gt;version.txt&lt;/code&gt; file?&lt;/p&gt;

&lt;p&gt;So yeah, I am calling this one a fail for Kimi K2.6.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; ~$5.03&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration:&lt;/strong&gt; ~25min&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Usage:&lt;/strong&gt; 135,109+&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Verdict:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kimi K2.6 failed this test.&lt;/p&gt;

&lt;p&gt;It got stuck around tests, build issues, and the real Composio implementation. Even with manual help, it could not get the integration into a clean working state.&lt;/p&gt;

&lt;p&gt;For the local bounty board, Kimi was surprisingly usable. But once the task moved into real external integration, it struggled a lot more.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Both Claude Opus 4.7 and Kimi K2.6 were pretty solid in this test, at least for the local version.&lt;/p&gt;

&lt;p&gt;The task was not that simple either. It had Lua, TypeScript, SDK docs, backend logic, game commands, and the full flow had to work end to end.&lt;/p&gt;

&lt;p&gt;Plus, the idea itself is not that common. Building an AI agent concept inside a custom game mod is not easy, and it is definitely not a one-shot thing, so props to both models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9zolwkatuaoztum6991.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9zolwkatuaoztum6991.gif" alt="Clap" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opus 4.7 did better overall. The code was cleaner, and as usual, Anthropic models are pretty good at that.&lt;/p&gt;

&lt;p&gt;The only thing I hate with Anthropic models is the session limit.&lt;/p&gt;

&lt;p&gt;I absolutely hate how little session usage you get. Opus 4.7 especially just eats through it completely in like 3 to 5 prompts.&lt;/p&gt;

&lt;p&gt;Kimi K2.6 is an interesting model. Open models have not always been the best in my experience with real-world projects, but with every new model, my expectations rise a little.&lt;/p&gt;

&lt;p&gt;Let's see where Kimi K2.6 goes from here.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1127015"&gt;
    &lt;a href="/shricodev" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1127015%2F1c5e48a2-f602-4e7d-8312-3c0322d155c6.jpg" alt="shricodev image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/shricodev"&gt;Shrijal Acharya&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/shricodev"&gt;SDE • GOLD @Microsoft Student Ambassador • Prev Lead Collab and Dev-Team Lead @oppiaorg • Mail for collaboration&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>programming</category>
      <category>gamedev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Top 10 Skills to Use with Antigravity 🤖</title>
      <dc:creator>Aakash R</dc:creator>
      <pubDate>Tue, 28 Apr 2026 05:34:08 +0000</pubDate>
      <link>https://forem.com/composiodev/top-10-skills-to-use-with-antigravity-4ada</link>
      <guid>https://forem.com/composiodev/top-10-skills-to-use-with-antigravity-4ada</guid>
      <description>&lt;p&gt;I use Antigravity almost every day while building things. In the beginning, I was just running agents and connecting tools, but it still felt like I was doing a lot of work outside the flow.&lt;/p&gt;

&lt;p&gt;Then I came across agent skills. They are basically plug-and-play capabilities that let your agent connect with different tools and actually get things done. I got curious and started trying them out in my own workflow.&lt;/p&gt;

&lt;p&gt;That is when things started to click. I was not jumping between tools or writing extra logic for every step. I could use a skill and keep everything inside one flow. It made the whole setup feel much more natural and a lot less messy.&lt;/p&gt;

&lt;p&gt;So in this article, I am sharing 10 useful skills you can use with Antigravity, what they do, and where they can help in real workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Tool Integration with Composio&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/ComposioHQ/skills" rel="noopener noreferrer"&gt;Composio skill&lt;/a&gt; is what connects your agent to external tools and services. It gives you access to 1000+ tools through a single interface, so you don't have to deal with separate APIs, auth flows, or custom integrations for each one. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyy15p9oprrct2cho3j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyy15p9oprrct2cho3j7.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything shows up as simple actions your agent can call when needed. It also takes care of things like sessions, tokens, and maintaining stable connections, so you do not have to worry about the setup.&lt;/p&gt;

&lt;p&gt;In real use, your agent can find a tool, connect to it, and run actions as part of one flow. It can pull data from one place, use it, and trigger something somewhere else without extra code. You can also chain multiple steps, handle errors, and react to events, which makes it work well for real workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to deal with OAuth or token handling for every tool&lt;/li&gt;
&lt;li&gt;You can chain actions across tools in one run&lt;/li&gt;
&lt;li&gt;Works with different frameworks, so you are not locked in&lt;/li&gt;
&lt;li&gt;Handles sessions, errors, and execution flow for you&lt;/li&gt;
&lt;li&gt;Supports triggers, so your agent can react to events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; If your agent needs to talk to more than one tool, you will need this. It is useful for anyone building multi-step workflows or connecting to tools like GitHub, Slack, or other platforms where setup usually takes time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add composiohq/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Web Data Extraction with Apify
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://blog.apify.com/introducing-apify-agent-skills/" rel="noopener noreferrer"&gt;Apify skill&lt;/a&gt; lets your agent pull real, structured data from the web, not just search results. It can scrape platforms like Instagram, YouTube, Google Maps, Amazon, and more, returning clean JSON that your agent can use directly. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yfrnabe89nkw3hymu8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yfrnabe89nkw3hymu8z.png" alt=" " width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also build and run custom scrapers, so you are not limited to predefined sources. In practice, your agent can collect live data, track updates, and combine multiple sources in one flow, working with fresh information that it can actually act on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gives your agent access to real-time web data&lt;/li&gt;
&lt;li&gt;Supports many platforms out of the box&lt;/li&gt;
&lt;li&gt;Returns structured data your agent can directly use&lt;/li&gt;
&lt;li&gt;Let's you build and run custom scrapers&lt;/li&gt;
&lt;li&gt;Helps avoid relying on outdated information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; This is useful if your agent needs live external data. It works well for tracking prices, monitoring competitors, collecting leads, following trends, or building data pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add apify/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Real-World Communication with Twilio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.twilio.com/en-us" rel="noopener noreferrer"&gt;Twilio&lt;/a&gt; lets your agent send messages, make calls, and handle communication over SMS, WhatsApp, and voice. It turns your agent from just processing data into something that can actually reach people. You can use it for notifications, alerts, OTP verification, reminders, or automated voice calls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a1q694ksu74opsydpwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a1q694ksu74opsydpwj.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent can trigger messages or calls as part of a workflow, like sending alerts, confirming actions, or verifying users. It supports both outbound and inbound communication, including text-to-speech, call handling, and message tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let your agent interact with real users&lt;/li&gt;
&lt;li&gt;Supports SMS, WhatsApp, and voice in one place&lt;/li&gt;
&lt;li&gt;Enables OTP and verification workflows&lt;/li&gt;
&lt;li&gt;Works for alerts, notifications, and escalations&lt;/li&gt;
&lt;li&gt;Helps complete workflows without human handoff&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; Useful for any workflow that needs human interaction. This includes DevOps alerts, customer notifications, verification flows, support systems, and any case where your agent needs to reach someone directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install and use it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add openclaw/skills-twilio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Multimodal AI with Replicate
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://replicate.com/" rel="noopener noreferrer"&gt;Replicate skill&lt;/a&gt; gives your agent access to a wide range of AI models for things beyond text. It includes models for image generation, video, audio, speech, and more, all available through a simple API without needing to manage GPUs or setup. This means your agent can generate visuals, process audio, or work with video as part of its workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9vcq9sw2z77ovn288kv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9vcq9sw2z77ovn288kv.png" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent can pick the right model, run it, and use the output directly. It also supports fine-tuning and lets you work with production-ready models that scale automatically, so you can build real features without worrying about infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds image, video, audio, and speech capabilities to your agent&lt;/li&gt;
&lt;li&gt;No need to manage GPUs or ML infrastructure&lt;/li&gt;
&lt;li&gt;Access to a large collection of ready-to-use models&lt;/li&gt;
&lt;li&gt;Supports fine-tuning for custom use cases&lt;/li&gt;
&lt;li&gt;Scales automatically based on usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for: A&lt;/strong&gt;nyone building agents that need more than text. This includes generating images, creating videos, processing audio, or building multimodal applications without having to handle ML infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install and use it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add replicate/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Data Insights with Metabase
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/metabase/agent-skills" rel="noopener noreferrer"&gt;Metabase skill&lt;/a&gt; connects your agent to your internal business data. It lets your agent query databases using natural language, generate and run SQL, create dashboards, and surface insights using the semantic layer your team has already set up. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3u9lctoxfz9dbu3aen6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3u9lctoxfz9dbu3aen6l.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means your agent is not just working with external data; it is working with the data that actually matters to your business.&lt;/p&gt;

&lt;p&gt;Your agent can explore data, detect patterns, create visualizations, and even manage dashboards. It can turn plain questions into queries, refine results, and keep everything within your existing data permissions and structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gives access to internal business data, not just public data&lt;/li&gt;
&lt;li&gt;Converts natural language into SQL queries&lt;/li&gt;
&lt;li&gt;Helps generate insights and dashboards automatically&lt;/li&gt;
&lt;li&gt;Works within your existing data governance setup&lt;/li&gt;
&lt;li&gt;Reduces the need for manual data analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; Useful for teams that rely on internal data, like operations, finance, product, and analytics. It is also helpful for developers building agents that need to monitor systems or generate insights from structured data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add metabase/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Infrastructure and Edge Control with Cloudflare
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/cloudflare/skills" rel="noopener noreferrer"&gt;Cloudflare skill&lt;/a&gt; gives your agent access to Cloudflare’s full developer and infrastructure stack. It covers topics such as Workers, storage, networking, security, and AI tools, and helps your agent choose the right service for the task. Instead of relying on static docs, the agent receives up-to-date guidance and patterns for building or managing systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5b2i6w8b69o5q7i6p1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5b2i6w8b69o5q7i6p1z.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent can work with deployments, manage infrastructure, apply security rules, and build or update edge services. It can also generate production-ready setups using Cloudflare tools and follow best practices without you needing to look everything up manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Covers a wide range of infrastructure and edge services&lt;/li&gt;
&lt;li&gt;Helps choose the right tools based on use case&lt;/li&gt;
&lt;li&gt;Uses up-to-date documentation and patterns&lt;/li&gt;
&lt;li&gt;Supports building and deploying directly on Cloudflare&lt;/li&gt;
&lt;li&gt;Useful for both development and security workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who it is useful for:&lt;/strong&gt; Useful for developers and teams working with deployment, infrastructure, or edge computing. It is especially helpful for platform engineers, security workflows, and anyone building or managing apps on Cloudflare.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install and use it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add cloudflare/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Programmatic Video Creation with Remotion
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.remotion.dev/" rel="noopener noreferrer"&gt;Remotion skill&lt;/a&gt; lets your agent create videos using code. It is built around the Remotion framework, where videos are defined using React components, animations, and data. This means your agent can describe a video and generate it without using a traditional editor. &lt;/p&gt;

&lt;p&gt;It covers things like animations, captions, charts, media handling, and timing, so everything needed to build a video is handled through code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e19msop7olhp15xkdt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e19msop7olhp15xkdt3.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent can generate videos from data, text, or events, and control every part of the output. Since everything is code, the videos are repeatable, editable, and easy to update. It also supports advanced features like animations, audio sync, and visual effects, making it useful for more than just simple clips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turns data and text into videos automatically&lt;/li&gt;
&lt;li&gt;No need for manual editing or design tools&lt;/li&gt;
&lt;li&gt;Supports animations, charts, captions, and effects&lt;/li&gt;
&lt;li&gt;Videos are version-controlled and repeatable&lt;/li&gt;
&lt;li&gt;Useful for automated and scalable content creation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; Useful for teams that need to generate videos as part of workflows. This includes marketing content, data reports, product updates, or any case where a video output is more useful than text or static files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add remotion-dev/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. API Testing and Validation with Postman
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://learning.postman.com/docs/agent-mode/skills" rel="noopener noreferrer"&gt;Postman skill&lt;/a&gt; gives your agent a way to test and validate APIs before using them in a workflow. It acts as a pre-check layer, ensuring endpoints are working, responses are correct, and nothing breaks mid-run. It can also generate tests, update collections, and work with various APIs, including REST, GraphQL, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkv6g5xmwdts7ncip8ljm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkv6g5xmwdts7ncip8ljm.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent can check APIs, catch issues early, and even automatically create or update test cases. This helps avoid failures during execution and keeps workflows stable when dealing with multiple external services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents workflows from failing due to broken APIs&lt;/li&gt;
&lt;li&gt;Automatically generates and runs API tests&lt;/li&gt;
&lt;li&gt;Supports multiple API types in one place&lt;/li&gt;
&lt;li&gt;Helps maintain reliability across workflows&lt;/li&gt;
&lt;li&gt;Reduces manual testing effort&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it useful for:&lt;/strong&gt; Useful for any agent that depends on APIs. It is especially important for multi-step workflows, platform engineering, QA automation, and systems where reliability is critical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add postman/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Backend and Database Workflows with Supabase
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://supabase.com/docs/guides/getting-started/ai-skills" rel="noopener noreferrer"&gt;Supabase skill&lt;/a&gt; provides access to backend capabilities like databases, authentication, storage, realtime updates, and edge functions. It also includes strong Postgres best practices, helping with query optimization, performance tuning, and handling common issues around auth, sessions, and permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l2egzn2nyhwd8a1ias6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l2egzn2nyhwd8a1ias6.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be used to create and manage databases, run queries, handle user authentication, and build backend logic as part of a workflow. It also guides how to write efficient SQL, avoid performance bottlenecks, and follow patterns that are suitable for production use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full backend capabilities in one place&lt;/li&gt;
&lt;li&gt;Helps generate optimized and secure SQL&lt;/li&gt;
&lt;li&gt;Covers auth, storage, realtime, and edge functions&lt;/li&gt;
&lt;li&gt;Includes production-ready patterns&lt;/li&gt;
&lt;li&gt;Reduces common database mistakes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who it is useful for:&lt;/strong&gt; Useful for developers building full-stack or backend-heavy workflows, especially when working with databases, authentication, or Postgres in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install and use it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add supabase/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Payments and Billing with Stripe
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/stripe/ai/blob/main/skills/stripe-best-practices/SKILL.md" rel="noopener noreferrer"&gt;Stripe skill&lt;/a&gt; helps handle payments, subscriptions, and billing workflows with the right APIs and patterns. It guides how to use modern Stripe features like Checkout Sessions, Payment Intents, and webhooks, while avoiding outdated methods. It also supports working with events, customer data, and payment states in a structured way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqd21kv8kj3y92lwukwy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqd21kv8kj3y92lwukwy6.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helps build reliable payment and billing workflows&lt;/li&gt;
&lt;li&gt;Uses up-to-date Stripe APIs and patterns&lt;/li&gt;
&lt;li&gt;Supports subscriptions, checkout, and webhooks&lt;/li&gt;
&lt;li&gt;Reduces errors in payment handling&lt;/li&gt;
&lt;li&gt;Works for both one-time and recurring payments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who it is useful for:&lt;/strong&gt; Useful for developers building products that involve payments, subscriptions, or billing. This includes SaaS platforms, e-commerce systems, and any workflow that needs to handle transactions or customer billing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to install and use it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add stripe/ai--skill stripe-best-practices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Once you start using skills like these, Antigravity stops feeling like just another tool and starts feeling like a system that can actually get things done end to end. Each skill handles a specific part of the workflow, but together they cover everything from data and infrastructure to communication, content, and payments.&lt;/p&gt;

&lt;p&gt;You do not need all of them at once. The real value comes from picking the ones that match your workflow and slowly building around them. Over time, you end up with flows that are cleaner, more reliable, and require less manual effort.&lt;/p&gt;

&lt;p&gt;If you are already using Antigravity, trying out even a couple of these skills can change how you approach building. It is less about wiring things together and more about letting the system handle the heavy lifting.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>performance</category>
    </item>
    <item>
      <title>Top Marketing Skills For Claude Code, OpenClaw &amp; Hermes</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:18:47 +0000</pubDate>
      <link>https://forem.com/composiodev/top-marketing-skills-for-claude-code-openclaw-hermes-1n59</link>
      <guid>https://forem.com/composiodev/top-marketing-skills-for-claude-code-openclaw-hermes-1n59</guid>
      <description>&lt;p&gt;With tools like &lt;a href="https://composio.dev/content/how-to-better-your-claude-cowork-experience-with-mcps" rel="noopener noreferrer"&gt;Claude Cowork&lt;/a&gt; and &lt;a href="https://composio.dev/content/how-to-use-composio-mcp-with-openclaw" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt;, the marketing and GTM stack is evolving fast. People are spinning up SEO pages, firing UGC videos, automating ads at an industrial scale. And GTM and marketing is going to blow up in next few months.&lt;/p&gt;

&lt;p&gt;So, I have curated some great skills that community has built and some of them I personally use.&lt;/p&gt;

&lt;p&gt;So I spent last week testing and collating everything. Here are the 10 marketing skills for Claude Code/ Cowork and OpenClaw that are actually worth using.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Summary
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GEO / AEO (AI Search Optimization) Skill&lt;/strong&gt; - Audits and optimizes pages to get cited in AI search (ChatGPT, Perplexity, Google AI Overviews) with fixes, llms.txt, and schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO + GEO Full-Stack Skill&lt;/strong&gt; - An end-to-end workflow that does keyword research, drafting, and optimization for both traditional SEO and AI discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid Ads Audit Skill&lt;/strong&gt; - Runs deep multi-platform checks to find wasted spend, diagnose performance issues, and generate new creative and copy variants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firecrawl Web Intelligence Skill&lt;/strong&gt; - Gives agents live web scraping and crawling to extract clean markdown and structured data for competitive research.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Skill&lt;/strong&gt; - Extracts design systems from UI references and outputs design tokens and specs to keep builds consistent and non-generic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remotion Video Skill&lt;/strong&gt; - Turns a video brief into Remotion-ready React code so you can ship programmatic product videos reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketing Page Generation (Frontend) Skill&lt;/strong&gt; - Generates bold, conversion-focused landing pages with production-ready code instead of generic SaaS templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Ops Skill&lt;/strong&gt; - Runs the editorial pipeline end-to-end: audit, briefs, drafting, repurposing, and distribution from one workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanizer Skill&lt;/strong&gt; - Removes AI-writing tells through multi-pass editing so posts sound opinionated, natural, and genuinely human.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;For using all these skills effectively you’ll need access to data stored in multiple different applications. &lt;/p&gt;

&lt;p&gt;For example, for full SEO data you’d need access to Google Search Console, Ahref, etc. And for scheduling posts for social medias you’d need to connect Claude or OpenClaw with Tiktok, Youtube, LinkedIn, Reddit, and Twitter. &lt;/p&gt;

&lt;p&gt;For Ads and conversion pipeline monitoring yo’d need Google Ads, MetaAds, Posthog, Mixpanel, etc. &lt;/p&gt;

&lt;p&gt;Check Out the &lt;a href="https://composio.dev/toolkits/" rel="noopener noreferrer"&gt;full catalog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Composio is the single place to get all these apps using a single MCP server and it’s super easy to set it up. Just log in to &lt;a href="https://dashboard.composio.dev" rel="noopener noreferrer"&gt;dashboard.composio.dev&lt;/a&gt; and click on the client app you want.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah9gjfg34ys4c12pclq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah9gjfg34ys4c12pclq1.png" alt="Composio Dashboard" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need some guides, here’s how you can do it in OpenClaw and &lt;a href="https://composio.dev/content/how-to-better-your-claude-cowork-experience-with-mcps" rel="noopener noreferrer"&gt;Claude Cowork&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For starters, let’s schedule a week of launch posts for social media - one of the grueling pain point for any content team. &lt;/p&gt;

&lt;p&gt;Pre-requires (authenticate):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/notion" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/typefully" rel="noopener noreferrer"&gt;Typefully&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/linkedin" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;once all done, let’s create a 7 days launch post. This uses Claude Code.&lt;/p&gt;

&lt;p&gt;/to-be-added&lt;/p&gt;




&lt;h2&gt;
  
  
  Top 10 Marketing Skills
&lt;/h2&gt;

&lt;p&gt;Here are the list of top 10 marketing skills, that can 10 your marketing. For each I have shared:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What each skills does,&lt;/li&gt;
&lt;li&gt;Why use it.&lt;/li&gt;
&lt;li&gt;Prompt templates you can follow,&lt;/li&gt;
&lt;li&gt;The link to get you started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s begin:)&lt;/p&gt;




&lt;h3&gt;
  
  
  1. GEO / AEO SKILL - AI SEARCH OPTIMIZATION
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pee86km31zq4jcjk1f5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pee86km31zq4jcjk1f5.png" alt="AI Search Optimisation" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AEO has become quite popular now a day’s, but not many are good at handling it. &lt;/p&gt;

&lt;p&gt;This skill optimizes the content to get cited by ChatGPT, Perplexity, Google AI Overviews, and Gemini. Furthermore, it scores citability, generates llms.txt, adds schema markup, and outputs a client-ready PDF audit report.&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a full GEO audit on any URL → get citability score + prioritized fix list across 13 dimensions.&lt;/li&gt;
&lt;li&gt;Generate an llms.txt file so AI crawlers understand the product site structure and index it correctly.&lt;/li&gt;
&lt;li&gt;Optimizes existing blog posts for AI citation with E-E-A-T signals, entity clarity, and FAQ schema injection&lt;/li&gt;
&lt;li&gt;Produce a branded PDF GEO report ready to send to a client or CMO, for contrast agencies charge $2K–$12K for this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run a GEO audit on [URL]. Score: citability, AI crawler access, brand mention presence, schema markup, content factual density, and E-E-A-T signals. Output a full report with prioritized fixes. Then generate an llms.txt file and FAQ schema JSON-LD for the top 3 pages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To learn more , checkout  &lt;a href="https://github.com/zubair-trabzada/geo-seo-claude" rel="noopener noreferrer"&gt;https://github.com/zubair-trabzada/geo-seo-claude&lt;/a&gt; by zubair.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. SEO + GEO FULL STACK SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpxe0elh0i3av2t5rhoe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpxe0elh0i3av2t5rhoe.png" alt="SEO + GEO FULL STACK SKILL" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;your entire SEO + GEO workflow packaged into 20 skills covering: keyword research, content writing, technical audits, and rank tracking for both traditional search and AI platforms using claude code, openclaw , hermes.&lt;/p&gt;

&lt;p&gt;All scored against the CORE-EEAT benchmark (80 items) and CITE domain rating (40 items).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs keyword research on Ahref → content gap analysis → full draft → AEO/GEO optimization in a single chained workflow&lt;/li&gt;
&lt;li&gt;Audit any page against 80 CORE-EEAT quality criteria and get a scored report with line-level fixes&lt;/li&gt;
&lt;li&gt;Generate programmatic SEO pages at scale from a keyword list and a content template&lt;/li&gt;
&lt;li&gt;Optimize for AI citations across ChatGPT Search, Perplexity, and Google AI Overviews simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run the full SEO + GEO workflow for [topic/URL]. 

Step 1: keyword research and gap analysis vs [competitor]. 
Step 2: write a 1,500-word article scored against CORE-EEAT. 
Step 3: apply AEO optimization - add FAQ schema, HowTo markup, and question-phrased headings. 
Step 4: output a GEO readiness score.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can explore more at: &lt;a href="https://github.com/aaron-he-zhu/seo-geo-claude-skills" rel="noopener noreferrer"&gt;https://github.com/aaron-he-zhu/seo-geo-claude-skills&lt;/a&gt; by arron&lt;/p&gt;




&lt;h3&gt;
  
  
  3. PAID ADS AUDIT SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju5z6mczxg0qkp4kvw4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju5z6mczxg0qkp4kvw4h.png" alt="PAID ADS AUDIT SKILL" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running a successful paid campaigns and auditing is a struggle point for many growth team, this skills fixes that.&lt;/p&gt;

&lt;p&gt;It first runs 250+ checks across Google, Meta, YouTube, LinkedIn, TikTok, and Microsoft Ads. Based on the result, invoke's parallel agents per platform that scores accounts with weighted rubrics, flags wasted spend, and generates AI-powered creative variants.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit a Google Ads account → get wasted spend breakdown by campaign, ad group, and keyword in one pass&lt;/li&gt;
&lt;li&gt;Detect creative fatigue across Meta campaigns → auto-generate 5 replacement hooks per underperforming ad set&lt;/li&gt;
&lt;li&gt;Run a CPA spike diagnosis → trace root cause to bid strategy, audience overlap, or landing page mismatch&lt;/li&gt;
&lt;li&gt;Get a CMO-ready performance report with scores, benchmarks, and an action plan - all from the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Audit this Google Ads account data [attach export]. Run: wasted spend analysis, quality score breakdown, bid strategy assessment, and creative fatigue check. Score each area 0–100 using 2026 benchmarks. Output a prioritized fix list and generate 3 replacement ad copy variants for the lowest-scoring ad groups.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at  &lt;a href="https://github.com/AgriciDaniel/claude-ads" rel="noopener noreferrer"&gt;https://github.com/AgriciDaniel/claude-ads&lt;/a&gt; by Daniel.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. FIRECRAWL WEB INTELLIGENCE SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkiqkw6ad5sifqp5x37jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkiqkw6ad5sifqp5x37jv.png" alt="FIRECRAWL WEB INTELLIGENCE SKILL" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not something new, similar to &lt;code&gt;firecrawl-claude-plugin&lt;/code&gt;,  but help’s content team hours by providing claude code / openclaw/ hermes access to live web.&lt;/p&gt;

&lt;p&gt;This allows the agent to scrape any page as clean markdown, take full-page screenshots, extract structured data via JSON schema, and crawl entire doc sites. Handles JS rendering and anti-bot automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrape competitor pricing pages weekly → output structured comparison to a Sheet with zero manual copying&lt;/li&gt;
&lt;li&gt;Crawl a competitor's entire blog → extract all topics covered → identify content gaps in your own strategy&lt;/li&gt;
&lt;li&gt;Pull product reviews from G2, Capterra, or Reddit → auto-summarize into a customer voice report&lt;/li&gt;
&lt;li&gt;Run firecrawl x competitor-analysis [URL] in one command to get a full messaging teardown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Use Firecrawl to scrape [competitor URL]. Extract: headline, value prop, pricing tiers, key feature claims, and CTA copy. Then scrape [second competitor URL] and output a side-by-side comparison table with a 'gap for us' column."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at &lt;a href="https://github.com/firecrawl/firecrawl-claude-plugin" rel="noopener noreferrer"&gt;https://github.com/firecrawl/firecrawl-claude-plugin&lt;/a&gt; by firecrawl.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. DESIGN SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4fr1tg9jm1pnmtfbvy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4fr1tg9jm1pnmtfbvy4.png" alt="DESIGN SKILL" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design is essential aspect of conversion flow, it all starts there. Having a great design that tells a story of the product leads to better conversions. But ai-generated design’s are slop.&lt;/p&gt;

&lt;p&gt;This skills fixes that. It extracts design systems from reference UI images and generates implementation-ready design tokens, component specs, and style guides.&lt;/p&gt;

&lt;p&gt;This kills the back-and-forth between designer and agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feed a screenshot of any UI → get a full design system extracted with colors, spacing, typography, and component patterns.&lt;/li&gt;
&lt;li&gt;Generate brand-consistent design tokens for a new product from a single reference image.&lt;/li&gt;
&lt;li&gt;Audit existing UI for design consistency issues and get a structured fix list.&lt;/li&gt;
&lt;li&gt;Bootstrap a complete design system from scratch using decision-tree prompts before a single line of code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Extract the design system from this UI screenshot [attach image]. Output: color palette with hex values, typography scale, spacing system, component inventory, and border/shadow tokens. Then generate a DESIGN_SYSTEM.md I can reference in all future builds.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one I use almost every weeks. Learn more at: &lt;a href="https://github.com/daymade/claude-code-skills" rel="noopener noreferrer"&gt;https://github.com/daymade/claude-code-skills&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  6. REMOTION VIDEO SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ll59d4z8a2rpgivfjmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ll59d4z8a2rpgivfjmk.png" alt="REMOTION VIDEO" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Product launch videos can make or break a product lead generation strategy and launch videos are in high demands so charges very high. With this skills you can build your own one, practically for 0$&lt;/p&gt;

&lt;p&gt;This skills is official Remotion guidance baked into a &lt;a href="http://skill.md/" rel="noopener noreferrer"&gt;SKILL.md&lt;/a&gt;.  It gives Claude Code the knowledge to generate React-based programmatic videos without hallucinating the API. &lt;/p&gt;

&lt;p&gt;Describe a video, get production code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a launch announcement video from your product copy - hook, feature highlights, CTA- fully coded in React&lt;/li&gt;
&lt;li&gt;Build a weekly metrics video that pulls live data and renders as an MP4 automatically&lt;/li&gt;
&lt;li&gt;Create social-ready short-form video assets (16:9, 9:16) from existing blog content&lt;/li&gt;
&lt;li&gt;Render music videos from audio files and lyrics using the acestep-simplemv pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Using Remotion, build a 30-second product launch video for [product name]. 

Scene 1: bold headline on dark background. 
Scene 2: 3 feature callouts with staggered animations. 
Scene 3: CTA with logo. 

Export at 1080x1920 for Instagram Reels. Follow Remotion best practices throughout."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at: &lt;a href="https://github.com/mxyhi/ok-skills/tree/main/remotion-best-practices" rel="noopener noreferrer"&gt;https://github.com/mxyhi/ok-skills&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  7. MARKETING PAGE GENERATION SKILL - FRONTEND
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20cmp1e00g1e3ad7fh3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20cmp1e00g1e3ad7fh3r.png" alt="MARKETING PAGE GENERATION" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is another design skill but tailored to marketing page generations, which surprisingly Gemini 3.1 pro does the best, but lacks the color and aesthetic.&lt;/p&gt;

&lt;p&gt;This skills instructs Claude / OpenClaw to skip safe, generic aesthetics and commit to bold design decisions. 277,000+ installs. &lt;/p&gt;

&lt;p&gt;Best part? Automatically triggers for any frontend task - landing pages, campaign pages, dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use it to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a full SaaS landing page with hero, features, social proof, pricing, and CTA sections in one pass.&lt;/li&gt;
&lt;li&gt;Build campaign-specific microsites from a brief - product, ICP, and tone - without touching Webflow.&lt;/li&gt;
&lt;li&gt;Rebuild an underperforming landing page with a distinct visual identity from a reference URL.&lt;/li&gt;
&lt;li&gt;Scaffold a complete marketing site with dark mode, responsive layout, and conversion-optimized structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its a great one and I personally use it to build landing pages for product that leads to high conversion rate. Really a must have!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Build a landing page for [product]. Target audience: [ICP]. Tone: [direct/editorial/minimal]. Must include: hero with headline + subhead + CTA, 3-feature section, social proof strip, and pricing table. Choose a bold, distinctive aesthetic - not generic SaaS. Output production-ready HTML/CSS/JS or React + Tailwind.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Give it a try at &lt;a href="https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design" rel="noopener noreferrer"&gt;https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  8. CONTENT OPS SKILL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96i62purdy9qova9q65d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96i62purdy9qova9q65d.png" alt="CONTENT OPS" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your entire content operations workflow under one skill. &lt;/p&gt;

&lt;p&gt;It contains 8 skills that covers: production, audit, repurposing, and distribution. Works as a full editorial pipeline: from brief to published inside Claude Code or OpenClaw.&lt;/p&gt;

&lt;p&gt;Simply put, its a swiss army knife for content and growth team as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a full content audit: feed your sitemap → agent scores each page by intent, keyword alignment, and conversion potential → outputs prioritized fix list&lt;/li&gt;
&lt;li&gt;Repurpose one long-form piece → 5 tweet threads + 3 LinkedIn posts + 1 newsletter section in one command&lt;/li&gt;
&lt;li&gt;Generate a 12-week content calendar from your ICP, product pillars, and keyword list&lt;/li&gt;
&lt;li&gt;Auto-draft blog posts from raw notes or voice transcripts, following your brand voice file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run a content ops workflow for [topic/URL]. Step 1: audit existing content for gaps vs [keyword cluster]. Step 2: generate 4 new content briefs targeting missed keywords. Step 3: draft post #1 in full using our brand voice [attach]. Step 4: repurpose it into 3 LinkedIn posts and a tweet thread
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your content pipeline started: &lt;a href="https://github.com/superamped/ai-marketing-skills" rel="noopener noreferrer"&gt;https://github.com/superamped/ai-marketing-skills&lt;/a&gt; by superramped.&lt;/p&gt;

&lt;p&gt;While the content pipeline works, but it may still feel ai-generated, so pair it with last skill and see the organic growth.&lt;/p&gt;




&lt;h3&gt;
  
  
  9. HUMANIZER SKILL - DE-SLOP YOUR CONTENT
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk483f7yp8lkcywun0w3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk483f7yp8lkcywun0w3q.png" alt="DE-SLOP" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest problem right now with social media is AI generated slop. If you are someone who use ai to generate post and directly post, you need to stop!&lt;/p&gt;

&lt;p&gt;Instead use the Humanizer Skill.&lt;/p&gt;

&lt;p&gt;It’s a 8-pass editing system that detects and kills AI writing patterns before your content goes live. Strips banned vocabulary (delve, tapestry, foster), breaks structural tells, and forces organization &amp;amp; soul back into the copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste any AI-generated blog post → get a rewrite that sounds like a person with opinions wrote it, not a language model.&lt;/li&gt;
&lt;li&gt;Run on cold email sequences before sending → eliminates the "this was clearly written by AI" reply-killing patterns.&lt;/li&gt;
&lt;li&gt;Match a specific human voice by feeding 2-3 paragraphs of your own writing as a style reference before humanizing.&lt;/li&gt;
&lt;li&gt;Use after every content ops skill output. This makes the pair unstoppable for publishing-ready content at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Humanize this text: [paste]. First, scan for AI vocabulary, structural tells, and rhythm patterns. Then rewrite in 3 passes: 
&lt;span class="p"&gt;-&lt;/span&gt; kill AI words, break parallel structures, add human texture and opinion. 
&lt;span class="p"&gt;-&lt;/span&gt; Run an audit pass 
&lt;span class="p"&gt;-&lt;/span&gt; list everything still obviously AI then do a final rewrite. 
Match this voice sample: 

[paste 2 paragraphs of your own writing].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Link: &lt;a href="https://github.com/jpeggdev/humanize-writing" rel="noopener noreferrer"&gt;https://github.com/jpeggdev/humanize-writing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus Skills - A Toolbox for Marketing Teams
&lt;/h2&gt;

&lt;p&gt;Here are some additional skills with a brief one liner of what they do. Often good to pair with other skills output.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.notion.so/Top-10-Marketing-Skills-for-Claude-Code-Open-Claw-344f261a6dfe806fbf20d7ae1875c2de?pvs=21" rel="noopener noreferrer"&gt;create-viral-content&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Encodes the refinement process that separates forgettable posts from ones that generate discussion and shares.&lt;/li&gt;
&lt;li&gt;Runs AI-tell detection after every draft, then auto-invokes the humanizer for the final pass&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/VoltAgent/awesome-openclaw-skills" rel="noopener noreferrer"&gt;awesome-openclaw-skills&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;lead-gen-crm + lead-scorer-free&lt;/li&gt;
&lt;li&gt;Two OpenClaw skills that chain into a full outbound pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lead-scorer-free&lt;/code&gt; scores any domain 0–100 by analyzing its website, DNS, sitemap, and social presence. No database subscription needed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lead-gen-crm&lt;/code&gt; handles the full CRM pipeline from that point.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://clawskills.sh/skills/staybased-cold-outreach" rel="noopener noreferrer"&gt;cold-outreach&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Uses Alex Hormozi Frameworks for cold-outreach.&lt;/li&gt;
&lt;li&gt;Generates high-converting cold outreach across email, SMS, and LinkedIn DM.&lt;/li&gt;
&lt;li&gt;Uses battle-tested Hormozi offer frameworks baked directly into the skill.&lt;/li&gt;
&lt;li&gt;Not generic copy - structured around irresistible offer construction.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/marketing-psychology" rel="noopener noreferrer"&gt;marketing-psychology&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Applies cognitive biases, mental models, and behavioral science frameworks directly to marketing copy, CRO, and funnel design.&lt;/li&gt;
&lt;li&gt;Cialdini, Kahneman, and Ariely strategy and research baked into a skill.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;That marks the end of this article. Here are some hidden insights that  I discovered while using these.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Use chain of skills to get the output that makes the product position unique and well framed.&lt;/p&gt;

&lt;p&gt;Simple example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use content ops skill to draft the long-form piece&lt;/li&gt;
&lt;li&gt;Pass it to psychological persuasion skill rewrites every headline and CTA against 12 cognitive bias principles&lt;/li&gt;
&lt;li&gt;Humanizer strips every AI tell across 8 passes → what's left sounds like your sharpest human writer, not a model hitting word count&lt;/li&gt;
&lt;li&gt;Cold Outreach pulls the strongest pain observations and proof points from that copy → lands in your ICP's inbox as a Hormozi-framed 5-email sequence and 3 LinkedIn DMs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hard part isn't the skills -  it's orchestrating the flow between them. That's where &lt;a href="https://www.notion.so/20df261a6dfe80d6aa55fca03849a949?pvs=21" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; comes handy. &lt;/p&gt;

&lt;p&gt;It handles the auth layer, manages tool calls across every integration, and keeps context intact as output moves from one skill to the next. No glue code. No dropped state. No manual handoffs.&lt;/p&gt;

&lt;p&gt;Install it once. Let it run the pipeline while you focus on what AI still can't do - knowing your customer well enough to say something worth reading.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>marketing</category>
      <category>claude</category>
      <category>openclawchallenge</category>
    </item>
    <item>
      <title>How to Automate Your Slack Workspace with OpenClaw and Composio 🚀</title>
      <dc:creator>Shrijal Acharya</dc:creator>
      <pubDate>Thu, 16 Apr 2026 15:19:55 +0000</pubDate>
      <link>https://forem.com/composiodev/how-to-automate-your-slack-workspace-with-openclaw-and-composio-3lhc</link>
      <guid>https://forem.com/composiodev/how-to-automate-your-slack-workspace-with-openclaw-and-composio-3lhc</guid>
      <description>&lt;p&gt;Your team already lives in Slack. Code reviews, project updates and what not, it all happens there.&lt;/p&gt;

&lt;p&gt;But the moment you need to file a GitHub issue, check a Linear ticket, or send a follow-up email, you leave Slack, do the thing, and come back. That context switch adds up.&lt;/p&gt;

&lt;p&gt;What if your Slack workspace had an assistant that could do all of that for you, right in the thread. That too an isolated OpenClaw instance per user with admin control? 🤯&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34fzwp4wnc4g66m15gp2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34fzwp4wnc4g66m15gp2.gif" alt="shocked gif" width="480" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, you'll learn how to automate an entire Slack team workspace that connects to your tools, takes actions, without you ever leaving Slack.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Covered
&lt;/h2&gt;

&lt;p&gt;To quickly summarize what we’ll cover in this blog post, here’s what we’ll go through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The idea behind building a Slack bot around OpenClaw.&lt;/li&gt;
&lt;li&gt;How Composio lets each user connect their own tools.&lt;/li&gt;
&lt;li&gt;How OpenClaw powers replies and tool usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are a few things you'll understand, but there's so many others you'll learn along the way.&lt;/p&gt;

&lt;p&gt;So, if you want to build a Slack-first (though not limited to) AI with personal tool access for each user, this will give you a solid starting point.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we're building
&lt;/h2&gt;

&lt;p&gt;We're building a Slack bot that brings OpenClaw into Slack.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💁 Not necessarily only for Slack, you can use pretty much the same setup for something like Discord with their SDK or your custom app. The idea remains the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Overall the idea is to use OpenClaw and give every user in a workspace their own single instance of it which powers the AI assistant.&lt;/p&gt;

&lt;p&gt;That way, things are isolated per user and the admin can control/limit the toolkits (GitHub, Linear, etc.) the users get access to.&lt;/p&gt;

&lt;p&gt;Each user can connect their own tools with Composio, so the bot can chat, and take actions using the tools they’ve authorized.&lt;/p&gt;

&lt;p&gt;Here's a quick architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszdytuuqr202h16l1vvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszdytuuqr202h16l1vvs.png" alt="bot architecture" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Slack and how to create a Slack App?
&lt;/h2&gt;

&lt;p&gt;No big reason to choose Slack, only because it supports slash commands, and it's mostly where people already work.&lt;/p&gt;

&lt;p&gt;For this, we first need to have a Slack app, if you don't already have one, follow the &lt;a href="https://docs.slack.dev/quickstart/" rel="noopener noreferrer"&gt;quickstart guide&lt;/a&gt; to create one.&lt;/p&gt;

&lt;p&gt;Once your app is created, enable Socket Mode so the bot can receive events without exposing a public webhook URL.&lt;/p&gt;

&lt;p&gt;Then add at least these &lt;strong&gt;Bot Token Scopes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app_mentions:read&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chat:write&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commands&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;im:history&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;im:read&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;users:read&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subscribe to these &lt;strong&gt;Bot Events&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app_mention&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;message.im&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And create these &lt;strong&gt;Slash commands&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/connect&lt;/code&gt;: Use it something like &lt;code&gt;/connect &amp;lt;toolkit&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/connections&lt;/code&gt;: User lists active connections&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/help&lt;/code&gt;: Shows usage summary&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/assign&lt;/code&gt;: Admin assigns an OpenClaw instance to a user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/add-mcp-config&lt;/code&gt;: Admin registers an MCP Config from platform.composio.dev&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/add-auth-config&lt;/code&gt;: Admin links a toolkit to its Composio auth config&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/list-mcp-configs&lt;/code&gt;: Admin lists all registered MCP Configs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally copy these values to your &lt;code&gt;.env&lt;/code&gt; file, which you can find in the app settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;SLACK_BOT_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xoxb-...
&lt;span class="nv"&gt;SLACK_APP_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xapp-...
&lt;span class="nv"&gt;SLACK_SIGNING_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Your &lt;code&gt;SLACK_BOT_TOKEN&lt;/code&gt; is the bot token itself, &lt;code&gt;SLACK_APP_TOKEN&lt;/code&gt; is the Socket Mode app level token and &lt;code&gt;SLACK_SIGNING_SECRET&lt;/code&gt; is used by Slack to verify requests.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Set Up the Project
&lt;/h2&gt;

&lt;p&gt;It's fairly simple to get this project up and running. Follow these steps:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/shricodev/saas-openclaw-slackbot.git
&lt;span class="nb"&gt;cd &lt;/span&gt;saas-openclaw-slackbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Next, you install the dependencies:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then set up the environment variables and run the development server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Slack&lt;/span&gt;
&lt;span class="nv"&gt;SLACK_BOT_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xoxb-...
&lt;span class="nv"&gt;SLACK_APP_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xapp-...
&lt;span class="nv"&gt;SLACK_SIGNING_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...

&lt;span class="c"&gt;# Database&lt;/span&gt;
&lt;span class="nv"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...

&lt;span class="c"&gt;# Composio api key (ak...) from https://platform.composio.dev&lt;/span&gt;
&lt;span class="nv"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ak_..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To get the Composio API key:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in at &lt;a href="https://platform.composio.dev/" rel="noopener noreferrer"&gt;platform.composio.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy your API key (&lt;code&gt;ak_..&lt;/code&gt;) from the Composio dashboard settings, then set it:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjacffrcue8r6sct5ddev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjacffrcue8r6sct5ddev.png" alt="composio api key" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Configure Composio Dedicated MCP Server
&lt;/h2&gt;

&lt;p&gt;In this section, we'll go through the process of creating a dedicated MCP server in Composio for each user.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, head over to &lt;a href="https://platform.composio.dev" rel="noopener noreferrer"&gt;platform.composio.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Under the MCP Configs tab, create a &lt;strong&gt;Dedicated MCP Server&lt;/strong&gt;. This lets you create MCP servers with specific apps and tools, which is exactly what we want.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7qlbr4p0vmmtyxkdf3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7qlbr4p0vmmtyxkdf3t.png" alt="composio dedicated MCP server creation" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select all the toolkits you plan to assign for the user and create the MCP server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo218r8j44g593yqlrvkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo218r8j44g593yqlrvkk.png" alt="composio toolkits" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For the External User ID, use the user's Slack user ID. To get someone's Slack user ID, head over to their profile, click the three dots, and select &lt;strong&gt;Copy Member ID&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25u16lvsh5h94z9d4em2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25u16lvsh5h94z9d4em2.png" alt="slack user id" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use that as the External User ID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs98p5tahcxw9ikfogngu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs98p5tahcxw9ikfogngu.png" alt="external user id naming composio" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep note of the &lt;strong&gt;MCP config name&lt;/strong&gt; and &lt;strong&gt;MCP config ID&lt;/strong&gt;. You will need both when configuring the bot in Slack.&lt;/p&gt;

&lt;p&gt;Upon successful creation, you'll find the URL:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5kwmuvboz09uitypcw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5kwmuvboz09uitypcw3.png" alt="composio dedicated mcp server url" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can copy this URL directly and add it to the OpenClaw config, which we’ll cover later in the Configure OpenClaw with Composio section. Alternatively, the bot can fetch it for you after you run the &lt;code&gt;/assign&lt;/code&gt; slash command, which we’ll configure later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You will also need the auth config ID tied to the tools you selected. In the MCP server, head over to the &lt;strong&gt;Manage Config&lt;/strong&gt; tab and click &lt;strong&gt;Manage Auth Config&lt;/strong&gt;. The auth config ID is listed on that page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmo9o16fcq5tmfezu9ua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmo9o16fcq5tmfezu9ua.png" alt="composio auth config" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep note of this as well. You will need it when running &lt;code&gt;/add-auth-config&lt;/code&gt; in Slack.&lt;/p&gt;


&lt;h2&gt;
  
  
  Core Components in the Application
&lt;/h2&gt;

&lt;p&gt;We're not going to code everything from scratch as that'd be too long and impractical. Let's go over some of the core components in the project.&lt;/p&gt;

&lt;p&gt;Before we start with the project core components, here's the project tech stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://slack.dev/bolt-js/" rel="noopener noreferrer"&gt;Slack Bolt&lt;/a&gt;&lt;/strong&gt; - Official Slack bot framework. We use it with Socket Mode, which connects to Slack over a WebSocket without needing a public HTTP endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://openclaw.ai/" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt;&lt;/strong&gt; - The agent layer. Exposes an OpenAI-compatible API but acts as a full agentic gateway that plans, calls tools, and reasons over results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt;&lt;/strong&gt; - The core of the project. Manages OAuth connections to external apps like GitHub, Linear, and Gmail, and exposes them to the agent via MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Obvious choice over JavaScript as we get type safe code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL + Prisma&lt;/strong&gt; - Handles user records, connection status, and per-thread conversation history.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Bootstrapping the Bot
&lt;/h3&gt;

&lt;p&gt;This is where everything starts. We initialize the Slack Bolt app with Socket Mode, register all handlers, and start the server.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 app.ts&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SLACK_BOT_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;appToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SLACK_APP_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;signingSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SLACK_SIGNING_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;socketMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nf"&gt;registerMessageHandlers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;registerCommandHandlers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Bot is running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (socket mode)`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of exposing a public HTTP endpoint for Slack to POST events to, Socket Mode opens a WebSocket connection. This means you can run the bot anywhere could be your local machine, a private server without a public URL.&lt;/p&gt;

&lt;p&gt;If you've worked with bots before, this should be pretty straight-forward to understand. 👀&lt;/p&gt;
&lt;h3&gt;
  
  
  Handling User Messages
&lt;/h3&gt;

&lt;p&gt;This is the brain of the bot. It handles both direct messages and &lt;code&gt;@mentions&lt;/code&gt; in channels.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 message.handler.ts&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleUserMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;threadTs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;saveMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;threadTs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getThreadHistory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;threadTs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;priorHistory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;thinkingMsg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;thread_ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;threadTs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;_Thinking..._&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;openclawConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gatewayUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;openclawConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;priorHistory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;sessionKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;saveMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;threadTs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;channelId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;thinkingMsg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There's a few things you might notice right up:&lt;/p&gt;

&lt;p&gt;First, we store the user's message to the database before sending it to OpenClaw. But why? This way if the request fails, the history isn't broken. Similar to storing chat history in localhost when creating web chat applications.&lt;/p&gt;

&lt;p&gt;I do not know if there’s a better way to handle this, but right now we just show a &lt;code&gt;Thinking...&lt;/code&gt; message while the AI is generating the full response, and then replace it once the final output is ready.&lt;/p&gt;

&lt;p&gt;A little hacky, maybe, but it gets the job done. There are probably better ways to handle this, like streaming the response, but for now the old-school approach works. 😋&lt;/p&gt;
&lt;h3&gt;
  
  
  Slash Commands
&lt;/h3&gt;

&lt;p&gt;The bot exposes seven slash commands split into two groups: user-facing (&lt;code&gt;/connect&lt;/code&gt;, &lt;code&gt;/connections&lt;/code&gt;, &lt;code&gt;/help&lt;/code&gt;) and admin-only (&lt;code&gt;/assign&lt;/code&gt;, &lt;code&gt;/add-mcp-config&lt;/code&gt;, &lt;code&gt;/add-auth-config&lt;/code&gt;, &lt;code&gt;/list-mcp-configs&lt;/code&gt;).&lt;/p&gt;
&lt;h4&gt;
  
  
  /connect
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/connect &amp;lt;toolkit&amp;gt;&lt;/code&gt; starts an OAuth flow for a tool like GitHub or Gmail. But unlike the previous version where any user could connect any toolkit, now the bot checks three things before starting a connection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does this user have an MCP Config assigned?&lt;/li&gt;
&lt;li&gt;Is the requested toolkit in that config?&lt;/li&gt;
&lt;li&gt;Is there an auth config registered for this toolkit?
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 command.handler.ts&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/connect&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;respond&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolkitSlug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getComposioApiKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;assignment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mcpConfigAssignment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findUnique&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;slackUserId_slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;team_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;mcpConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;assignment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ephemeral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You have not been assigned an MCP Config. Ask your admin to run `/assign`.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;assignment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mcpConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toolkitSlugs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ephemeral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This toolkit is not available in your assigned config. &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Your admin controls which toolkits you can access.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolkitAuth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mcpToolkitAuth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findUnique&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;slackTeamId_toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;team_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// check if already connected&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;connectedToolkits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getConnectedToolkits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;connectedToolkits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ephemeral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You're already connected to *&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;*.`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redirectUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;initiateConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;toolkitAuth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authConfigId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ephemeral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Click here to connect *&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;*: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;redirectUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The response is only visible to the user who ran the command. That's intentional as OAuth URLs are personal and shouldn't be visible to the whole channel.&lt;/p&gt;
&lt;h4&gt;
  
  
  /assign
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/assign&lt;/code&gt; is admin-only and lets admins assign a specific OpenClaw gateway to a user. It opens a Slack modal to collect the gateway URL, token and MCP config server ID.&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 command.service.ts&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/assign&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isAdmin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;is_admin&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;is_owner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isAdmin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ephemeral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Only workspace admins can assign OpenClaw instances.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;trigger_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trigger_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;view&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;assignInstanceModal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// includes gateway URL, token, and MCP Config ID fields&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The user's MCP URL looks something like this: &lt;code&gt;https://backend.composio.dev/v3/mcp/aaa-111/mcp?user_id=&amp;lt;slack_user_id&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It's the key because it's what connects the user's OpenClaw instance to the toolkits the admin selected for them.&lt;/p&gt;
&lt;h4&gt;
  
  
  /add-mcp-config and /add-auth-config
&lt;/h4&gt;

&lt;p&gt;These two admin commands register the Composio resources in the bot's database. Both open modals.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/add-mcp-config&lt;/code&gt; registers an MCP Config by name and server ID:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// On modal submit:&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mcpConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;teamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;composioServerId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the UUID from the MCP URL&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// e.g. "Engineering"&lt;/span&gt;
    &lt;span class="nx"&gt;toolkitSlugs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// e.g. ["github", "linear"]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;/add-auth-config&lt;/code&gt; links a toolkit slug to its Composio auth config ID. This is what &lt;code&gt;/connect&lt;/code&gt; uses to know which auth config to pass when initiating a connection:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// On modal submit:&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mcpToolkitAuth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;slackTeamId_toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;teamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toolkitSlug&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;teamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toolkitSlug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;authConfigId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;update&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;authConfigId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  /list-mcp-configs
&lt;/h4&gt;

&lt;p&gt;A simple admin command that lists all registered MCP Configs for the workspace:&lt;/p&gt;

&lt;p&gt;"Engineering" - server:  - toolkits: github, linear&lt;br&gt;
"Sales" - server:  - toolkits: gmail, notion&lt;/p&gt;
&lt;h3&gt;
  
  
  Sending Requests to OpenClaw
&lt;/h3&gt;

&lt;p&gt;Up until this point we were working on the Slack side and a bit of Composio setup, but how do we actually send these messages to OpenClaw?&lt;/p&gt;

&lt;p&gt;OpenClaw exposes an OpenAI-compatible &lt;code&gt;/v1/chat/completions&lt;/code&gt; endpoint. Our service code wraps that with a proper system prompt, conversation history, and error handling. Nothing super unknown to most of you.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 openclaw.service.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;gatewayUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;userMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;sessionKey&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OpenClawResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ChatMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a helpful assistant in a Slack workspace. &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You have access to the user's connected tools (GitHub, Linear, Gmail, etc.) through Composio. &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The user's tools are already connected. Do not ask them to connect or authenticate. &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Use the available Composio tools directly to answer questions. &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Be concise. Format responses for Slack (use mrkdwn syntax).&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ChatMessage&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})),&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userMessage&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sendToOpenClaw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gatewayUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sessionKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We also wrap the raw fetch in a custom &lt;code&gt;OpenClawError&lt;/code&gt; class with error codes for timeouts, auth failures, and gateway errors. Preferred thing you do in a real-world codebase.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Prefer something built-in like &lt;code&gt;fetch&lt;/code&gt; over third-party tool like &lt;code&gt;axios&lt;/code&gt;. Especially now after the recent compromise of &lt;code&gt;axios&lt;/code&gt; which is used by hundreds and thousands of applications.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Connecting tools with Composio
&lt;/h3&gt;

&lt;p&gt;You might be familiar working with Composio over the SDK &lt;code&gt;@composio/core&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But with Composio, you can also directly talk to it's REST API. We now talk to the Composio REST API on &lt;code&gt;backend.composio.dev&lt;/code&gt; using an API key from &lt;code&gt;platform.composio.dev&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;There are only three functions in the service, and each one does exactly what the name suggests 🤌&lt;/p&gt;
&lt;h4&gt;
  
  
  Check what a user has connected:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 composio.service.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getConnectedToolkits&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;COMPOSIO_API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/connected_accounts?user_id=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AbortSignal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ACTIVE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toolkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Initiate a new connection:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 composio.service.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;initiateConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;authConfigId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;COMPOSIO_API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/connected_accounts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;auth_config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;authConfigId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;slackUserId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AbortSignal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;redirect_url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Build the per-user MCP URL:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 composio.service.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getMcpUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;composioServerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`https://backend.composio.dev/v3/mcp/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;composioServerId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/mcp?user_id=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This last one is the most important. There's no API call, it's pure URL construction. But this URL is what ties everything together: the &lt;code&gt;composioServerId&lt;/code&gt; controls which toolkits are available, and&lt;br&gt;
the &lt;code&gt;user_id&lt;/code&gt; scopes which credentials are used. When &lt;code&gt;/assign&lt;/code&gt; runs, it computes this URL and shows it to the admin so they can configure it in the user's OpenClaw instance.&lt;/p&gt;
&lt;h3&gt;
  
  
  Persisting Users and Conversation
&lt;/h3&gt;

&lt;p&gt;Every Slack user that messages the bot gets a record in our database keyed on (slackUserId, slackTeamId) pair. This is a safety net, as the same Slack user ID could theoretically exist across different workspaces.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 slack-user.service.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;resolveSlackUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;existing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slackUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findUnique&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slackUserId_slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;slackTeamId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slackUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;composioEntityId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`slack_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Conversation history is stored per-thread using Slack's &lt;code&gt;thread_ts&lt;/code&gt; (the timestamp of the first message in a thread) as the thread id. When the bot receives a message, it fetches the full thread history and passes it to OpenClaw, giving it the memory for the duration of that thread.&lt;/p&gt;


&lt;h2&gt;
  
  
  Configuration Setup
&lt;/h2&gt;

&lt;p&gt;The bot requires per-user OpenClaw instances assigned by an admin. If a user hasn't been assigned an instance, they can't use any features. &lt;code&gt;/connect&lt;/code&gt;, &lt;code&gt;/connections&lt;/code&gt; and chat all require an assignment first.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why not use shared instance?
&lt;/h3&gt;

&lt;p&gt;By shared instance, I mean all the users share the same OpenClaw instance. So why not use it that way? That's how server is supposed to work?&lt;/p&gt;

&lt;p&gt;There's a few reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;By default, OpenClaw is not designed to support multiple users connecting to the same gateway concurrently. In practice, which is likely to be the case for our use case.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This is already the main reason.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Also, in general, letting multiple users use the same instance with multiple connected accounts is not safe. A prompt injection by one user &lt;strong&gt;could&lt;/strong&gt; access or destroy another user's data.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Even if there's safety measure (which I'm not aware of). Things could always go wrong. So better safe than sorry.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 👇 lib/config.ts&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUserOpenClawConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OpenClawConfig&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slackUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findUnique&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slackUserId_slackTeamId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;slackUserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;slackTeamId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;openclawGatewayUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;openclawGatewayUrl&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;gatewayUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openclawGatewayUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gatewayToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No OpenClaw instance assigned. Ask your admin to run /assign.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No assignment, no access. The admin runs &lt;code&gt;/assign&lt;/code&gt; for each user, providing their OpenClaw gateway URL, token, and MCP Config. Until that happens, the bot won't respond to that user.&lt;/p&gt;


&lt;h2&gt;
  
  
  Configure OpenClaw with Composio
&lt;/h2&gt;

&lt;p&gt;Great, now the code part is done. There's one thing that's still left.&lt;/p&gt;

&lt;p&gt;Now, the actual reason to build the bot i.e. to get tools access is not configured &lt;strong&gt;within OpenClaw&lt;/strong&gt; which we do with Composio. It's the most easiest.&lt;/p&gt;

&lt;p&gt;There's multiple ways to configure OpenClaw with Composio. There's standard ways you can find &lt;a href="https://composio.dev/claw" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, we won't follow the standard way, as by default it uses consumer key, which is a way it's designed by default.&lt;/p&gt;

&lt;p&gt;But we won't work with consumer key, we directly work with the MCP URL.&lt;/p&gt;

&lt;p&gt;Go ahead and modify the OpenClaw config file which lives in the &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; with the following:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;rest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;config...&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"composio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"...rest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"entries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"telegram"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"composio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;put&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;receive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;user.&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mcpUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;This sets up &lt;strong&gt;one instance for one user&lt;/strong&gt;. But how do you about configuring multiple instances for multiple users?&lt;/p&gt;
&lt;h3&gt;
  
  
  How do you run it for multiple users?
&lt;/h3&gt;

&lt;p&gt;This only configures one user in the entire workspace. But what about the rest?&lt;/p&gt;

&lt;p&gt;There are a few ways:&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Separate machine or VMs:
&lt;/h4&gt;

&lt;p&gt;Each user's OpenClaw runs on a different machine. Each has its own ~/.openclaw/openclaw.json with its own MCP URL. This is the cleanest but most expensive.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Use named OpenClaw profiles:
&lt;/h4&gt;

&lt;p&gt;OpenClaw ships with a &lt;code&gt;--profile&lt;/code&gt; flag out of the box:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nt"&gt;--profile&lt;/span&gt; &amp;lt;name&amp;gt;     Use a named profile &lt;span class="o"&gt;(&lt;/span&gt;isolates OPENCLAW_STATE_DIR/OPENCLAW_CONFIG_PATH under ~/.openclaw-&amp;lt;name&amp;gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can use a different profile per user. If you name each profile after the user, you get an isolated config for each one on the same machine. Most efficient.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw &lt;span class="nt"&gt;--profile&lt;/span&gt; bob
openclaw &lt;span class="nt"&gt;--profile&lt;/span&gt; shrijal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Separate OS users on one machine:
&lt;/h4&gt;

&lt;p&gt;Somewhat impractical. You'd run one OpenClaw instance per OS user, which means creating a separate system account for each person. Possible, but not a great approach.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There could be hundreds of other ways to do it. These are just the ones I could think of. Do your own research, and you’ll probably find others.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Slack Workflow
&lt;/h2&gt;

&lt;p&gt;Run these commands in order as an admin before any user can start chatting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register your MCP Configs (one per config you created on platform.composio.dev):
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/add-mcp-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Register auth configs (one per toolkit):
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/add-auth-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Assign each user their OpenClaw instance and MCP Config:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/assign
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This gives you the user's scoped MCP URL. Configure it in their OpenClaw instance.&lt;/p&gt;

&lt;p&gt;Once assigned, users run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/connect &amp;lt;toolkit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's it. After connecting, they can DM the bot or &lt;code&gt;@mention&lt;/code&gt; it in a channel.&lt;/p&gt;


&lt;h2&gt;
  
  
  Bot in Action
&lt;/h2&gt;

&lt;p&gt;Here's a quick demo of the bot in action:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/CbXwWr4h5LM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;


&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So yeah, that's the whole idea.&lt;/p&gt;

&lt;p&gt;A Slack bot on top of OpenClaw, with Composio handling user tool connections, ends up being a really solid setup.&lt;/p&gt;

&lt;p&gt;At this point, you’ve got a good idea of how this bot works with Slack, OpenClaw, and Composio.&lt;/p&gt;

&lt;p&gt;We covered the main flow, how users connect their tools, how everything comes together inside Slack, and why assigning one OpenClaw instance per user helps keep things isolated.&lt;/p&gt;

&lt;p&gt;It keeps the setup clean and gives you a bot that’s actually useful.&lt;/p&gt;

&lt;p&gt;That's all for this one.&lt;/p&gt;

&lt;p&gt;You can find the entire source code here: &lt;a href="https://github.com/shricodev/saas-openclaw-slackbot" rel="noopener noreferrer"&gt;shricodev/saas-openclaw-slackbot&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1127015"&gt;
    &lt;a href="/shricodev" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1127015%2F1c5e48a2-f602-4e7d-8312-3c0322d155c6.jpg" alt="shricodev image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/shricodev"&gt;Shrijal Acharya&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/shricodev"&gt;SDE • GOLD @Microsoft Student Ambassador • Prev Lead Collab and Dev-Team Lead @oppiaorg • Mail for collaboration&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building a Financial Agent That Actually Works: Composio MCP + Hermes</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Thu, 16 Apr 2026 04:30:09 +0000</pubDate>
      <link>https://forem.com/composiodev/building-a-financial-agent-that-actually-works-composio-mcp-hermes-93k</link>
      <guid>https://forem.com/composiodev/building-a-financial-agent-that-actually-works-composio-mcp-hermes-93k</guid>
      <description>&lt;p&gt;I recently explored Hermes Agent to see how far I could push autonomous workflows in a real-world use case. &lt;/p&gt;

&lt;p&gt;Instead of just experimenting, &lt;br&gt;
I wanted something practical, so I decided to build a financial analyst agent that could fetch, process, reason over financial data and suggest me stocks in this era of war.&lt;/p&gt;

&lt;p&gt;This blog post walks through exactly how we:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Securely Set up Hermes Agent&lt;/li&gt;
&lt;li&gt;Integrated Composio MCP for tool access (Google Sheet, Google Doc, Exa)&lt;/li&gt;
&lt;li&gt;Built a functional financial analyst agent that captures the market trends &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Along the way, I’ll also share what broke, what worked, and what I’d do differently.&lt;/p&gt;


&lt;h2&gt;
  
  
  What is Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Hermes Agent an open source AI agent that can learn and evolve as you interact in real-time , something that open-claw lacked.&lt;/p&gt;

&lt;p&gt;It does so by using a persistent cross-session memory and closed learning loop (write docs → save tools → update memory) that converts completed task into reusable skills. This allows it become more efficient over time.&lt;/p&gt;

&lt;p&gt;The agent has following key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;S*&lt;em&gt;elf Improving Loop&lt;/em&gt;* : Unlike standard chatbot wrappers, Hermes agent refines its own skills from completed task&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Persistent Memory&lt;/strong&gt;: Maintains a persistent model of the user and past interactions across sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous Agent tools&lt;/strong&gt;: Agent offers over 40+ built in tools, support sub agent delegation and code execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Platform Integration&lt;/strong&gt;: Works from anywhere , from terminal to plethora of social media service (though little buggy)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model Agnostic&lt;/strong&gt;: Supports multiple LLM providers and LLMS including open source and closed source models.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as a programmable agent that can reason + act + self improve , not just respond.&lt;/p&gt;

&lt;p&gt;This means its a perfect candidate for a financial analyst agent.&lt;/p&gt;


&lt;h2&gt;
  
  
  Securely Setup Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker - Install docker desktop&lt;/li&gt;
&lt;li&gt;Optional- WSL2 for Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First install herms in docker, open terminal and run one by one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk7ibp2iev9ca6z9ca0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk7ibp2iev9ca6z9ca0y.png" alt="Install Hermes" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next configure the Hermes Agent, here is the setting I choose, feel free to choose your preferred:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider : OpenAI Codex. Make sure to authenticate&lt;/li&gt;
&lt;li&gt;Model : GPT 5.4 / GPT 5.4 mini ( for faster inference)&lt;/li&gt;
&lt;li&gt;TTS: Keep Current&lt;/li&gt;
&lt;li&gt;Terminal Backend: Docker (make sure either docker is installed / docker desktop running)&lt;/li&gt;
&lt;li&gt;Docker image : default&lt;/li&gt;
&lt;li&gt;Max Iterations : Default. Set this to higher for complex task (cost more token)&lt;/li&gt;
&lt;li&gt;Context Compression Threshold: Default. Higher threshold compresses later and lower does it faster&lt;/li&gt;
&lt;li&gt;Messaging Platform (optional) : Choose Telegram and follow the instructions. Rest same , but I kept only telegram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If done all this you will be greeted with following screen&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam7qrjehbve94vke6qa8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam7qrjehbve94vke6qa8.png" alt="Hermes Start" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now time to add Composio MCP!&lt;/p&gt;




&lt;p&gt;Hermes by default provide ~40 tools, which is ok for daily tasks.&lt;/p&gt;

&lt;p&gt;But it starts feels pretty limited when you start building complex agentic workflows where you need to connect multiple third party SaaS apps (Google Doc, Sheets, Web seach tools, etc) with prod grade security and calling them at need.&lt;/p&gt;

&lt;p&gt;Composio is the tooling layer that sits between Hermes Agent and third party applications and let you connect to 1000+ tools with secure auth and intelligent tool calling.&lt;/p&gt;

&lt;p&gt;Installing Composio MCP is quite straightforward. Follow these steps:&lt;/p&gt;

&lt;p&gt;Head to the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;https://dashboard.composio.dev/&lt;/a&gt; &amp;amp; login. You will be greeted with this dashboard&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywbqrbfexlke4as2tg2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywbqrbfexlke4as2tg2y.png" alt="Composio Home" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the Install &amp;amp; copy the MCP Url and X-CONSUMER-API-KEY value&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ee8jcwgrwegwyzoq68n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ee8jcwgrwegwyzoq68n.png" alt="Composio Install" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once done head to the terminal and type :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.hermes/config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and at the end add these lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mcp_servers:
  composio:
    url: &lt;span class="s2"&gt;"https://connect.composio.dev/mcp"&lt;/span&gt;
    headers:
      x-consumer-api-key: &lt;span class="s2"&gt;"YOUR_COMPOSIO_API_KEY"&lt;/span&gt;
    connect_timeout: 60
    &lt;span class="nb"&gt;timeout&lt;/span&gt;: 180
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your own api key you copied &amp;amp; save the file&lt;/p&gt;

&lt;p&gt;Now, head back to Hermes Agent and restart it using &lt;code&gt;hermes&lt;/code&gt;, and it will detect the mcp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yqf2qa96lx5r8jr6sav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yqf2qa96lx5r8jr6sav.png" alt="MCP" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can use Hermes Agent with MCP like any other agent, even though code runs in the sandbox:).&lt;/p&gt;

&lt;p&gt;Alright now that we have agent &amp;amp; mcp in place, let’s try to see how it performs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Add MCP using Composio CLI (Optional)
&lt;/h2&gt;

&lt;p&gt;Composio also has a CLI, which let’s any agent to communicate with all the tools through commands. The CLI allows composability of workflows. The agent can chain tools and accomplish complex tasks with relatively lesser tokens than MCPs.&lt;/p&gt;

&lt;p&gt;Using it is straight forward. Open your Hermes agent and paste the prompt mentioned on &lt;a href="https://composio.dev/cli" rel="noopener noreferrer"&gt;https://composio.dev/cli&lt;/a&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;INSTALL (run in user's terminal)
  curl -fsSL https://composio.dev/install | bash

You have access to 1000+ app integrations through these commands.
search → find tools. execute → run them. link → connect accounts.
proxy → raw API access. run → inline scripts.

Bias toward action: run &lt;span class="sb"&gt;`composio search &amp;lt;task&amp;gt;`&lt;/span&gt;, then &lt;span class="sb"&gt;`composio execute &amp;lt;slug&amp;gt;`&lt;/span&gt;.
Input validation, auth checks, and error messages are built in — just try it.

USAGE
  composio &lt;span class="nt"&gt;&amp;lt;command&amp;gt;&lt;/span&gt; [options]

CORE COMMANDS
  search
    Find tools. Use this first — describe what you need in natural language.
    Usage: composio search &lt;span class="nt"&gt;&amp;lt;query&amp;gt;&lt;/span&gt; [--toolkits text] [--limit integer]
      &lt;span class="nt"&gt;&amp;lt;query&amp;gt;&lt;/span&gt;             Semantic use-case query (e.g. "send emails")
      --toolkits          Filter by toolkit slugs, comma-separated
      --limit             Number of results per page (1-1000)

  execute
    Run a tool. Handles input validation and auth checks automatically.
    If auth is missing, the error tells you what to run. Use aggressively.
    Usage: composio execute &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt; [-d, --data text] [--dry-run] [--get-schema]
      &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt;              Tool slug (e.g. "GITHUB_CREATE_ISSUE")
      -d, --data          JSON or JS-style object arguments, e.g. -d '{ repo: "foo" }', @file, or - for stdin
      --dry-run           Validate and preview the tool call without executing it
      --get-schema        Fetch and print the raw tool schema

  link
    Connect an account. Only needed when execute tells you to — don't preemptively link.
    Usage: composio link [&lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;] [--no-browser]
      &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;           Toolkit slug to link (e.g. "github", "gmail")

  run
    Run inline TS/JS code with shimmed CLI commands; injected execute(), search(), proxy(), subAgent(), and z (zod).
    Usage: composio run &lt;span class="nt"&gt;&amp;lt;code&amp;gt;&lt;/span&gt; [-- ...args] | run [-f, --file text] [-- ...args] [--dry-run]
      &lt;span class="nt"&gt;&amp;lt;code&amp;gt;&lt;/span&gt;              Inline Bun ESNext code to evaluate
      -f, --file          Run a TS/JS file instead of inline code
      --dry-run           Preview execute() calls without running remote actions

  proxy
    curl-like access to any toolkit API through Composio using your linked account.
    Usage: composio proxy &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt; --toolkit text [-X method] [-H header]... [-d data]
      &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;               Full API endpoint URL
      --toolkit           Toolkit slug whose connected account should be used
      -X, --method        HTTP method (GET, POST, PUT, DELETE, PATCH)
      -H, --header        Header in "Name: value" format. Repeat for multiple.
      -d, --data          Request body as raw text, JSON, @file, or - for stdin

  artifacts
    Inspect the cwd-scoped session artifact directory and history.
    Usage: composio artifacts cwd
      cwd                 Print the current session artifact directory path

  Workflow: search → execute. If execute fails with an auth error, run link, then retry.

TOOLS
  tools info &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt;     Print tool summary and cache its schema
  tools list &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;  List tools available in a toolkit
  artifacts cwd         Print the cwd-scoped session artifact directory

EXAMPLES
  # 1. User asks you to "create a GitHub issue"
  composio search "create github issue"
  # → returns GITHUB_CREATE_ISSUE

  # 2. Execute it (will error if not linked — that's fine)
  composio execute GITHUB_CREATE_ISSUE -d '{ repo: "owner/repo", title: "Bug" }'
  # → if auth missing: "Run &lt;span class="sb"&gt;`composio link github`&lt;/span&gt; first"

  # 3. Link only when told to
  composio link github

  # 4. Raw API access when no tool exists
  composio proxy https://gmail.googleapis.com/gmail/v1/users/me/profile --toolkit gmail

  # 5. Run a script with injected helpers
  composio run 'const me = await execute("GITHUB_GET_THE_AUTHENTICATED_USER"); console.log(me)'

DEVELOPER COMMANDS
  dev       Developer workflows: init, playground execution, triggers, and logs.
  generate  Generate type stubs for toolkits, tools, and triggers (TypeScript | Python).
  manage    Manage orgs, toolkits, connected accounts, triggers, auth configs, and projects.

ACCOUNT
  login    Log in to Composio
  logout   Log out from Composio
  whoami   Show current account info
  version  Display CLI version
  upgrade  Upgrade CLI to the latest version

FLAGS
  -h, --help     Show help for command
  --version      Show composio version

LEARN MORE
  Use &lt;span class="sb"&gt;`composio &amp;lt;command&amp;gt; --help`&lt;/span&gt; for more information about a command.
  Documentation: https://docs.composio.dev

GETTING STARTED
  When your user asks you to do something with an external app:
&lt;span class="p"&gt;  1.&lt;/span&gt; composio search "&lt;span class="nt"&gt;&amp;lt;what&lt;/span&gt; &lt;span class="na"&gt;they&lt;/span&gt; &lt;span class="na"&gt;want&lt;/span&gt; &lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;"
&lt;span class="p"&gt;  2.&lt;/span&gt; composio execute &lt;span class="nt"&gt;&amp;lt;slug&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt; &lt;span class="na"&gt;search&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; -d '&lt;span class="nt"&gt;&amp;lt;params&amp;gt;&lt;/span&gt;'
&lt;span class="p"&gt;  3.&lt;/span&gt; If auth error → composio link &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;, then retry step 2.

  Do not assume we lack coverage. Search first — we likely support it.
  Do not preemptively link accounts or ask your user what to connect.
  Just try. Auth and validation errors are self-descriptive.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This set’s agent to use Composio cli and do all the task, rather than using direct mcp - infact this approach much simpler as no dependency is required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far36vjedj9ca8o0g2w0l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far36vjedj9ca8o0g2w0l.png" alt="Composio CLI with Hermes Usage" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright now that we have agent &amp;amp; mcp in place, time to build the financial agent&lt;/p&gt;




&lt;h2&gt;
  
  
  Building A Financial Analyst Agent
&lt;/h2&gt;

&lt;p&gt;Head to the Hermes Agent, if not active - enable it using Hermes , ensure the MCP section have Composio and all other relevant MCP’s showing up (Gmail, Google Sheet, Google Docs , Exa Search). This is essential.&lt;/p&gt;

&lt;p&gt;Now in the prompt box, paste the following prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are my personal Indian stock market financial analyst. Start by asking me exactly 5 screening questions one at a time to assess my risk appetite (cover: risk tolerance, investment horizon, capital range, sectors of interest, and reaction to loss). Once done, analyze my answers and begin your analyst workflow:

**Setup:** Attempt to use Google Docs, Google Sheets, and Gmail via your Composio tools. If any are not connected, Composio will automatically generate a sign-in link — share it with me, wait for me to authenticate, then resume once all connections are active.

**Every 5 minutes, run this loop:**

1. **Data Gathering:** Pull live Indian stock market data from multiple sources in parallel:
   - **Exa Search Tool:** Use composio Exa tool to search for latest Indian stock market news, analyst reports, earnings updates, sector trends, and breaking financial events. Query terms like "NSE BSE India stocks today", "Indian market sentiment", "Nifty Sensex analysis", top sector movements, and any stock-specific news relevant to my risk profile.
   - **Free Financial APIs &amp;amp; Web Sources:** NSE India API, BSE India, Yahoo Finance India, Moneycontrol, Tickertape, Economic Times Markets, and any other authoritative free real-time Indian market feeds available to you.
   - Cross-reference and reconcile data from both sources for accuracy before analysis.

2. Analyze all gathered data against my risk profile.

3. **Google Doc:** Search for an existing doc named "Hermes Financial Report - India". If found, append a new report section separated by `---`. If not, create it. Each report must be clean, well-structured with proper headings, and include: timestamp, market summary, macro indicators, top picks with clear reasoning, what to avoid and why, and a decisive final recommendation paragraph. Use proper spacing, bold headers, and bullet points for readability.

4. **Google Sheet:** Search for an existing sheet named "Hermes Stock Tracker - India". If found, append new rows. If not, create it. Format the sheet with bold column headers, frozen top row, and color-coded sentiment (Bullish = green, Bearish = red, Neutral = yellow where possible). Columns: Stock Name | Ticker | Exchange (NSE/BSE) | Sector | Market Sentiment (Bullish/Bearish/Neutral) | My Prediction (Yes/No) | Confidence % | Min Investment (INR) | Last Updated.

5. **Hourly Email via Gmail:** After every report cycle, send me a well-formatted email with:
   - **Subject:** 📊 Hermes Market Report — [Date &amp;amp; Time IST]
   - **Body:** A brief 3–5 line market summary, top 3 stock picks with one-line reasoning each, one key risk to watch, and direct clickable links to the updated Google Doc and Google Sheet.
   - Keep the email clean, scannable, and professional — use spacing, bold labels, and short paragraphs.

**Urgent Signal Alert (send immediately, outside the hourly loop):** If at any point you detect a strong buy or sell signal (significant price movement, breaking news from Exa or any financial source, sentiment shift, or macro event affecting Indian markets), instantly send a separate alert email with:
   - **Subject:** 🚨 URGENT: [BUY/SELL] Signal — [Stock Name] — [Time IST]
   - **Body:** Stock name, ticker, exchange, signal type (Buy/Sell), reason in 2–3 crisp lines, recommended action, and link to the Google Doc &amp;amp; Google Sheet for full context.

Never stop the loop unless I say stop. Be decisive, data-driven, and always flag urgency clearly.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You get asked 5 questions, and it builds a personal risk profile tailored to your investment style.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every hour, it automatically scans NSE, BSE, Exa, Yahoo Finance, Moneycontrol and more for live Indian market data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It writes a detailed investment report (what to buy, what to avoid, why) into a Google Doc - appending fresh analysis every cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It maintains a live Google Sheet tracking top Indian stocks with sentiment, prediction, confidence, and minimum investment amount.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It emails you a clean market summary every hour, and fires an instant alert the moment it spots an urgent buy or sell signal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: For demo i set the 1 hour duration to 5 minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now wait for execution to finish and cron job to be created. This is what my flow looked like:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7nteuv1QA5c"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;Agent by default didn’t had access to Gmail, Sheet, Docs &amp;amp; EXA, and manually adding them was a pain (if say 20+ tools) and it bloats the context window as well.&lt;/p&gt;

&lt;p&gt;Composio solves the issue. You add it once, and it takes care of: - OAuth (one time link- did beforehand), &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;calling right tool at runtime when needed, &lt;/li&gt;
&lt;li&gt;performing all the actions in sandbox and &lt;/li&gt;
&lt;li&gt;deliver the result, 
while Hermes Agent handled the orchestration and reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note : If you haven’t connected any tool, while running agent, agent will ask you to connect, authenticate. Also for EXA - use a api key.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>productivity</category>
      <category>hermes</category>
    </item>
    <item>
      <title>Top 10 Agent Skills Every Developer Should Install 🦾🛠️</title>
      <dc:creator>Aakash R</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:04:56 +0000</pubDate>
      <link>https://forem.com/composiodev/top-10-agent-skills-every-developer-should-install-1k51</link>
      <guid>https://forem.com/composiodev/top-10-agent-skills-every-developer-should-install-1k51</guid>
      <description>&lt;p&gt;AI agents are easy to demo, but getting them to work in real use is a different challenge.&lt;/p&gt;

&lt;p&gt;Many setups can give good answers. Very few can finish a task, deal with errors, and keep track of what is going on across steps. To build that kind of agent, you need the right skills, such as using tools, managing memory, handling data, deploying your setup, and shaping how people use it.&lt;/p&gt;

&lt;p&gt;This article covers the &lt;strong&gt;top 10 skills you need&lt;/strong&gt; to build AI agents that actually work outside demos. Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Tool Integration with Composio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; helps your agent connect to external tools and APIs without dealing with complex setup. You can plug your agent into &lt;strong&gt;1000+ tools&lt;/strong&gt; like Gmail, Slack, GitHub, and more, and start executing real actions quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluubhwwlfltvh0uxb0pm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluubhwwlfltvh0uxb0pm.png" alt=" " width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ComposioHQ/skills" rel="noopener noreferrer"&gt;Composio’s skill&lt;/a&gt; pack is built from real production use. It handles things that most agents get wrong, such as tool routing, session handling, authentication, and real-time events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool Routing:&lt;/strong&gt; Picking the right tool at the right time with proper session control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication Flows:&lt;/strong&gt; OAuth, API keys, auto vs manual auth, and connection handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session Management:&lt;/strong&gt; Keeping user data isolated across multi-user setups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook And Trigger Handling:&lt;/strong&gt; Creating triggers, verifying requests, and managing lifecycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework Integration:&lt;/strong&gt; Working with LangChain, OpenAI Agents SDK, CrewAI, and Claude&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without this skill, agents often mix up user sessions, break authentication, or call tools out of order. These issues may not show up in testing, but they cause serious failures in real use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add composiohq/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the layer that turns your agent from a chatbot into a system that can actually get work done.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Frontend And Deployment Skills with &lt;a href="https://github.com/vercel-labs/agent-skills" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/vercel-labs/agent-skills" rel="noopener noreferrer"&gt;Vercel’s agent skills&lt;/a&gt; focus on building and deploying fast web apps using React and Next.js. It covers performance, UX, accessibility, and deployment best practices. This is a core skill set for any agent working on frontend or full-stack projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu08a1g2mn7stb6893rm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu08a1g2mn7stb6893rm1.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React And Next.js Performance:&lt;/strong&gt; 40+ rules across multiple areas, from fixing render waterfalls to better caching patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundle Optimization:&lt;/strong&gt; Reducing bundle size, using dynamic imports, and avoiding unnecessary client components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server and Client Boundary:&lt;/strong&gt; Sending only required data across components and avoiding over-serialization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frontend is where most agent-generated code breaks first. Code may work locally but fail in real-world use due to slow load times, poor structure, or bad UX. Without this skill, agents create apps that feel slow and unstable at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add vercel-labs/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Memory And Retrieval Skills with Weaviate
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/weaviate/agent-skills" rel="noopener noreferrer"&gt;The Weaviate agent skill pack&lt;/a&gt; connects your agent to Weaviate’s infrastructure and fixes a common issue where agents guess outdated syntax or misuse search settings. It helps your agent build reliable semantic search and retrieval systems without errors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbnsqnexc63xubbz6kn3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbnsqnexc63xubbz6kn3.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Management:&lt;/strong&gt; Inspecting schemas, creating collections, and managing metadata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Lifecycle:&lt;/strong&gt; Importing and structuring CSV, JSON, and JSONL data with clean pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Search:&lt;/strong&gt; Choosing between keyword, semantic, and hybrid search with correct tuning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Search:&lt;/strong&gt; Using natural language queries with built-in search and citation support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Retrieval:&lt;/strong&gt; Working with multivector embeddings and combining BM25 with vector search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-End Cookbooks:&lt;/strong&gt; Building full RAG pipelines, chat systems, and deployable services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without this skill, agents often use outdated syntax, break search queries, or miss key setup steps. With it, an agent can set up a working search system, load data, and build a usable retrieval pipeline in minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add weaviate/agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Model And ML Workflow Skills with Hugging Face
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/huggingface/skills" rel="noopener noreferrer"&gt;Hugging Face agent&lt;/a&gt; skill pack connects your agent to the full Hugging Face ecosystem. It supports tools like Claude Code, Codex, Gemini CLI, and Cursor, and covers the complete ML workflow from datasets to training to deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3epkvnf4q34rq85sf0zw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3epkvnf4q34rq85sf0zw.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HF CLI: Managing models, datasets, repositories, and authentication using tokens&lt;/li&gt;
&lt;li&gt;Dataset Workflows: Fetching data, filtering, searching, and downloading structured datasets&lt;/li&gt;
&lt;li&gt;Model Training: Fine-tuning with SFT, DPO, GRPO, reward models, and handling deployment formats like GGUF&lt;/li&gt;
&lt;li&gt;Gradio UIs: Building demos, chat interfaces, and interactive web apps&lt;/li&gt;
&lt;li&gt;HF Jobs: Running GPU workloads, batch jobs, and tracking experiments&lt;/li&gt;
&lt;li&gt;Transformers.js: Running models directly in the browser&lt;/li&gt;
&lt;li&gt;Paper Publishing: Managing and linking research papers with models and datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ML workflows include many connected steps where small mistakes can break results. Issues like wrong configs, poor batching, or missed auth steps can affect training and output quality. This skill helps agents follow correct patterns and produce reliable results across the workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add huggingface/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Web Data And Automation Skills with Olostep
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/olostep/olostep-mcp-server" rel="noopener noreferrer"&gt;Olostep&lt;/a&gt; is a web scraping, crawling, and search API built for AI workflows. The Olostep setup works through MCP, so you can plug it into any MCP-compatible agent and grant it access to real-time web data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrspaevqq724hqszhbua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrspaevqq724hqszhbua.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single URL Scraping: Extracting content from any page in Markdown, HTML, JSON, or plain text with JavaScript support&lt;/li&gt;
&lt;li&gt;Batch Extraction: Processing up to 100,000 URLs in parallel with structured outputs&lt;/li&gt;
&lt;li&gt;Site Crawling: Moving across pages to collect data from full websites&lt;/li&gt;
&lt;li&gt;Structured Parsers: Using ready-made extractors for sources like Amazon, Google Search, and Maps&lt;/li&gt;
&lt;li&gt;Natural Language Extraction: Asking for data in plain English and getting structured results&lt;/li&gt;
&lt;li&gt;Web Agents: Automating steps like form filling, clicking, and navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Web data is messy, inconsistent, and often blocked. Agents that try to scrape on their own spend time on retries, broken parsing, and access issues. Olostep handles these problems and returns clean, usable data in a single step.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Infrastructure And Edge Skills with Cloudflare
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/cloudflare/skills" rel="noopener noreferrer"&gt;Cloudflare agent skill&lt;/a&gt; &lt;strong&gt;pack&lt;/strong&gt; covers a full platform for building, deploying, and running applications at the edge. It includes compute, storage, AI tools, networking, and security, all in one place. Skills load based on what your agent is working on, so there is no manual setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uqby9fycj4dzrc05qii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uqby9fycj4dzrc05qii.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers And Pages: Deploying serverless functions and static sites with proper configs, routes, and secrets&lt;/li&gt;
&lt;li&gt;Storage: Using KV, D1, and R2 based on the type of data and access pattern&lt;/li&gt;
&lt;li&gt;Durable Objects: Managing stateful logic, coordination, and real-time features with WebSockets and storage&lt;/li&gt;
&lt;li&gt;AI On The Edge: Running inference, vector search, and building stateful agents with built-in tools&lt;/li&gt;
&lt;li&gt;MCP Server Creation: Creating remote MCP servers with tool access and OAuth support&lt;/li&gt;
&lt;li&gt;Performance: Improving load times, caching responses, and fixing render-blocking issues&lt;/li&gt;
&lt;li&gt;Security: Setting up WAF, handling DDoS protection, and applying Zero Trust patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloudflare has many moving parts and strict runtime rules. Agents often use unsupported APIs, misconfigure storage, or deploy incorrectly. This skill helps the agent follow correct patterns and build systems that run reliably at the edge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add cloudflare/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Monitoring And Debugging Skills with Sentry
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/getsentry/skills" rel="noopener noreferrer"&gt;Sentry agent skill&lt;/a&gt; pack is based on real patterns used by the Sentry engineering team. It is not basic documentation. It reflects how production systems are monitored, debugged, and maintained at scale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc39q533e607cc71fgvlq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc39q533e607cc71fgvlq.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AGENTS.md Generation: Creating and updating agent docs that match real project structure&lt;/li&gt;
&lt;li&gt;Claude Settings Auditing: Checking configs early to catch issues before they reach production&lt;/li&gt;
&lt;li&gt;Sentry SDK Integration: Setting up error tracking, DSNs, source maps, and capturing useful context&lt;/li&gt;
&lt;li&gt;Error Triage Patterns: Managing issues, grouping errors, setting alerts, and tracking releases&lt;/li&gt;
&lt;li&gt;Observability For Agents: Making workflows traceable and easy to debug with distributed tracing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents that ship code without monitoring create failures that are hard to detect and fix. This skill ensures your agent sets up tracking from the start, so errors are visible and easier to debug in real use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add getsentry/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Backend And Database Skills with Supabase
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/supabase/supabase/tree/master/.agents/skills/vitest" rel="noopener noreferrer"&gt;Supabase agent skill pack&lt;/a&gt; teaches your agent how to work with a full backend platform built on Postgres. It covers database, auth, storage, real-time features, and serverless functions. It is widely used in modern full-stack apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6moezllah8vk7kqed1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6moezllah8vk7kqed1j.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Postgres Best Practices: Writing efficient queries, using indexes, and avoiding slow patterns&lt;/li&gt;
&lt;li&gt;Row Level Security: Defining access rules correctly to protect user data&lt;/li&gt;
&lt;li&gt;Auth Patterns: Managing sessions, JWTs, OAuth, and protected routes&lt;/li&gt;
&lt;li&gt;Storage: Handling file uploads, access control, and signed URLs&lt;/li&gt;
&lt;li&gt;Edge Functions: Deploying serverless logic with proper configs and secrets&lt;/li&gt;
&lt;li&gt;Realtime: Subscribing to changes, tracking presence, and managing connections&lt;/li&gt;
&lt;li&gt;Client Libraries: Using Supabase SDKs with proper typing and error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Supabase is used in many production apps, but small mistakes can cause serious issues. Poor queries can slow systems down, and incorrect access rules can expose data. This skill helps your agent follow correct patterns for both performance and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add supabase/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Payments And Billing Skills with Stripe
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/stripe/ai" rel="noopener noreferrer"&gt;Stripe agent skill&lt;/a&gt; pack teaches your agent how to build secure payment flows, manage subscriptions, and handle billing systems correctly. It covers the full lifecycle of payments and helps avoid costly mistakes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjuhs3xpwpyiwfyo8c2vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjuhs3xpwpyiwfyo8c2vf.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Payment Intents:&lt;/strong&gt; Creating and confirming payments, handling authentication flows, and avoiding duplicate charges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscriptions And Billing:&lt;/strong&gt; Managing recurring payments, plan changes, trials, and cancellations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook Handling:&lt;/strong&gt; Verifying signatures, handling retries, and processing events in the correct order&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect And Payouts:&lt;/strong&gt; Routing payments in marketplace setups and handling transfers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fraud Detection:&lt;/strong&gt; Using risk signals and rules to prevent fraud without blocking valid users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Mode Patterns:&lt;/strong&gt; Simulating real payment scenarios and testing failure cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Handling:&lt;/strong&gt; Managing declines, network issues, and retries without breaking the flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Payments are a critical part of any product. Small mistakes can lead to failed transactions, duplicate charges, or broken billing flows. This skill helps your agent follow safe and reliable patterns from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add stripe/agent-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Video And Media Generation Skills with Remotion
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/remotion-dev/remotion" rel="noopener noreferrer"&gt;Remotion agent skill&lt;/a&gt; pack teaches your agent how to create videos using code. It uses React to build, structure, and render videos, which opens up a new type of output that most agents cannot handle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hcra9vojsarha668e8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hcra9vojsarha668e8i.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the agent learns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composition Model: Structuring videos using React components, sequences, and layouts&lt;/li&gt;
&lt;li&gt;Timeline API: Controlling animation with frame-based logic and timing functions&lt;/li&gt;
&lt;li&gt;Rendering Pipeline: Generating videos in formats like MP4, WebM, and GIF using the CLI&lt;/li&gt;
&lt;li&gt;Audio And Video Assets: Adding and syncing audio, clips, and visual elements&lt;/li&gt;
&lt;li&gt;Dynamic Content: Creating videos that change based on data or inputs&lt;/li&gt;
&lt;li&gt;Walkthrough Generation: Producing product demos and app walkthrough videos from UI flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Video creation has mostly been manual and tool-heavy. This skill allows your agent to generate videos directly from code, enabling automation of content such as demos, reports, and visual stories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add remotion-dev/remotion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The agent skills ecosystem is moving fast. Fine-tuning changes how an AI behaves and is costly to maintain. Agent skills are simple instruction files. You can update, swap, or share them at any time without changing the model.&lt;/p&gt;

&lt;p&gt;Each skill pack in this list carries real engineering knowledge. It includes production patterns, lessons from real systems, and platform-specific practices, all in a form an agent can use right away.&lt;/p&gt;

&lt;p&gt;Install the ones that match your stack. Your agents will spend less time making errors and more time getting work done.&lt;/p&gt;

</description>
      <category>agentskills</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Top 10 CLI Tools to Level-Up Claude Code</title>
      <dc:creator>Shrijal Acharya</dc:creator>
      <pubDate>Mon, 06 Apr 2026 12:51:40 +0000</pubDate>
      <link>https://forem.com/composiodev/top-10-cli-tools-to-level-up-claude-code-1kf9</link>
      <guid>https://forem.com/composiodev/top-10-cli-tools-to-level-up-claude-code-1kf9</guid>
      <description>&lt;p&gt;I've been using Claude Code more than any other AI agents recently.&lt;/p&gt;

&lt;p&gt;And when it's the tool you use the most, it just makes sense to make that workflow as productive as possible.&lt;/p&gt;

&lt;p&gt;A lot of the experience comes down to the small tools around it. The ones that help you search, navigate, review diffs, watch system usage, or just keep your workflow clean.&lt;/p&gt;

&lt;p&gt;So this post is a simple list of the CLI tools I think pair really nicely with Claude Code.&lt;/p&gt;

&lt;p&gt;There's an awesome repo with a curated collection of CLI tools for coding agents: &lt;a href="https://github.com/ComposioHQ/awesome-agent-clis" rel="noopener noreferrer"&gt;awesome-agent-clis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqdpesfbdf4xrlpgg33w.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqdpesfbdf4xrlpgg33w.gif" alt="swag gif" width="500" height="284"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What does "tools for Claude Code" actually mean?
&lt;/h2&gt;

&lt;p&gt;Claude Code is already powerful on its own.&lt;/p&gt;

&lt;p&gt;But it gets even better when you pair it with the right terminal tools, especially since you’re already working in the terminal.&lt;/p&gt;

&lt;p&gt;I’m &lt;strong&gt;not talking&lt;/strong&gt; about tools built specifically for Claude Code.&lt;/p&gt;

&lt;p&gt;I mean the CLI tools that make the overall workflow smoother, faster, and easier to manage while Claude is working in your repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ GitHub’s official CLI for working from the terminal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2e1eahx78q1aaboalu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2e1eahx78q1aaboalu6.png" alt="GitHub cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;GitHub CLI is basically running GitHub from your terminal. You can create repos, check issues, review PRs, manage branches, and handle a bunch of GitHub workflow stuff without leaving your shell.&lt;/p&gt;

&lt;p&gt;It can be as simple as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh repo create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;for creating a new repository through an interactive prompt, which is one I use the most. And there are tons of other commands you can use.&lt;/p&gt;

&lt;p&gt;Find all the others in the help window.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;This one probably will not be for everyone.&lt;/p&gt;

&lt;p&gt;A lot of people do not want to give Claude access to their GitHub repos, and that is totally fair. But if you are comfortable with it, I honestly think it is one of the best tools to pair with Claude Code.&lt;/p&gt;

&lt;p&gt;Or even if you do not want Claude directly using it, GitHub CLI is still great to have beside Claude Code since you can just run the commands yourself and keep moving without leaving the terminal.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. &lt;a href="https://composio.dev" rel="noopener noreferrer"&gt;Composio&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ An MCP server that connects Claude Code to hundreds of external apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlarqn9v88xzclo19eid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlarqn9v88xzclo19eid.png" alt="composio cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;Composio is an MCP server you can add to Claude Code so it can work with 500+ apps.&lt;/p&gt;

&lt;p&gt;You can find the guide on how to connect Composio with Claude Code here: &lt;a href="https://composio.dev/toolkits/composio/framework/claude-code" rel="noopener noreferrer"&gt;Composio Universal CLI&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;The main way I use Composio with Claude Code is for email.&lt;/p&gt;

&lt;p&gt;Say I am working on something and need to send a mail to someone.&lt;/p&gt;

&lt;p&gt;Without this, I would usually have to stop, open my mail client, write the message, double check it, and send it myself.&lt;/p&gt;

&lt;p&gt;With Composio set up inside Claude Code, I can just ask Claude to draft the email, or give it the content and the recipient, and it can handle the rest for me.&lt;/p&gt;

&lt;p&gt;And maybe most importantly, no more spelling mistakes in your emails. 😃&lt;/p&gt;

&lt;p&gt;That is the workflow I use the most.&lt;/p&gt;

&lt;p&gt;Since you have 500+ app access, you can already imagine how many other things you could automate from there.&lt;/p&gt;

&lt;p&gt;They recently added CLI support as well, which you can install here: &lt;a href="https://composio.dev/cli" rel="noopener noreferrer"&gt;Composio CLI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For development, Composio provides a playground with test users, execution logs, and real-time trigger streaming so you can iterate on agent behaviour locally before going to production.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. &lt;a href="https://github.com/burntsushi/ripgrep" rel="noopener noreferrer"&gt;ripgrep&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ The fastest way to search through a codebase from the terminal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx24j0f5r4gi5tiwpdz3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx24j0f5r4gi5tiwpdz3m.png" alt="ripgrep cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;It is a ridiculously fast search tool for the terminal.&lt;/p&gt;

&lt;p&gt;It lets you search through files, code, and folders almost instantly.&lt;/p&gt;

&lt;p&gt;If you have ever used &lt;code&gt;grep&lt;/code&gt;, which I assume you have, it's a complete and faster replacement for that in real world repos.&lt;/p&gt;

&lt;p&gt;A simple example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rg &lt;span class="s2"&gt;"useEffect"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That will search for &lt;code&gt;useEffect&lt;/code&gt; across your entire project and show you where it appears.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;This is one of the first tools I'd install.&lt;/p&gt;

&lt;p&gt;When working on a real world repo, you are constantly searching for things. Function names, config, and whatnot.&lt;/p&gt;

&lt;p&gt;ripgrep basically makes that fast.&lt;/p&gt;

&lt;p&gt;Even Claude Code defaults to using this tool when searching for things in its workflow. Overall, it is just super handy to have a quick way to move around the repo yourself without digging around manually.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. &lt;a href="https://github.com/tmux/tmux" rel="noopener noreferrer"&gt;tmux&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ A better way to manage terminal sessions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;tmux lets you run multiple terminal sessions inside one terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd69oiqggj0gavhw01fve.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd69oiqggj0gavhw01fve.webp" alt="tmux workflow" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can split panes, open multiple windows, switch between them quickly, and keep everything organized without opening a bunch of separate &lt;strong&gt;terminal tabs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It might feel a little unnecessary at first. But once you get used to it, there is no way back.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;For me, tmux is one of the most useful tools to pair with Claude Code, and it is actually what is running in my terminal right now as I work on this blog inside Neovim. 👀&lt;/p&gt;

&lt;p&gt;I usually have Claude in a pane, with Neovim or a server running in one window, Lazygit in another, and then some extra panes for running commands.&lt;/p&gt;

&lt;p&gt;If you use Neovim, it gets even better. You can have Claude open in one split and Neovim in another. As Claude makes changes, if you need to edit something, Neovim is right there. And for diffs or Git work, Lazygit is sitting in another window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyc3uxa400tcfr35714m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyc3uxa400tcfr35714m.png" alt="tmux workflow with claude code and lazygit" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How cool is that?&lt;/p&gt;

&lt;p&gt;You are not constantly jumping between tabs or losing track of what is running where.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. &lt;a href="https://github.com/FFmpeg/FFmpeg" rel="noopener noreferrer"&gt;FFmpeg&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ The go-to CLI tool for handling just about any media file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi9ut1s6ljrfojjzlr9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi9ut1s6ljrfojjzlr9r.png" alt="ffmpeg cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;Honestly, this is one of the best tools I have added to my workflow recently.&lt;/p&gt;

&lt;p&gt;FFmpeg is a command line tool for working with media files. You can use it to convert images from one format to another, like PNG to JPG, convert video formats, compress files, trim audio, and do all sorts of file processing.&lt;/p&gt;

&lt;p&gt;It supports basically every format you can think of.&lt;/p&gt;

&lt;p&gt;As developers, we end up doing this kind of stuff all the time. And having one tool that handles all of it from the terminal is just super handy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;FUN FACT:&lt;/strong&gt; Almost all the online media tools that you use on the internet, like online video compressors and similar stuff, are powered by FFmpeg under the hood.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you have it in your terminal, you really don't need to ever visit such sites.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;The only catch is that FFmpeg commands are a little complex.&lt;/p&gt;

&lt;p&gt;Even for a simple task, the syntax is just a little too much to understand.&lt;/p&gt;

&lt;p&gt;Here's a quick command to crop a video file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mp4 &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"crop=1280:720:0:0"&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt;:a copy output.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That is exactly where Claude Code becomes useful.&lt;/p&gt;

&lt;p&gt;You can just describe what you want in plain English, and let Claude generate the right FFmpeg command for you.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. &lt;a href="https://github.com/jesseduffield/lazygit" rel="noopener noreferrer"&gt;Lazygit&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ A simple TUI for Git&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hlcu02qahtbawpce5ay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hlcu02qahtbawpce5ay.png" alt="lazygit cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;Lazygit is a terminal UI for Git.&lt;/p&gt;

&lt;p&gt;It gives you a much nicer way to handle things like commits, branches, stashing, rebasing, and reviewing changes without typing every Git command manually.&lt;/p&gt;

&lt;p&gt;You still stay in the terminal.&lt;/p&gt;

&lt;p&gt;It just makes the whole Git workflow super easy, and you do not need to remember and type out any commands. Just knowing the concepts is enough.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;This is one I always have open beside Claude Code.&lt;/p&gt;

&lt;p&gt;When Claude makes a lot of changes in a bunch of files, Lazygit makes it easier to review everything, stage only what you want, and manage the overall Git workflow.&lt;/p&gt;

&lt;p&gt;I usually keep Lazygit open in every session inside tmux, in its own window, so I can quickly jump there and handle Git stuff whenever I need to.&lt;/p&gt;

&lt;p&gt;I will talk about tmux a bit later in the list, but this combo works really well.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. &lt;a href="https://github.com/aristocratos/btop" rel="noopener noreferrer"&gt;btop&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ A much better way to monitor your system&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggie92tumu7etywbvlrx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggie92tumu7etywbvlrx.png" alt="btop cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;btop is a system monitor for the terminal.&lt;/p&gt;

&lt;p&gt;It gives you a clean view of CPU, memory, disk, network, and running processes, all in one place.&lt;/p&gt;

&lt;p&gt;There is also htop, which a lot of people already know and use. But personally, I prefer btop.&lt;/p&gt;

&lt;p&gt;It just feels a bit more user friendly, and overall nicer and easier to filter down processes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;When you are doing a lot inside the terminal, especially with bigger repos, it is really useful to keep an eye on system usage.&lt;/p&gt;

&lt;p&gt;That might be Claude, any processes it launches with your permission, local servers, or anything else running in the background.&lt;/p&gt;

&lt;p&gt;btop gives you a quick way to see what is eating memory, what is using CPU, and whether your machine is starting to struggle, especially when you're using local models.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. &lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;fzf&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ The backbone of fuzzy finding in the terminal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqev3t1z88tdq2vt87u8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqev3t1z88tdq2vt87u8e.png" alt="fzf cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;I have probably been using this tool longer than any other in this list.&lt;/p&gt;

&lt;p&gt;fzf is a command line fuzzy finder.&lt;/p&gt;

&lt;p&gt;It lets you search and pick things interactively from the terminal.&lt;/p&gt;

&lt;p&gt;That could be files, directories, Git branches, command history, processes, or really anything you can pipe into it.&lt;/p&gt;

&lt;p&gt;If you haven't heard about this tool or have never used it, you are doing something wrong 😏.&lt;/p&gt;

&lt;p&gt;A simple example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; f | fzf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This gives you a fuzzy searchable list of files in the current directory.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;This is one of those tools that just makes terminal workflows feel faster.&lt;/p&gt;

&lt;p&gt;Whether I am jumping between files, searching through something, or picking from a long list of options, fzf is usually involved somewhere. I have so many scripts built around fzf.&lt;/p&gt;

&lt;p&gt;And when you are already spending a lot of time in the terminal with Claude Code, that kind of speed matters.&lt;/p&gt;

&lt;p&gt;It is not really a Claude specific tool. It is one of the foundations that make working in the terminal and overall moving between things a lot better.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. (Optional) &lt;a href="https://github.com/AlexsJones/llmfit" rel="noopener noreferrer"&gt;LLMFit&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ Handy if you are experimenting with local or custom models alongside Claude Code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9agawf7zphwgqvrnqcbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9agawf7zphwgqvrnqcbp.png" alt="llmfit cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What it is?
&lt;/h3&gt;

&lt;p&gt;LLMFit is a CLI tool that scans your system hardware and tells you which local AI models you can run smoothly on your system.&lt;/p&gt;

&lt;p&gt;If you are planning to run a local model, it is a nice way to avoid downloading something that your system will struggle with. Its whole purpose is to help match models to the machine you have.&lt;/p&gt;

&lt;p&gt;Installing is as simple as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;llmfit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, to scan your hardware against models, run this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;llmfit scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and it will list out all the models with their metadata and performance scores based on your hardware.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why use it with Claude Code?
&lt;/h3&gt;

&lt;p&gt;This one is definitely more niche.&lt;/p&gt;

&lt;p&gt;But if you are running Claude Code with a local or custom model setup, it can help you figure out what will run well on your machine before you waste time downloading the wrong model.&lt;/p&gt;

&lt;p&gt;It is not something everyone will need, but for people who prefer the Claude Code agent and want to test newer local or custom models from other providers, this is an option as well.&lt;/p&gt;

&lt;p&gt;You can find many guides on doing that. One that I referenced while trying it out is by &lt;a href="https://medium.com/@luongnv89/run-claude-code-on-local-cloud-models-in-5-minutes-ollama-openrouter-llama-cpp-6dfeaee03cda" rel="noopener noreferrer"&gt;Luong NGUYEN&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  A few more nice ones
&lt;/h2&gt;

&lt;p&gt;There are also a few other terminal tools I use a lot that I did not want to give a full section to, but they are still very much part of the overall workflow.&lt;/p&gt;

&lt;p&gt;Things like &lt;strong&gt;fd&lt;/strong&gt;, &lt;strong&gt;zoxide&lt;/strong&gt;, &lt;strong&gt;eza&lt;/strong&gt;, &lt;strong&gt;yazi&lt;/strong&gt;, and &lt;strong&gt;bat&lt;/strong&gt; all make the terminal feel nicer to work in.&lt;/p&gt;

&lt;p&gt;Some help you move around directories faster. Some make listing files, previewing content, or moving around in the filesystem way better than the default.&lt;/p&gt;

&lt;p&gt;I leave it up to you to research these tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F860iemg7j7gkx4mp7ehw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F860iemg7j7gkx4mp7ehw.gif" alt="steve smith playing with magnifying glass" width="490" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of these are Claude Code specific.&lt;/p&gt;


&lt;h2&gt;
  
  
  Ones I'd install first
&lt;/h2&gt;

&lt;p&gt;If I had to set this up again from scratch, I’d probably start with &lt;strong&gt;ripgrep&lt;/strong&gt;, &lt;strong&gt;GitHub CLI&lt;/strong&gt;, &lt;strong&gt;tmux&lt;/strong&gt;, and &lt;strong&gt;Lazygit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That already covers a lot of the core workflow around Claude Code.&lt;/p&gt;

&lt;p&gt;And separately, I’d also set up &lt;strong&gt;Composio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s a bit different from the rest here. It’s not exactly just another CLI tool, but more of an MCP server. Really useful if you want to automate parts of your workflow and connect Claude to external tools in a cleaner way.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;You definitely do not need every tool in this list.&lt;/p&gt;

&lt;p&gt;But a few of them can make working with Claude Code a lot smoother, especially once you start using it more seriously.&lt;/p&gt;

&lt;p&gt;At the end of the day, it’s really just about making the workflow around Claude feel cleaner and easier to manage.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1127015"&gt;
    &lt;a href="/shricodev" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1127015%2F1c5e48a2-f602-4e7d-8312-3c0322d155c6.jpg" alt="shricodev image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/shricodev"&gt;Shrijal Acharya&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/shricodev"&gt;SDE • GOLD @Microsoft Student Ambassador • Prev Lead Collab and Dev-Team Lead @oppiaorg • Mail for collaboration&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>productivity</category>
      <category>opensource</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Top OpenClaw Integrations to Connect Your Workflow in 2026</title>
      <dc:creator>Aakash R</dc:creator>
      <pubDate>Mon, 06 Apr 2026 06:48:20 +0000</pubDate>
      <link>https://forem.com/composiodev/top-openclaw-integrations-to-connect-your-workflow-in-2026-1l5h</link>
      <guid>https://forem.com/composiodev/top-openclaw-integrations-to-connect-your-workflow-in-2026-1l5h</guid>
      <description>&lt;p&gt;If you are using OpenClaw, you likely work with multiple tools, and switching between them can quickly disrupt the flow of work. Emails, conversations, code, files, and customer data often stay spread across different platforms, so work can start to feel a bit disconnected.&lt;/p&gt;

&lt;p&gt;OpenClaw integrations bring these tools into a more connected flow. An update in one app can carry over to another, and information stays in sync as work moves forward. This cuts down repeated steps and keeps things moving without constant back-and-forth.&lt;/p&gt;

&lt;p&gt;Let us look at some of the most useful OpenClaw integrations across key categories and how they fit into your workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hjb5vdwnxj1yqyzf8sh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hjb5vdwnxj1yqyzf8sh.jpg" alt=" " width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenClaw + Composio Integration
&lt;/h2&gt;

&lt;p&gt;Before getting into specific integrations, it helps to understand how OpenClaw connects with all these tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; acts as the integration layer behind OpenClaw and supports 1000+ tools across communication, development, productivity, and more. Access to this large set of apps comes through a single system, so everything feels more connected from the start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedrx8npgtfaujbp9sxhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedrx8npgtfaujbp9sxhz.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://composio.dev/toolkits/outlook/framework/openclaw" rel="noopener noreferrer"&gt;OpenClaw integrates with Composio&lt;/a&gt; to manage these connections in a consistent way, which keeps each integration structured similarly. Different setups or patterns across tools are reduced, so working across them feels more straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Connect OpenClaw with Composio
&lt;/h2&gt;

&lt;p&gt;Getting OpenClaw connected with Composio takes a few simple steps. Once set up, integrations start working through a single flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install the Composio plugin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install the Composio plugin inside OpenClaw to begin the setup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw plugins &lt;span class="nb"&gt;install&lt;/span&gt; @composio/openclaw-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Get your Composio API key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Log in to the &lt;a href="https://dashboard.composio.dev/login" rel="noopener noreferrer"&gt;Composio dashboard&lt;/a&gt; and copy your API key. This key links your OpenClaw setup to your Composio account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeqtf2phbc47mdc35npz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeqtf2phbc47mdc35npz.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Add the API key to OpenClaw&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set the API key in your OpenClaw configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw config &lt;span class="nb"&gt;set &lt;/span&gt;plugins.entries.composio.config.consumerKey &lt;span class="s2"&gt;"ck_your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Restart OpenClaw&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Restart the OpenClaw gateway to apply the changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw gateway restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Authenticate your tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you start using tools, OpenClaw prompts authentication through Composio. Connect the apps you need, and they become available in your workflows.&lt;/p&gt;

&lt;p&gt;After completing these steps, OpenClaw can access and trigger actions across all connected tools through Composio, setting up the foundation for your integrations.&lt;/p&gt;

&lt;p&gt;Next, we will look at some of the most useful OpenClaw integrations across key categories.&lt;/p&gt;

&lt;h2&gt;
  
  
  📧 Email and Communication
&lt;/h2&gt;

&lt;p&gt;Communication tools are where most work naturally starts and continues through the day. Conversations, emails, and quick updates keep things moving, but they can also get scattered across different apps.&lt;/p&gt;

&lt;p&gt;Connecting these tools with OpenClaw keeps everything closer to your workflow. Updates can move along with the work, and conversations stay tied to the actions they relate to, which keeps things clearer as tasks progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/gmail/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;1. Gmail&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Emails often mark the start of a task or follow-up. Connect Gmail to your workflow, and incoming messages can turn into tasks, updates, or next steps. Important threads stay linked to ongoing activities and keep everything visible and organized.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb09d1rsviuq9x3ab0qo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb09d1rsviuq9x3ab0qo.png" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/slack/framework/openclaw" rel="noopener noreferrer"&gt;2. Slack&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Many business decisions are made in Slack. When connected to OpenClaw using Composio, the messages can directly trigger actions across your workflow. Discussions in channels can update tasks, notify team members, or move work forward as conversations progress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotpps6zv4he2fsedfbta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotpps6zv4he2fsedfbta.png" alt=" " width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/outlook/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;3. Microsoft Outlook&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Outlook is a big part of daily communication for many teams, especially for ongoing conversations and follow-ups. Emails can tie into tasks and updates, which keep important interactions easy to follow as work moves ahead. OpenClaw keeps these updates aligned across your workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjnl36x5znfdtz35gtzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjnl36x5znfdtz35gtzu.png" alt=" " width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/microsoft_teams/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;4. Microsoft Teams&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Teams is often where collaboration happens across chats and meetings. When linked with OpenClaw, updates and actions appear alongside conversations, keeping discussions and task progress closely connected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kv3kqf4haqm3pk9asq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kv3kqf4haqm3pk9asq3.png" alt=" " width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Dev Tools
&lt;/h2&gt;

&lt;p&gt;Development work moves across code, issues, and collaboration. Keeping these tools aligned with OpenClaw keeps progress visible and reduces the need to manually track updates across platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/github/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;1. GitHub&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;OpenClaw brings GitHub activity into your workflow, where code changes, pull requests, and issues stay visible as work moves forward. Teams often switch between repositories and task trackers to stay updated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn8tb8bve8i6a6msuqmb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn8tb8bve8i6a6msuqmb.png" alt=" " width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repository activity can be directly tied to tasks and progress, and development updates remain clear as changes occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/gitlab/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;2. GitLab&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;GitLab brings together code, pipelines, and collaboration in one space. OpenClaw brings build activity, commits, and issue updates into your workflow, and these updates shape how progress is tracked. These updates continue into your workflow through pipeline activity and code changes, and progress becomes easier to follow as work progresses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9dxzlpxqdbnt982tlze5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9dxzlpxqdbnt982tlze5.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/bitbucket/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;3. Bitbucket&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Bitbucket supports teams working across repositories and code reviews, where feedback and changes happen continuously. Tracking these alongside tasks can get scattered. Pull requests and repository updates can remain tied to your workflow to keep code changes and reviews visible as work progresses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktrnnjm4wstlglkzkqxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktrnnjm4wstlglkzkqxn.png" alt=" " width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/jira/framework/openclaw" rel="noopener noreferrer"&gt;4. Jira&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Jira is widely used for managing issues, sprints, and development tasks. Progress depends on how clearly updates across tickets are tracked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwfjcdsa665mfs08ivno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwfjcdsa665mfs08ivno.png" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changes in ticket status and task updates can reflect across your workflow, and this helps maintain clear and aligned progress across tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎬 Media
&lt;/h2&gt;

&lt;p&gt;Media and file management often sit across storage platforms, asset libraries, and content channels. Files move through different stages, such as creation, review, and publishing, and tracking these changes across tools can take extra effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/tiktok/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;1. TikTok&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;TikTok is used for creating and sharing short-form video content. Content updates, uploads, and engagement often tie closely to campaigns and timelines. OpenClaw connects video activity with your workflow, and updates around content and publishing stay aligned with ongoing tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcca6ocjyicetkjhtwqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcca6ocjyicetkjhtwqr.png" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/instagram/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;2. Instagram&lt;/strong&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Instagram plays a key role in visual content and social engagement. Posts, reels, and updates often connect with marketing and content planning. Content activity can reflect across your workflow, and updates around publishing and engagement stay aligned with your plans.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3exlrvxil9q6t01tpaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3exlrvxil9q6t01tpaq.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/twitter/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;3. X (Twitter)&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;X is widely used for real-time updates and audience engagement. Posts, replies, and interactions often connect with campaigns and communication strategies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6v2tpiomqmxmzfslp1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6v2tpiomqmxmzfslp1z.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Activity on X can tie into your workflow, and updates stay aligned with ongoing content and outreach efforts.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/youtube/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;4. YouTube&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;YouTube is used to host and manage video content. Uploads, edits, and performance tracking all play a role in content workflows. Video activity can span your workflow and provide better visibility into publishing timelines and how content performs within your overall process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6n826nnjqfyhbgx5ojz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6n826nnjqfyhbgx5ojz.png" alt=" " width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Productivity
&lt;/h2&gt;

&lt;p&gt;Productivity tools sit at the center of planning, tracking, and organizing work. Tasks, notes, and schedules often live in separate apps, and aligning them can take extra effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/notion/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;1. Notion&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Notion is widely used for notes, documentation, and planning. Teams rely on it to organize ideas, track tasks, and manage internal knowledge. OpenClaw brings updates from Notion into your workflow, so changes in pages, tasks, or databases stay visible alongside ongoing work. This gives better clarity on how plans connect to execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpo5uf0wod0pqjohm4yg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpo5uf0wod0pqjohm4yg.png" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/trello/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;2. Trello&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Trello organizes work through boards, lists, and cards. Tasks move across stages, and tracking these changes across tools can become fragmented. Card updates and task movements can reflect in your workflow, and progress across boards stays aligned with other activities and updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2xaeujgj7n69mfa8zal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2xaeujgj7n69mfa8zal.png" alt=" " width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/asana/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;3. Asana&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Asana helps teams manage tasks, deadlines, and project timelines. Work often spans multiple teams and requires clear visibility into progress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feva55lxidc5i4yl9wykt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feva55lxidc5i4yl9wykt.png" alt=" " width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Task updates, status changes, and assignments can connect to your workflow, and progress across projects becomes easier to follow.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/googlecalendar/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;4. Google Calendar&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Google Calendar manages schedules, meetings, and reminders. Events often tie directly to tasks, deadlines, and team coordination. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hjejnwxe8qlq94zqe2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hjejnwxe8qlq94zqe2r.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Calendar events and updates can reflect in your workflow, and schedules stay aligned with tasks across teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  💼 Sales and CRM
&lt;/h2&gt;

&lt;p&gt;Sales and CRM tools manage leads, customer interactions, and deal progress. Data often moves across multiple stages, and tracking updates across tools can take extra effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/salesforce/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;1. Salesforce&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Salesforce is widely used to manage leads, accounts, and sales pipelines. Teams rely on it to track interactions and move deals through different stages. OpenClaw brings updates from Salesforce into your workflow, and changes in leads, deal stages, or customer data stay visible alongside related tasks and activities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmuqb996zlscwy2jf9kw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmuqb996zlscwy2jf9kw.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/hubspot/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;2. HubSpot&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;HubSpot supports marketing, sales, and customer engagement on a single platform. Campaigns, leads, and interactions often closely connect to ongoing work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgeviyqqojoskfrt40gv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgeviyqqojoskfrt40gv.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Updates across contacts, deals, and campaigns can reflect in your workflow, and activity across teams stays aligned as progress develops.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/pipedrive/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;3. Pipedrive&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Pipedrive focuses on managing deals and tracking sales pipelines. Each stage of a deal requires visibility and timely updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmymmgv381nq8e2dl26h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmymmgv381nq8e2dl26h.png" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deal updates and activity can connect to your workflow, and progress across the pipeline becomes easier to track and follow.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://composio.dev/toolkits/zoho_bigin/framework/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;4. Zoho Bigin&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Zoho Bigin manages customer data, interactions, and sales processes across teams. Information often needs to stay aligned across multiple touchpoints.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxla46ogn92n06apzcmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxla46ogn92n06apzcmi.png" alt=" " width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Updates to leads, contacts, and deals can reflect in your workflow, and customer data remains aligned with ongoing tasks and activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Work rarely stays in one tool, and information continues to move across platforms as tasks progress. OpenClaw integrations through Composio connect these tools, so updates and actions stay aligned across systems. This reduces repeated effort and adds more structure to workflows. &lt;/p&gt;

&lt;p&gt;Across communication, development, media, productivity, and sales, integrations improve visibility and coordination. The result is a simpler way to manage work, with tools working together in a connected flow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
