{"id":386666,"date":"2026-10-26T03:32:32","date_gmt":"2026-10-26T03:32:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/primitives-for-ai\/"},"modified":"2026-10-26T03:25:00","modified_gmt":"2026-10-26T03:25:00","slug":"soflyy-primitives-for-ai","status":"publish","type":"plugin","link":"https:\/\/fa.wordpress.org\/plugins\/soflyy-primitives-for-ai\/","author":15966339,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1.3","requires":"6.9","requires_php":"8.2","requires_plugins":null,"header_name":"Soflyy Primitives for AI","header_author":"Soflyy","header_description":"Site building blocks your AI agent operates over MCP, through the WordPress Abilities API.","assets_banners_color":"","last_updated":"2026-10-26 03:25:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/soflyy.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":62,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"soflyydeploybot","date":"2026-10-26 03:25:00","revision":3765471}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[251511,2353,358,601,242115],"plugin_category":[42],"plugin_contributors":[153294],"plugin_business_model":[],"class_list":["post-386666","plugin","type-plugin","status-publish","hentry","plugin_tags-abilities","plugin_tags-ai","plugin_tags-contact-form","plugin_tags-forms","plugin_tags-mcp","plugin_category-contact-forms","plugin_contributors-louisreingold","plugin_committers-louisreingold","plugin_committers-soflyydeploybot"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/soflyy-primitives-for-ai.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Soflyy Primitives for AI is a modular plugin. Each module is a building block that an AI agent can operate end to end: create it, configure it, read its data, and manage it.<\/p>\n\n<p><strong>Agent-first.<\/strong> Every module exposes its functionality as abilities through the WordPress Abilities API (in core since WordPress 6.9). An agent connected to your site over MCP does the work; the admin screens are there for you to see what it built.<\/p>\n\n<p><strong>Bring your own connection.<\/strong> Primitives does not connect your agent to WordPress. Use any plugin that serves WordPress abilities over MCP \u2014 for example the official MCP Adapter, Novamira, or WPVibe. Its abilities show up there automatically. Abilities require an administrator account.<\/p>\n\n<h4>Module #1: Forms<\/h4>\n\n<p>Agents author a form as a JSON definition; Primitives renders it, validates and stores submissions, and sends notifications.<\/p>\n\n<ul>\n<li>Typed fields: text, textarea, email, URL, phone, number, date, select, radio, checkbox, checkboxes, hidden, file upload, and static HTML.<\/li>\n<li>Server-side validation of every rule, with structured errors.<\/li>\n<li>Conditional logic and multi-step forms.<\/li>\n<li>File uploads into a protected directory, downloadable only by administrators.<\/li>\n<li>Email notifications (through <code>wp_mail()<\/code>) and outgoing webhooks.<\/li>\n<li>Spam protection with a honeypot and a time trap. No third-party captcha.<\/li>\n<li>Semantic markup with stable <code>primitives-<\/code> class hooks and no visual styling, so the agent styles forms with your site's CSS.<\/li>\n<li>An admin screen to browse forms and submissions, export CSV, and enable, disable, or delete forms.<\/li>\n<\/ul>\n\n<p>Embed a form anywhere with its shortcode, for example <code>[primitives_form id=\"contact\"]<\/code>.<\/p>\n\n<p>Abilities:<\/p>\n\n<ul>\n<li><code>primitives\/forms-v1-upsert-form<\/code> \u2014 create a form, or replace one, from its definition.<\/li>\n<li><code>primitives\/forms-v1-get-form<\/code> \u2014 a form's definition, shortcode, and rendered markup.<\/li>\n<li><code>primitives\/forms-v1-list-forms<\/code> \u2014 all forms with their shortcodes and submission counts.<\/li>\n<li><code>primitives\/forms-v1-delete-form<\/code> \u2014 delete a form, optionally with its submissions.<\/li>\n<li><code>primitives\/forms-v1-list-submissions<\/code> \u2014 submissions, filtered by form and date, paginated.<\/li>\n<li><code>primitives\/forms-v1-get-submission<\/code> \u2014 one submission's values and file download links.<\/li>\n<li><code>primitives\/forms-v1-delete-submission<\/code> \u2014 delete one submission and its files.<\/li>\n<\/ul>\n\n<h4>Module #2: TBD<\/h4>\n\n<h3>Source code and building<\/h3>\n\n<p>The plugin ships its complete source code.<\/p>\n\n<p>The admin screens are React apps written in TypeScript. Each module keeps its source in <code>modules\/&lt;module&gt;\/ui\/src<\/code> and the compiled JavaScript and CSS that WordPress loads in <code>modules\/&lt;module&gt;\/ui\/dist<\/code>.<\/p>\n\n<p>To rebuild a module's admin screen (Node.js 22 or newer):<\/p>\n\n<ol>\n<li><code>cd modules\/forms-v1\/ui<\/code><\/li>\n<li><code>npm ci<\/code><\/li>\n<li><code>npm run build<\/code><\/li>\n<\/ol>\n\n<p>The build uses Vite with the configuration in <code>vite.config.ts<\/code>. <code>package.json<\/code> and <code>package-lock.json<\/code> pin every dependency, including the bundled React.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Soflyy Primitives for AI.<\/li>\n<li>Install a plugin that serves WordPress abilities over MCP, and connect your agent to it.<\/li>\n<li>Ask your agent to build a form. It will find the <code>primitives\/forms-v1-*<\/code> abilities.<\/li>\n<li>Paste the shortcode the agent returns into any page, or let the agent do it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20connect%20my%20ai%20agent%3F\"><h3>How do I connect my AI agent?<\/h3><\/dt>\n<dd><p>Primitives does not include an MCP server. Install any plugin that exposes WordPress abilities over MCP \u2014 such as the MCP Adapter, Novamira, or WPVibe \u2014 and connect your agent to it. Its abilities are marked for MCP and appear automatically.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20abilities%3F\"><h3>Who can use the abilities?<\/h3><\/dt>\n<dd><p>Only administrators (users with the <code>manage_options<\/code> capability). Your MCP plugin may add its own checks on top.<\/p><\/dd>\n<dt id=\"is%20there%20a%20visual%2C%20drag%20%26%20drop%20form%20builder%3F\"><h3>Is there a visual, drag &amp; drop form builder?<\/h3><\/dt>\n<dd><p>No. Agents author forms; the admin screen is for viewing submissions and managing forms.<\/p><\/dd>\n<dt id=\"why%20do%20my%20forms%20look%20unstyled%3F\"><h3>Why do my forms look unstyled?<\/h3><\/dt>\n<dd><p>On purpose. Forms render semantic HTML with stable <code>primitives-<\/code> class hooks and no visual styling, so they inherit your theme and your agent can style them to match your site. The <code>get-form<\/code> ability returns the exact markup to style.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>First wordpress.org release: the forms primitive, with agent abilities for forms and submissions.<\/li>\n<\/ul>","raw_excerpt":"Site building blocks your AI agent operates over MCP through the WordPress Abilities API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386666","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=386666"}],"author":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/louisreingold"}],"wp:attachment":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386666"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386666"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386666"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386666"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386666"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}