关于 agentimus
Agentimus 是面向 WordPress 站点所有者的插件,帮助内容被 AI 系统发现并查看站点信号。它提供 AI 就绪度输出与报告,以及可选的 MCP 接口,用权限检查来读取数据和管理内容。
主要功能
- 01AI 可读内容与发现端点
- 02就绪度与流量报告
- 03搜索、索引和请求日志数据
- 04可选且可审计的内容写入
- 05结构化数据与爬虫规则
适用场景
- 01让 WordPress 站点便于 AI 发现
- 02查看机器人流量和搜索可见度
- 03允许 Agent 起草或更新站点内容
MCP 相关
可选 MCP 服务运行于 `/wp-json/agentimus/v1/mcp`。它提供读取工具和资源;启用写入后才开放写入工具,并受用户权限控制,调用会被审计。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://heera.it/wp-json/agentimus/v1/mcpclaude mcp add --transport http it-heera-agentimus https://heera.it/wp-json/agentimus/v1/mcp{"mcpServers":{"it-heera-agentimus":{"type":"http","url":"https://heera.it/wp-json/agentimus/v1/mcp"}}}在 Cursor 中打开{"servers":{"it-heera-agentimus":{"type":"http","url":"https://heera.it/wp-json/agentimus/v1/mcp"}}}在 VS Code 中打开{"mcpServers":{"it-heera-agentimus":{"type":"http","url":"https://heera.it/wp-json/agentimus/v1/mcp"}}}{"mcpServers":{"it-heera-agentimus":{"serverUrl":"https://heera.it/wp-json/agentimus/v1/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Agentimus
为 AI Agent 时代提供两项功能。**(1)让任何 WordPress 网站都易于阅读和引用——提供 llms.txt、全文版本、Markdown 投递、JSON-LD、content-signal robots 规则;然后评估网站对 AEO/GEO 的适配程度,并指出接下来需要修复的问题。(2)**让你已经在使用的 AI 工具通过 MCP 操作网站:插件内置了 Model Context Protocol 服务,因此 Claude Code、Claude Desktop、Cursor 或 Codex 可以读取网站的适配度、流量和机器人数据;在另外启用两项选项后,还可以起草、编辑和发布文章和页面。每次写入都以当前登录用户的身份执行,并经过权限检查和审计。轻量、没有臃肿的 SEO 功能,也不依赖框架。
已在 WordPress.org 上线: https://wordpress.org/plugins/agentimus/
📖 文档: https://heera.github.io/agentimus/ — 完整的用户手册和开发者参考。
安装
- 从管理后台安装 — 插件 → 安装新插件 → 搜索 “Agentimus” → 安装 → 启用。
- 从 WordPress.org 安装 — https://wordpress.org/plugins/agentimus/。
- 从源代码安装 — 克隆此仓库,运行
npm install && npm run build(生成assets/admin/),然后将文件夹复制或软链接到wp-content/plugins/。
功能
| 信号 | 端点 / 输出 |
|---|---|
| 链接索引 | /llms.txt |
| 全文版 | /llms-full.txt |
| Markdown 传送 | /<slug>.md;在页面 URL 上使用 Accept: text/markdown 可选择启用(agentimus_negotiate_markdown 过滤器,默认关闭 — CDN 会按每个 URL 缓存一个响应) |
| 结构化数据 | JSON-LD WebSite + Person/Organization + BlogPosting + BreadcrumbList(优先使用 SEO 插件提供的数据) |
| 面向 AI 的主题 | 每页主题 → JSON-LD keywords + about DefinedTerm 实体(可通过 agentimus_topic_links 过滤器选配 Wikidata sameAs)+ /<slug>.md 中的 Topics: 行;可静态设置(编辑器),也可根据标签和分类生成 |
| AI 描述 | 每页一行摘要 → JSON-LD description + /<slug>.md 的导语 + 权威的 <meta name="description">(替代主题提供的描述;优先使用 SEO 插件的描述);由编辑器设置,若未设置,则回退到摘要或约 30 个词的内容总结。设置中的子开关可将其限制为仅用于 JSON-LD + .md |
| 写作助手(选择启用) | 每个 Agentimus 界面上的羽毛笔按钮都会打开一个侧边栏:简报 → 可编辑的大纲 → 文章的每个章节并行撰写(每部分调用一次 /assistant/compose-section,另加一次润色调用;长篇文章不受单次响应限制,失败的部分单独重试,中途重新加载可继续撰写)→ 完整预览(标题、实际区块、AI 描述、主题、建议的分类/标签、草稿/待审选择)→ 创建草稿后直接进入编辑器。草稿遵循 可读性 面板的评分标准 — 提炼成摘要的开篇、便于引用的段落长度、通俗句子、标注的来源(readability_rules(),段落上限根据 PageCheck 自身阈值推导)。仅负责创建:草拟的文章会在编辑器中打开,后续修订也在那里进行(侧边栏中旧的编辑流程及其安全区块门控已移除 — 该门控存在的原因是侧边栏只能处理自己写入的区块,而拒绝真实文章并不是解决问题的正确方式)。不同类型采用不同结构:Assistant::shape_for() 会将层级类型编写为 PAGE — 不虚构章节、不预留图片位、不添加分类法;只有所有者才知道的事实处使用 [placeholder] — MCP 创建也使用相同的提示词。图片以填好 alt 文本的占位区块形式提供:每个图片区块都有 根据 alt 文本生成图片,侧边栏有 特色图片(AI) 面板,另有三个范围的 询问 AI — 单个区块、多区块选择(使用 BlockSettingsMenuControls,因为多选时 InspectorControls 永远不会渲染),或文档规划器;后者返回限定于大纲范围的编辑列表,并根据重新读取的锚点映射逐项应用(replaceBlocks 会生成新的 clientIds,因此过期 ID 会静默地不执行操作)。在服务端,这与 MCP 使用相同且经过审计的写入路径(Assistant.php → ContentWriter),由 enable_agent_writes + 用户自身的权限控制;所有生成均通过 Assist::generate() 路由(设有速率限制,并遵循内容指南),且状态被限制为 draft|pending — 助手绝不会发布内容 |
| 使用 AI 撰写(选择启用) | 编辑器中的 “使用 AI 起草” 会生成 AI 描述,“使用 AI 建议” 会填入主题,两者均依据页面自身内容;“使用 AI 修复” 会针对每条 AI 可读性警告起草修复方案(开篇摘要可一键插入,其余仅支持复制)。通过 WordPress 7.0 AI Client 路由 — 使用你自己的提供方密钥,插件绝不会处理该密钥;配置 Settings → Connectors 下的提供方之前,此功能处于隐藏状态 |
| AI 能力 | 通过 wp_register_ability 提供两个层级,每项能力都像其来源界面一样受权限控制。读取(始终注册): agentimus/read-readiness、read-findings(Findings 界面自身的排序入口,最多返回 12 行)、read-audience(分别统计人和机器,绝不合并)、read-ai-visibility、read-ai-traffic、read-request-log、read-edge-traffic、read-search-visibility、read-search-performance、read-search-opportunities、read-google-index(可选的 url 查询基于已存检查结果作答,不消耗配额)、identify-bot、read-content-issues(哪些页面需要处理、各自被标记的原因,以及该判定已有多久 — read-findings 汇总的列表)、read-terms(此网站已使用的分类和标签,名称与写入工具要求的完全一致)、check-page、preview-schema/-markdown、scan-exposed-files、suggest-internal-links、search-media(标题 + _wp_attachment_image_alt,需要 upload_files 权限)。写入(仅当 enable_agent_writes 开启时注册 — 默认关闭,需要启用 MCP 服务开关;关闭时,这些能力在任何界面都不存在): create-content/update-content(优先创建草稿;分类和标签按名称匹配,并遵循 wp-admin 自身的创建规则;特色图片可通过附件 ID 或远程加载的 URL 设置;同一次调用中可设置 AI 描述/主题)、write-description、write-topics、write-search-fields(焦点关键词和 SEO 标题 — 决定页面在搜索结果中显示方式的两个字段,也是 Agent 之前无法触及的最后两个字段),以及 apply-fix(执行就绪检查自身的修复方案;方案来自封闭词汇表,只能启用有文档记录的功能)。status=publish 还需要第三个开关(agent_writes_publish)以及用户自身的发布权限 |
| MCP 服务(选择启用) | /wp-json/agentimus/v1/mcp — WordPress MCP Adapter 内置于插件中(通过 Composer 随插件提供,由 Jetpack-autoloader 仲裁),受 enable_mcp_server 开关控制(Settings → Discovery,默认关闭;需要 WP 6.9+)。外部 MCP 客户端(Claude Code、Claude Desktop、Codex)使用应用程序密码进行身份验证,并获得上述全部能力 — 20 个只读工具,写入开关开启时额外提供 6 个写入工具,以及通过 meta.mcp.uri 声明的 4 个资源(llms.txt、llms-full.txt、discovery.json、Agent 卡片);端点已关闭的资源不会注册(服务的自我描述会说明正在运行的层级)— Adapter 默认提供的通用任意能力执行服务会被抑制,每次调用都会记录在 Agent Access 中,关闭开关会立即断开在线客户端。开关关闭时,库不会加载,也不存在任何端点 |
| XML 站点地图 | /agentimus-sitemap.xml — 选择启用的备用方案,仅当 WordPress 核心和 SEO 插件均未提供站点地图时才生成(站点地图索引 + 分页子站点地图) |
| 爬虫策略 | robots.txt 内容信号 + 训练爬虫阻止列表 |
| 发现层 | /.well-known/discovery.json(+ agent-card.json、mcp.json) |
| 变更动态 | /agentimus-changes.json?since= — 以 JSON 格式列出近期新增、更新和删除的内容,让 Agent 只获取增量(在 discovery.json 中声明;默认开启) |
| 爬取强制执行(选择启用) | 对生成的端点上的拒绝名单、伪装成“扫描器”或已证实冒名的用户代理执行硬拦截(403)— 不影响 ACME,默认关闭;可选的机器人身份验证(正向确认反向 DNS + 运营方公布的 IP 范围,通过所有者可编辑的 Verified-bots 注册表配置),防止伪造的机器人名称获得允许名单资格,并拒绝已证实的冒名机器人 |
In the admin
- 发现 — 站点上所有待处理事项的统一入口,在导航栏中显示并带有独立计数。一个按优先级排列的列表,包含已获得点击却正在流失点击的页面,以及设置检查发现的问题;按每项造成的损失排序,每行都带有可直接跳转到修复位置的按钮。计数只统计可立即处理的工作;只需等待后续报告的事项则以一个低调的圆点标记。下方是逐项内容工作清单:每个已发布内容占一行,列出它因哪些内容而被找到、是否回答了相关问题,以及还需要补充什么。
- 浅色/深色主题 — 切换按钮显示你将要切换到的模式。深色主题采用经过精细调整的配色,而非简单反转;WordPress 管理界面的每种配色方案都有自己的风格(Default 使用中性色,Coffee 使用棕色和金色)。手动选择会保持不变,直到操作系统下次切换模式,之后便重新跟随设备的节奏;最终生效的模式会写入
<html data-ar-theme>,并按浏览器记忆,绝不写入设置。 - AEO/GEO 评分 — 仪表盘上的单一 0–100 评分,分为五个等级(可发现/易读/可信/优化/已引用),并提供最有用的下一步建议;每个等级都可直接跳转到相应操作位置。已引用等级默认关闭(见引用),关闭时,其权重会重新分配给其他等级。99.6 分会显示为 99 — 100 分必须实至名归,不会靠四舍五入得来。
- 按问题查看工作 — 选择一项检查后,该检查标记的每个页面都会在「你的内容」中以排序并分页的方式打开,而不是只显示六个样本。修复筛选列表所要处理的问题后,该行仍会留在原处并标记为已完成,不会在你看到修复生效前就消失。
- 不依赖 WP-Cron 的读取 — 内容扫描属于计划任务,但许多主机上的 WordPress 计划任务从不运行(缓存页面不会运行 PHP,因此也不会有启动这些任务的请求)。Agentimus 会发现自身任务是否逾期,并在你当前所在的管理页面中运行它们,同时加入 WordPress 核心自身的锁,确保绝不会重复运行任务。对于 cron 正常运行的站点,不会加载任何额外内容。
- 优化你的内容 — 对你的文章进行逐页可引用性检查(内容单薄、缺少可引用的具体内容、可引用段落、新鲜度),并提供待改进页面的工作清单,以及编辑器中对应的只读面板。商品、电商插件指定的页面(购物车/结账/账户 — 同时读取 WooCommerce 选项和 FluentCart 设置),以及没有原创文字内容的 shortcode/block 容器页面均会排除;将任何不打算让人引用的页面搁置(页面仍会发布,只是不再计入评分)——搁置记录会逐项列出并计数所有搁置内容,而不是让它们悄然消失;将分类标记为常青内容,即可免除新鲜度检查。
- 内容类型及你对它们的否决权(设置)— 插件启用的类型会与自定义类型分开显示,即使添加该类型的插件希望启用它,你也可以将其关闭。写作助手遵循相同规则:页面不会被添加虚构的章节、图片占位符或标签,因为页面不是文章。
- 返回时重新读取屏幕数据 — 以前离开数据页面再返回时,显示的仍是插件首次打开时的数据。现在每个页面都会在返回时刷新,因此屏幕上显示的就是当前数据。
- 发现中心(发现选项卡)— 汇总此站点向机器公开的所有内容:描述站点的提供方、它们声明的能力、公共 API、众所周知的文档,以及 MCP 和工具接口。工具部分分为三个面板,分别说明:已登录的 Agent 可以运行哪些工具(按提供方分组,每组可展开查看工具名称)、这些 Agent 要连接的地址,以及匿名 Agent 在
/.well-known/mcp.json中获取的内容。能力列表会在固定高度的区域内滚动,因为列表长度取决于站点自身(每种公开的 REST 文章类型和分类法各占一项)。任何注册问题都会附上通俗易懂的修复方法。 - 就绪报告 — 包含通过/警告/失败检查,每项检查都附有通俗易懂的建议和可直接跳转到修复位置的链接(包括「sitemap 已在 robots.txt 中声明」检查)。
- Agent 预览 — 一个模态窗口(从就绪报告打开),显示 Agent 会收到的确切 JSON-LD 和 Markdown,适用于站点或任意页面/文章;带有按站点/页面/文章分组的选择器、复制按钮和验证器链接。即使停用了 schema 或由 SEO 插件管理,它也会显示实际将要输出的内容;受密码保护的文章仍会隐藏,尚未发布的草稿则会显示为发布后的输出预览。文章编辑器中也有对应的只读版本。
- 可见度 → 搜索 — 人们搜索了什么、你的内容出现了多少次、这些结果被点击了多少次,以及哪些页面因此获得点击;每个数字都来自搜索引擎本身。连接 Google 和 Bing 后会出现一个切换开关:两者统计的搜索者不同,绝不会合并。紧接其下的搜索机会会将这些数字转化为工作清单 — 刚好排在首页之外的页面,以及虽在首页却被用户略过的页面;每项都链接到能修复问题的确切字段。它还会指出多个页面相互分流的搜索词 — 点击被分散后,每个页面的排名都不如一个页面时高 — 并说明哪个页面获得了点击,以及其他每个页面应如何处理。(该功能在 1.36 之前位于就绪报告底部;现在就绪报告中会保留指向它的链接。)
- 可见度 → 已收录 — 查看搜索引擎索引中是否实际收录了你的页面,在同一屏幕查看 Bing 和 Google。如今 ChatGPT 搜索和 Copilot 读取的是 Bing 索引:查看其收录了多少站点内容、爬虫能否顺利访问、按日统计的人类流量及周环比趋势,并通过 Bing 自身的 API 实时查询单个页面。Google 部分会轮流扫描整个站点并每日重新检查 — 状态正常的页面只计入总数;任何需要关注的页面都会以 Google 自身的措辞列出,并附上可直接跳转到 Search Console 的链接;也可以随时重新检查任意 URL。
- 数据源(设置 → 数据源)— Agentimus 读取的外部服务,全部可选且只读;每项密钥都保存在你自己的服务器上,不经过第三方代理:Cloudflare 可查看边缘节点在你的服务器收到请求前返回或拦截了什么(还可选择额外授予令牌权限,以便在发布时清除缓存);Google Search Console 用于查看搜索和索引覆盖情况 — 如果你需要访客数据,Analytics 也可使用同一密钥;Bing Webmaster Tools 还可以通过 IndexNow 通知每次发布的内容变更。数据会写入你自己的数据库,因此历史记录不会受各服务自身报告周期的限制。
- 引用(可见度 → 引用;可选启用,使用自带密钥 — 会为评分添加已引用等级,且每次读取结果 90 天后过期,确保过时数据不会计入)— 跨 ChatGPT、Perplexity、Gemini 和 Claude 跟踪你选择的品牌、产品或人物。它会针对每个跟踪项提出受众会输入的问题,并持续报告其是否被提及、被链接,以及与自身竞争对手相比的排名。为项目设置类别(「WordPress SEO 插件」)后,Agentimus 会建议真实用户会输入的问题;或者,如果 WordPress 中已配置 AI 提供方,也可以让该 AI 生成一组不含品牌名称的问题(
POST /visibility/suggest和/visibility/suggest-ai)。每个项目都有独立的网站、类别、竞争对手、问题和评分表;可以暂停任意项目或整个计划,屏幕上的每项设置都会自动保存。结果存储在本地;这是唯一会发起外部请求的功能,使用你提供的 API 密钥(静态加密存储),且默认关闭。它会使用专属密钥,而不复用 WordPress 共享的 AI 连接器,因为可见度检查的评分依据是引擎引用的来源,而共享客户端会丢弃这些来源。 - Agent 活动日志 — 仅限本地的仪表盘(默认不记录 IP;可选设置仅为被标记的爬虫存储 IP),用于查看哪些 AI Agent 和爬虫在获取你的端点;重复访问会按次数分组,最新的排在最前。点击任意一天的柱形图,可查看当天的完整报告 — 客户端、端点和每个请求。你自己的登录访问会被跳过,就绪页面自身的实时验证/暴露扫描请求也会跳过(这些请求会携带短期有效的
X-Agentimus-Selfcheck令牌,因为它们有意采用匿名方式)。 - 请求日志(更多 → 请求日志)— 仪表盘背后的原始日志:每个请求一行,采用键集分页,可按客户端、端点、网络、用户代理和日期范围筛选。筛选条件会以 AND 逻辑组合,因此能够显示汇总统计在结构上无法呈现的 Agent × 端点交叉表。
- Agent 访问(更多 → Agent 访问)— 从日志另一侧查看谁在机器接口上进行身份验证并执行操作。记录应用程序密码的创建/首次使用/重命名/撤销、运行的 WordPress 能力,以及被拒绝的请求或对不存在能力的探测 — 每一行都会说明是谁:实时解析用户和背后的具名应用程序密码(重命名的密钥会显示当前名称,已撤销的密钥则显示「已撤销」)。这是记录,不是防护措施(绝不会拦截);不记录 IP,因此显示的是凭证,而非人员。通过
rest_request_after_callbacks和应用程序密码钩子运行;凭证记录部分不需要 Abilities API,能力记录部分则会自动检测该 API。 - 来自 AI 的流量 — 仅限私有的第一方统计,显示哪些 AI 助手向你发送了访客(按日统计助手 → 着陆页;不记录 IP,也不收集单个访客数据)。仪表盘显示摘要 — 点击任意一天的柱形图,即可查看当天按助手 → 着陆页划分的报告;更多 → 访客显示完整报告,并提供相同的逐日明细。这里的每张卡片都明确说明统计的是人,而不是 Agent:请求日志记录机器端访问,访客页面记录人类访问,两者绝不会相加。启用CDN 模式后,可选择在浏览器中统计,让完整页面缓存也不会影响数据。由于识别依据是有限列表,可选择启用查找遗漏的 AI 来源诊断功能,记录无法归类的来源主机和
utm_source标签 — 这是发现盲点的唯一方法,否则这些来源不会留下任何痕迹。 - 访问日志保留(设置 → 访问日志)— 设置保留期限、每夜自动删除和硬性行数上限。行数上限优先于保留期限:「保留 90 天」只是对记录时间的上限,并不保证某行会保留满 90 天。关闭自动删除不代表「永久保留」— 行数上限仍会生效,并优先收集最早的记录。
- 避免将 AI 端点纳入缓存(设置 → 缓存与 CDN,可选启用)— 如果站点前方的缓存或 CDN 提供了 AI 端点的存储副本(
llms.txt、.well-known文档、变更订阅流),Agent 请求就不会到达 WordPress:日志统计会偏少,变更订阅流也可能过时。启用此选项后,端点会发送Cache-Control: no-store,尊重该指令的缓存就会让每次请求直达源站。就绪报告检测到你的网站前方有缓存时,会提供此设置的链接。 - 内容变更时刷新 AI 文件(设置 → 缓存与 CDN,默认启用)— 每次内容变更时,通知每个已检测到的页面缓存(WP Rocket、Nginx Helper、W3 Total Cache、LiteSpeed、WP Super Cache、Cache Enabler 或任何
agentimus_purge_url监听器)清除 AI 文件 —llms.txt、llms-full.txt、robots.txt、变更订阅流、.well-known文档 — 以及已编辑文章对应的.md文件;缓存插件本身不会知道需要刷新这个文件。功能会自动检测缓存,因此没有缓存时不会执行任何操作。 - 待审核活动 — 导航栏中的审核队列会标记新客户端、异常高流量客户端、伪造身份或扫描器客户端,以及冒充其他客户端的客户端(它声称是可编辑的已验证机器人注册表中的机器人 — Googlebot、GPTBot、PerplexityBot 等 — 但明确未通过该运营方公布的验证:反向 DNS 或其公布的 IP 段)。每项都附有简单易懂的「检查此机器人」面板,以及一键阻止/允许/忽略选项。可配合选择启用的阻止扫描器和抓取器防护;也可选择启用为标记的客户端存储 IP 地址设置,查看需要阻止的确切地址。之后可在设置 → AI 访问 → 管理客户端中管理所有持续生效的决定 — 已阻止、已信任、已忽略;每行显示身份、决定日期,并提供一键撤销。
- 暴露面 — 可选控制项,用于限制匿名爬虫可以读取的内容(用户名枚举、作者归档、WP 版本、
<head>链接、XML-RPC);还提供一键暴露文件扫描,检查备份、.env、debug.log、密钥等高风险文件是否可被公开下载,并告知如何阻止访问。这些是操作指引,不是防火墙。 - 恢复出厂设置 — 一键将所有设置恢复为推荐默认值,并预览将要发生的确切更改。
架构
- PHP(
inc/,命名空间为Agentimus\,使用 PSR-4 自动加载)— 原生实现,不使用框架。Plugin负责协调;Settings是唯一的选项存储;Cache处理临时数据;Endpoints/Markdown/Schema生成输出;Readiness执行检查;Rest支持管理界面;Admin挂载 UI。
- 管理界面 — Vue 3(Options API),使用 Vite 构建到
assets/admin/。 通过标准 WP nonce 与 REST 命名空间agentimus/v1通信。
扩展到任何站点 / 内容类型
免费核心支持 post + page,以及你选择启用的任意公开文章类型
(内容类型卡片,或 agentimus_post_types 过滤器),因此商品和 CPT 会自动进入 llms.txt、全文版、Markdown 和 Schema。
更深入的支持(WooCommerce Product 映射器、页面构建器内容)作为附加组件提供,并通过以下扩展点接入:
agentimus_post_types— 添加 / 移除 Agent 可见的文章类型agentimus_schema_for_post— 返回完整节点,例如包含优惠信息的Productagentimus_markdown_source— 为页面构建器内容提供渲染后的 HTML
面向开发者 — 让你的插件可被发现
Agentimus 在 /.well-known/discovery.json 提供统一的聚合发现层(另有 agent-card.json 和 mcp.json)。任何插件都可以通过一个 action 且无需依赖项注册自己 — 如果未安装 Agentimus,该钩子就不会触发,因此这段代码不会产生任何作用:
add_action( 'wpdiscovery_register', function ( $registry ) {
$registry->register( array(
'id' => 'acme-bookings',
'title' => 'Acme Bookings',
'type' => 'scheduling', // controlled vocab + x-vendor-name
'capabilities' => array( 'scheduling.booking.create' ), // dot-notation INTENT
'endpoints' => array( // WHERE (concrete paths live here)
array( 'url' => '/wp-json/acme/v1', 'type' => 'rest', 'auth' => 'apikey' ),
),
'auth' => array( 'type' => 'apikey', 'docs' => 'https://acme.dev/api' ),
'agent' => array( 'name' => 'Acme Agent', 'skills' => array(
array( 'id' => 'create_booking', 'description' => 'Book an appointment.' ),
) ),
) );
} );
此外还提供全局门面(由于调用是直接进行的,请先检查其是否存在):
if ( class_exists( 'Agentimus_Discovery' ) ) {
Agentimus_Discovery::register( [...] );
}
资源字段: id(必填,slug)、title(必填)、type(必填 — content、
commerce、scheduling、courses、forms、crm、auth、search、media、
messaging、analytics、payments、directory、agent 或 x-vendor-name;
使用 agentimus_resource_types 过滤器添加自定义类型 — 未声明的词会标记为 x- 并发布,不会被丢弃)、
description、version、capabilities[]、endpoints[]({url, type, methods[], auth, description})、schemas[]、auth({type, oidc, scopes[], docs})、
agent({name, description, skills[{id,description}], endpoint, auth})、
abilities[]、tools[](MCP 格式)、docs。provider 会自动填充 — 不要设置它。
Capabilities 描述意图;具体的 /wp-json/... 路径只会出现在
endpoints / tools 中。无效条目会被拒绝,并在发现中心 → 验证中显示(及其原因)。
$registry->add_well_known( [...] ) 用于提供 /.well-known/<name> 文档
(callback | redirect | file)。完整的复制粘贴参考请参阅 examples/integrate-your-plugin.php,标准规范请参阅 WP_Discovery Protocol。
钩子与过滤器
所有钩子均为可选,并分为三个层级。表格列出了每个钩子的类型(action 或 filter)和回调签名(参数 → 返回值);复制粘贴示例见 examples/all-hooks-reference.php。在签名中,Registry、Settings 和 Plugin 分别是 Agentimus\Discovery\Registry、Agentimus\Settings 和 Agentimus\Plugin 类。
稳定
在 WP_Discovery spec 1.0 中公开且已冻结 — 可放心基于此进行开发。
| Hook | 类型 | 签名 | 用途 |
|---|---|---|---|
wpdiscovery_register | action | ( Registry $registry ) | 注册你的资源并提供自己的 /.well-known 文档。完整 Schema 见 integrate-your-plugin.php。 |
agentimus_entity_types | filter | ( string[] $types ): string[] | 向设置 → 身份中添加可选的 schema.org 实体类型。 |
agentimus_cache_flushed | action | () | Agentimus 重新生成文档后运行 — 清理你的 CDN / 页面缓存。 |
agentimus_booted | action | ( Plugin $plugin ) | 插件启动后运行 — 配套插件或 Pro 附加组件可在此注册功能。 |
// Add selectable schema.org entity types to Settings → Identity.
add_filter( 'agentimus_entity_types', function ( $types ) {
$types[] = 'Restaurant';
return $types;
} );
扩展
受支持的输出调整过滤器;其签名可能会随版本发布而变化。
| 钩子 | 类型 | 签名 | 用途 |
|---|---|---|---|
agentimus_envelope | 过滤器 | ( array $envelope, Registry $registry ): array | 完整组装后的 discovery.json——添加 x-<vendor> 扩展键。 |
agentimus_documents | 过滤器 | ( array $docs, Registry $registry ): array | 将 Agentimus 无法自动检测的标准文档添加到 documents 映射中。 |
agentimus_schema_url | 过滤器 | ( string $url ): string | 发现文档的 $schema URL;返回 '' 可省略。 |
agentimus_well_known_routed | 过滤器 | ( string[] $names ): string[] | 路由你提供的扁平 /.well-known/<name>,使其在所有主机上都能解析。 |
agentimus_well_known_nested | 过滤器 | ( string[] $names ): string[] | 路由精确匹配的嵌套 /.well-known/<dir>/<file>。 |
agentimus_well_known_specs | 过滤器 | ( array $specs ): array | 为 /.well-known 名称标注其适用标准(name => label)。 |
agentimus_signed_surfaces | 过滤器 | ( string[] $surfaces ): string[] | 配套签名器要签署的发现文档。 |
agentimus_mcp | 过滤器 | ( array $mcp, array $resources ): array | 在 /.well-known/mcp.json 中公布的 MCP 描述符。 |
agentimus_mcp_card_server | 过滤器 | ( string $id, array $servers ): string | 指定 MCP 服务卡片所描述的服务('' = 自动)。 |
agentimus_mcp_server_abilities | 过滤器 | ( string[] $names ): string[] | Agentimus 通过自身 MCP 服务向外部 Agent 暴露的能力(默认:其九项只读能力)。可缩减列表,限制离开站点的内容。 |
agentimus_bootstrap_mcp_adapter | 过滤器 | ( bool $bootstrap ): bool | 否决加载捆绑的 MCP Adapter 库(例如由主机自行管理适配器时);此设置独立于所有者的 enable_mcp_server 设置。 |
agentimus_agent_skills | 过滤器 | ( array $skills, array $resources ): array | Agent Skills 索引中的条目。 |
agentimus_post_types | 过滤器 | ( string[] $types, string[] $available ): string[] | 哪些文章类型对 Agent 可见(每种类型都会生成一个 llms.txt 分区)。 |
agentimus_post_type_source | 过滤器 | ( string $source, string $post_type ): string | 将文章类型的 llms.txt 分区(以及 Agent 预览选择器)归属到你的插件。 |
agentimus_changes_max | 过滤器 | ( int $max ): int | 变更订阅源的窗口大小——可容纳的最新条目数(默认 200,最大 2000)。 |
agentimus_tombstone_retain_days | 过滤器 | ( int $days ): int | 删除记录从变更订阅源中清除前的保留时间(默认 90 天)。 |
agentimus_page_checks | 过滤器 | ( array $checks, array $stats, WP_Post $post ): array | 添加、调整或删除编辑器中显示的每页“可读性”检查项。 |
agentimus_ai_assist_enabled | 过滤器 | ( bool $enabled ): bool | 是否提供编辑器中的“使用 AI 起草”/“使用 AI 修复”辅助功能(默认:WordPress 中配置了支持文本的 AI 提供商时开启)。 |
agentimus_markdown_source | 过滤器 | ( ?string $html, WP_Post $post ): ?string | 为页面构建器内容提供渲染后的 HTML(null = 正常渲染)。 |
agentimus_topic_exclude | 过滤器 | ( string[] $slugs ): string[] | 从 llms.txt“主题”列表和每页派生主题中排除的主题/分类 slug。 |
agentimus_derive_taxonomies | 过滤器 | ( string[] $taxonomies, WP_Post $post ): string[] | 为 AI 自动填充文章“主题”的分类法(默认 category、post_tag)。供应商可添加例如 product_cat;其术语会遵循派生开关、排除列表和上限设置。 |
agentimus_post_topics | 过滤器 | ( string[] $topics, WP_Post $post ): string[] | 添加或完善文章的 AI 主题列表(→ JSON-LD keywords + Markdown)。之后会重新规范化(去重并限制数量)。 |
agentimus_topic_links | 过滤器 | ( string[] $urls, string $topic, WP_Post $post ): string[] | 主题的参考 URL(Wikidata、Wikipedia…)→ schema.org about sameAs。核心不提供任何 URL(不自动查询);由你负责映射。可直接使用的示例:topic-links-wikidata.php。 |
agentimus_topic_suggestions | 过滤器 | ( string[] $pool ): string[] | 编辑器“AI 主题”框中的自动补全候选项(默认:已用主题 + 标签/分类 + 专业领域)。 |
agentimus_topic_meaningful | 过滤器 | ( bool $meaningful, string $name, ?object $term ): bool | 自动派生的分类术语是否成为主题。默认会丢弃纯数字名称(“67”、多余的 ID);若某个数字确实是主题(例如“1984”),则返回 true 以保留。 |
agentimus_llms_full_item_max_bytes | 过滤器 | ( int $bytes ): int | llms-full.txt 版本中每项的字节上限。 |
agentimus_llms_full_avg_item_bytes | 过滤器 | ( int $bytes ): int | 在管理界面估算 llms-full.txt 时使用的平均条目大小。 |
agentimus_yield_surface | 过滤器 | ( bool $yield, string $surface ): bool | 将某个界面(llms_txt、robots、…)交由你自己的生成器处理。 |
agentimus_defer_schema | 过滤器 | ( bool $active ): bool | 是否输出前端 JSON-LD(为 SEO 插件让出控制权)。 |
agentimus_schema_for_post | 过滤器 | ( array $node, WP_Post $post ): array | 替换文章的 JSON-LD 节点(例如 Product)。 |
agentimus_post_description | 过滤器 | ( string $desc, WP_Post $post ): string | 最终确定文章的 AI 描述(编辑器中的值 → 摘要/简介回退值)。用于 JSON-LD description、.md 引言和 meta 标签;之后会再次清理(剥离标签并限制长度)。 |
agentimus_emit_meta_description | 过滤器 | ( bool $emit, WP_Post $post ): bool | Agentimus 是否在本次请求中管理页面 <meta name="description">。返回 false 可将 <head> 留给主题处理。(已有专用 SEO 插件时会自动让出控制权。) |
agentimus_schema_graph | 过滤器 | ( array $graph ): array | 最后修改整个 JSON-LD @graph 的机会。 |
agentimus_faq_pairs | 过滤器 | ( array $pairs, WP_Post $post ): array | 添加额外的 FAQPage 问答对。 |
agentimus_sitemap | 过滤器 | ( array $sitemap ): array | 声明 Agentimus 无法自动检测的站点地图。 |
agentimus_sitemap_max_urls | 过滤器 | ( int $max ): int | 限制生成的站点地图中的 URL 数量。 |
agentimus_rest_discovery | 过滤器 | ( bool $enabled ): bool | REST 命名空间自动发现的总开关。 |
agentimus_rest_namespaces | 过滤器 | ( string[] $namespaces ): string[] | 要发布到发现文档中的 REST 命名空间。 |
agentimus_rest_skip_namespaces | 过滤器 | ( string[] $namespaces ): string[] | 从发现中排除的 REST 命名空间。 |
agentimus_discoverable_ability | 过滤器 | ( bool $discoverable, string $name, mixed $ability ): bool | 包含或排除单项 WP 能力。 |
agentimus_serve_security_txt | 过滤器 | ( bool $serve ): bool | Agentimus 是否生成 security.txt。 |
agentimus_security_txt | 过滤器 | ( string $body ): string | 编辑最终的 security.txt 正文。 |
agentimus_security_txt_expires_days | 过滤器 | ( int $days ): int | security.txt 的 Expires 时限,单位为天。 |
agentimus_readiness_checks | 过滤器 | ( array $checks, Settings $settings ): array | 添加或调整管理界面“发现中心”的就绪检查项。 |
agentimus_signing_secret_key | 过滤器 | ( string $key ): string | 从常量或密钥库提供 Ed25519 签名密钥。 |
agentimus_exposed_paths | 过滤器 | ( string[] $paths, Settings $settings ): string[] | 已暴露文件扫描所探测的敏感路径列表。 |
agentimus_verified_bot_domains | 过滤器 | ( array $map ): array | 可验证机器人 rDNS 映射(注册表令牌 → 反向 DNS 域名后缀),来源于所有者可编辑的注册表。 |
agentimus_verifier_registry | 过滤器 | ( array $entries ): array | 所有者编辑后生效的 Verified-bots 注册表,是两种验证方式(rDNS 域名和已发布的 IP 范围文件)的数据源。 |
agentimus_trusted_proxies | 过滤器 | ( string[] $cidrs ): string[] | 用于解析真实客户端 IP 的可信代理/CDN CIDR。仅当直接对端已确认为代理时,才会接受转发标头——该标头无法用于伪造源 IP。 |
agentimus_referral_beacon | 过滤器 | ( bool $enabled ): bool | 自选“CDN 模式”引荐信标的总开关(在浏览器中统计来自 AI 的读者)。 |
agentimus_markdown_cache | 过滤器 | ( bool $cache ): bool | 启用或禁用每篇文章的 .md 缓存(默认开启)。 |
agentimus_flagged_ip_retention_days | 过滤器 | ( int $days ): int | 自选的已标记 IP 存储保留期限(默认约 14 天)。 |
// Add a vendor extension to the discovery document (the x- namespace is yours).
add_filter( 'agentimus_envelope', function ( $envelope, $registry ) {
$envelope['x-acme'] = array( 'portal' => 'https://acme.example' );
return $envelope;
}, 10, 2 );
内部
供网站所有者进行高级调优,不是面向第三方的集成接口。
| Hook | 类型 | 签名 | 用途 |
|---|---|---|---|
agentimus_deny_request | filter | ( bool $deny, string $ua ): bool | Guard 对是否对请求返回 403 的最终决定。 |
agentimus_block_allowlist | filter | ( string[] $allowed ): string[] | 绝不能被硬拦截的客户端(搜索引擎 + 你的列表)。 |
agentimus_verify_bots | filter | ( bool $on ): bool | 强制开启或关闭机器人身份验证(反向 DNS + 已公布的 IP 范围),覆盖该设置。 |
agentimus_reverse_dns | filter | ( ?string $host, string $ip ): ?string | 覆盖反向 DNS 检查中的 PTR 查询——返回主机名(无主机名时返回 ''),或返回 null 使用原生解析器。 |
agentimus_forward_dns | filter | ( ?array $ips, string $host ): ?array | 覆盖正向 A/AAAA 查询——返回 IP 字符串数组,或返回 null 使用原生解析器。 |
agentimus_engine_signatures | filter | ( array $signatures ): array | 在令牌边界匹配真实爬虫的结构化签名。 |
agentimus_generic_ua_tokens | filter | ( string[] $tokens ): string[] | 被视为低信号的通用 user-agent 令牌。 |
agentimus_agent_map | filter | ( array $map ): array | 用于活动日志的 user-agent → 友好标签映射。 |
agentimus_spoof_signatures | filter | ( string[] $signatures ): string[] | 用于标记伪造或旧设备扫描器的平台标记。 |
agentimus_known_agents | filter | ( array $catalog ): array | 已知 Agent 目录(user-agent → 标签)。 |
agentimus_known_scanners | filter | ( string[] $known ): string[] | 作为一键拦截建议提供的扫描器 user-agent。 |
agentimus_known_trainers | filter | ( string[] $known ): string[] | 提供用于在 robots.txt 中拦截的 AI 训练器 user-agent。 |
agentimus_ai_referral_sources | filter | ( array $map ): array | “来自 AI 的流量”的匹配词 → 友好名称。包含点号的匹配词会匹配引荐来源主机(及其任何子域),也会匹配携带该主机的 utm_source;不含点号的匹配词永远无法与主机匹配,因此只匹配 utm_source——这就是带有 utm_source=perplexity 标签的助手会被统计的方式。 |
agentimus_unknown_sources_max_rows | filter | ( int $max ): int | 可选的“查找遗漏的 AI 来源”表格的行数上限。0 表示不设上限。 |
agentimus_activity_skip_self | filter | ( bool $skip ): bool | 是否跳过已登录管理员的访问记录。注意:此选项依据已登录 Cookie 判断,而非当前用户,因此对不携带 nonce 的 REST 路由也有效。 |
agentimus_activity_retention_days | filter | ( int $days ): int | Agent 访问记录的保留时长。覆盖 Settings → Visit log 中的值。Dashboard 仍最多报告 30 天的数据。请同时提高 agentimus_activity_max_rows,否则行数上限仍会丢弃多出的天数。 |
agentimus_bypass_shared_cache | filter | ( bool $on ): bool | 强制 AI 端点不可缓存(发送 Cache-Control: no-store),避免共享缓存/CDN 向活动日志隐藏 Agent 的抓取记录。覆盖 Settings → Caching & CDN 开关。 |
agentimus_purge_on_change | filter | ( bool $on ): bool | 开启或关闭内容变更时自动清除 AI 文件缓存。覆盖 Settings → Caching & CDN 开关。 |
agentimus_purge_urls | filter | ( string[] $urls ): string[] | 内容变更时 Agentimus 请求页面缓存删除的确切 URL(可添加自己的 URL,或缩减此集合)。 |
agentimus_purge_url | action | ( string $url ) | 每清除一个 URL 时触发——可将其挂接到 Agentimus 无法原生检测到的页面缓存。(agentimus_purged 会连同完整列表触发一次。) |
agentimus_new_agent_seconds | filter | ( int $seconds ): int | 活动待审核面板中“新 Agent”的时间窗口。 |
agentimus_burst_min_hits | filter | ( int $hits ): int | 标记突发访问所需的最少访问次数。 |
agentimus_heavy_min_hits | filter | ( int $hits ): int | 标记高频使用所需的最少访问次数。 |
agentimus_threats_limit | filter | ( int $limit ): int | “待审核活动”面板中的最大行数。 |
agentimus_default_settings | filter | ( array $defaults ): array | 默认设置数组。 |
agentimus_settings | filter | ( array $settings ): array | 读取时实时合并后的设置数组。 |
agentimus_sanitize_settings | filter | ( array $clean, array $input ): array | 保存时验证/转换由配套扩展添加的字段。 |
agentimus_settings_reset | action | () | 所有者重置设置时运行。 |
// The Guard's final say on whether to 403 a request.
add_filter( 'agentimus_deny_request', function ( $deny, $ua ) {
return $deny;
}, 10, 2 );
开发
npm install
npm run build # one-off build into assets/admin/
npm run dev # rebuild on change
assets/admin/ 已被 Git 忽略——它是构建产物。请将其打包到
分发用的 .zip(.org SVN 标签)中,而不是放在代码仓库里。
要求
- WordPress 6.9+(已测试至 7.0)
- PHP 7.4+。
许可证
GPL-2.0-or-later。管理应用由 resources/ 中的 Vue 源码通过 Vite 构建——发布内容不包含仅有压缩代码,因此构建过程可复现。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。