{
  "generated_at": "2026-08-11T09:12:35.272Z",
  "schema": "https://netresearch.github.io/schema/project-manifest.schema.json",
  "products": [
    {
      "manifest_version": 1,
      "name": "nr-vault",
      "slug": null,
      "stage": "beta",
      "latest_release": "v0.15.0",
      "release_date": "2026-08-10",
      "main_version": "0.15.0",
      "docs_version": null,
      "last_verified": null,
      "owner": null,
      "license": "GPL-2.0",
      "repository": "https://github.com/netresearch/t3x-nr-vault",
      "documentation": "https://github.com/netresearch/t3x-nr-vault#readme",
      "demo": null,
      "support": "https://www.netresearch.de/kontakt/",
      "capabilities": [],
      "security_controls": [],
      "cost_controls": [],
      "providers": [],
      "evidence": [
        {
          "type": "release",
          "label": "v0.15.0",
          "url": "https://github.com/netresearch/t3x-nr-vault/releases/tag/v0.15.0"
        }
      ],
      "id": "nr-vault",
      "repo": "netresearch/t3x-nr-vault",
      "page": "https://github.com/netresearch/t3x-nr-vault",
      "stack_layer": "security-identity",
      "primary": false,
      "role": {
        "en": "Secret foundation",
        "de": "Secret-Fundament"
      },
      "summary": {
        "en": "Envelope-encrypted secret storage for TYPO3. Every API key the AI stack uses is stored here as a vault identifier, never as plaintext in the database or in a configuration file.\n",
        "de": "Envelope-verschlüsselte Secret-Ablage für TYPO3. Jeder API-Schlüssel des KI-Stacks liegt hier als Vault-Kennung, nie im Klartext in der Datenbank oder in einer Konfigurationsdatei.\n"
      },
      "suited_for": {
        "en": "Teams that must keep provider credentials out of the database and out of git.",
        "de": "Teams, die Provider-Zugangsdaten aus Datenbank und Git heraushalten müssen."
      },
      "boundary": {
        "en": "Stores and releases secrets. Makes no AI decision and sees no prompt.",
        "de": "Speichert und gibt Secrets frei. Trifft keine KI-Entscheidung und sieht keinen Prompt."
      },
      "manifest_source": "repository"
    },
    {
      "manifest_version": 1,
      "name": "nr-llm",
      "slug": "/t3x-nr-llm/",
      "main_version": "0.28.0",
      "latest_release": "v0.28.0",
      "release_date": "2026-08-10",
      "docs_version": "0.28.0",
      "php_versions": [
        "8.2"
      ],
      "typo3_versions": [
        "13.4",
        "14.3"
      ],
      "stage": "beta",
      "owner": "Netresearch DTT GmbH — nr-llm maintainers",
      "last_verified": "2026-08-11",
      "license": "GPL-2.0-or-later",
      "repository": "https://github.com/netresearch/t3x-nr-llm",
      "documentation": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Index.rst",
      "demo": null,
      "support": "https://www.netresearch.de/kontakt/",
      "providers": [
        "OpenAI",
        "Anthropic Claude",
        "Google Gemini",
        "Ollama (local)",
        "OpenRouter",
        "Mistral",
        "Groq",
        "Azure OpenAI",
        "any OpenAI-compatible endpoint (vLLM, LocalAI, LiteLLM)"
      ],
      "capabilities": [
        {
          "id": "provider-abstraction",
          "label": "One provider abstraction for every extension",
          "detail": "Chat, completion, streaming, tool calling, translation, vision and embeddings behind injectable services.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Developer/Index.rst"
        },
        {
          "id": "provider-fallback",
          "label": "Fallback chains per configuration",
          "detail": "Retried on connection errors, HTTP 5xx and rate limits, in the order the configuration declares.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Classes/Provider/Middleware/FallbackMiddleware.php"
        },
        {
          "id": "rag",
          "label": "Site-content retrieval with citations",
          "detail": "Answers reference the pages they came from rather than asserting unsourced text.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Administration/Tools.rst"
        },
        {
          "id": "tools",
          "label": "Built-in function-calling tools in toggleable groups",
          "detail": "Read-only by default; the writing tools ship disabled.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Administration/Tools.rst"
        }
      ],
      "security_controls": [
        {
          "id": "vault-keys",
          "label": "API keys stored as vault identifiers",
          "detail": "Envelope encryption via nr-vault; nr-llm never stores or logs a raw key.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Adr/Adr012ApiKeyStorageVault.rst"
        },
        {
          "id": "guardrails",
          "label": "Guardrail pipeline across input, output, reasoning and streamed chunks",
          "detail": "Screens and can redact; secret patterns are denied on the egress path.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Adr/Index.rst"
        },
        {
          "id": "hitl",
          "label": "Human-in-the-loop approval for sensitive actions",
          "detail": "A run that reaches an approval-gated tool suspends until a person decides.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Adr/Index.rst"
        },
        {
          "id": "permissions",
          "label": "Per-capability backend-group permissions",
          "detail": "Who may use which capability is a backend group setting, not a code constant.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Administration/Index.rst"
        },
        {
          "id": "supply-chain",
          "label": "Signed releases with provenance and SBOMs",
          "detail": "Cosign signature, SHA-256 checksums, SPDX and CycloneDX SBOMs, SLSA build provenance.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/releases"
        }
      ],
      "cost_controls": [
        {
          "id": "user-budgets",
          "label": "Per-user budgets",
          "detail": "Requests, tokens or estimated cost, daily or monthly, per backend user.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Administration/UserBudgets.rst"
        },
        {
          "id": "analytics",
          "label": "Usage and cost analytics",
          "detail": "Estimated cost and usage per provider, model, service and user.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Administration/Analytics.rst"
        },
        {
          "id": "cheaper-fallback",
          "label": "Fallback to a cheaper or local model",
          "detail": "A configuration can name fallbacks that cost less, including a self-hosted endpoint.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-llm/blob/main/Classes/Domain/DTO/FallbackChain.php"
        }
      ],
      "evidence": [
        {
          "type": "code",
          "label": "Source",
          "url": "https://github.com/netresearch/t3x-nr-llm"
        },
        {
          "type": "adr",
          "label": "Architecture Decision Records",
          "url": "https://netresearch.github.io/t3x-nr-llm/adr/"
        },
        {
          "type": "docs",
          "label": "Documentation",
          "url": "https://github.com/netresearch/t3x-nr-llm/blob/main/Documentation/Index.rst"
        },
        {
          "type": "release",
          "label": "Releases with SBOM and provenance",
          "url": "https://github.com/netresearch/t3x-nr-llm/releases"
        }
      ],
      "ai": {
        "intended_purpose": "Shared, administrator-controlled access to language models for TYPO3 extensions: one provider configuration, one set of permissions and budgets, reused by every extension on the site.",
        "excluded_uses": [
          "Unattended decisions about people — hiring, credit, benefits, access or any other consequential outcome.",
          "Autonomous content changes without a human approval.",
          "A source of facts. Model output is untrusted content and is treated as such.",
          "A compliance control in its own right. It supports controls; it does not make an organisation conformant."
        ],
        "models": [
          "Whatever the administrator configures: a commercial API, an EU-hosted provider, an OpenAI-compatible endpoint, or a self-hosted model."
        ],
        "data": [
          "The prompt an extension sends, plus any site content a retrieval tool includes.",
          "Usage metadata: provider, model, service, backend user, token counts and estimated cost.",
          "No API keys — those stay in the vault as identifiers."
        ],
        "processing_location": [
          "own-server",
          "external-provider"
        ],
        "human_oversight": "Writing tools ship disabled and, once enabled, suspend the run for an explicit approval. Everything else is read-only by default.",
        "permissions": "Per-capability backend-group permissions; the backend module is restricted to administrators.",
        "logging": "Requests are recorded with provider, model, service, user, token counts and estimated cost. Prompt content is not part of the usage record.",
        "retention": "Usage records live in the site's database and follow the site's own retention rules. nr-llm sets no expiry of its own.",
        "cost_control": "Per-user budgets on requests, tokens or estimated cost, daily or monthly, with fallback to cheaper or local models.",
        "security_controls": [
          "API keys as vault identifiers, never plaintext",
          "Guardrail pipeline across input, output, reasoning and streamed chunks",
          "Secret-pattern denial on the egress path",
          "Approval-gated writing tools",
          "Signed releases with SBOMs and SLSA provenance"
        ],
        "known_limitations": [
          "Models produce wrong answers with confidence. Nothing here prevents that; the controls bound what a model may do, not what it may say.",
          "Prompt injection through retrieved site content is possible. Tool permissions and the approval gate are the mitigation, not immunity.",
          "Cost figures are estimates derived from the model's published pricing, not from the provider's invoice.",
          "Streaming responses bypass parts of the output pipeline; the trade-off is documented in the ADRs.",
          "Provider availability, model behaviour and pricing are outside this extension's control."
        ]
      },
      "id": "nr-llm",
      "repo": "netresearch/t3x-nr-llm",
      "page": "https://netresearch.github.io/t3x-nr-llm/",
      "stack_layer": "control-plane",
      "primary": true,
      "role": {
        "en": "AI control plane",
        "de": "KI-Control-Plane"
      },
      "summary": {
        "en": "Connect a provider once, then steer access, budgets and models centrally for every extension on the site. Providers, keys, permissions, budgets and usage analytics live in one backend module instead of in each extension.\n",
        "de": "Provider einmal anbinden, dann Zugriffe, Budgets und Modelle zentral für jede Extension der Seite steuern. Provider, Schlüssel, Berechtigungen, Budgets und Nutzungsauswertung liegen in einem Backend-Modul statt in jeder Extension.\n"
      },
      "suited_for": {
        "en": "Organisations that want AI in TYPO3 without vendor lock-in, uncontrolled cost or shadow AI.",
        "de": "Organisationen, die KI in TYPO3 wollen — ohne Anbieterbindung, unkontrollierte Kosten und Schatten-KI."
      },
      "boundary": {
        "en": "Centralises control. The chosen provider's model risks remain with the provider and the operator.",
        "de": "Zentralisiert die Kontrolle. Modellrisiken des gewählten Providers bleiben bei Provider und Betreiber."
      },
      "manifest_source": "published"
    },
    {
      "manifest_version": 1,
      "name": "nr-browser-ai",
      "slug": "/t3x-nr-browser-ai",
      "main_version": "0.6.0",
      "latest_release": "v0.5.0",
      "release_date": "2026-08-11",
      "docs_version": "0.6.0",
      "typo3_versions": [
        "12.4",
        "13.4",
        "14.3"
      ],
      "php_versions": [
        "8.2"
      ],
      "stage": "beta",
      "owner": "Netresearch DTT GmbH — nr-browser-ai maintainers",
      "last_verified": "2026-08-11",
      "license": "GPL-2.0-or-later",
      "repository": "https://github.com/netresearch/t3x-nr-browser-ai",
      "documentation": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Documentation/Index.rst",
      "demo": "https://netresearch.github.io/t3x-nr-browser-ai/",
      "support": "https://www.netresearch.de/kontakt/",
      "providers": [
        "Chrome's built-in Prompt API (Gemini Nano), running on the visitor's device"
      ],
      "capabilities": [
        {
          "id": "page-scoped-answers",
          "label": "Answers scoped to the current page",
          "detail": "A configurable region of the page is the only source; the model is instructed to say so when an answer is not in it.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Documentation/Index.rst"
        },
        {
          "id": "no-endpoint",
          "label": "No chat endpoint of its own",
          "detail": "No server route, no database table, no cookie, no local storage, no telemetry.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Documentation/Security/Privacy.rst"
        },
        {
          "id": "editor-fallback",
          "label": "Editor-chosen fallback content",
          "detail": "Visitors whose browser cannot run the model see a content element the editor picked, not an error.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Documentation/Index.rst"
        },
        {
          "id": "safe-rendering",
          "label": "Model output cannot inject markup",
          "detail": "Answers are built with DOM APIs only; a restricted Markdown subset becomes elements, everything else stays literal text.",
          "state": "implemented",
          "evidence": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Resources/Public/JavaScript/Assistant.js"
        }
      ],
      "security_controls": [
        {
          "id": "two-prompt-layers",
          "label": "Administrator and editor prompt layers are separate",
          "detail": "An editor may add a supplemental instruction but cannot replace the administrator's system prompt.",
          "state": "implemented"
        },
        {
          "id": "untrusted-page-content",
          "label": "Page content is treated as untrusted",
          "detail": "The default system prompt instructs the model not to follow instructions found in the page. This reduces prompt-injection risk; it does not eliminate it.",
          "state": "implemented"
        },
        {
          "id": "no-html-parsing",
          "label": "No HTML parsing of model output",
          "detail": "No markup string is assembled; links are limited to validated HTTP and HTTPS URLs opened with rel=\"noopener noreferrer\".",
          "state": "implemented"
        },
        {
          "id": "explicit-setup",
          "label": "The model download needs an explicit user action",
          "detail": "The extension never triggers a multi-gigabyte download silently.",
          "state": "implemented"
        }
      ],
      "cost_controls": [
        {
          "id": "no-inference-cost",
          "label": "No per-request inference cost for supported visitors",
          "detail": "Inference runs on the visitor's device, so a supported visitor generates no provider call and no token spend. Unsupported visitors generate none either — they get the fallback.",
          "state": "implemented"
        }
      ],
      "evidence": [
        {
          "type": "code",
          "label": "Source",
          "url": "https://github.com/netresearch/t3x-nr-browser-ai"
        },
        {
          "type": "docs",
          "label": "Privacy and trust boundaries",
          "url": "https://github.com/netresearch/t3x-nr-browser-ai/blob/main/Documentation/Security/Privacy.rst"
        },
        {
          "type": "release",
          "label": "Releases",
          "url": "https://github.com/netresearch/t3x-nr-browser-ai/releases"
        }
      ],
      "ai": {
        "intended_purpose": "Answering a visitor's question about the page they are currently reading, using the browser's own language model, with the page text as the only source.",
        "excluded_uses": [
          "Site-wide knowledge search. The assistant sees one page.",
          "Anything needing current external information. It has no network access of its own.",
          "Transactions, or any action with a consequence. It answers; it does not act.",
          "A guaranteed channel. Most visitors' browsers cannot run it, and they get the fallback instead.",
          "Authorisation, legal, medical or financial decisions without independent controls."
        ],
        "models": [
          "Whatever model Chrome ships and manages. The extension neither chooses nor downloads it."
        ],
        "data": [
          "The visitor's question and the text of the configured page region.",
          "Nothing else. No identifiers, no history, no analytics."
        ],
        "processing_location": [
          "browser"
        ],
        "human_oversight": "The visitor asks, reads and judges. The assistant performs no action and changes nothing.",
        "permissions": "Editors configure a plugin instance; administrators set the system prompt and the context selector in TypoScript. Visitors need no account.",
        "logging": "None. The extension writes no log, no database row and no storage entry.",
        "retention": "Dialogue state lives in browser memory and is destroyed on reset or navigation.",
        "cost_control": "No inference cost arises: the model belongs to the browser.",
        "security_controls": [
          "Separate administrator and editor prompt layers",
          "Page content treated as untrusted input",
          "DOM-only answer rendering, no HTML parsing",
          "Model download only on an explicit user action"
        ],
        "known_limitations": [
          "Only supported desktop Chrome versions with sufficient storage can run it. Everyone else sees the fallback — plan for that being the majority.",
          "The model belongs to the browser vendor. Its behaviour, updates and availability are outside this extension's control.",
          "Prompt injection through page content is reduced, not eliminated. Do not put secrets in publicly rendered content.",
          "The model can be wrong or invent an answer. Scoping it to one page narrows the surface; it does not make it correct.",
          "Answer quality depends on how well the page is written. A vague page produces vague answers."
        ]
      },
      "id": "nr-browser-ai",
      "repo": "netresearch/t3x-nr-browser-ai",
      "page": "https://netresearch.github.io/t3x-nr-browser-ai/",
      "stack_layer": "assistance-agents",
      "primary": false,
      "role": {
        "en": "On-device assistant",
        "de": "On-Device-Assistent"
      },
      "summary": {
        "en": "Answers questions about the page the visitor is on, using the browser's own model. No chat API of its own, no API key, and page content is not sent to an external model for supported visitors.\n",
        "de": "Beantwortet Fragen zu der Seite, auf der die Besucherin gerade ist — mit dem Modell des Browsers. Keine eigene Chat-API, kein API-Schlüssel, und für unterstützte Besucher verlässt der Seiteninhalt das Gerät nicht.\n"
      },
      "suited_for": {
        "en": "Contextual product and service pages, privacy-sensitive information, bounded page documentation.",
        "de": "Kontextbezogene Produkt- und Serviceseiten, datenschutzsensible Informationen, klar begrenzte Seitendokumentation."
      },
      "boundary": {
        "en": "Works only on supported desktop browsers with sufficient hardware. Every other visitor needs the static fallback.",
        "de": "Läuft nur auf unterstützten Desktop-Browsern mit ausreichender Hardware. Alle anderen Besucher brauchen den statischen Fallback."
      },
      "manifest_source": "published"
    },
    {
      "manifest_version": 1,
      "name": "nr-mcp-agent",
      "slug": "/t3x-nr-mcp-agent",
      "main_version": "0.9.0",
      "latest_release": "v0.9.0",
      "release_date": "2026-08-10",
      "docs_version": "0.9.0",
      "typo3_versions": [
        "13.4",
        "14.0"
      ],
      "php_versions": [
        "8.2"
      ],
      "stage": "alpha",
      "owner": "Netresearch DTT GmbH — nr-mcp-agent maintainers",
      "last_verified": "2026-08-11",
      "license": "GPL-2.0-or-later",
      "repository": "https://github.com/netresearch/t3x-nr-mcp-agent",
      "documentation": "https://netresearch.github.io/t3x-nr-mcp-agent/docs/",
      "demo": null,
      "support": "https://www.netresearch.de/kontakt/",
      "providers": [
        "Whatever nr-llm is configured with — this extension has no provider of its own."
      ],
      "capabilities": [
        {
          "id": "backend-chat",
          "label": "A chat assistant inside the TYPO3 backend",
          "detail": "Editors ask in the backend they already work in; no separate tool and no separate login.",
          "state": "implemented"
        },
        {
          "id": "released-tools",
          "label": "Calls only the MCP tools an administrator released",
          "detail": "Tools are configured per server and per permission; nothing is available by default.",
          "state": "implemented"
        },
        {
          "id": "conversation-history",
          "label": "Conversation history per backend user",
          "detail": "A run can be re-read afterwards, which is what makes a review possible at all.",
          "state": "implemented"
        },
        {
          "id": "approval-gate",
          "label": "Approval before anything is written",
          "detail": "A run that reaches a writing tool suspends and waits for a person. There is no timeout that approves.",
          "state": "implemented"
        }
      ],
      "security_controls": [
        {
          "id": "inherits-nr-llm",
          "label": "Provider, budget and permission controls come from nr-llm",
          "detail": "This extension adds an interface; it does not add a second key store, a second budget or a second permission model.",
          "state": "implemented"
        },
        {
          "id": "read-default",
          "label": "Read-only by default",
          "detail": "Writing tools ship disabled and stay disabled until an administrator turns them on for a specific group.",
          "state": "implemented"
        },
        {
          "id": "audit-trail",
          "label": "Every tool call is recorded",
          "detail": "Which tool, which user, which arguments, and what the approval decision was.",
          "state": "implemented"
        },
        {
          "id": "backend-permissions",
          "label": "Backend-group permissions apply",
          "detail": "The agent cannot reach what the acting user cannot reach; TYPO3's own access rules are not bypassed.",
          "state": "implemented"
        }
      ],
      "cost_controls": [
        {
          "id": "nr-llm-budgets",
          "label": "Budgets and analytics from nr-llm",
          "detail": "Per-user request, token and cost limits apply to agent runs like any other AI use on the site.",
          "state": "implemented"
        }
      ],
      "evidence": [
        {
          "type": "code",
          "label": "Source",
          "url": "https://github.com/netresearch/t3x-nr-mcp-agent"
        },
        {
          "type": "docs",
          "label": "Technical documentation",
          "url": "https://netresearch.github.io/t3x-nr-mcp-agent/docs/"
        },
        {
          "type": "release",
          "label": "Releases",
          "url": "https://github.com/netresearch/t3x-nr-mcp-agent/releases"
        }
      ],
      "ai": {
        "intended_purpose": "A controlled assistant in the TYPO3 backend: finding and summarising content an editor may already see, preparing changes, and executing a released change after an explicit human approval.",
        "excluded_uses": [
          "Unattended operation. Alpha means evaluate it with someone watching.",
          "Autonomous content changes. Every write goes through an approval.",
          "Replacing an editor's judgement. It drafts; a person decides.",
          "Bypassing TYPO3 permissions. It cannot reach what the acting user cannot reach.",
          "Anything with a legal, financial or personnel consequence."
        ],
        "models": [
          "Whatever nr-llm is configured with. This extension chooses no provider and holds no key."
        ],
        "data": [
          "The editor's question, the conversation history of that run, and whatever a released tool returns.",
          "Tool calls and their arguments, for the audit trail."
        ],
        "processing_location": [
          "own-server",
          "external-provider"
        ],
        "human_oversight": "Reading needs no approval. Every writing tool suspends the run until a person approves or rejects it, and the decision is recorded.",
        "permissions": "Administrators release MCP servers and tools per backend group. TYPO3's own access rules apply on top and are not bypassed.",
        "logging": "Every tool call is recorded with tool, user, arguments and approval decision. Model usage is recorded by nr-llm.",
        "retention": "Conversations and audit records live in the site's database and follow the site's own retention rules.",
        "cost_control": "Inherited from nr-llm: per-user budgets on requests, tokens or estimated cost.",
        "security_controls": [
          "Read-only by default; writing tools ship disabled",
          "Approval gate with a recorded decision",
          "Per-group tool release",
          "TYPO3 backend permissions enforced, not bypassed",
          "Provider keys and budgets stay in nr-llm"
        ],
        "known_limitations": [
          "Alpha. Interfaces, tool contracts and configuration can still change between releases.",
          "Prompt injection through content the agent reads is possible. The tool release list and the approval gate are the mitigation, not immunity.",
          "The model can misread an instruction and propose the wrong change. That is what the approval is for — an approver who does not read the proposal removes the control.",
          "Excessive agency is a design risk of any agent. Release the smallest useful tool set, not the largest available one.",
          "It is only as reliable as the model behind it, and that model is configured elsewhere."
        ]
      },
      "id": "nr-mcp-agent",
      "repo": "netresearch/t3x-nr-mcp-agent",
      "page": "https://netresearch.github.io/t3x-nr-mcp-agent/",
      "stack_layer": "assistance-agents",
      "primary": false,
      "role": {
        "en": "Backend agent",
        "de": "Backend-Agent"
      },
      "summary": {
        "en": "A chat assistant inside the TYPO3 backend that can call released MCP tools. Reading is the default; anything that writes needs an explicit human approval and leaves an audit entry.\n",
        "de": "Ein Chat-Assistent im TYPO3-Backend, der freigegebene MCP-Werkzeuge aufrufen kann. Lesen ist der Normalfall; alles Schreibende braucht eine ausdrückliche menschliche Freigabe und hinterlässt einen Audit-Eintrag.\n"
      },
      "suited_for": {
        "en": "Editorial and innovation teams evaluating a controlled backend agent.",
        "de": "Redaktions- und Innovationsteams, die einen kontrollierten Backend-Agenten evaluieren."
      },
      "boundary": {
        "en": "Alpha. For controlled evaluation, not for unattended production operation.",
        "de": "Alpha. Für kontrollierte Evaluierung, nicht für unbeaufsichtigten Produktivbetrieb."
      },
      "manifest_source": "published"
    },
    {
      "manifest_version": 1,
      "name": "nr-passkeys-be",
      "slug": null,
      "stage": "beta",
      "latest_release": "v0.12.1",
      "release_date": "2026-08-07",
      "main_version": "0.12.1",
      "docs_version": null,
      "last_verified": null,
      "owner": null,
      "license": "GPL-2.0",
      "repository": "https://github.com/netresearch/t3x-nr-passkeys-be",
      "documentation": "https://github.com/netresearch/t3x-nr-passkeys-be#readme",
      "demo": null,
      "support": "https://www.netresearch.de/kontakt/",
      "capabilities": [],
      "security_controls": [],
      "cost_controls": [],
      "providers": [],
      "evidence": [
        {
          "type": "release",
          "label": "v0.12.1",
          "url": "https://github.com/netresearch/t3x-nr-passkeys-be/releases/tag/v0.12.1"
        }
      ],
      "id": "nr-passkeys-be",
      "repo": "netresearch/t3x-nr-passkeys-be",
      "page": "https://github.com/netresearch/t3x-nr-passkeys-be",
      "stack_layer": "security-identity",
      "primary": false,
      "role": {
        "en": "Backend identity",
        "de": "Backend-Identität"
      },
      "summary": {
        "en": "Passwordless sign-in for the TYPO3 backend using passkeys — biometrics, security keys and platform authenticators instead of a password that can be phished, reused or written down.\n",
        "de": "Passwortlose Anmeldung im TYPO3-Backend über Passkeys – Biometrie, Sicherheitsschlüssel und Plattform-Authentifikatoren statt eines Passworts, das sich abfischen, wiederverwenden oder aufschreiben lässt.\n"
      },
      "suited_for": {
        "en": "Editorial and administrative accounts, which are the ones an attacker wants.",
        "de": "Redaktions- und Administrationskonten – genau die, auf die es Angreifer abgesehen haben."
      },
      "boundary": {
        "en": "Authenticates people. It grants no permission the backend user did not already have.",
        "de": "Authentifiziert Personen. Es vergibt keine Rechte, die der Backend-Nutzer nicht schon hatte."
      },
      "manifest_source": "repository"
    },
    {
      "manifest_version": 1,
      "name": "nr-passkeys-fe",
      "slug": null,
      "stage": "beta",
      "latest_release": "v0.6.0",
      "release_date": "2026-08-07",
      "main_version": "0.6.0",
      "docs_version": null,
      "last_verified": null,
      "owner": null,
      "license": "GPL-2.0",
      "repository": "https://github.com/netresearch/t3x-nr-passkeys-fe",
      "documentation": "https://github.com/netresearch/t3x-nr-passkeys-fe#readme",
      "demo": null,
      "support": "https://www.netresearch.de/kontakt/",
      "capabilities": [],
      "security_controls": [],
      "cost_controls": [],
      "providers": [],
      "evidence": [
        {
          "type": "release",
          "label": "v0.6.0",
          "url": "https://github.com/netresearch/t3x-nr-passkeys-fe/releases/tag/v0.6.0"
        }
      ],
      "id": "nr-passkeys-fe",
      "repo": "netresearch/t3x-nr-passkeys-fe",
      "page": "https://github.com/netresearch/t3x-nr-passkeys-fe",
      "stack_layer": "security-identity",
      "primary": false,
      "role": {
        "en": "Frontend identity",
        "de": "Frontend-Identität"
      },
      "summary": {
        "en": "Passkey-first sign-in for frontend users, so a logged-in area does not depend on a password database you then have to defend.\n",
        "de": "Passkey-first-Anmeldung für Frontend-Nutzer, damit ein geschlossener Bereich nicht an einer Passwortdatenbank hängt, die Sie danach verteidigen müssen.\n"
      },
      "suited_for": {
        "en": "Member areas, customer portals and anything behind a frontend login.",
        "de": "Mitgliederbereiche, Kundenportale und alles hinter einem Frontend-Login."
      },
      "boundary": {
        "en": "Authenticates people. Authorisation and data access stay with the site's own rules.",
        "de": "Authentifiziert Personen. Autorisierung und Datenzugriff bleiben bei den Regeln der Seite."
      },
      "manifest_source": "repository"
    }
  ]
}
