Search by

konradmichalik / typo3-ai-mate

konradmichalik

AI Mate - Dev-only TYPO3 extension and symfony/ai-mate bridge that exposes the resolved runtime state of a TYPO3 installation (TCA, pages, TypoScript, middlewares, logs, request profiles) to AI coding assistants through the symfony/ai-mate CLI.

Package info

github.com/konradmichalik/typo3-ai-mate

Type:typo3-cms-extension

pkg:composer/konradmichalik/typo3-ai-mate

Statistics

Installs: 268

Dependents: 0

Suggesters: 0

Stars: 3

Open Issues: 5

0.5.0 2026-08-31 09:40 UTC

This package is auto-updated.

Last update: 2026-09-08 08:01:18 UTC


README

Extension icon

TYPO3 extension typo3_ai_mate

Packagist TYPO3 Supported PHP Versions CGL Coverage Tests License

AI assistants normally read your raw source and config files and guess at the result. But the state that actually matters, the merged TCA, the resolved TypoScript of a page, the real PSR-15 middleware order, whether a request was cached, is computed at runtime and cannot be reliably inferred from files alone.

This dev-only extension hands the assistant that already-resolved state instead, through symfony/ai-mate's mate CLI. It is usually cheaper too: a compact resolved summary costs far fewer tokens than having the assistant read and reason over the raw sources.

Warning

This package is in early development stage and may change significantly in the future. I am working steadily to release a stable version as soon as possible.

Important

This package is active only in a Development context (Environment::getContext()->isDevelopment()).

✨ Features

  • 32 read-only diagnostic tools over the resolved runtime state: TCA, page composition, records, TypoScript, TSconfig, Fluid resolution, PSR-15 and PSR-14 chains, logs, per-request profiles and more. See the tool reference.
  • Answers, not empty structures. A miss reports registered: false or unsupported with a reason, so an assistant stops instead of retrying with different arguments.
  • Prompt-injection aware. Output captured from the installation arrives wrapped as untrusted data, never as instructions.
  • Diagnose without booting TYPO3 twice. The tools shell out to the installation's own console, so they report what it actually computed. See how it works.
  • Upgrade support: static breaking-change scan, outstanding wizards, runtime deprecations with own-code origins, and offline changelog search. See use cases.

🔥 Installation

Requirements

  • TYPO3 13.4 LTS & 14.3 LTS
  • PHP 8.2+
  • Composer mode

Composer

Packagist Packagist Downloads

composer require --dev konradmichalik/typo3-ai-mate

Note

Requiring typo3-ai-mate automatically pulls in symfony/ai-mate (the mate CLI) and konradmichalik/typo3-request-profiler (the profile source for the typo3-profiler-* tools). No separate installs needed.

TER

TER version TER downloads

Download the zip file from TYPO3 extension repository (TER).

🚀 Quick start

One command scaffolds the Mate workspace and materializes the agent instructions:

vendor/bin/typo3 typo3-ai-mate:install

That is all it does: it runs mate init and mate discover. Re-run it after every composer update so changed tool descriptions reach mate/AGENT_INSTRUCTIONS.md, then reload your assistant.

There is no server process to connect to. Your assistant calls the tools by running vendor/bin/mate tools:call <name> --<param>=<value> as a shell command, guided by a managed CLAUDE.md/AGENTS.md block that mate init writes. An assistant that reads only its own file, such as .cursor/rules, needs that import added by hand.

See connecting an assistant for what exactly gets written, the Agent Skills that come along, and what to clean up when upgrading from 0.4 or earlier.

📖 How it works

The typo3-* tools run in the Mate process, invoked per call by vendor/bin/mate tools:call. They boot no TYPO3: they reach it by shelling out to vendor/bin/typo3 <command> and reading its JSON, or by reading profile artifacts directly.

flowchart LR
    A["AI agent (e.g. Claude)"] -->|"vendor/bin/mate tools:call"| B["Mate process (typo3-* tools)"]
    B -->|shell out| C["TYPO3 process (vendor/bin/typo3)"]
    C -->|JSON| B
Loading

Details, including why tool descriptions cannot carry runtime state, are in how it works.

📚 Documentation

Page What is inside
Tool reference Every tool, what it answers, and which clusters can come back empty
Connecting an assistant What mate init/discover write, Agent Skills, upgrading from 0.4
How it works The two-process architecture and why descriptions are static
Security Trust boundary, guards, and the untrusted-data envelope
Use cases Slow page, error page, major upgrade, and the request_id anchor
Extending Writing your own typo3-* tool against Typo3CliRunner
Tool surface What the tool count costs a session, measured rather than argued
Related projects How this compares to dev-companion and the two typo3-mcp-server projects

🧑‍💻 Contributing

Please have a look at CONTRIBUTING.md. Changes worth knowing about are recorded in CHANGELOG.md.

⭐ License

This project is licensed under GNU General Public License 2.0 (or later).