{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-02",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "tool": {
    "slug": "boxlang-ai",
    "name": "BoxLang AI",
    "vendor": "Ortus Solutions",
    "vendorUrl": "https://ai.boxlang.io",
    "kind": "framework",
    "category": "frameworks",
    "summary": "BoxLang AI (bx-ai) is Ortus Solutions' Apache-2.0 agent framework for BoxLang on the JVM, with agents, tools, memory, RAG, human approval, and an MCP client and server across more than 15 model providers.",
    "url": "https://www.anchorterminal.com/tools/boxlang-ai",
    "markdownUrl": "https://www.anchorterminal.com/tools/boxlang-ai.md",
    "slimMarkdownUrl": "https://www.anchorterminal.com/tools/boxlang-ai.min.md",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/boxlang-ai.json",
    "dns": "boxlang-ai.grade.anchorterminal.com",
    "repo": "https://github.com/ortus-boxlang/bx-ai",
    "license": "Apache-2.0",
    "transports": [],
    "packages": [
      {
        "registry": "forgebox",
        "name": "bx-ai"
      }
    ],
    "auth": "none",
    "authNotes": "A library with no account of its own. Model providers need their own keys, set in boxlang.json or read from each provider's environment variable (OPENAI_API_KEY, CLAUDE_API_KEY and so on). Ollama, Docker Model Runner and the mock provider need no key.",
    "pricing": "free",
    "pricingNotes": "Free under Apache-2.0. Model calls are billed by the provider. Ortus sells optional BoxLang runtime plans from $749 a year (Starter, one server) to $4,999 a node a year (BoxLang++), which the readme says add more vector memories and an Agent Dashboard.",
    "priceSummary": "Free · OSS",
    "where": "library",
    "x402": {
      "level": "no",
      "evidence": "Local library. No x402, MPP or L402 in the repository, the docs or the plans page, checked 1 November 2026.",
      "endpoints": []
    },
    "toolCount": null,
    "popularity": {
      "githubStars": null,
      "npmWeekly": null,
      "pypiWeekly": null,
      "asOf": "2026-11-01"
    },
    "docsUrl": "https://ai.ortusbooks.com",
    "llmsTxt": "https://ai.ortusbooks.com/llms.txt",
    "capabilities": [
      "agent.framework",
      "agent.multi-agent",
      "agent.mcp-client"
    ],
    "tags": [
      "framework",
      "boxlang",
      "jvm",
      "open-source",
      "apache-2.0",
      "mcp",
      "llms-txt",
      "free"
    ],
    "lastRelease": "2026-10-20",
    "graded": true,
    "anchor": {
      "graded": true,
      "score": 65.8,
      "grade": "B",
      "agentReady": false,
      "rank": 328,
      "ranked": true,
      "rankOf": 1260,
      "categoryRank": 10,
      "methodology": "0.7",
      "run": "2026-10-01",
      "scores": {
        "ergonomics": 74,
        "maintenance": 83,
        "payments": 50,
        "reliability": 66,
        "schema": 71,
        "security": 71,
        "transparency": 70
      },
      "pending": [
        "performance",
        "tasks"
      ],
      "breakdown": [
        {
          "key": "reliability",
          "name": "Reliability",
          "weight": 16,
          "effectiveWeight": 20,
          "score": 66,
          "points": 13.2,
          "reason": "Read with the local-software lines. Official package on ForgeBox, installed with `install-bx-module bx-ai` or `box install bx-ai`, with BoxLang 1.14.0 or later in box.json and JDK 21 in CONTRIBUTING.md, but the 3.6 announcement says BoxLang 1.18 or later (18 of 20). tests.yml runs about 140 test classes against Ollama and the vector stores in Docker Compose, and against paid providers on development and releases, on pull requests and pushes to development. Whether runs pass wasn't read, since WebFetch refused github.com (15 of 25). Open issues and replies weren't read for the same reason. The changelog closes issues #182 to #259 in 3.3.1 to 3.4.0, and bugs also go to Ortus's Jira (10 of 25). Keep a Changelog with semantic versioning stated and Migration sections, but breaking changes ship in minor releases (8 of 15). 3.6.0, past 1.0 (15). 66 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "performance",
          "name": "Performance",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes."
        },
        {
          "key": "schema",
          "name": "Schema \u0026 documentation",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 71,
          "points": 11.54,
          "reason": "Framework reading. A reference page for each built-in function with its arguments, and tool schemas generated from typed function arguments with required fields since 3.3.1. BoxLang is dynamically typed and no published API reference was found, though the repository builds DocBox API docs (15 of 25). llms.txt with about 150 entries and a Markdown copy of every page (10). The FAQ says when to use aiChat() or aiAgent() and the security guide says which guards to use when, though some FAQ links still say coming soon for pages that exist (14 of 20). Tool arguments are typed with required lists, and stdio options a server doesn't have throw InvalidArgument (11 of 15). About 100 example scripts in the repository and a gallery on ai.boxlang.io, but the production guide catches RateLimitException, TimeoutException and AuthenticationException, which the module's source never throws, and there is no exception reference (9 of 15). Keep a Changelog and a release-history page per version, but the 3.6.0 page still read unreleased on 1 November and two old versions appear twice in the changelog (12 of 15). 71 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "ergonomics",
          "name": "Agent ergonomics",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 74,
          "points": 12.03,
          "reason": "Framework reading, scored on what a tool-calling agent with MCP takes. An agent with an MCP server is one `aiAgent()` call with `mcpServers`, and `toolFilter` and `prefix` limit what each server adds. Skills can load lazily, but `autoLoadSkills` is on by default and injects every SKILL.md under /.agents/skills into every agent (20 of 25). MaxToolCallsMiddleware caps tool calls, window and summary memory bound history by messages or tokens, `withMaxResponseBytes` caps MCP answers and `listTools( cursor )` pages tools (17 of 20). Named exceptions (ProviderError, UnsupportedCapability, InvalidArgument, MCPCommandRefused, BXAI.SecurityViolation) but no reference page, and the changelog says a timed-out call still surfaces as a JSON parse error (12 of 20). RetryMiddleware with exponential backoff, approval resumes that don't replay the model call or rerun executed tools, and a stdio client that never repeats an in-flight call. MCP tool annotations such as readOnlyHint aren't read (15 of 20). An agent needs a name and works with defaults, and a mock provider runs with no key, but it is one language (10 of 15). 74 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "security",
          "name": "Security \u0026 auth",
          "weight": 14,
          "effectiveWeight": 17.5,
          "score": 71,
          "points": 12.43,
          "reason": "Framework reading. 30 for what leaves the machine and credentials, 20 for approvals and sandboxing, 15 for prompt injection, 15 for audit and 20 for the security programme. No telemetry in the module's source, requests go only to configured providers, keys come from settings or environment variables, and request logging is off by default. 3.4.0 fixed a Gemini key leaking into logs through the request URL (27 of 30). Approval is enforced in code by HumanInTheLoopMiddleware with five policies, GuardrailMiddleware blocks tools by name and argument pattern, and stdio commands never use a shell. All of it is opt-in. `allowedCommands` allows any executable by default, FileSystemTools allows any path without `allowedPaths`, and the MCP server has no authentication unless configured (12 of 20). Unicode hygiene and fencing of `${context}` are on by default, with opt-in input sanitiser, LLM judge and output guard. Streaming guards detect after the fact, which the changelog says (14 of 15). About 70 interception points, LoggingMiddleware, FlightRecorderMiddleware and MCP server statistics, with no OpenTelemetry export (11 of 15). CONTRIBUTING.md asks for reports to security@ortussolutions.com and the Slack #security channel. No security.txt (410), no bounty, and no published advisory found, while 3.6.0 lists a SQL injection fix in MySQL vector memory under Fixed (7 of 20). 71 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "payments",
          "name": "Payments \u0026 pricing",
          "weight": 10,
          "effectiveWeight": 12.5,
          "score": 50,
          "points": 6.25,
          "reason": "Self-hosted rule, scored on the paid option. No payment protocol (0). BoxLang runtime plans are public without a login, Starter $749 a year and BoxLang+ and BoxLang++ from $1,999 to $4,999 a server or node a year, plan pricing rather than per unit (10). The Apache-2.0 module installs with no card (20) and no account or sign-up (20). 50 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "tasks",
          "name": "Task success",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored."
        },
        {
          "key": "maintenance",
          "name": "Maintenance \u0026 community",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 83,
          "points": 7.26,
          "reason": "3.6.0 on 2026-10-20 (30). Three releases in the 90 days to 1 November, 3.4.0 on 1 September, 3.5.0 on 11 September and 3.6.0 on 20 October (20). 79 commits on the development branch in those 90 days from Luis Majano, Doug Cain, Copilot and dependency bots, with pull requests up to #326 merged on 1 November. Issue reply times couldn't be read (10 of 25). The ForgeBox package is current at 3.6.0 (15). Dependabot for Gradle monthly and Actions quarterly, tests on pull requests and development, and a format check (8 of 10). 83 in all.",
          "checked": "2026-11-01"
        },
        {
          "key": "transparency",
          "name": "Transparency \u0026 trust",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 70,
          "points": 6.13,
          "note": "editorial 65, provenance 74",
          "reason": "Apache-2.0, OSI approved, though the licence file sits in src/main/resources rather than the repository root (30). The FAQ says prompts and history go to the chosen cloud provider and that Ollama keeps data local, and we found no telemetry in the source, but there's no statement for the module of what, if anything, Ortus receives. Ortus's privacy policy covers its website and customers and says data is collected when you use its products without naming which (15 of 30). Migration notes are dated in the changelog, and default models were moved off a Groq model on its removal date, but there's no written deprecation policy or support window (10 of 20). No telemetry statement either way in the docs (10 of 20). 65 in all.",
          "checked": "2026-11-01"
        }
      ],
      "assessment": {
        "date": "2026-11-01",
        "basis": "public evidence",
        "confidence": "medium",
        "notes": {
          "ergonomics": "Framework reading, scored on what a tool-calling agent with MCP takes. An agent with an MCP server is one `aiAgent()` call with `mcpServers`, and `toolFilter` and `prefix` limit what each server adds. Skills can load lazily, but `autoLoadSkills` is on by default and injects every SKILL.md under /.agents/skills into every agent (20 of 25). MaxToolCallsMiddleware caps tool calls, window and summary memory bound history by messages or tokens, `withMaxResponseBytes` caps MCP answers and `listTools( cursor )` pages tools (17 of 20). Named exceptions (ProviderError, UnsupportedCapability, InvalidArgument, MCPCommandRefused, BXAI.SecurityViolation) but no reference page, and the changelog says a timed-out call still surfaces as a JSON parse error (12 of 20). RetryMiddleware with exponential backoff, approval resumes that don't replay the model call or rerun executed tools, and a stdio client that never repeats an in-flight call. MCP tool annotations such as readOnlyHint aren't read (15 of 20). An agent needs a name and works with defaults, and a mock provider runs with no key, but it is one language (10 of 15). 74 in all.",
          "maintenance": "3.6.0 on 2026-10-20 (30). Three releases in the 90 days to 1 November, 3.4.0 on 1 September, 3.5.0 on 11 September and 3.6.0 on 20 October (20). 79 commits on the development branch in those 90 days from Luis Majano, Doug Cain, Copilot and dependency bots, with pull requests up to #326 merged on 1 November. Issue reply times couldn't be read (10 of 25). The ForgeBox package is current at 3.6.0 (15). Dependabot for Gradle monthly and Actions quarterly, tests on pull requests and development, and a format check (8 of 10). 83 in all.",
          "payments": "Self-hosted rule, scored on the paid option. No payment protocol (0). BoxLang runtime plans are public without a login, Starter $749 a year and BoxLang+ and BoxLang++ from $1,999 to $4,999 a server or node a year, plan pricing rather than per unit (10). The Apache-2.0 module installs with no card (20) and no account or sign-up (20). 50 in all.",
          "reliability": "Read with the local-software lines. Official package on ForgeBox, installed with `install-bx-module bx-ai` or `box install bx-ai`, with BoxLang 1.14.0 or later in box.json and JDK 21 in CONTRIBUTING.md, but the 3.6 announcement says BoxLang 1.18 or later (18 of 20). tests.yml runs about 140 test classes against Ollama and the vector stores in Docker Compose, and against paid providers on development and releases, on pull requests and pushes to development. Whether runs pass wasn't read, since WebFetch refused github.com (15 of 25). Open issues and replies weren't read for the same reason. The changelog closes issues #182 to #259 in 3.3.1 to 3.4.0, and bugs also go to Ortus's Jira (10 of 25). Keep a Changelog with semantic versioning stated and Migration sections, but breaking changes ship in minor releases (8 of 15). 3.6.0, past 1.0 (15). 66 in all.",
          "schema": "Framework reading. A reference page for each built-in function with its arguments, and tool schemas generated from typed function arguments with required fields since 3.3.1. BoxLang is dynamically typed and no published API reference was found, though the repository builds DocBox API docs (15 of 25). llms.txt with about 150 entries and a Markdown copy of every page (10). The FAQ says when to use aiChat() or aiAgent() and the security guide says which guards to use when, though some FAQ links still say coming soon for pages that exist (14 of 20). Tool arguments are typed with required lists, and stdio options a server doesn't have throw InvalidArgument (11 of 15). About 100 example scripts in the repository and a gallery on ai.boxlang.io, but the production guide catches RateLimitException, TimeoutException and AuthenticationException, which the module's source never throws, and there is no exception reference (9 of 15). Keep a Changelog and a release-history page per version, but the 3.6.0 page still read unreleased on 1 November and two old versions appear twice in the changelog (12 of 15). 71 in all.",
          "security": "Framework reading. 30 for what leaves the machine and credentials, 20 for approvals and sandboxing, 15 for prompt injection, 15 for audit and 20 for the security programme. No telemetry in the module's source, requests go only to configured providers, keys come from settings or environment variables, and request logging is off by default. 3.4.0 fixed a Gemini key leaking into logs through the request URL (27 of 30). Approval is enforced in code by HumanInTheLoopMiddleware with five policies, GuardrailMiddleware blocks tools by name and argument pattern, and stdio commands never use a shell. All of it is opt-in. `allowedCommands` allows any executable by default, FileSystemTools allows any path without `allowedPaths`, and the MCP server has no authentication unless configured (12 of 20). Unicode hygiene and fencing of `${context}` are on by default, with opt-in input sanitiser, LLM judge and output guard. Streaming guards detect after the fact, which the changelog says (14 of 15). About 70 interception points, LoggingMiddleware, FlightRecorderMiddleware and MCP server statistics, with no OpenTelemetry export (11 of 15). CONTRIBUTING.md asks for reports to security@ortussolutions.com and the Slack #security channel. No security.txt (410), no bounty, and no published advisory found, while 3.6.0 lists a SQL injection fix in MySQL vector memory under Fixed (7 of 20). 71 in all.",
          "transparency": "Apache-2.0, OSI approved, though the licence file sits in src/main/resources rather than the repository root (30). The FAQ says prompts and history go to the chosen cloud provider and that Ollama keeps data local, and we found no telemetry in the source, but there's no statement for the module of what, if anything, Ortus receives. Ortus's privacy policy covers its website and customers and says data is collected when you use its products without naming which (15 of 30). Migration notes are dated in the changelog, and default models were moved off a Groq model on its removal date, but there's no written deprecation policy or support window (10 of 20). No telemetry statement either way in the docs (10 of 20). 65 in all."
        },
        "sources": [
          {
            "what": "repository, tags, commit history and source (bare clone)",
            "url": "https://github.com/ortus-boxlang/bx-ai",
            "seen": "2026-11-01"
          },
          {
            "what": "changelog",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/changelog.md",
            "seen": "2026-11-01"
          },
          {
            "what": "readme",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/readme.md",
            "seen": "2026-11-01"
          },
          {
            "what": "box.json (Apache-2.0, BoxLang 1.14.0 minimum, bugs to Jira)",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/box.json",
            "seen": "2026-11-01"
          },
          {
            "what": "CONTRIBUTING.md (security reporting, support channels)",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/CONTRIBUTING.md",
            "seen": "2026-11-01"
          },
          {
            "what": "test workflow",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/.github/workflows/tests.yml",
            "seen": "2026-11-01"
          },
          {
            "what": "module settings and defaults",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/bx/ModuleConfig.bx",
            "seen": "2026-11-01"
          },
          {
            "what": "filesystem tools and their path guard",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/bx/models/tools/filesystem/FileSystemTools.bx",
            "seen": "2026-11-01"
          },
          {
            "what": "MCP server defaults",
            "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/bx/models/mcp/MCPServer.bx",
            "seen": "2026-11-01"
          },
          {
            "what": "docs index (llms.txt)",
            "url": "https://ai.ortusbooks.com/llms.txt",
            "seen": "2026-11-01"
          },
          {
            "what": "3.6.0 release page in the docs",
            "url": "https://ai.ortusbooks.com/readme/release-history/3.6.0.md",
            "seen": "2026-11-01"
          },
          {
            "what": "1.0.0 release page (March 2025)",
            "url": "https://ai.ortusbooks.com/readme/release-history/1.0.0.md",
            "seen": "2026-11-01"
          },
          {
            "what": "FAQ",
            "url": "https://ai.ortusbooks.com/readme/faq.md",
            "seen": "2026-11-01"
          },
          {
            "what": "security guide",
            "url": "https://ai.ortusbooks.com/advanced/security.md",
            "seen": "2026-11-01"
          },
          {
            "what": "production guide",
            "url": "https://ai.ortusbooks.com/advanced/production.md",
            "seen": "2026-11-01"
          },
          {
            "what": "Ortus announcement of 3.6, 20 October 2026",
            "url": "https://www.ortussolutions.com/blog/boxlang-ai-36-your-agent-now-has-eyes-ears-and-a-voice",
            "seen": "2026-11-01"
          },
          {
            "what": "ForgeBox entry for bx-ai (installs, versions)",
            "url": "https://www.forgebox.io/api/v1/entry/bx-ai",
            "seen": "2026-11-01"
          },
          {
            "what": "ForgeBox entries for bx-playwright and bx-audio",
            "url": "https://www.forgebox.io/api/v1/entry/bx-playwright",
            "seen": "2026-11-01"
          },
          {
            "what": "product site",
            "url": "https://ai.boxlang.io/",
            "seen": "2026-11-01"
          },
          {
            "what": "BoxLang plans and prices",
            "url": "https://boxlang.io/plans",
            "seen": "2026-11-01"
          },
          {
            "what": "Ortus privacy policy",
            "url": "https://www.ortussolutions.com/about-us/ortus-privacy-policy",
            "seen": "2026-11-01"
          },
          {
            "what": "Ortus about page and team",
            "url": "https://www.ortussolutions.com/about-us",
            "seen": "2026-11-01"
          },
          {
            "what": "RDAP record for ortussolutions.com",
            "url": "https://rdap.verisign.com/com/v1/domain/ortussolutions.com",
            "seen": "2026-11-01"
          }
        ],
        "openQuestions": [
          "firstReleased is 2025-03-17, from the changelog's [1.0.0] heading and the v1.0.0 tag dated the same day in a bare clone. The repository's first commit and the ForgeBox entry date from 5 March 2025. The roundup's lead said 3.6 shipped on 30 October; the tag, the changelog and the announcement all say 20 October 2026",
          "unchecked: GitHub issues, pull-request reply times, Actions results and repository security advisories. WebFetch refused github.com, so per the batch rules it wasn't read another way; the repository itself was read from a bare clone",
          "unchecked: whether the DocBox API reference the repository builds is published anywhere",
          "The minimum BoxLang version disagrees. box.json says 1.14.0 and the 3.6 announcement says 1.18 or later. gradle.properties on main builds and tests against 1.17.0; a commit moving it to 1.18.0 (7 October 2026) sits on a side branch that isn't merged",
          "The docs and the code disagree in places. The readme gives skillsDirectory as /.ai/skills while ModuleConfig.bx defaults to /.agents/skills; the docs' 3.6.0 page says unreleased; the production guide's RateLimitException, TimeoutException and AuthenticationException aren't thrown by the source; the announcement places normalised reasoning in 3.6 though the changelog puts it in 3.4.0",
          "Judgement call. The SQL injection through MySQL vector memory filter keys (fixed in 3.6.0, listed under Fixed rather than as a security fix) and the Gemini key in logs (fixed in 3.4.0 under Security Fixes) took no deduction, since neither has a published advisory or severity, as moderates took none on pydantic-ai. A reader may weigh the first differently",
          "Judgement call. The -3 follows google-adk's deduction for breaking changes in minor releases. 3.4.0's rename of gatewayRegistry() to aiGatewayRegistry() wasn't counted, since the gateway registry was new in the same release",
          "bx-playwright and bx-audio are separate Ortus modules, named in the listing and not graded as part of it. On 1 November 2026 ForgeBox listed bx-playwright only as 1.0.0-snapshot though the announcement calls it 1.0; bx-audio is at 1.2.0. Whether bx-playwright (a browser MCP server) should be its own candidate is open",
          "ai.boxlang.io answers /robots.txt with its home page (HTTP 200, HTML), neither rules nor a bot check nor a 404. We read only the home page, once, and used it for the provider count and to check for 'first' or '#1' claims. None was found there, in the readme or in the announcement, so no deduction",
          "Vendor's claims. '15+' or '16+' providers, '20+ memory types', '30+ file formats', '12 vector databases' and 'shell injection is structurally impossible' are Ortus's words. The readme lists 21 providers including the mock and OpenAI-compatible ones",
          "Context, not graded. The BoxLang runtime has paid plans from $749 a year; the plans page lists an 'Extended AI Providers' feature row whose tiers couldn't be read from the page text",
          "Disclosure. These grades are written by agents on Anthropic's Claude models. Claude is one of bx-ai's supported providers, and one commit on an unmerged side branch of the repository (7 October 2026) is authored as Claude. The checklist was applied as for any listing",
          "Our own products. BoxLang AI is a library for building agents. It does neither LocalGhost's job nor letme's (choosing and paying for a tool for a task), so it was graded the normal way",
          "We did not install or run BoxLang, bx-ai or its examples. Every claim about behaviour comes from the source, docs and changelog, read as text"
        ]
      },
      "negative": -3,
      "negativeNotes": [
        "2026-10-20. -3, a breaking change in a minor release without advance notice. 3.6.0 renamed the `MCPClient` class to `MCPHttpClient` with no alias, so code that created the class directly must move to `MCP( url )`. The changelog's Migration section says so on release day. 3.5.0 (11 September) likewise raised the minimum BoxLang runtime from 1.8.0 to 1.14.0. One term at the floor, as google-adk's minor-release breaking changes took. https://github.com/ortus-boxlang/bx-ai/blob/main/changelog.md"
      ],
      "verdict": "A JVM agent framework with human approval, guardrail middleware and an MCP client over HTTP and stdio, all enforced in code, with three releases in the 90 days to 1 November 2026. It runs only on BoxLang, the stronger guards are opt-in, and minor releases have renamed public classes without a deprecation period.",
      "bestFor": "Teams already running BoxLang or modernising CFML on the JVM who want agents, RAG and MCP with approval and guardrails in the same language",
      "strengths": [
        "Human approval enforced in code, with suspended runs that resume without replaying the model call, five approval policies and durable grants",
        "Untrusted context is fenced and inbound text Unicode-normalised by default, with opt-in sanitiser, LLM-judge and output-redaction middleware",
        "stdio MCP servers start without a shell, with an allowedCommands setting, per-server tool filters and prefixes, and restart limits",
        "Three releases in the 90 days to 1 November 2026 (3.4.0, 3.5.0, 3.6.0), with a Keep a Changelog file and migration notes",
        "llms.txt and a Markdown copy of every docs page, plus about 100 runnable example scripts in the repository"
      ],
      "weaknesses": [
        "Runs only on BoxLang, a JVM language, so it suits teams already on BoxLang or CFML rather than Python or TypeScript stacks",
        "Minor releases carry breaking changes. 3.6.0 renamed MCPClient to MCPHttpClient with no alias, noted on release day",
        "The stdio command allow-list, filesystem tool paths and MCP server authentication are all open by default",
        "Docs lag the code. On 1 November the 3.6.0 release page still read unreleased and didn't mention the stdio MCP client",
        "No OpenTelemetry export found. Tracing is through BoxLang interception points, logging and flight-recorder middleware"
      ],
      "agentNotes": [
        "Set `mcp.stdio.allowedCommands` to the executables you need. The default empty list lets any command start as a stdio MCP server.",
        "Pass `allowedPaths` when you create FileSystemTools. With none, its tools can read, write and delete anywhere the JVM user can.",
        "Attach HumanInTheLoopMiddleware with a checkpointer for tools that write or spend. Approval is opt-in.",
        "Create MCP clients with `MCP()` rather than the class, since 3.6.0 renamed MCPClient to MCPHttpClient without an alias.",
        "Use the `mock` provider to test agent wiring and guardrails with no API key or network."
      ],
      "metrics": {
        "kind": "library",
        "measured": false
      },
      "reviewCount": 0,
      "avgRating": 0,
      "history": [
        {
          "basis": "public evidence",
          "confidence": "medium",
          "grade": "B",
          "methodology": "0.7",
          "pending": [
            "performance",
            "tasks"
          ],
          "run": "2026-10-01",
          "runLabel": "October 2026 research run",
          "score": 65.8
        }
      ],
      "editorialScores": {
        "ergonomics": 74,
        "maintenance": 83,
        "payments": 50,
        "reliability": 66,
        "schema": 71,
        "security": 71,
        "transparency": 65
      },
      "provenanceScore": 74,
      "checked": {
        "categories": {
          "ergonomics": "2026-11-01",
          "maintenance": "2026-11-01",
          "payments": "2026-11-01",
          "reliability": "2026-11-01",
          "schema": "2026-11-01",
          "security": "2026-11-01",
          "transparency": "2026-11-01"
        },
        "last": "2026-11-01",
        "oldest": "2026-11-01",
        "stale": false,
        "staleAfterDays": 90
      },
      "scoreHistory": [
        {
          "date": "2026-11-01",
          "grade": "B",
          "kind": "listed",
          "method": "0.7",
          "score": 65.8
        }
      ]
    },
    "connect": {
      "install": "install-bx-module bx-ai   # in a web app: box install bx-ai"
    },
    "letme": {
      "capability": "https://letme.dev/agent.framework",
      "tool": "https://letme.dev/boxlang-ai"
    },
    "sameCompany": [
      "bx-playwright"
    ],
    "notable": [
      "3.6.0 was tagged and its changelog finalised on 20 October 2026, with Ortus's announcement the same day (https://github.com/ortus-boxlang/bx-ai/blob/main/changelog.md)",
      "First release 1.0.0 on 17 March 2025, per the changelog and the v1.0.0 tag; the repository's first commit and the ForgeBox entry date from 5 March 2025 (https://www.forgebox.io/api/v1/entry/bx-ai)",
      "ForgeBox reports 8,197 installs of bx-ai, 452 of them of 3.6.0, on 1 November 2026 (https://www.forgebox.io/api/v1/entry/bx-ai)",
      "Browser automation and audio in the 3.6 announcement come from separate modules, bx-playwright and bx-audio, which bx-ai reaches over MCP or the tool registry (https://www.ortussolutions.com/blog/boxlang-ai-36-your-agent-now-has-eyes-ears-and-a-voice)",
      "The docs' 3.6.0 release page still read \"Unreleased (in development)\" on 1 November 2026 and doesn't mention the stdio MCP client (https://ai.ortusbooks.com/readme/release-history/3.6.0.md)",
      "830 of the 995 commits on main are authored as Luis Majano on 1 November 2026, read from a bare clone (https://github.com/ortus-boxlang/bx-ai)"
    ],
    "area": "frameworks",
    "details": [
      {
        "label": "Languages",
        "value": "BoxLang 1.14.0 or later on Java 21 (the 3.6 announcement says BoxLang 1.18 or later)"
      },
      {
        "label": "Models",
        "value": "OpenAI, Claude, Gemini, Grok, Groq, Mistral, DeepSeek, Cohere, Perplexity, MiniMax, OpenRouter, Hugging Face, AWS Bedrock, Cloudflare Workers AI, Ollama, Docker Model Runner, any OpenAI-compatible API, plus Voyage, ElevenLabs and Cartesia for embeddings and speech"
      },
      {
        "label": "MCP client",
        "value": "HTTP (JSON-RPC, with event-stream answers read since 3.6.0), and stdio since 3.6.0, with tool filters and prefixes per server"
      },
      {
        "label": "MCP server",
        "value": "HTTP at /~bxai/mcp.bxm in a web app, and stdio. Basic auth, API keys, CORS and body limits are opt-in"
      },
      {
        "label": "Multi-agent",
        "value": "Sub-agents and an agent registry"
      },
      {
        "label": "Durable state",
        "value": "Suspended approval runs checkpoint to cache or JDBC memory and resume without replaying the model call. No crash recovery for runs in general"
      },
      {
        "label": "Human approval",
        "value": "HumanInTheLoopMiddleware with tool-name, risk-level, annotation, callback and composite policies, through CLI or signed HTTP gateways"
      },
      {
        "label": "Guardrails",
        "value": "Unicode hygiene and context fencing on by default. Input sanitiser, guardrail, LLM-judge and output-guard middleware opt-in"
      },
      {
        "label": "Tracing",
        "value": "BoxLang interception points, LoggingMiddleware and FlightRecorderMiddleware. No OpenTelemetry found"
      },
      {
        "label": "Telemetry",
        "value": "None found in the module's source. Requests go only to the configured providers"
      },
      {
        "label": "Releases in 90 days",
        "value": "3.4.0 (1 September), 3.5.0 (11 September) and 3.6.0 (20 October 2026)"
      },
      {
        "label": "Separate modules",
        "value": "bx-playwright (browser automation with its own MCP server) and bx-audio (audio tools) are Ortus modules announced with 3.6 and aren't graded here"
      },
      {
        "label": "Paid plans",
        "value": "BoxLang runtime plans, Starter $749 a year, BoxLang+ $1,999 a server or $2,999 a node a year, BoxLang++ $3,999 or $4,999"
      }
    ],
    "provenance": {
      "legalEntity": "Ortus Solutions, Corp.",
      "domain": "ortussolutions.com",
      "domainRegistered": "2006-04-12",
      "endpointOnVendorDomain": null,
      "terms": "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/resources/LICENSE",
      "privacy": "https://www.ortussolutions.com/about-us/ortus-privacy-policy",
      "statusPage": "",
      "changelog": "https://github.com/ortus-boxlang/bx-ai/blob/main/changelog.md",
      "securityTxt": "none",
      "checked": "2026-11-01",
      "notes": [
        "The readme names Ortus Solutions, Corp as copyright holder, and box.json names Ortus Solutions as author.",
        "domainRegistered is from Verisign's RDAP record for ortussolutions.com. rdap.org has no record for boxlang.io, so the product domain's date wasn't read.",
        "security.txt answers 410 on www.ortussolutions.com and boxlang.io. CONTRIBUTING.md asks for vulnerability reports to security@ortussolutions.com.",
        "The Apache 2.0 licence stands in for terms. The privacy policy covers Ortus's website and customers, not the module.",
        "Local software, so there is no endpoint or status page."
      ],
      "score": 74,
      "checks": [
        {
          "check": "Legal entity named",
          "value": "Ortus Solutions, Corp.",
          "points": 20,
          "max": 20,
          "state": "ok"
        },
        {
          "check": "Domain age",
          "value": "ortussolutions.com, registered 2006-04-12 (20 years)",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Endpoint on the vendor's domain",
          "value": "no hosted endpoint",
          "points": 0,
          "max": 0,
          "state": "na"
        },
        {
          "check": "Terms of service",
          "value": "read, states 2 of the 7 things a reader expects",
          "points": 5.7,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Privacy policy",
          "value": "read, states 5 of the 8 things a reader expects",
          "points": 7.8,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Status page",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        },
        {
          "check": "Changelog",
          "value": "published",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "security.txt",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        },
        {
          "check": "People named",
          "value": "1 named with their role, 1 with a public profile",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Support route",
          "value": "help pages, a community",
          "points": 5,
          "max": 5,
          "state": "ok"
        }
      ],
      "policies": [
        {
          "kind": "terms",
          "url": "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/resources/LICENSE",
          "state": "read",
          "readAt": "2026-11-01",
          "words": 1580,
          "points": 5.7,
          "max": 10,
          "expected": [
            {
              "key": "terms.date",
              "label": "Gives the date it was last updated",
              "found": false
            },
            {
              "key": "terms.law",
              "label": "Names the governing law or courts",
              "found": false
            },
            {
              "key": "terms.liability",
              "label": "States a limit on its liability",
              "found": true,
              "quote": "…arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.",
              "says": "Rules out indirect and consequential losses, with no cap named in this sentence"
            },
            {
              "key": "terms.termination",
              "label": "Says how the agreement or account can be ended",
              "found": false
            },
            {
              "key": "terms.changes",
              "label": "Says how changes to the terms are announced",
              "found": false
            },
            {
              "key": "terms.use",
              "label": "Lists what users may not do",
              "found": true,
              "quote": "you may not use this file except in compliance with the License."
            },
            {
              "key": "terms.sla",
              "label": "Refers to a service level or uptime commitment",
              "found": false
            }
          ]
        },
        {
          "kind": "privacy",
          "url": "https://www.ortussolutions.com/about-us/ortus-privacy-policy",
          "state": "read",
          "readAt": "2026-11-01",
          "words": 1448,
          "points": 7.8,
          "max": 10,
          "expected": [
            {
              "key": "privacy.date",
              "label": "Gives the date it was last updated",
              "found": false
            },
            {
              "key": "privacy.collected",
              "label": "Says what personal data is collected",
              "found": true,
              "quote": "We have physical, electronic, and managerial procedures to safeguard and secure the information we collect."
            },
            {
              "key": "privacy.retention",
              "label": "Says how long data is kept",
              "found": false
            },
            {
              "key": "privacy.processors",
              "label": "Says who else receives the data",
              "found": true,
              "quote": "Here are the details of our main third-party service providers, and what data they collect, store or process on our behalf."
            },
            {
              "key": "privacy.sale",
              "label": "Says whether personal data is sold or shared for advertising",
              "found": false
            },
            {
              "key": "privacy.rights",
              "label": "Says what rights people have over their data",
              "found": true,
              "quote": "Credit/Debit card information is stored and payments are processed by third parties with GDPR and PCI compliance."
            },
            {
              "key": "privacy.contact",
              "label": "Gives a privacy contact",
              "found": true,
              "quote": "If you believe your privacy has been breached, please contact us immediately on info@ortussolutions.com.",
              "says": "info@ortussolutions.com"
            },
            {
              "key": "privacy.transfers",
              "label": "Says where data is transferred or stored",
              "found": true,
              "quote": "If we transfer or store your information outside the United States in this way, we will take steps to ensure that your privacy rights continue to be protected as outlined in this Privacy Policy.",
              "says": "Data goes to the United States"
            }
          ]
        }
      ]
    },
    "humans": {
      "slug": "boxlang-ai",
      "checked": "2026-11-01",
      "company": "Ortus Solutions",
      "people": [
        {
          "name": "Luis Majano",
          "role": "Founder and Software Architect, Ortus Solutions; lead developer of BoxLang AI",
          "founder": true,
          "linkedin": "https://www.linkedin.com/in/lmajano/",
          "github": "https://github.com/lmajano",
          "bio": "Luis Majano founded Ortus Solutions in 2006 and is listed on its team page as founder and software architect. He is named as the author of the bx-ai module and wrote 830 of the 995 commits on its main branch by 1 November 2026, and he signed Ortus's announcement of BoxLang AI 3.6.",
          "bioSources": [
            "https://www.ortussolutions.com/about-us",
            "https://github.com/ortus-boxlang/bx-ai",
            "https://www.ortussolutions.com/blog/boxlang-ai-36-your-agent-now-has-eyes-ears-and-a-voice"
          ],
          "page": "/people/luis-majano/"
        }
      ],
      "peopleNote": "Luis Majano's role, LinkedIn and GitHub are from the team data on Ortus's about page, read on 1 November 2026; the about page says he founded the company in 2006. His authorship of bx-ai is from ModuleConfig.bx and a bare clone of the repository. Other contributors in the last 90 days (Doug Cain, and Jacob Beers earlier) aren't named on the product, so they aren't listed. The roster of Ortus's founders may be incomplete; the about page names only Luis Majano. Investors: two web searches for Ortus Solutions funding, investors or a round, plus the about page and the 3.6 announcement, found no investor, round or acquisition. Ortus's Patreon is sponsorship, not investment.",
      "companySocial": {
        "x": "https://x.com/ortussolutions",
        "github": "https://github.com/ortus-solutions"
      },
      "support": {
        "urls": [
          "https://github.com/ortus-boxlang/bx-ai/issues",
          "https://ai.ortusbooks.com",
          "https://www.ortussolutions.com/services/support"
        ],
        "community": [
          {
            "label": "Box Team Slack",
            "url": "https://boxteam.ortussolutions.com",
            "kind": "slack"
          },
          {
            "label": "Ortus Community",
            "url": "https://community.ortussolutions.com",
            "kind": "forum"
          }
        ],
        "contactEmails": [
          "info@ortussolutions.com"
        ]
      },
      "sources": [
        "https://www.ortussolutions.com/about-us",
        "https://github.com/ortus-boxlang/bx-ai/blob/main/CONTRIBUTING.md",
        "https://github.com/ortus-boxlang/bx-ai/blob/main/src/main/bx/ModuleConfig.bx",
        "https://www.ortussolutions.com/blog/boxlang-ai-36-your-agent-now-has-eyes-ears-and-a-voice"
      ],
      "ownership": {
        "status": "private",
        "checked": "2026-11-01",
        "sources": [
          "https://www.ortussolutions.com/about-us"
        ]
      }
    },
    "pageJsonUrl": "https://www.anchorterminal.com/tools/boxlang-ai.json"
  }
}
