Botkibble
AI agents, LLMs, and crawlers have to wade through navigation bars, sidebars, ads, and comment forms to reach the content they want, and every element costs tokens. Cloudflare measured an 80% reduction in token usage when converting a blog post from HTML to Markdown (16,180 tokens down to 3,150). Botkibble adds a Markdown endpoint to every published post and page. Cloudflare offers Markdown for Agents at the CDN edge on Pro, Business, and Enterprise plans. Botkibble does the same thing (for free) at the origin, so it works on any host. GitHub Repository Three ways to request Markdown: .md suffix: append .md to any post or page URL (e.g. example.com/my-post.md) Query parameter: add ?format=markdown to any post or page URL Content negotiation: send Accept: text/markdown in the request header What’s in every response: Structured metadata header with title, date, categories, tags, word count, character count, and estimated token count (in YAML frontmatter format, readable by any AI agent) Clean Markdown converted from fully-rendered post HTML (shortcodes run, filters applied) Content-Type: text/markdown and Vary: Accept response headers Content-Signal header for AI signal declaration — defaults to ai-train=no, search=yes, ai-input=yes — see contentsignals.org X-Markdown-Tokens header with estimated token count Discovery via in the HTML head and Link HTTP header Automatic cache invalidation when a post is updated or deleted Performance: Botkibble writes Markdown to disk on the first request, then serves it as a static file. A built-in Fast-Path serves cached files during WordPress’s init hook, before the main database query runs. No extra configuration needed. Add a web server rewrite rule and Botkibble bypasses PHP entirely, serving .md files the same way a server would serve an image or CSS file: Method Avg. response time Standard HTML 0.97s Markdown (cold, first request) 0.95s Markdown (cached, PHP Fast-Path) 0.87s Markdown (Nginx/Apache direct) 0.11s Serving directly from disk is 88% faster than a full WordPress page load. See the Performance section below for Nginx and Apache configuration. Security: Drafts, private posts, and password-protected content return 403 Forbidden Rate limits cache-miss regenerations (20/min by default) to mitigate DoS abuse X-Robots-Tag: noindex keeps Markdown versions out of search results Link: rel="canonical" points search engines back to the HTML version Cache variants (optional): You can persist alternate cached representations by adding ?botkibble_variant=slim (or any other variant name). Variant caches are stored under: /wp-content/uploads/botkibble/_v/ / .md What it does NOT do: Expose drafts, private posts, or password-protected content Serve non-post/page content types by default Require any configuration. Activate and it works. Why Markdown? HTML is expensive for AI systems to process. Cloudflare measured an 80% reduction in token usage when converting a blog post from HTML to Markdown (16,180 tokens down to 3,150). Cloudflare now offers Markdown for Agents at the CDN edge via the Accept: text/markdown header, available on Pro, Business, and Enterprise plans. This plugin does the same thing at the origin, so it works on any host. It also adds .md suffix URLs, ?format=markdown query parameters, YAML frontmatter, static file caching, and server-level offloading. If you use Cloudflare, both share the same Accept: text/markdown header, Content-Signal headers, and X-Markdown-Tokens response headers. Cloudflare currently defaults to Content-Signal: ai-train=yes, search=yes, ai-input=yes with no way to change it. Botkibble defaults to ai-train=no and lets you override the full signal per site via the botkibble_content_signal filter. Performance & Static Offloading This plugin supports static file offloading by writing Markdown content to /wp-content/uploads/botkibble/. Nginx Configuration To bypass PHP entirely and have Nginx serve the files (including variants) directly: # Variants location ~* ^/(_v/[^/]+/.+)\.md$ { default_type text/markdown; try_files /wp-content/uploads/botkibble/$1.md /index.php?$args; } # Default location ~* ^/(.+)\.md$ { default_type text/markdown; try_files /wp-content/uploads/botkibble/$1.md /index.php?$args; } Apache (.htaccess) Add this to your .htaccess before the WordPress rules: RewriteEngine On # Variants RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/botkibble/_v/$1/$2.md -f RewriteRule ^_v/([^/]+)/(.+)\.md$ /wp-content/uploads/botkibble/_v/$1/$2.md [L,T=text/markdown] # Default RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/botkibble/$1.md -f RewriteRule ^(.*)\.md$ /wp-content/uploads/botkibble/$1.md [L,T=text/markdown] Even without these rules, the plugin uses a “Fast-Path” that serves cached files from PHP before the main database query is executed. Credits We thank Cristi Constantin (https://github.com/cristi-constantin) for contributing cache variants, URL and SEO improvements, and fixing important bugs.
Top keywords
- markdown24×3.18%
- md16×2.12%
- botkibble15×1.99%
- text8×1.06%
- text markdown8×1.06%
- uploads8×1.06%
- uploads botkibble8×1.06%
- wp-content8×1.06%
- wp-content uploads8×1.06%
- wp-content uploads botkibble8×1.06%
- content7×0.93%
- header7×0.93%
Sentifyd Avatar
This plugin allows you to quickly and easily add a Sentifyd AI-powered 3D avatar to your WordPress website. Simply install the plugin, enter your avatar API key and Avatar ID on the settings page, choose the Voice mode you want, and the Sentifyd avatar web component will be installed on your site. The admin page allows you to configure your avatar API Key, Avatar ID, Voice mode, branding, and other important attributes for the avatar. You can also restrict the avatar to logged-in users only. However, you need to sign up to sentifyd.io to create your avatar and train it. If you choose Real-time voice mode, the avatar you created in sentifyd.io must also be configured for realtime voice mode. Sentifyd.io empowers you to deploy intelligent, real-time 3D AI agents—fully animated avatars capable of natural, voice-driven conversations. These interactive 3D agents go beyond traditional chatbots by combining Retrieval-Augmented Generation (RAG), dynamic motion, and customizable tool integration. With Sentifyd, your 3D AI agents can: Understand and respond to user input in real time using natural voice and language. Express themselves through lifelike gestures, movement, and tone for an immersive user experience. Access and reason over your own content—such as manuals, FAQs, or internal documents—while maintaining strict privacy and security protocols. Connect with powerful tools like MCP servers and more, enabling task execution and contextual awareness. These agents can be easily embedded into your website or application, offering users a compelling, intelligent interface that feels truly alive. Get Started for Free Sign up and get up to 500 conversation minutes (Free Trial) Buy Conversation Minutes External Services This plugin relies on external third-party services provided by Sentifyd to function. By using this plugin, you acknowledge and agree to the use of these services. Sentifyd Frontend Service (frontend.sentifyd.io) What it does: Provides the JavaScript web component library that powers the 3D AI avatar interface displayed on your website. Data sent and received: The JavaScript file is loaded from https://frontend.sentifyd.io/sentifyd-bot/main.js in Standard voice mode or https://frontend.sentifyd.io/sentifyd-realtime/v1/main.js in Real-time voice mode whenever a page with the avatar is viewed. Service provider: Sentifyd.io Terms of Service | Privacy Policy Sentifyd Backend Service (serve.sentifyd.io) What it does: Handles avatar authentication, conversation processing, natural language understanding, voice synthesis, and AI-powered responses. Data sent and received: When the avatar widget initializes, avatar initialization data is received from the server. During each user interaction with the avatar, users input is sent to the server, and AI responses are received. Conversation data is processed in real-time. Session tokens are short-lived (typically expire within 1 hour). Conversation logs are retained for a short period (1 hour) to easily resume conversations. Service provider: Sentifyd.io Terms of Service | Privacy Policy Azure Speech Services (Microsoft Azure) What it does: Provides speech-to-text (STT) functionality, converting user voice input into text that the avatar can process. The avatar widget connects directly to Azure Speech Services from the user’s browser. Data sent and received: When a user clicks the microphone button and speaks to the avatar, user’s voice audio is sent directly from browser to Azure Speech Services. Short-lived speech authentication tokens (obtained from Sentifyd backend, typically expire within minutes). Service provider: Microsoft Corporation Terms of Service | Privacy Policy | Azure Speech Docs Localization This plugin admin panel is ready for translation and includes compiled translations for several languages. The avatar widget UI now supports multiple languages and the plugin will automatically set the widget’s ui-language attribute based on your WordPress site language (first two letters). If the detected language is one of: English (en), French (fr), German (de), Spanish (es), Arabic (ar), or Chinese (zh), the widget will use that language. Otherwise it will fall back to English. Text Domain: sentifyd-avatar Domain Path: /languages Included admin panel locales: English (US), German, French, Spanish, Chinese (Simplified), Arabic Widget UI auto-language support: en, fr, de, es, ar, zh (falls back to en when unsupported) Privacy This plugin embeds the Sentifyd avatar web component and stores session-scoped data in the visitor’s browser (sessionStorage). Data is cleared when the tab/window closes. Stored keys (examples; {avatar_id} is your avatar ID): – showChatbot_{avatar_id}: “true”/”false” — remembers open/closed state (UI preference). – authData_{id}: { token, refreshToken, region, avatarId } — short-lived tokens for this session only. – conversationData_{avatarId}: { conversationId, turnId } — maintains session context. No data is written to cookies or localStorage by the widget. Tokens are short-lived and not persisted across sessions.