{
  "fixes": {
    "slug": "localai",
    "name": "LocalAI",
    "listing": "https://www.anchorterminal.com/tools/localai",
    "markdown": "# Fix list: LocalAI\n\nFrom Anchor Terminal's listing at https://www.anchorterminal.com/tools/localai, the October 2026 research run, assessed 3 October 2026. Grade B, 68 out of 100.\n\nThis is everything the published grade says the listing lacks, the biggest possible gain to the total first. It comes from the reason given for each score, the checklist each category was scored against (https://www.anchorterminal.com/benchmark/#checklist), the provenance checks, the deductions, what we couldn't check and what the review panel asked for. A fix counts at the next check, once it's public.\n\nFor a coding agent working on LocalAI: work through the items below in the product, its docs and its public pages. Each category gives the reason for its score, with the points each checklist item earned, and the checklist itself, so the gap is the items that earned less than their points. Change the product, not the wording, and keep a note of what you changed and where it's published.\n\n## 1. Security \u0026 auth, 62 out of 100, up to 6.7 more on the total\n\nWhy it scored 62: Read with the tool checklist. Credentials are off until the operator sets them. With neither keys nor accounts the server answers every caller, and it refuses to start on a public address in that state unless `--allow-insecure-public-bind` is set, while loopback, LAN and VPN binds stay open. Keys from `LOCALAI_API_KEY` grant full admin. With `LOCALAI_AUTH`, users create their own keys, stored as HMAC-SHA256, revocable and with an optional expiry in the source, each carrying the user's role and per-model and per-feature permissions. No key in a query string (22 of 30). The user role reaches inference only, agents, skills and fine-tuning start off for new users, per-user quotas cap requests and tokens, and the MCP server has a `--read-only` mode. Its mutating tools are held back by a system-prompt rule alone, and the docs say there's no code-side preview or apply step (14 of 20). Agents and MCP tools bring web pages and tool output into the model, and we found no prompt-injection guidance. A PII redaction tier and a moderation endpoint exist (4 of 15). Traces, backend logs and per-user and per-key usage for admins, and Prometheus metrics at /metrics (13 of 15). SECURITY.md with security@localai.io, a 48-hour acknowledgement and Huntr, GitHub private reporting, gosec on every push and cosign-signed backend images. No bounty, no security.txt, SECURITY.md still calls 3.x the current series, backend integrity checks warn rather than refuse by default (`LOCALAI_REQUIRE_BACKEND_INTEGRITY`), and no GitHub advisory for CVE-2026-59707 (9 of 20).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-security):\n\n- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.\n\nModels are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing.\n\n## 2. Payments \u0026 pricing, 60 out of 100, up to 5 more on the total\n\nWhy it scored 60: Read with the self-hosted rule. No x402, MPP or L402, and nothing is sold (0). MIT with no account and no card, so 20, 20 and 20 on the last three lines. GitHub Sponsors is the only money in sight.\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-payments):\n\nThe published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).\n\n- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).\n\nPayment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.\n\nOpen-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol.\n\n## 3. Agent ergonomics, 71 out of 100, up to 4.7 more on the total\n\nWhy it scored 71: Read with the API lines for the OpenAI-compatible surface an agent calls. Responses size through `max_tokens` and streaming, and the llama.cpp prompt cache has been on by default since 4.3.0. The MCP admin server is the heavier surface, 42 tools in about 6,300 characters of descriptions, and `--read-only` halves it to 21 (18 of 25). `limit` and `offset` or `starting_after` on some list endpoints, and a capability filter on installed models (14 of 20). Errors arrive in the caller's own envelope (OpenAI, Anthropic or Open Responses) with a type and a message, 401 adds WWW-Authenticate, and 429 and 503 carry Retry-After, with load progress while a model warms (18 of 20). No idempotency keys, and no readOnlyHint or destructiveHint on the MCP tools. Inference calls are stateless and safe to repeat, and Retry-After says when (9 of 20). One command starts a model (`local-ai run \u003cmodel\u003e`), and existing OpenAI, Anthropic and Ollama clients work unchanged, but there's no LocalAI client SDK (12 of 15).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-ergonomics):\n\n- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.\n\nModels are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs.\n\n## 4. Transparency \u0026 trust, 47 out of 100, up to 4.6 more on the total\n\nMade of editorial 67, provenance 27.\n\nWhy it scored 47: MIT, with each backend image carrying its upstream engine under that engine's licence (30). There's no privacy policy for localai.io or the software. The README and the overview say data never leaves the machine, and we found no telemetry in the source, but a default start fetches the gallery index from index.localai.io and probes model files to estimate their size, and nothing says what index.localai.io logs or keeps (12 of 30). Deprecated flags are marked in the CLI reference and still work, and SECURITY.md dates the end of 1.x and 2.x support, but it hasn't been updated for 3.x or 4.x (8 of 20). No telemetry or analytics library in the Go source, OpenTelemetry metrics stay on the instance, and the gallery fetches are documented with an offline cache. The start-up size probes aren't described as network calls anywhere we read (17 of 20).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-transparency):\n\n- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).\n\nThe other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two.\n\nProvenance checks not met in full (half of this category, computed from checked facts):\n\n- Legal entity named: not found (0 of 20)\n- Domain age: localai.io, no registry record we could read (0 of 15)\n- Status page: not found (0 of 10)\n- security.txt: not found (0 of 10)\n\n## 5. Reliability, 84 out of 100, up to 3.2 more on the total\n\nWhy it scored 84: Read with the local-software lines, since LocalAI runs on the owner's hardware with no hosted service behind it. Docker Hub images per accelerator (CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson L4T and CPU), Linux binaries for amd64 and arm64 on GitHub releases, a Kubernetes guide and Go 1.26 for source builds. The macOS DMG isn't signed by Apple and needs its quarantine flag removed, and issue #11410 reports that the 4.8.0 DMG held 4.7.1 (18 of 20). The Tests workflow runs on every push to master and on pull requests, and its last 10 runs on master had passed on 3 October 2026, beside end-to-end, UI, AIO and gosec workflows (25). The issues tab showed 87 open and the repository header 113. Recent bug reports carry an unconfirmed label, among them a start-up warm-up that downloads over 1 GB each time (#11483) and pinned models unloaded after every request (#11101), and a stale bot closes issues after 95 quiet days, which keeps the count down (18 of 25). Semver tags with notes on every release, but no breaking-change section, and v4.9.0's new credential requirement on /version and generated-file URLs sat in the body of the notes (8 of 15). 4.11.0, stable (15).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-reliability):\n\nHosted APIs, MCP servers, models and platforms.\n\n- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.\n\nLocal packages, SDKs, frameworks and stdio MCP servers.\n\n- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.\n\nProtocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors.\n\n## 6. Schema \u0026 documentation, 81 out of 100, up to 3.1 more on the total\n\nWhy it scored 81: A Swagger 2.0 file with 133 operations, regenerated on 2 October 2026 and served at /swagger on every instance, and typed JSON Schema inputs on the MCP server's tools, generated from Go structs. Its info block still says version 2.0.0 (25). No llms.txt at localai.io (404). Every instance answers /.well-known/localai.json and /api/instructions without a key, with Markdown API guides and OpenAPI fragments written for agents, so 8 of 10. The docs explain each feature with its backends and setup, and MCP tool descriptions say what to call first (\"Always run this before install_model\"), but the Swagger summaries are one line each (15 of 20). None of the 196 Swagger definitions has an enum, and the MCP tools give allowed values in prose (7 of 15). An error reference covers the OpenAI, Anthropic and Open Responses envelopes and every status code, including 429 and 503 with Retry-After, with a separate runtime-errors page and curl examples throughout (14 of 15). Notes on every GitHub release and a blog, no CHANGELOG file, and the stale version label in the spec (12 of 15).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-schema):\n\nAPIs and MCP servers.\n\n- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.\n\nModels are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference.\n\n## 7. Maintenance \u0026 community, 80 out of 100, up to 1.8 more on the total\n\nWhy it scored 80: v4.11.0 on 2 October 2026 (30). Ten releases in the 90 days to 3 October, from v4.6.1 on 6 July to v4.11.0 (20). The 4.11.0 notes count 243 merged pull requests from 12 people in 15 days. Recent bug reports carry an unconfirmed label, comment threads didn't render for our reader, and a stale bot closes quiet issues after 95 days (15 of 25). No official MCP registry entry for `local-ai mcp-server` and no LocalAI client SDK, though OpenAI, Anthropic and Ollama SDKs work against it (5 of 15). Renovate and daily bump workflows keep the backends current, and CI passes on master (10).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-maintenance):\n\n- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.\n\nModels are read for deprecation notice periods and model churn rather than release counts.\n\n## Deductions\n\nEach comes off the total. A fixed and documented problem counts for less at the next check.\n\n- 2026-07-07. CVE-2026-59707 (8.6 at NVD under CVSS 3.1, published by VulnCheck), an unauthenticated server-side request forgery through POST /models/apply in v4.3.1 and earlier, reported in issue #10665. The code now refuses private, loopback and metadata addresses in gallery config fetches, with a comment citing the issue, from v4.8.0 at the latest. The project published no GitHub advisory, the fix commit NVD and VulnCheck name (f9b968e) is an unrelated docs change, and SECURITY.md still lists 3.x as the supported series. Fixed, documented only by a third party, -3. https://nvd.nist.gov/vuln/detail/CVE-2026-59707; https://github.com/mudler/LocalAI/issues/10665\n\n## What we couldn't check\n\nWhat we couldn't read counted as absent. Publishing it on a page a plain HTTP fetch can read (not only in a browser) lets the next check count it.\n\n- unchecked: who answers issues and how fast, since comment threads didn't render for our reader\n- unchecked: which release first shipped the CVE-2026-59707 fix. The guard is in v4.8.0 and later, and our clone doesn't reach further back\n- Whether issue #10665 got a maintainer reply. NVD and VulnCheck name commit f9b968e as the fix, which is a typo fix in the GPU docs\n- unchecked: what index.localai.io logs about the instances that fetch it, and who runs it\n- unchecked: the registration date of localai.io and any legal entity behind the project\n- unchecked: Docker Hub pull counts\n\n## Weaknesses\n\n- No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin\n- CVE-2026-59707, an unauthenticated SSRF in v4.3.1 and earlier, published by VulnCheck in July 2026 with no advisory from the project\n- SECURITY.md still names 3.x as the supported series, and there's no security.txt or privacy policy\n- The MCP admin server registers 42 tools against the 19 its docs list, with no annotations, and its writes are held back only by a prompt\n- No breaking-change section in the release notes, and the unsigned macOS DMG needs its quarantine flag removed by hand\n\n## What costs an agent a turn today\n\nThe notes we give agents before they call it. Each one is a workaround an agent shouldn't need.\n\n- Send `Authorization: Bearer \u003ckey\u003e` when the operator has set keys. A 401 means the instance has auth on\n- Read /.well-known/localai.json and /api/instructions first. Both answer without a key and list what this instance can do\n- Back off on 429 and 503 for the Retry-After seconds. A 503 can mean the model is still loading\n- Start `local-ai mcp-server` with `--read-only` unless the task is to install or delete models\n- Take model names from /v1/models. Each instance names its own\n\n## What the review panel asked for\n\n- breaking-change section\n- SECURITY.md for 4.x\n- annotations on MCP tools\n- advisory for CVE-2026-59707\n\n## When it's done\n\nSend what changed and where it's published as a dispute (https://www.anchorterminal.com/builders/#disputes, or `POST https://www.anchorterminal.com/api/v1/contact` with `\"kind\": \"dispute\"`). Disputes are answered in public, and the listing is checked again by the same checklist. Paying for an audit or a listing claim changes nothing here.\n",
    "grade": "B",
    "score": 68,
    "assessed": "2026-10-03",
    "run": "October 2026 research run",
    "categories": [
      {
        "key": "security",
        "name": "Security \u0026 auth",
        "score": 62,
        "maxGain": 6.7,
        "reason": "Read with the tool checklist. Credentials are off until the operator sets them. With neither keys nor accounts the server answers every caller, and it refuses to start on a public address in that state unless `--allow-insecure-public-bind` is set, while loopback, LAN and VPN binds stay open. Keys from `LOCALAI_API_KEY` grant full admin. With `LOCALAI_AUTH`, users create their own keys, stored as HMAC-SHA256, revocable and with an optional expiry in the source, each carrying the user's role and per-model and per-feature permissions. No key in a query string (22 of 30). The user role reaches inference only, agents, skills and fine-tuning start off for new users, per-user quotas cap requests and tokens, and the MCP server has a `--read-only` mode. Its mutating tools are held back by a system-prompt rule alone, and the docs say there's no code-side preview or apply step (14 of 20). Agents and MCP tools bring web pages and tool output into the model, and we found no prompt-injection guidance. A PII redaction tier and a moderation endpoint exist (4 of 15). Traces, backend logs and per-user and per-key usage for admins, and Prometheus metrics at /metrics (13 of 15). SECURITY.md with security@localai.io, a 48-hour acknowledgement and Huntr, GitHub private reporting, gosec on every push and cosign-signed backend images. No bounty, no security.txt, SECURITY.md still calls 3.x the current series, backend integrity checks warn rather than refuse by default (`LOCALAI_REQUIRE_BACKEND_INTEGRITY`), and no GitHub advisory for CVE-2026-59707 (9 of 20).",
        "checklist": [
          "- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.",
          "Models are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-security"
      },
      {
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "score": 60,
        "maxGain": 5,
        "reason": "Read with the self-hosted rule. No x402, MPP or L402, and nothing is sold (0). MIT with no account and no card, so 20, 20 and 20 on the last three lines. GitHub Sponsors is the only money in sight.",
        "checklist": [
          "The published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).",
          "- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).",
          "Payment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.",
          "Open-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-payments"
      },
      {
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "score": 71,
        "maxGain": 4.7,
        "reason": "Read with the API lines for the OpenAI-compatible surface an agent calls. Responses size through `max_tokens` and streaming, and the llama.cpp prompt cache has been on by default since 4.3.0. The MCP admin server is the heavier surface, 42 tools in about 6,300 characters of descriptions, and `--read-only` halves it to 21 (18 of 25). `limit` and `offset` or `starting_after` on some list endpoints, and a capability filter on installed models (14 of 20). Errors arrive in the caller's own envelope (OpenAI, Anthropic or Open Responses) with a type and a message, 401 adds WWW-Authenticate, and 429 and 503 carry Retry-After, with load progress while a model warms (18 of 20). No idempotency keys, and no readOnlyHint or destructiveHint on the MCP tools. Inference calls are stateless and safe to repeat, and Retry-After says when (9 of 20). One command starts a model (`local-ai run \u003cmodel\u003e`), and existing OpenAI, Anthropic and Ollama clients work unchanged, but there's no LocalAI client SDK (12 of 15).",
        "checklist": [
          "- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.",
          "Models are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-ergonomics"
      },
      {
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "score": 47,
        "maxGain": 4.6,
        "reason": "MIT, with each backend image carrying its upstream engine under that engine's licence (30). There's no privacy policy for localai.io or the software. The README and the overview say data never leaves the machine, and we found no telemetry in the source, but a default start fetches the gallery index from index.localai.io and probes model files to estimate their size, and nothing says what index.localai.io logs or keeps (12 of 30). Deprecated flags are marked in the CLI reference and still work, and SECURITY.md dates the end of 1.x and 2.x support, but it hasn't been updated for 3.x or 4.x (8 of 20). No telemetry or analytics library in the Go source, OpenTelemetry metrics stay on the instance, and the gallery fetches are documented with an offline cache. The start-up size probes aren't described as network calls anywhere we read (17 of 20).",
        "blend": "editorial 67, provenance 27",
        "checklist": [
          "- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).",
          "The other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-transparency"
      },
      {
        "key": "reliability",
        "name": "Reliability",
        "score": 84,
        "maxGain": 3.2,
        "reason": "Read with the local-software lines, since LocalAI runs on the owner's hardware with no hosted service behind it. Docker Hub images per accelerator (CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson L4T and CPU), Linux binaries for amd64 and arm64 on GitHub releases, a Kubernetes guide and Go 1.26 for source builds. The macOS DMG isn't signed by Apple and needs its quarantine flag removed, and issue #11410 reports that the 4.8.0 DMG held 4.7.1 (18 of 20). The Tests workflow runs on every push to master and on pull requests, and its last 10 runs on master had passed on 3 October 2026, beside end-to-end, UI, AIO and gosec workflows (25). The issues tab showed 87 open and the repository header 113. Recent bug reports carry an unconfirmed label, among them a start-up warm-up that downloads over 1 GB each time (#11483) and pinned models unloaded after every request (#11101), and a stale bot closes issues after 95 quiet days, which keeps the count down (18 of 25). Semver tags with notes on every release, but no breaking-change section, and v4.9.0's new credential requirement on /version and generated-file URLs sat in the body of the notes (8 of 15). 4.11.0, stable (15).",
        "checklist": [
          "Hosted APIs, MCP servers, models and platforms.",
          "- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.",
          "Local packages, SDKs, frameworks and stdio MCP servers.",
          "- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.",
          "Protocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-reliability"
      },
      {
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "score": 81,
        "maxGain": 3.1,
        "reason": "A Swagger 2.0 file with 133 operations, regenerated on 2 October 2026 and served at /swagger on every instance, and typed JSON Schema inputs on the MCP server's tools, generated from Go structs. Its info block still says version 2.0.0 (25). No llms.txt at localai.io (404). Every instance answers /.well-known/localai.json and /api/instructions without a key, with Markdown API guides and OpenAPI fragments written for agents, so 8 of 10. The docs explain each feature with its backends and setup, and MCP tool descriptions say what to call first (\"Always run this before install_model\"), but the Swagger summaries are one line each (15 of 20). None of the 196 Swagger definitions has an enum, and the MCP tools give allowed values in prose (7 of 15). An error reference covers the OpenAI, Anthropic and Open Responses envelopes and every status code, including 429 and 503 with Retry-After, with a separate runtime-errors page and curl examples throughout (14 of 15). Notes on every GitHub release and a blog, no CHANGELOG file, and the stale version label in the spec (12 of 15).",
        "checklist": [
          "APIs and MCP servers.",
          "- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.",
          "Models are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-schema"
      },
      {
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "score": 80,
        "maxGain": 1.8,
        "reason": "v4.11.0 on 2 October 2026 (30). Ten releases in the 90 days to 3 October, from v4.6.1 on 6 July to v4.11.0 (20). The 4.11.0 notes count 243 merged pull requests from 12 people in 15 days. Recent bug reports carry an unconfirmed label, comment threads didn't render for our reader, and a stale bot closes quiet issues after 95 days (15 of 25). No official MCP registry entry for `local-ai mcp-server` and no LocalAI client SDK, though OpenAI, Anthropic and Ollama SDKs work against it (5 of 15). Renovate and daily bump workflows keep the backends current, and CI passes on master (10).",
        "checklist": [
          "- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.",
          "Models are read for deprecation notice periods and model churn rather than release counts."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-maintenance"
      }
    ],
    "provenance": [
      {
        "label": "Legal entity named",
        "value": "not found",
        "points": 0,
        "max": 20
      },
      {
        "label": "Domain age",
        "value": "localai.io, no registry record we could read",
        "points": 0,
        "max": 15
      },
      {
        "label": "Status page",
        "value": "not found",
        "points": 0,
        "max": 10
      },
      {
        "label": "security.txt",
        "value": "not found",
        "points": 0,
        "max": 10
      }
    ],
    "deductions": [
      "2026-07-07. CVE-2026-59707 (8.6 at NVD under CVSS 3.1, published by VulnCheck), an unauthenticated server-side request forgery through POST /models/apply in v4.3.1 and earlier, reported in issue #10665. The code now refuses private, loopback and metadata addresses in gallery config fetches, with a comment citing the issue, from v4.8.0 at the latest. The project published no GitHub advisory, the fix commit NVD and VulnCheck name (f9b968e) is an unrelated docs change, and SECURITY.md still lists 3.x as the supported series. Fixed, documented only by a third party, -3. https://nvd.nist.gov/vuln/detail/CVE-2026-59707; https://github.com/mudler/LocalAI/issues/10665"
    ],
    "unchecked": [
      "unchecked: who answers issues and how fast, since comment threads didn't render for our reader",
      "unchecked: which release first shipped the CVE-2026-59707 fix. The guard is in v4.8.0 and later, and our clone doesn't reach further back",
      "Whether issue #10665 got a maintainer reply. NVD and VulnCheck name commit f9b968e as the fix, which is a typo fix in the GPU docs",
      "unchecked: what index.localai.io logs about the instances that fetch it, and who runs it",
      "unchecked: the registration date of localai.io and any legal entity behind the project",
      "unchecked: Docker Hub pull counts"
    ],
    "weaknesses": [
      "No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin",
      "CVE-2026-59707, an unauthenticated SSRF in v4.3.1 and earlier, published by VulnCheck in July 2026 with no advisory from the project",
      "SECURITY.md still names 3.x as the supported series, and there's no security.txt or privacy policy",
      "The MCP admin server registers 42 tools against the 19 its docs list, with no annotations, and its writes are held back only by a prompt",
      "No breaking-change section in the release notes, and the unsigned macOS DMG needs its quarantine flag removed by hand"
    ],
    "agentNotes": [
      "Send `Authorization: Bearer \u003ckey\u003e` when the operator has set keys. A 401 means the instance has auth on",
      "Read /.well-known/localai.json and /api/instructions first. Both answer without a key and list what this instance can do",
      "Back off on 429 and 503 for the Retry-After seconds. A 503 can mean the model is still loading",
      "Start `local-ai mcp-server` with `--read-only` unless the task is to install or delete models",
      "Take model names from /v1/models. Each instance names its own"
    ],
    "requests": [
      {
        "text": "breaking-change section",
        "reviews": 1
      },
      {
        "text": "SECURITY.md for 4.x",
        "reviews": 1
      },
      {
        "text": "annotations on MCP tools",
        "reviews": 1
      },
      {
        "text": "advisory for CVE-2026-59707",
        "reviews": 1
      }
    ],
    "recheck": "https://www.anchorterminal.com/builders/#disputes"
  },
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  }
}
