<?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>DEV Community: Rock</title>
    <description>The latest articles on DEV Community by Rock (@rockchinq).</description>
    <link>https://dev.to/rockchinq</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3639445%2F360e0dbb-98c1-4e3a-9779-7abd021ede22.jpg</url>
      <title>DEV Community: Rock</title>
      <link>https://dev.to/rockchinq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rockchinq"/>
    <language>en</language>
    <item>
      <title>GLM-5.3 Everywhere: A 10-Minute LangBot Guide for Discord, Slack, Telegram &amp; LINE</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:50:16 +0000</pubDate>
      <link>https://dev.to/rockchinq/glm-53-everywhere-a-10-minute-langbot-guide-for-discord-slack-telegram-line-29pb</link>
      <guid>https://dev.to/rockchinq/glm-53-everywhere-a-10-minute-langbot-guide-for-discord-slack-telegram-line-29pb</guid>
      <description>&lt;p&gt;GLM-5.3 was released on August 14, 2026, making it one of the freshest model launches of the month. Here is how to move it from a benchmark headline into Discord, Slack, Telegram, and LINE with LangBot.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same GLM-5.3 setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GLM-5.3 is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Z.ai released GLM-5.3 on August 14, 2026.&lt;/li&gt;
&lt;li&gt;The release focuses on coding and long-horizon agent tasks, with gains coming from post-training on the GLM-5.2 base.&lt;/li&gt;
&lt;li&gt;LangBot’s built-in ZhipuAI requester uses the official BigModel OpenAI-compatible endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: glm-5.3.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare GLM-5.3 with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;https://github.com/langbot-app/LangBot&lt;/a&gt;&lt;br&gt;
cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;a href="http://localhost:5300" rel="noopener noreferrer"&gt;http://localhost:5300&lt;/a&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register GLM-5.3
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;ZhipuAI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;a href="https://open.bigmodel.cn/api/paas/v4" rel="noopener noreferrer"&gt;https://open.bigmodel.cn/api/paas/v4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: glm-5.3&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select LangBot’s ZhipuAI requester and use the official BigModel endpoint above. Because GLM-5.3 is very new, confirm that your account and region expose glm-5.3 in the model list before sending production traffic; if it is not listed yet, keep GLM-5.2 as the fallback.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually: system prompt, conversation memory, RAG knowledge base, Agent tools or MCP, and finally input/output filters.&lt;/p&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one GLM-5.3 configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;Start with coding assistance, internal engineering support, long-running Agent workflows, and tool-heavy tasks. For ordinary FAQ traffic, compare latency and cost with a smaller GLM tier instead of assuming the flagship is automatically the best production default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;GLM-5.3 is timely enough to attract attention, but the durable value is the deployment pattern: test in Debug Chat, place the model behind a Pipeline, connect channels independently, and keep a verified fallback.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://z.ai/blog/glm-5.3" rel="noopener noreferrer"&gt;GLM-5.3 official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing ZhipuAI requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>Kimi K3 Shouldn’t Live in One App—Deploy It to Discord, Slack, Telegram &amp; LINE with LangBot</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:48:52 +0000</pubDate>
      <link>https://dev.to/rockchinq/kimi-k3-shouldnt-live-in-one-app-deploy-it-to-discord-slack-telegram-line-with-langbot-e5a</link>
      <guid>https://dev.to/rockchinq/kimi-k3-shouldnt-live-in-one-app-deploy-it-to-discord-slack-telegram-line-with-langbot-e5a</guid>
      <description>&lt;p&gt;Kimi K3 arrived in July with native vision and a 1M-token context window. The more interesting deployment is not another private chat tab—it is one LangBot Pipeline that brings K3 to Discord, Slack, Telegram, and LINE.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same Kimi K3 setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Kimi K3 is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Moonshot announced Kimi K3 on July 22, 2026 as its most capable model.&lt;/li&gt;
&lt;li&gt;The official model ID is kimi-k3, with low, high, and max reasoning effort levels.&lt;/li&gt;
&lt;li&gt;LangBot includes separate Kimi requesters for the global and China API endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: kimi-k3.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare Kimi K3 with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;https://github.com/langbot-app/LangBot&lt;/a&gt;&lt;br&gt;
cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;a href="http://localhost:5300" rel="noopener noreferrer"&gt;http://localhost:5300&lt;/a&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register Kimi K3
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;Moonshot / Kimi&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;a href="https://api.moonshot.ai/v1" rel="noopener noreferrer"&gt;https://api.moonshot.ai/v1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: kimi-k3&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the global Kimi API, use &lt;a href="https://api.moonshot.ai/v1" rel="noopener noreferrer"&gt;https://api.moonshot.ai/v1&lt;/a&gt;. If your API key belongs to the China platform, select LangBot’s China requester and keep its default &lt;a href="https://api.moonshot.cn/v1" rel="noopener noreferrer"&gt;https://api.moonshot.cn/v1&lt;/a&gt;. Do not mix a key from one platform with the other endpoint.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually: system prompt, conversation memory, RAG knowledge base, Agent tools or MCP, and finally input/output filters.&lt;/p&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one Kimi K3 configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;K3 is a strong candidate for long conversations, code-heavy communities, knowledge work, and multimodal workflows. Test its proactive behavior with strict system boundaries before giving it write-capable tools or access to production systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;Kimi K3 is built for long-horizon work, but a long context window does not replace operational discipline. LangBot helps you validate the model once, isolate credentials per channel, and add fallbacks before users depend on it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.moonshot.ai/t/kimi-k3-is-here-our-most-capable-model/480" rel="noopener noreferrer"&gt;Kimi K3 official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing Moonshot / Kimi requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>DeepSeek V4 Pro in Every Team Chat: Build a LangBot Bot for Discord, Slack, Telegram &amp; LINE</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:46:57 +0000</pubDate>
      <link>https://dev.to/rockchinq/deepseek-v4-pro-in-every-team-chat-build-a-langbot-bot-for-discord-slack-telegram-line-5hc4</link>
      <guid>https://dev.to/rockchinq/deepseek-v4-pro-in-every-team-chat-build-a-langbot-bot-for-discord-slack-telegram-line-5hc4</guid>
      <description>&lt;p&gt;DeepSeek’s V4 API generation is here, and the practical question is no longer whether the model can answer in a web chat. It is whether one tested DeepSeek V4 Pro configuration can serve the places where your community already talks.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same DeepSeek V4 Pro setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why DeepSeek V4 Pro is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;DeepSeek’s current Chat Completions API lists deepseek-v4-pro and deepseek-v4-flash.&lt;/li&gt;
&lt;li&gt;V4 combines thinking and non-thinking behavior behind the current API generation.&lt;/li&gt;
&lt;li&gt;LangBot already provides a dedicated DeepSeek requester, so no custom adapter is required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: deepseek-v4-pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare DeepSeek V4 Pro with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;https://github.com/langbot-app/LangBot&lt;/a&gt;&lt;br&gt;
cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;a href="http://localhost:5300" rel="noopener noreferrer"&gt;http://localhost:5300&lt;/a&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register DeepSeek V4 Pro
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;DeepSeek&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;a href="https://api.deepseek.com" rel="noopener noreferrer"&gt;https://api.deepseek.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: deepseek-v4-pro&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select LangBot’s dedicated DeepSeek requester. The old deepseek-chat and deepseek-reasoner aliases reached their documented deprecation date in July 2026, so use a current V4 model ID for a new deployment.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually: system prompt, conversation memory, RAG knowledge base, Agent tools or MCP, and finally input/output filters.&lt;/p&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one DeepSeek V4 Pro configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;Start V4 Pro with complex support, research, coding, and tool-using workflows where stronger reasoning matters. For latency-sensitive chat, benchmark V4 Flash beside it and route by workload instead of forcing one model onto every conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;DeepSeek V4 Pro becomes more useful when it is treated as a service behind a stable Pipeline, not as another browser tab. LangBot gives you the test surface, channel adapters, and model isolation needed to make that move responsibly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api-docs.deepseek.com/quick_start/pricing/" rel="noopener noreferrer"&gt;DeepSeek V4 Pro official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing DeepSeek requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>Gemini 3.7 Flash in Discord, Slack, Telegram &amp; LINE: A 10-Minute LangBot Guide</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:04:33 +0000</pubDate>
      <link>https://dev.to/rockchinq/gemini-37-flash-in-discord-slack-telegram-line-a-10-minute-langbot-guide-41ig</link>
      <guid>https://dev.to/rockchinq/gemini-37-flash-in-discord-slack-telegram-line-a-10-minute-langbot-guide-41ig</guid>
      <description>&lt;p&gt;Google made Gemini 3.7 Flash generally available on August 13 as its newest production workhorse for coding and agents. With LangBot, the same model can answer users across Discord, Slack, Telegram, LINE, and other messaging platforms from one managed Pipeline.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same Gemini 3.7 Flash setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Gemini 3.7 Flash is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 3.7 Flash is GA and production-ready.&lt;/li&gt;
&lt;li&gt;The stable API model ID is gemini-3.7-flash.&lt;/li&gt;
&lt;li&gt;Google positions it for coding, agentic workflows, and reliable multi-step execution.&lt;/li&gt;
&lt;li&gt;It supports a one-million-token context window, configurable thinking levels, function calling, and multimodal input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare Gemini 3.7 Flash with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/langbot-app/LangBot&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;code&gt;http://localhost:5300&lt;/code&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register Gemini 3.7 Flash
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;Google Gemini&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://generativelanguage.googleapis.com/v1beta/openai&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: &lt;code&gt;gemini-3.7-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LangBot's Google Gemini requester uses Google's OpenAI-compatible endpoint. New Gemini 3.x models deprecate some older sampling parameters, so begin with the model ID and provider defaults before adding custom arguments.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System prompt&lt;/li&gt;
&lt;li&gt;Conversation memory&lt;/li&gt;
&lt;li&gt;RAG knowledge base&lt;/li&gt;
&lt;li&gt;Agent tools or MCP&lt;/li&gt;
&lt;li&gt;Input and output filters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one Gemini 3.7 Flash configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;Use Gemini 3.7 Flash for high-volume assistants that still need planning, tools, coding, or multimodal context. Its low, medium, and high thinking levels let you trade latency for deeper reasoning; keep those profiles in separate model instances or clearly named Pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash is a strong fit for a shared multi-channel assistant: fast enough for everyday chat, but capable enough for tools and multi-step workflows. LangBot supplies the messaging, routing, and operational boundary.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/latest-model" rel="noopener noreferrer"&gt;Gemini 3.7 Flash official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing Google Gemini requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>Claude Opus 5 Is Too Good to Stay in a Browser—Put It in Discord, Slack, Telegram &amp; LINE</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:02:38 +0000</pubDate>
      <link>https://dev.to/rockchinq/claude-opus-5-is-too-good-to-stay-in-a-browser-put-it-in-discord-slack-telegram-line-4ac8</link>
      <guid>https://dev.to/rockchinq/claude-opus-5-is-too-good-to-stay-in-a-browser-put-it-in-discord-slack-telegram-line-4ac8</guid>
      <description>&lt;p&gt;Anthropic released Claude Opus 5 on July 24 as a stronger model for long-running agents, coding, and professional knowledge work. Instead of keeping it inside a browser tab, you can make it the reasoning backend for the chat platforms your team already uses.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same Claude Opus 5 setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Claude Opus 5 is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The official API model ID is claude-opus-5.&lt;/li&gt;
&lt;li&gt;Anthropic positions Opus 5 for long-running agents, coding, and knowledge work.&lt;/li&gt;
&lt;li&gt;It is available through the Claude API and supports configurable effort levels.&lt;/li&gt;
&lt;li&gt;The release also introduced beta support for mid-conversation tool changes and automatic API fallbacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: &lt;code&gt;claude-opus-5&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare Claude Opus 5 with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/langbot-app/LangBot&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;code&gt;http://localhost:5300&lt;/code&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register Claude Opus 5
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;Anthropic&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://api.anthropic.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: &lt;code&gt;claude-opus-5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LangBot includes a native Anthropic Messages requester. Keep the default Anthropic base URL unless your organization uses an approved gateway.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System prompt&lt;/li&gt;
&lt;li&gt;Conversation memory&lt;/li&gt;
&lt;li&gt;RAG knowledge base&lt;/li&gt;
&lt;li&gt;Agent tools or MCP&lt;/li&gt;
&lt;li&gt;Input and output filters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one Claude Opus 5 configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;Opus 5 fits conversations where correctness, iteration, and multi-step tool use matter more than the lowest possible latency: engineering assistants, research workflows, complex customer escalations, and internal knowledge agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;Claude Opus 5 becomes more valuable when its careful multi-step work is available where decisions happen. LangBot provides the reusable messaging layer, while the Anthropic model remains an independently testable backend.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/news/claude-opus-5" rel="noopener noreferrer"&gt;Claude Opus 5 official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing Anthropic requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>GPT-5.6 in Every Team Chat: Build a LangBot Bot for Discord, Slack, Telegram &amp; LINE</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:01:42 +0000</pubDate>
      <link>https://dev.to/rockchinq/gpt-56-in-every-team-chat-build-a-langbot-bot-for-discord-slack-telegram-line-5bo9</link>
      <guid>https://dev.to/rockchinq/gpt-56-in-every-team-chat-build-a-langbot-bot-for-discord-slack-telegram-line-5bo9</guid>
      <description>&lt;p&gt;OpenAI's GPT-5.6 family is now generally available, and an August 21 pricing update made the flagship Sol tier even more timely to evaluate. Here is how to put GPT-5.6 behind a real multi-platform chat bot with LangBot.&lt;/p&gt;

&lt;p&gt;The useful part is not simply changing a model name. LangBot separates the model, the conversation pipeline, and the messaging-platform connection, so the same GPT-5.6 setup can serve Discord, Slack, Telegram, LINE, WeChat, and more without rebuilding every webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GPT-5.6 is worth testing now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The family includes Sol, Terra, and Luna for different intelligence, latency, and cost targets.&lt;/li&gt;
&lt;li&gt;GPT-5.6 is available through the OpenAI API, ChatGPT, and Codex.&lt;/li&gt;
&lt;li&gt;The August update reduced GPT-5.6 Sol pricing for a limited period.&lt;/li&gt;
&lt;li&gt;The model family emphasizes coding, knowledge work, tool use, and long-running agentic tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official model ID: &lt;code&gt;gpt-5.6-sol&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;LangBot keeps three layers independent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — API provider, credentials, model ID, timeout, and reasoning settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline&lt;/strong&gt; — system prompt, memory, RAG, Agent tools, MCP, and output filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot&lt;/strong&gt; — Discord, Slack, Telegram, LINE, WeChat, Lark, DingTalk, QQ, and other chat adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation matters. You can compare GPT-5.6 with another model in Debug Chat, then switch production traffic without recreating your Discord application or LINE webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start LangBot
&lt;/h2&gt;

&lt;p&gt;For a local or server deployment, use the official Docker setup:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/langbot-app/LangBot&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd LangBot/docker &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open the WebUI at &lt;code&gt;http://localhost:5300&lt;/code&gt;. For production, add HTTPS, a reverse proxy, backups, and access controls for the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Register GPT-5.6
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Models&lt;/strong&gt;, create a requester using &lt;strong&gt;OpenAI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://api.openai.com/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Model ID: &lt;code&gt;gpt-5.6-sol&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;API key: store it in a secret manager or protected environment variable&lt;/li&gt;
&lt;li&gt;Timeout: start with 120 seconds, then tune from real latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For lower-cost traffic, create separate model instances for the Terra or Luna IDs available to your account, then compare them with Sol in identical Pipelines.&lt;/p&gt;

&lt;p&gt;Do not assume a new model is drop-in compatible with every old parameter. Start with the provider defaults. Add reasoning or sampling controls only after confirming that the current API accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Test before connecting a real chat
&lt;/h2&gt;

&lt;p&gt;Use LangBot's built-in Debug Chat and run a small evaluation set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short everyday question&lt;/li&gt;
&lt;li&gt;A long multi-turn conversation&lt;/li&gt;
&lt;li&gt;Structured JSON output&lt;/li&gt;
&lt;li&gt;A tool or function call&lt;/li&gt;
&lt;li&gt;Japanese and Chinese text&lt;/li&gt;
&lt;li&gt;A timeout or provider-error scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check answer quality, first-token latency, total response time, token use, tool-call reliability, and whether errors are understandable to a non-technical user.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put the model behind a Pipeline
&lt;/h2&gt;

&lt;p&gt;Create a Pipeline and select the tested model instance. Add capabilities gradually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System prompt&lt;/li&gt;
&lt;li&gt;Conversation memory&lt;/li&gt;
&lt;li&gt;RAG knowledge base&lt;/li&gt;
&lt;li&gt;Agent tools or MCP&lt;/li&gt;
&lt;li&gt;Input and output filters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keeping the first version small makes failures easier to diagnose. Once it is stable, clone the Pipeline for different teams or communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Connect Discord, Slack, Telegram, or LINE
&lt;/h2&gt;

&lt;p&gt;Create a Bot in LangBot, add the platform credentials, and assign the Pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; test in a private server before inviting the bot to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack:&lt;/strong&gt; verify threads, mentions, scopes, and workspace installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram:&lt;/strong&gt; create the bot with BotFather and test private and group chats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LINE:&lt;/strong&gt; expose the webhook over HTTPS and test one-to-one, group, and post-follow flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same Pipeline can be assigned to multiple Bots, so one GPT-5.6 configuration can support several channels while platform credentials remain isolated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep API keys out of screenshots, prompts, and logs.&lt;/li&gt;
&lt;li&gt;Add per-user and per-Bot rate limits.&lt;/li&gt;
&lt;li&gt;Separate staging and production Bots.&lt;/li&gt;
&lt;li&gt;Monitor provider failures separately from messaging-platform failures.&lt;/li&gt;
&lt;li&gt;Set a fallback model for outages or quota exhaustion.&lt;/li&gt;
&lt;li&gt;Review cost by successful conversation, not only price per token.&lt;/li&gt;
&lt;li&gt;Retest tool calling and JSON output after model-version changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which workload should use it?
&lt;/h2&gt;

&lt;p&gt;Use Sol for difficult agentic or knowledge-work conversations, Terra for balanced everyday assistants, and Luna for high-volume routing, classification, or fast support replies. Keep each tier as a separate LangBot model instance so routing and cost remain visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 is most useful when it is not trapped in a single web chat. LangBot turns the model into a reusable backend for the channels where teams and communities already work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;LangBot documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/gpt-5-6/" rel="noopener noreferrer"&gt;GPT-5.6 official announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article describes a configuration path supported by LangBot's existing OpenAI requester. Run your own Debug Chat and production-readiness checks before sending real traffic.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>RAG Without Lock-In: How LangBot Turned Every Knowledge Base into a Plugin</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 03:24:50 +0000</pubDate>
      <link>https://dev.to/rockchinq/rag-without-lock-in-how-langbot-turned-every-knowledge-base-into-a-plugin-7bn</link>
      <guid>https://dev.to/rockchinq/rag-without-lock-in-how-langbot-turned-every-knowledge-base-into-a-plugin-7bn</guid>
      <description>&lt;p&gt;LangBot v4.9.0, codenamed &lt;strong&gt;"Knowledge Without Borders,"&lt;/strong&gt; does exactly what the name says: &lt;strong&gt;the entire knowledge base capability has been refactored from a built-in implementation to a plugin-driven architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't a minor tweak — it redefines what "knowledge" means in LangBot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with the Old Approach
&lt;/h2&gt;

&lt;p&gt;Before v4.9.0, LangBot's knowledge base was split into two separate systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Knowledge Base&lt;/strong&gt;: Used Chroma as the vector database, with embedding models managed by LangBot directly. Document parsing, chunking, and indexing were all hardcoded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External Knowledge Base&lt;/strong&gt;: Bridged services like Dify, RAGFlow, and FastGPT through the &lt;code&gt;KnowledgeRetriever&lt;/code&gt; plugin component — retrieval only, no document ingestion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These two systems lived behind separate UI tabs, with completely different data models and management flows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this was painful:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Poor extensibility&lt;/strong&gt;: Want a different vector database? A custom chunking strategy? Sorry, that's hardcoded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High maintenance cost&lt;/strong&gt;: Every RAG improvement required changes to LangBot's core code and a new release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fragmented UX&lt;/strong&gt;: Two completely different knowledge base management flows meant a steep learning curve.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;v4.9.0 solves this decisively: &lt;strong&gt;extract RAG capabilities from LangBot's core and hand them to plugins.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Unified Knowledge Base Model
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;internal&lt;/code&gt; / &lt;code&gt;external&lt;/code&gt; distinction is gone. All knowledge bases are managed through a single interface, differentiated only by their &lt;code&gt;rag_engine_plugin_id&lt;/code&gt;. One list, one creation flow — just pick your engine.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. KnowledgeEngine Component
&lt;/h3&gt;

&lt;p&gt;This is the headline addition. &lt;code&gt;KnowledgeEngine&lt;/code&gt; replaces the old &lt;code&gt;KnowledgeRetriever&lt;/code&gt; and takes ownership of the full knowledge base lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document Ingestion&lt;/strong&gt;: The complete pipeline from file parsing to vector indexing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Retrieval&lt;/strong&gt;: Returning relevant chunks at query time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document Deletion&lt;/strong&gt;: Cleaning up documents and their associated vector data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lifecycle Hooks&lt;/strong&gt;: Callbacks when knowledge bases are created or deleted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A KnowledgeEngine plugin has full control over indexing and retrieval strategies — not just retrieval.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F27q92xrvvpsoebl1bjmk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F27q92xrvvpsoebl1bjmk.png" alt="Knowledge Engine plugins in the Marketplace" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Parser Component
&lt;/h3&gt;

&lt;p&gt;Document parsing has been extracted into its own plugin component type. A Parser converts binary files (PDF, Word, Markdown, etc.) into structured text, which is then handed to the RAG engine for chunking and indexing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The data flow:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9gys34d96s92dql6ac9h.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9gys34d96s92dql6ac9h.png" alt="Data flow: Parser → KnowledgeEngine" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a RAG engine declares &lt;code&gt;DOC_PARSING&lt;/code&gt; capability, it can handle parsing internally and skip the external Parser.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Host RAG API
&lt;/h3&gt;

&lt;p&gt;LangBot's core no longer executes RAG operations directly, but it still provides essential infrastructure through &lt;code&gt;RAGRuntimeService&lt;/code&gt;, accessible to plugins via RPC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Embedding invocation&lt;/strong&gt;: &lt;code&gt;invoke_embedding()&lt;/code&gt; — plugins don't need to manage model connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector database operations&lt;/strong&gt;: &lt;code&gt;vector_upsert()&lt;/code&gt; / &lt;code&gt;vector_search()&lt;/code&gt; / &lt;code&gt;vector_delete()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File access&lt;/strong&gt;: &lt;code&gt;get_knowledge_file_stream()&lt;/code&gt; — read raw files from storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means plugins can focus on RAG strategy (chunking algorithms, retrieval logic, re-ranking) while the host handles the "heavy" operations like vector storage and embedding models.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. KnowledgeRetriever Deprecated
&lt;/h3&gt;

&lt;p&gt;The old &lt;code&gt;KnowledgeRetriever&lt;/code&gt; component has been removed. If you had external knowledge base plugins, they'll need to migrate to &lt;code&gt;KnowledgeEngine&lt;/code&gt;. The good news: the new API is cleaner and migration is straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a RAG Engine Plugin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scaffold the Component
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lbp comp KnowledgeEngine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates the directory structure:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9viykt7hf942aw3zg9bh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9viykt7hf942aw3zg9bh.png" alt="Plugin directory structure" width="799" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Define Configuration Schemas
&lt;/h3&gt;

&lt;p&gt;The YAML manifest defines two configuration schemas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;creation_schema&lt;/code&gt;&lt;/strong&gt;: Parameters filled when creating a knowledge base (e.g., chunk size, embedding model)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;retrieval_schema&lt;/code&gt;&lt;/strong&gt;: Parameters adjustable at retrieval time (e.g., score threshold, top-K)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;creation_schema&lt;/span&gt;&lt;span class="pi"&gt;:&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;chunk_size&lt;/span&gt;
      &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;en_US&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Chunk Size&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&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;chunk_overlap&lt;/span&gt;
      &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;en_US&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Chunk Overlap&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;
  &lt;span class="na"&gt;retrieval_schema&lt;/span&gt;&lt;span class="pi"&gt;:&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;score_threshold&lt;/span&gt;
      &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;en_US&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Score Threshold&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;float&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LangBot &lt;strong&gt;dynamically renders&lt;/strong&gt; creation and retrieval forms based on these schemas — different engines show different configuration fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declare Capabilities
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SimpleRag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KnowledgeEngine&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_capabilities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&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="n"&gt;KnowledgeEngineCapability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DOC_INGESTION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# Supports document upload
&lt;/span&gt;            &lt;span class="c1"&gt;# KnowledgeEngineCapability.DOC_PARSING,   # Optional: built-in parsing
&lt;/span&gt;        &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOC_INGESTION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supports document upload and processing. UI shows "Documents" tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOC_PARSING&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supports built-in document parsing. Without this, an external Parser plugin is required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Implement Core Methods
&lt;/h3&gt;

&lt;p&gt;The three essential methods:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document Ingestion:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ingest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IngestionContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;IngestionResult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Get file content (or use Parser's pre-parsed result)
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parsed_content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parsed_content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;file_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_knowledge_file_stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;storage_path&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file_bytes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Chunk the text
&lt;/span&gt;    &lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_split_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Call host embedding model
&lt;/span&gt;    &lt;span class="n"&gt;vectors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_embedding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;embedding_model_uuid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chunks&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Write to host vector database
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vector_upsert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;collection_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vectors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;IngestionResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DocumentStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COMPLETED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;chunks_created&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunks&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;strong&gt;Knowledge Retrieval:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RetrievalContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;RetrievalResponse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Generate query vector
&lt;/span&gt;    &lt;span class="n"&gt;query_vectors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_embedding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;embedding_model_uuid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Vector search
&lt;/span&gt;    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vector_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;collection_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query_vectors&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="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Convert and return
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;RetrievalResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total_found&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Document Deletion:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kb_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;deleted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vector_delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;collection_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;kb_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;document_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;return&lt;/span&gt; &lt;span class="n"&gt;deleted&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bridging External Services
&lt;/h3&gt;

&lt;p&gt;If your goal is to bridge Dify, RAGFlow, FastGPT, or other external services rather than building a custom RAG pipeline, the implementation is even simpler — &lt;strong&gt;don't declare &lt;code&gt;DOC_INGESTION&lt;/code&gt; capability&lt;/strong&gt; and only implement &lt;code&gt;retrieve&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DifyRAGEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KnowledgeEngine&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_capabilities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&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="c1"&gt;# No document upload — managed externally
&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RetrievalContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;RetrievalResponse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Call Dify/RAGFlow/FastGPT retrieval API
&lt;/span&gt;        &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The knowledge base won't show a "Documents" tab — all content management happens in the external service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a Parser Plugin
&lt;/h2&gt;

&lt;p&gt;Parser development is even more concise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lbp comp Parser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Declare supported MIME types in the manifest:&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;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;supported_mime_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;application/pdf&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;application/vnd.openxmlformats-officedocument.wordprocessingml.document&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implement the &lt;code&gt;parse&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PdfParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Parser&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ParseContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ParseResult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# context.file_content: raw file bytes
&lt;/span&gt;        &lt;span class="c1"&gt;# context.mime_type: detected MIME type
&lt;/span&gt;        &lt;span class="c1"&gt;# context.filename: original filename
&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_text_from_pdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;ParseResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;sections&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="nc"&gt;TextSection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;page_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;heading&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Page &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page_text&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pages&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;Parsers also support &lt;strong&gt;cross-plugin invocation&lt;/strong&gt; — a RAG engine plugin can call another plugin's Parser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_parser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;plugin_author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;author_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;plugin_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plugin_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;storage_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;storage_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&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;h2&gt;
  
  
  Upgrade Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge bases created in previous versions are &lt;strong&gt;automatically migrated&lt;/strong&gt;. After updating, visit the Knowledge Base page to verify.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;KnowledgeRetriever&lt;/code&gt; component is deprecated. Existing plugins need to migrate to &lt;code&gt;KnowledgeEngine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Browse the &lt;a href="https://space.langbot.app/market?category=KnowledgeEngine" rel="noopener noreferrer"&gt;Plugin Marketplace&lt;/a&gt; for available RAG engine plugins.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;v4.9.0's knowledge base refactoring is the latest step in LangBot's plugin-first evolution. From event handlers and tools in v4.0, to knowledge retrievers, to now full RAG engines and parsers — LangBot's core capabilities are progressively moving from "built-in" to "pluggable."&lt;/p&gt;

&lt;p&gt;The endgame: &lt;strong&gt;LangBot's core provides pipeline orchestration and infrastructure; all business capabilities are plugin-driven.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Custom chunking strategy? Write a KnowledgeEngine plugin. PDF parsing? Write a Parser plugin. Bridge your company's internal knowledge service? Also a plugin.&lt;/p&gt;

&lt;p&gt;Knowledge, without borders.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot/releases/tag/v4.9.0" rel="noopener noreferrer"&gt;v4.9.0 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app/en/plugin/dev/components/knowledge-engine" rel="noopener noreferrer"&gt;KnowledgeEngine Development Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app/en/plugin/dev/components/parser" rel="noopener noreferrer"&gt;Parser Development Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://space.langbot.app/market" rel="noopener noreferrer"&gt;Plugin Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://space.langbot.app/cloud" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://langbot.app/en/blog/langbot-v490-rag-plugin-architecture" rel="noopener noreferrer"&gt;the LangBot Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>database</category>
    </item>
    <item>
      <title>Your AI Agent Just Got a Terminal: Inside LangBot’s Sandbox &amp; Skills</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 03:23:38 +0000</pubDate>
      <link>https://dev.to/rockchinq/your-ai-agent-just-got-a-terminal-inside-langbots-sandbox-skills-395c</link>
      <guid>https://dev.to/rockchinq/your-ai-agent-just-got-a-terminal-inside-langbots-sandbox-skills-395c</guid>
      <description>&lt;p&gt;LangBot v4.10.0 is our biggest Agent update yet. It ships two features that point in the same direction — &lt;strong&gt;letting the built-in Agent work like a real developer&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox&lt;/strong&gt;: the Agent now runs in a genuinely isolated environment where it can execute commands and work with files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt;: the Agent can load specialized know-how on demand, instead of cramming everything into its context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both capabilities were led by community contributor &lt;a href="https://github.com/huanghuoguoguo" rel="noopener noreferrer"&gt;@huanghuoguoguo&lt;/a&gt;. Let's dig in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;New to LangBot?&lt;/strong&gt; &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot&lt;/a&gt; is an open-source LLM bot platform (15k+ GitHub stars) that lets you deploy AI chatbots across &lt;strong&gt;Discord, Telegram, WeChat (个人微信 / 企业微信), Slack, Lark (Feishu), DingTalk, QQ&lt;/strong&gt; and more — all from a single instance. It connects 20+ large language models (OpenAI GPT, Anthropic Claude, Google Gemini, DeepSeek, and others) to 13+ messaging platforms, with built-in Agent, RAG knowledge bases, MCP support, and a plugin ecosystem. You can self-host it with one Docker command or run it managed on &lt;a href="https://space.langbot.app/cloud" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📦 Sandbox: a real workspace for your Agent
&lt;/h2&gt;

&lt;p&gt;Until now, LangBot's built-in Agent could only call predefined tools. It couldn't "open a terminal and run a command," nor "write an intermediate result to a file and read it back later" — which is exactly what human developers do all day.&lt;/p&gt;

&lt;p&gt;v4.10.0 introduces the new &lt;strong&gt;Box Runtime&lt;/strong&gt;. It gives the Agent an isolated sandbox environment with six native tools built in:&lt;/p&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exec&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run shell commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read file contents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;write&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;edit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make targeted edits to files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;glob&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find files by pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search inside file contents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;With this toolkit, the Agent can work like a developer: run a script, save the output to a file, read it back to analyze, and post-process the result. All of it happens inside an isolated environment that never touches the host.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1az1btx9nj08nlknc331.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1az1btx9nj08nlknc331.png" alt="LangBot sandbox in action" width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pluggable backends
&lt;/h3&gt;

&lt;p&gt;The sandbox's execution backend is &lt;strong&gt;pluggable&lt;/strong&gt;, and LangBot selects one automatically based on your deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt;: spins up a dedicated &lt;code&gt;langbot_box&lt;/code&gt; container that talks to the main process over WebSocket. Great for containerized deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nsjail&lt;/strong&gt;: lightweight isolation based on Linux namespaces, no extra container needed. Great for bare-metal or single-container setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E2B&lt;/strong&gt;: cloud sandbox that runs execution in a remote isolated environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't have to pick manually — &lt;code&gt;box.enabled&lt;/code&gt; is the master switch. Once on, LangBot probes for the most suitable backend and degrades gracefully if probing fails.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqf0cetbvwxn3u1eki7c0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqf0cetbvwxn3u1eki7c0.png" alt="Sandbox native tools" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  It also hosts MCP Servers
&lt;/h3&gt;

&lt;p&gt;Beyond native tools, the Box Runtime takes on another important job: &lt;strong&gt;hosting stdio-mode MCP Servers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Previously, stdio-mode MCP Servers had to be spawned as subprocesses directly inside the main process — neither safe nor easy to manage. Now they all run inside the sandbox, sharing the same isolation boundary as the Agent's execution environment. &lt;code&gt;http&lt;/code&gt; / &lt;code&gt;sse&lt;/code&gt; mode MCP is unaffected and works as before.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Skills: know-how, loaded on demand
&lt;/h2&gt;

&lt;p&gt;The second big update is &lt;strong&gt;Skills&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As the Agent's capabilities grow, an old problem surfaces: &lt;strong&gt;the context window is finite&lt;/strong&gt;. If you stuff every possible instruction, procedure, and reference doc into the system prompt, the context fills up fast — and most of it is irrelevant to the task at hand.&lt;/p&gt;

&lt;p&gt;The design idea behind Skills is simple: &lt;strong&gt;keep the table of contents in view, and open the book only when you need it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Skill is an &lt;strong&gt;on-demand instruction pack&lt;/strong&gt; containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A prompt&lt;/strong&gt;: tells the Agent what the skill does and when to use it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A procedure&lt;/strong&gt;: the steps to accomplish a class of tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scripts&lt;/strong&gt;: ready-to-run helper scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference files&lt;/strong&gt;: API docs, templates, examples, and so on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default the Agent only sees a &lt;strong&gt;list of available skills&lt;/strong&gt; (name + summary), which costs almost nothing in context. When it decides a task needs a particular skill, it pulls the full content just in time via the &lt;code&gt;activate&lt;/code&gt; action.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3ngciweyhv88s8a37c4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3ngciweyhv88s8a37c4.png" alt="LangBot Skills system" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benefits are clear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lean context&lt;/strong&gt;: irrelevant skill content never takes up the window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible capabilities&lt;/strong&gt;: want to teach the Agent a new trick? Write a skill pack — no core code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant effect&lt;/strong&gt;: skills load dynamically during execution, no restart required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you've used Claude's Skills or a similar mechanism, this pattern will feel familiar — it decouples "what the Agent knows" from "what the Agent needs right now."&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Shipped early across 4.9.x
&lt;/h2&gt;

&lt;p&gt;These were planned for v4.10.0 but shipped early in the 4.9.x line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plugin Extension Pages&lt;/strong&gt;: plugins can render custom UI via iframe + a Page SDK (&lt;a href="https://github.com/TyperBody" rel="noopener noreferrer"&gt;@TyperBody&lt;/a&gt;, #2107)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: feedback linked to message IDs, plus feedback export (&lt;a href="https://github.com/6mvp6" rel="noopener noreferrer"&gt;@6mvp6&lt;/a&gt;, #2120)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security hardening&lt;/strong&gt;: path-traversal fixes and removal of an authenticated RCE endpoint (&lt;a href="https://github.com/sebastiondev" rel="noopener noreferrer"&gt;@sebastiondev&lt;/a&gt;, #2087 / #2178)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Getting started
&lt;/h2&gt;

&lt;p&gt;The sandbox needs an execution backend, depending on how you deploy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt;: run &lt;code&gt;docker compose --profile all up&lt;/code&gt;, which also launches the &lt;code&gt;langbot_box&lt;/code&gt; container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual / &lt;code&gt;uvx&lt;/code&gt;&lt;/strong&gt;: runs as a stdio subprocess automatically, nothing to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangBot Cloud&lt;/strong&gt;: ready out of the box — the sandbox is already set up for you, nothing to install.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To turn the sandbox off, set &lt;code&gt;box.enabled: false&lt;/code&gt; — built-in tools, Skill create/edit, and stdio-mode MCP are all disabled; &lt;code&gt;http&lt;/code&gt; / &lt;code&gt;sse&lt;/code&gt; mode MCP is unaffected. See the &lt;a href="https://docs.langbot.app/en/usage/sandbox/readme" rel="noopener noreferrer"&gt;Sandbox docs&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;This release also upgrades the plugin SDK to &lt;strong&gt;&lt;code&gt;langbot-plugin 0.4.1&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;Sandbox and Skills are, at their core, answering the same question: &lt;strong&gt;how do we let an Agent handle genuinely complex, open-ended tasks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sandbox solves the "&lt;strong&gt;hands&lt;/strong&gt;" problem — giving the Agent the ability to execute and room to experiment. Skills solve the "&lt;strong&gt;brain&lt;/strong&gt;" problem — letting the Agent reach for the right knowledge at the right moment, without drowning in irrelevant information.&lt;/p&gt;

&lt;p&gt;The fastest way to try it is to spin up a managed instance on &lt;a href="https://space.langbot.app/cloud" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt;, where the sandbox is ready to go. You can also read the &lt;a href="https://github.com/langbot-app/LangBot/releases/tag/v4.10.0" rel="noopener noreferrer"&gt;full release notes&lt;/a&gt; for every change.&lt;/p&gt;

&lt;p&gt;Thank you to everyone building with LangBot. We'll keep making the cloud Agent experience more stable and more capable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://langbot.app/en/blog/langbot-v4100-sandbox-skills" rel="noopener noreferrer"&gt;the LangBot Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>security</category>
    </item>
    <item>
      <title>Why We’re Building LangBot: The Open-Source AI Bot Layer for Every Chat App</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 26 Aug 2026 03:22:00 +0000</pubDate>
      <link>https://dev.to/rockchinq/why-were-building-langbot-the-open-source-ai-bot-layer-for-every-chat-app-1jg4</link>
      <guid>https://dev.to/rockchinq/why-were-building-langbot-the-open-source-ai-bot-layer-for-every-chat-app-1jg4</guid>
      <description>&lt;p&gt;We’re excited to launch the official LangBot blog — a place for practical guides, architecture deep dives, release notes, and lessons from building AI bots that live where teams already communicate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LangBot?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;LangBot&lt;/a&gt; is an open-source, LLM-native platform for building and operating AI bots across Discord, Telegram, Slack, WeChat, LINE, Lark, DingTalk, QQ, and more.&lt;/p&gt;

&lt;p&gt;Instead of rebuilding integrations for every chat platform, you can separate your system into three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bots&lt;/strong&gt; connect to messaging platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipelines&lt;/strong&gt; define prompts, agents, RAG, tools, and business logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models&lt;/strong&gt; connect GPT, Claude, Gemini, DeepSeek, Ollama, and other providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation lets you change a model without rewriting your Discord bot, or deploy one tested pipeline to several communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we’ll publish
&lt;/h2&gt;

&lt;p&gt;Expect four kinds of posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Release notes&lt;/strong&gt; with the engineering decisions behind each version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature deep dives&lt;/strong&gt; into Agents, RAG, MCP, plugins, and sandboxing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment guides&lt;/strong&gt; for self-hosted and managed environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field notes&lt;/strong&gt; about security, observability, and multi-platform operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;Star LangBot on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;Read the documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://space.langbot.app/cloud" rel="noopener noreferrer"&gt;Explore LangBot Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://langbot.app" rel="noopener noreferrer"&gt;Visit the LangBot website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building an AI assistant for a team, community, or customer channel, follow along. We’re just getting started.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://langbot.app/en/blog/welcome" rel="noopener noreferrer"&gt;the LangBot Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>The new LangBot Cloud is here — and multi-user Workspaces are now in open source</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Tue, 25 Aug 2026 17:10:10 +0000</pubDate>
      <link>https://dev.to/rockchinq/the-new-langbot-cloud-is-here-and-multi-user-workspaces-are-now-in-open-source-2i1</link>
      <guid>https://dev.to/rockchinq/the-new-langbot-cloud-is-here-and-multi-user-workspaces-are-now-in-open-source-2i1</guid>
      <description>&lt;p&gt;The new &lt;a href="https://cloud.langbot.app" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt; is live. This release tackles a practical question: when a team uses LangBot together, who can access which resources?&lt;/p&gt;

&lt;p&gt;The same multi-user foundation is now available in the open-source edition. Cloud and self-hosted LangBot still have different operating models, but they share the same basic approach to members, invitations, and permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LangBot?
&lt;/h2&gt;

&lt;p&gt;LangBot is an open-source platform for building and operating AI bots across messaging apps. A single dashboard manages bots, message pipelines, knowledge bases, models, and extensions, then connects them to Discord, Telegram, Slack, LINE, QQ, WeChat, WeCom, Lark, DingTalk, and KOOK. LangBot also supports Satori and Matrix; Matrix bridges can extend a deployment to networks such as WhatsApp, Signal, Messenger, Mattermost, Google Chat, IRC, XMPP, and Zulip.&lt;/p&gt;

&lt;p&gt;The model layer is provider-neutral. LangBot connects to OpenAI, Anthropic Claude, DeepSeek, Google Gemini, xAI Grok, Moonshot Kimi, and Zhipu GLM, while Ollama and LM Studio cover local models. Gateway options include SiliconFlow, Aliyun Bailian, Volcengine Ark, ModelScope, and GiteeAI. Existing agent workflows can also be connected through Dify and MCP.&lt;/p&gt;

&lt;p&gt;A team can therefore run AI assistants on several messaging platforms from one place and choose a hosted model, a local model, or an existing agent workflow for each use case.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4i1irklqv0ew8d4aasrw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4i1irklqv0ew8d4aasrw.png" alt="The new LangBot Cloud sign-in page" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud: start in your own Workspace
&lt;/h2&gt;

&lt;p&gt;LangBot Cloud now uses LangBot Account for sign-in. New users start with a personal Workspace and can accept invitations to join team Workspaces. If an account belongs to several Workspaces, the current one can be switched from the interface.&lt;/p&gt;

&lt;p&gt;Bots, pipelines, models, knowledge bases, and extensions belong to the active Workspace. Switching Workspaces does not mix one team's configuration or data with another's.&lt;/p&gt;

&lt;p&gt;Cloud continues to provide the hosting, updates, and runtime environment. It is the simpler option for teams that want to configure a bot without maintaining a server first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Invite people instead of sharing an admin account
&lt;/h2&gt;

&lt;p&gt;An Owner, or another role with member-management permission, can send a one-time invitation. The recipient accepts it with their own account and enters the Workspace with the assigned role.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe5qzcfm2ee9t81p7a87w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe5qzcfm2ee9t81p7a87w.png" alt="LangBot Cloud invitation page with the Workspace name anonymized" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is a better long-term setup than sharing one administrator password: each person has an identity, and access can match the work they actually do.&lt;/p&gt;

&lt;p&gt;Five fixed roles are available today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Owner&lt;/strong&gt; — owns the Workspace and its highest-level membership controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin&lt;/strong&gt; — manages members and most Workspace settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer&lt;/strong&gt; — configures bots, pipelines, models, and extensions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operator&lt;/strong&gt; — handles day-to-day operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Viewer&lt;/strong&gt; — read-only access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open source: one instance, one Workspace, multiple users
&lt;/h2&gt;

&lt;p&gt;The self-hosted edition is not turning into a multi-Workspace SaaS. One LangBot instance still has one Workspace, but that Workspace can now include several users.&lt;/p&gt;

&lt;p&gt;The account created during initialization becomes the Owner. It can invite other people later. When SMTP is configured, LangBot can deliver the invitation by email; otherwise it shows a one-time link that can be shared through a trusted channel.&lt;/p&gt;

&lt;p&gt;Members still use the familiar LangBot dashboard. The difference is that resource access is checked against both the Workspace and the member's role, rather than treating every signed-in user as a full administrator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which edition should you use?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;LangBot Cloud&lt;/th&gt;
&lt;th&gt;Open-source self-hosted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Hosted and maintained by LangBot&lt;/td&gt;
&lt;td&gt;You operate the server and data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workspaces&lt;/td&gt;
&lt;td&gt;Own or join multiple&lt;/td&gt;
&lt;td&gt;One per instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Members and invitations&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed role-based access&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Getting a team running quickly&lt;/td&gt;
&lt;td&gt;Private deployment and infrastructure control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To start with the hosted edition, visit &lt;a href="https://cloud.langbot.app" rel="noopener noreferrer"&gt;cloud.langbot.app&lt;/a&gt;. To keep the runtime and data on your own infrastructure, deploy LangBot from &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Preview your coding agents' work without painful CIs or servers; just paste a prompt</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Wed, 06 May 2026 05:59:01 +0000</pubDate>
      <link>https://dev.to/rockchinq/preview-your-coding-agents-work-without-painful-cis-or-servers-just-paste-a-prompt-174m</link>
      <guid>https://dev.to/rockchinq/preview-your-coding-agents-work-without-painful-cis-or-servers-just-paste-a-prompt-174m</guid>
      <description>&lt;p&gt;In recent months, I felt terribly painful about deploying my work-in-progress code to a public server.&lt;/p&gt;

&lt;p&gt;Imagine a scene where you need to go to the gym, but you don't want to waste the subscription budget from Claude or Codex, so you set up Happy or Paseo. They have done really well at remote controlling coding agents, but there is still a gap between the formative work produced by coding agents and a sharable live environment.&lt;/p&gt;

&lt;p&gt;For the current workflow, you need to buy a server — probably from Hetzner or DigitalOcean — as the "staging server". Then you set up CI to build your app as one or several Docker images, deploy those images to the server, configure the OS, GitHub secrets, Docker Compose, DNS, Cloudflare, NGINX...&lt;/p&gt;

&lt;p&gt;All this just to show someone a work-in-progress page.&lt;/p&gt;

&lt;p&gt;So I built a new product named &lt;a href="https://prevu.cloud" rel="noopener noreferrer"&gt;&lt;strong&gt;Prevu&lt;/strong&gt;&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%2Ff0sbzc2qfxho5x67kwzz.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%2Ff0sbzc2qfxho5x67kwzz.png" alt="A simple diagram showing Coding Agent to Prevu to Public Preview URL" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Prevu?
&lt;/h2&gt;

&lt;p&gt;Prevu provides an agent-friendly experience for previewing your work-in-progress agent work.&lt;/p&gt;

&lt;p&gt;It is not another CI platform, and it is not another PaaS dashboard asking you to write YAML before seeing anything.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your coding agent should be able to say: “I need a preview environment.”&lt;/p&gt;

&lt;p&gt;And Prevu should answer: “Here it is.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With Prevu, every project can get an isolated, disposable, public preview environment. Your coding agent can start the app, expose the right port, inspect logs, and return a sharable URL.&lt;/p&gt;

&lt;p&gt;No CI setup.&lt;br&gt;&lt;br&gt;
No Docker registry.&lt;br&gt;&lt;br&gt;
No staging server.&lt;br&gt;&lt;br&gt;
No DNS handwork.&lt;/p&gt;

&lt;p&gt;Just a prompt.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Coding agents are becoming very good at editing code. They can read issues, modify files, run tests, and explain what changed.&lt;/p&gt;

&lt;p&gt;But software is not only text. Software is behavior.&lt;/p&gt;

&lt;p&gt;A frontend change needs to be seen.&lt;br&gt;&lt;br&gt;
A dashboard needs to be clicked.&lt;br&gt;&lt;br&gt;
A form needs to be submitted.&lt;br&gt;&lt;br&gt;
A teammate needs a link, not a patch diff.&lt;/p&gt;

&lt;p&gt;Today, agents often stop right before that moment. They produce code, but not a live artifact.&lt;/p&gt;

&lt;p&gt;Prevu tries to close that loop.&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%2Fexmlt37xj9t6t8heyg4i.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%2Fexmlt37xj9t6t8heyg4i.png" alt="Screenshot of a Prevu environment page with a preview URL and running service" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trying to preview a WIP branch of &lt;a href="https://langbot.app" rel="noopener noreferrer"&gt;LangBot&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%2Fpiadv252hznbo9iojutx.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%2Fpiadv252hznbo9iojutx.png" alt="Exposing a port to a url" width="800" height="235"&gt;&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%2Fwmect28t104w6n2por4a.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%2Fwmect28t104w6n2por4a.png" alt="Screenshot of LangBot running on a Prevu preview URL" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The workflow I want
&lt;/h2&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Buy a server&lt;/li&gt;
&lt;li&gt;Configure CI&lt;/li&gt;
&lt;li&gt;Push Docker images&lt;/li&gt;
&lt;li&gt;Write deployment scripts&lt;/li&gt;
&lt;li&gt;Configure DNS and reverse proxy&lt;/li&gt;
&lt;li&gt;Debug everything&lt;/li&gt;
&lt;li&gt;Finally share a link&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I want:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask your agent&lt;/li&gt;
&lt;li&gt;Get a preview link&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy this project to Prevu and give me a preview URL.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the agent can create or reuse a Prevu environment, run the project, expose the port, and give you something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://your-preview.prevu.page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Prevu is for
&lt;/h2&gt;

&lt;p&gt;Prevu is not trying to replace production deployment platforms like Vercel, Railway, Fly.io, or Kubernetes.&lt;/p&gt;

&lt;p&gt;It is for the stage before production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;before the PR is merged&lt;/li&gt;
&lt;li&gt;before CI is stable&lt;/li&gt;
&lt;li&gt;before the idea is validated&lt;/li&gt;
&lt;li&gt;before you want to polish deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;landing pages&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;SaaS prototypes&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;documentation sites&lt;/li&gt;
&lt;li&gt;full-stack experiments&lt;/li&gt;
&lt;li&gt;AI-generated app previews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, Prevu is for the messy middle between “the agent wrote some code” and “this is ready to ship.”&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%2F3wz1hr1j2rhblucm8rkc.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%2F3wz1hr1j2rhblucm8rkc.png" alt="Before/after comparison — traditional staging workflow vs Prevu workflow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent-first, not dashboard-first
&lt;/h2&gt;

&lt;p&gt;One design choice I care about a lot: Prevu is built to be operated by coding agents.&lt;/p&gt;

&lt;p&gt;Of course, there is a dashboard for humans. But the core experience should work through agents like Claude Code, Codex, Cursor agents, OpenClaw, or any other coding assistant.&lt;/p&gt;

&lt;p&gt;The best developer tools in the agent era may not be the ones with the most buttons. They may be the ones agents can use reliably on your behalf.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I built Prevu because coding agents made me faster at writing software, but not fast enough at showing it.&lt;/p&gt;

&lt;p&gt;Every time I wanted to share something half-finished, I had to leave the creative flow and become an infrastructure engineer again.&lt;/p&gt;

&lt;p&gt;That felt wrong.&lt;/p&gt;

&lt;p&gt;If agents are going to become a real part of software development, they need a place to run their work — not just edit files.&lt;/p&gt;

&lt;p&gt;Prevu is my attempt to build that missing layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Prevu is still early, but the core idea is already useful:&lt;/p&gt;

&lt;p&gt;Give your coding agent a place to preview its work.&lt;/p&gt;

&lt;p&gt;Less CI debugging.&lt;br&gt;&lt;br&gt;
Less server babysitting.&lt;br&gt;&lt;br&gt;
Less “works on my machine.”&lt;/p&gt;

&lt;p&gt;More links.&lt;br&gt;&lt;br&gt;
More demos.&lt;br&gt;&lt;br&gt;
More shipping.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prevu.cloud" rel="noopener noreferrer"&gt;https://prevu.cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, I’d love to hear what breaks, what feels magical, and what your coding agent tries to do with it.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>staging</category>
      <category>programming</category>
    </item>
    <item>
      <title>Open Source AI Agent for Remote PC Control: The OpenClaw Alternative Built Into LangBot</title>
      <dc:creator>Rock</dc:creator>
      <pubDate>Sun, 15 Mar 2026 12:23:34 +0000</pubDate>
      <link>https://dev.to/rockchinq/open-source-ai-agent-for-remote-pc-control-the-openclaw-alternative-built-into-langbot-2loo</link>
      <guid>https://dev.to/rockchinq/open-source-ai-agent-for-remote-pc-control-the-openclaw-alternative-built-into-langbot-2loo</guid>
      <description>&lt;h1&gt;
  
  
  Open Source AI Agent for Remote PC Control — The OpenClaw Alternative Built Into LangBot
&lt;/h1&gt;




&lt;h2&gt;
  
  
  ✨ What is LangTARS?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LangTARS&lt;/strong&gt; is a powerful &lt;strong&gt;OpenClaw alternative&lt;/strong&gt; and native plugin for LangBot, inspired by the loyal and reliable robot TARS from the movie &lt;em&gt;Interstellar&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;As a versatile &lt;strong&gt;AI agent&lt;/strong&gt; for &lt;strong&gt;remote computer control&lt;/strong&gt;, LangTARS allows you to remotely command your &lt;strong&gt;Mac, Windows, or Linux&lt;/strong&gt; machine directly through your favorite messaging apps like &lt;strong&gt;Telegram, Discord, DingTalk, and WeChat&lt;/strong&gt;! If you've been looking for an &lt;strong&gt;OpenClaw-like&lt;/strong&gt; computer use agent that integrates seamlessly into your existing &lt;strong&gt;chatbot framework&lt;/strong&gt;, LangTARS is the perfect solution.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Deploy LangBot, and you can experience LangTARS instantly!&lt;/strong&gt; No extra standalone agent installation needed—just get it with one click from the plugin marketplace.&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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Ftars.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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Ftars.gif" alt="LangTARS Demo"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 The LangBot Ecosystem
&lt;/h2&gt;

&lt;p&gt;LangTARS is just ONE plugin in the massive LangBot ecosystem. &lt;strong&gt;LangBot&lt;/strong&gt; is a leading &lt;strong&gt;open source chatbot&lt;/strong&gt; framework designed for connecting LLMs to messaging platforms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-platform bot integration&lt;/strong&gt;: Native support for Telegram, Discord, WeChat, DingTalk, Lark, LINE, Slack, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-model LLM chatbot&lt;/strong&gt;: Works flawlessly with OpenAI, Claude, Gemini, DeepSeek, and local models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Plugin Marketplace&lt;/strong&gt;: Access over 30+ plugins for endless functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Features&lt;/strong&gt;: Pipeline-based message processing, RAG support, and multi-agent workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted AI&lt;/strong&gt;: Total control over your data and deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Workflow Integrations&lt;/strong&gt;: Connect LangBot to platforms like &lt;strong&gt;Dify&lt;/strong&gt;, &lt;strong&gt;n8n&lt;/strong&gt;, &lt;strong&gt;Langflow&lt;/strong&gt;, and &lt;strong&gt;Coze&lt;/strong&gt;. LangBot can act as the messaging frontend for your complex AI workflows, meaning LangTARS + Dify/n8n = powerful automation!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get started with LangBot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Easiest&lt;/strong&gt;: &lt;a href="https://cloud.langbot.app" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Self-host: &lt;code&gt;uvx langbot@latest&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;docs.langbot.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/langbot-app/LangBot" rel="noopener noreferrer"&gt;github.com/langbot-app/LangBot&lt;/a&gt; (15k+ stars)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 What Can It Do?
&lt;/h2&gt;

&lt;p&gt;As a comprehensive &lt;strong&gt;automation tool&lt;/strong&gt;, just send a message, and the AI will handle your &lt;strong&gt;task automation&lt;/strong&gt; and &lt;strong&gt;browser automation&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You Say&lt;/th&gt;
&lt;th&gt;AI Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars open Reddit in Chrome, post a thread with the title "Hello from LangTARS" and say hi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;🌐 Automatically controls Chrome to open Reddit and publish a post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars organize my desktop files&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;📁 Automatically categorizes and moves files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars open the browser and search for today's AI news&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;🌐 Opens a browser, searches the web, and summarizes the news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars create a meeting note for our marketing sync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;📝 Automatically creates a markdown note file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars check system memory and CPU&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;💻 Uses MCP tools to get computer status&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fusage-example.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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fusage-example.png" alt="Usage Example"&gt;&lt;/a&gt;&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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fplanner-mode.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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fplanner-mode.png" alt="Plan Mode"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Why Choose LangTARS?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1️⃣ LangBot Native Plugin, Out of the Box
&lt;/h3&gt;

&lt;p&gt;Instead of deploying a complex standalone agent, you can easily &lt;strong&gt;deploy AI bot&lt;/strong&gt; capabilities right where you already chat.&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;# Deploy LangBot with one command&lt;/span&gt;
uvx langbot@latest

&lt;span class="c"&gt;# Install LangTARS from the plugin market, configure your LLM, and start using!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;No complex configuration, no extra deployment. LangBot users can experience OpenClaw-style computer control directly!&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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Finstall-flow.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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Finstall-flow.png" alt="Installation Flow"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ Intelligent Task Planning, Autonomous Execution
&lt;/h3&gt;

&lt;p&gt;Powered by an AI planning engine based on the &lt;strong&gt;ReAct agent&lt;/strong&gt; loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Command → Understand Needs → Make a Plan → Execute Step-by-Step → Feedback Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI assistant thinks like a human and automatically breaks down complex tasks using integrated &lt;strong&gt;MCP tools&lt;/strong&gt;!&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ Multi-Browser Support for Web Automation
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Playwright (Headless)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chrome&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  4️⃣ Security-First Design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🚫 &lt;strong&gt;Dangerous Command Interception&lt;/strong&gt; — Automatically blocks commands like &lt;code&gt;rm -rf /&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📂 &lt;strong&gt;Workspace Isolation&lt;/strong&gt; — Restricts file operations to safe directories&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Command Whitelist&lt;/strong&gt; — Configurable allowed commands&lt;/li&gt;
&lt;li&gt;👤 &lt;strong&gt;User Access Control&lt;/strong&gt; — Restricts usage to specific authorized users&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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fsecurity.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%2Fpub-c7c365991905453481dc9f8834619665.r2.dev%2Flangtars%2Fsecurity.png" alt="Security Features"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📱 Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Deploy LangBot
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;🚀 &lt;strong&gt;Fastest way to start:&lt;/strong&gt; Use &lt;a href="https://cloud.langbot.app" rel="noopener noreferrer"&gt;LangBot Cloud&lt;/a&gt; — deploy your LangBot instance in one click, no server needed! Install LangTARS from the plugin marketplace and start controlling your computer immediately.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Alternative for power users (Self-hosted):&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx langbot@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure Chat Platform
&lt;/h3&gt;

&lt;p&gt;Follow the documentation to configure your &lt;strong&gt;Telegram bot&lt;/strong&gt;, &lt;strong&gt;WeChat bot&lt;/strong&gt;, or &lt;strong&gt;Discord bot&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Install LangTARS
&lt;/h3&gt;

&lt;p&gt;Search for &lt;strong&gt;LangTARS&lt;/strong&gt; in the &lt;strong&gt;plugin marketplace&lt;/strong&gt; and install it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Start Chatting
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;!tars Hello, tell me what you can do
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;📱 &lt;strong&gt;Recommendation&lt;/strong&gt;: Use it on Telegram or Discord for the best interactive experience!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎮 Common Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars &amp;lt;Task Description&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute a task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars stop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stop the current task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars what&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Check execution status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reset the conversation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!tars help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show help&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🌟 Project Information
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Information&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/langbot-app/LangTARS" rel="noopener noreferrer"&gt;github.com/langbot-app/LangTARS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CC BY-NC-ND 4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platforms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;macOS / Windows / Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔗 Related Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📖 &lt;strong&gt;LangBot Documentation&lt;/strong&gt;: &lt;a href="https://docs.langbot.app" rel="noopener noreferrer"&gt;docs.langbot.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Issue Feedback&lt;/strong&gt;: &lt;a href="https://github.com/langbot-app/LangTARS/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;Support with a Star&lt;/strong&gt;: &lt;a href="https://github.com/langbot-app/LangTARS" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
