#601

Globales Ranking · von 601 Skills

typo3-simplify AI Agent Skill

Quellcode ansehen: dirnbauer/webconsulting-skills

Safe

Installation

npx skills add dirnbauer/webconsulting-skills --skill typo3-simplify

24

Installationen

TYPO3 Code Simplifier

Adapted from Boris Cherny's (Anthropic) code-simplifier agent for TYPO3 contexts.
Target: TYPO3 v14.x only.

Simplify and refine recently changed TYPO3 code. Preserve all functionality. Focus on
clarity over cleverness, TYPO3 API usage over custom implementations, and v14 patterns
over deprecated approaches.

Process

  1. Identify recently modified files (use git diff --name-only HEAD~1 or staged changes)
  2. Run three parallel review passes: Reuse, Quality, Efficiency
  3. Aggregate findings, deduplicate, sort by impact
  4. Apply fixes, verify no behavior change

Pass 1: TYPO3 API Reuse

Find custom implementations that duplicate what TYPO3 already provides.

Replace Custom Code with Core APIs

Custom Pattern TYPO3 API Replacement
Manual DB queries ($connection->executeQuery(...)) QueryBuilder with named parameters
$GLOBALS['TYPO3_REQUEST'] Inject ServerRequestInterface via middleware/controller
new FlashMessage(...) + manual queue FlashMessageService via DI
Manual JSON response construction JsonResponse from PSR-7
GeneralUtility::makeInstance() Constructor injection via Services.yaml
$GLOBALS['TSFE']->id $request->getAttribute('frontend.page.information')?->getId() (canonical on v14; routing page id also works)
$GLOBALS['BE_USER'] Inject Context or BackendUserAuthentication
ObjectManager::get() Constructor DI
Manual file path resolution PathUtility, Environment::getPublicPath()
Custom caching with globals CacheManager via DI with cache configuration
BackendUtility::getRecord() for single field QueryBuilder selecting only needed columns
Manual page tree traversal RootlineUtility or PageRepository
GeneralUtility::_GP() / _POST() / _GET() $request->getQueryParams() / getParsedBody()
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF'] writes PSR-14 events or ExtensionConfiguration
Manual link generation UriBuilder (backend) or ContentObjectRenderer::typoLink()

Replace Deprecated Patterns (v14)

Deprecated v14 Replacement
ext_localconf.php hook arrays #[AsEventListener] on PSR-14 events
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'] hooks PSR-14 events
ext_tables.php module registration Configuration/Backend/Modules.php
XCLASS PSR-14 events or DI decoration
TCA eval for required, null Dedicated TCA keys: required, nullable
TCA eval for trim Still valid in v14 — no dedicated TCA replacement; keep trim in eval when you need it
renderType => 'inputDateTime' 'type' => 'datetime'
'type' => 'input', 'eval' => 'int' 'type' => 'number'
items with numeric array keys items with label/value keys

Historical removals (pre–v14 code you may still read)

Removed / legacy When Modern approach
switchableControllerActions Deprecated in v10.3 (#89463), removed in v12.0 Separate plugin registrations
Signal/Slot Dispatcher Removed in v12 PSR-14 events
AbstractPlugin (pi_base) Made @internal v12.0 (#98281), deprecated v12.4 (#100639), removed v13.0 Extbase or middleware

Code quality (not deprecations)

Topic Guidance
$querySettings->setRespectStoragePage(false) Valid Extbase API — prefer setting query settings in the repository factory or controller, not scattered in repositories, for clarity

Pass 2: Code Quality

PHP Classes

  • One class per file, PSR-4 autoloading
  • declare(strict_types=1) on every PHP file
  • final on classes not designed for inheritance
  • readonly on immutable properties
  • Constructor promotion for DI dependencies
  • Explicit return types on all methods
  • No unused use imports
  • No suppressed errors (@)
  • Guard clauses over deep nesting (early returns)
  • No mixed types where specific types exist
  • Replace array typehints with typed arrays or DTOs
// Before
class MyService
{
    private ConnectionPool $connectionPool;
    private Context $context;

    public function __construct(ConnectionPool $connectionPool, Context $context)
    {
        $this->connectionPool = $connectionPool;
        $this->context = $context;
    }

    public function getData($id)
    {
        // ...
    }
}

// After
final class MyService
{
    public function __construct(
        private readonly ConnectionPool $connectionPool,
        private readonly Context $context,
    ) {}

    public function getData(int $id): array
    {
        // ...
    }
}

Fluid Templates

  • No inline PHP or complex ViewHelper chains
  • Use <f:translate> instead of hardcoded strings
  • Use <f:link.page> / <f:link.typolink> instead of manual <a href>
  • Use <f:image> instead of manual <img> tags
  • Partials for repeated markup (DRY)
  • Sections for layout slots, not for reuse (use Partials)
  • No {variable -> f:format.raw()} unless absolutely necessary (XSS risk)
  • Variables use camelCase
  • Remove empty <f:section> blocks
  • Simplify nested <f:if> to <f:switch> or ternary where clearer

TCA

  • Use v14 items format with label/value keys
  • Remove redundant 'exclude' => true on fields already restricted
  • Use dedicated types: 'type' => 'email', 'type' => 'datetime', 'type' => 'number', 'type' => 'link', 'type' => 'color', 'type' => 'json'
  • Use 'required' => true instead of 'eval' => 'required'
  • Use 'nullable' => true instead of 'eval' => 'null'
  • eval => trim remains supported — do not remove unless you replace trimming in another layer
  • Remove 'default' => '' on string fields (already default)
  • Consolidate palette definitions (remove single-field palettes)
  • Remove boilerplate columns definitions auto-created from ctrl on TYPO3 v14: hidden, starttime, endtime, fe_group, sys_language_uid, l10n_parent, l10n_diffsource
  • Use palettes for enablecolumns: Core uses palette key hidden for hidden, access for starttime, endtime, fe_group (verify keys in your table’s types showitem)
  • Remove standard ctrl columns from ext_tables.sql when ctrl enables them (hidden, starttime, endtime, fe_group, sys_language_uid, l10n_parent, l10n_source, sorting, deleted, crdate, tstamp) — only if they are auto-managed for that table
  • Remove unused showitem fields from types

Services.yaml

  • Use autowiring (remove explicit argument definitions when type-hintable)
  • Use _defaults: autowire: true, autoconfigure: true, public: false
  • Remove manual service definitions for classes that autowiring handles
  • Remove factory: blocks when autowiring handles construction; keep factory: for non-trivial construction that autowiring cannot resolve. #[Autoconfigure] tags/configures services but does not replace factory: construction
  • Remove public: true unless needed for GeneralUtility::makeInstance()

ext_localconf.php / ext_tables.php

  • Minimize code — move to Configuration/ files where possible
  • Plugin registration only (no business logic)
  • Frontend plugins: ExtensionUtility::configurePlugin() in ext_localconf.php and ExtensionUtility::registerPlugin() (or TCA items) in Configuration/TCA/Overrides/tt_content.php — both are required for a complete registration
  • No addPageTSConfig — use Configuration/page.tsconfig
  • No addUserTSConfig — use Configuration/user.tsconfig
  • No addTypoScript — use Configuration/TypoScript/setup.typoscript

Pass 3: Efficiency

  • QueryBuilder: select only needed columns, not *
  • QueryBuilder: add setMaxResults() when expecting single row
  • Use count() queries instead of fetching all rows to count
  • Cache expensive operations with TYPO3 Caching Framework
  • Avoid N+1 queries in Extbase repositories (use JOIN or batch loading)
  • Use TYPO3\CMS\Core\Resource\ProcessedFileRepository not re-processing on every request
  • Remove findAll() calls without pagination
  • Lazy-load file references with #[\TYPO3\CMS\Extbase\Attribute\ORM\Lazy] (replace legacy @Lazy annotation)
  • Replace foreach + manual in_array() filtering with QueryBuilder WHERE IN
  • Remove redundant cache:flush calls in CLI commands

Output Format

After analysis, report findings grouped by file:

## Classes/Controller/MyController.php

:42 — replace GeneralUtility::makeInstance(MyService::class) → constructor injection
:18 — add return type `: ResponseInterface`
:55 — deprecated: $GLOBALS['TSFE']->id → $request routing attribute
:67 — guard clause: invert condition, return early, reduce nesting

## Resources/Private/Templates/List.html

:12 — hardcoded string "No items found" → f:translate
:34 — manual <a href> → f:link.page

## Configuration/TCA/Overrides/tt_content.php

:8 — legacy items format `['Label', 'value']` → `['label' => 'Label', 'value' => 'value']`

Applied 7 fixes. No behavior changes. Run tests to verify.

Version fallbacks

When the same codebase must run on TYPO3 v13 and v14 (dual-version extensions), you may temporarily keep transitional patterns:

  • Register PSR-15 middleware in Configuration/RequestMiddlewares.php (Core-supported pattern)
  • Keep Services.yaml event listener config alongside #[AsEventListener]
  • Keep numeric TCA items arrays alongside label/value format
  • Prefer Services.yaml _defaults (autowire / autoconfigure) plus Core registration attributes (#[AsCommand], #[AsEventListener], …) over ad-hoc factory: blocks

v14-Only Simplification Targets

The following simplification opportunities are v14-specific.

v14 Simplification Patterns [v14 only]

Pattern Simplification
$GLOBALS['TSFE'] access Fatal error in v14 (Breaking #107831) — replace with $request->getAttribute('frontend.page.information')
Extbase annotations (@validate) Replace with #[\TYPO3\CMS\Extbase\Attribute\Validate]
MailMessage->send() Inject TYPO3\CMS\Core\Mail\MailerInterface and call $this->mailer->send($email)
FlexFormService usage Prefer FlexFormTools; FlexFormService remains as a BC alias in v14 but should not be used in new code
Bootstrap Modal JS Frontend: native <dialog> where appropriate. Backend: use @typo3/backend/modal — it wraps native <dialog> in v14 (Breaking #107443); do not use raw Bootstrap modal JS
TCA ctrl.searchFields (removed in v14) TYPO3 v14 derives backend search fields automatically; tune inclusion per column with 'searchable' => true/false (supported field types: input, text, email, link, slug, color, datetime (without custom dbType), flex, json, uuid) where supported
Custom localization parsers Deprecated in v14 (#107436); migrate to Symfony Translation Component. Removed in v15
GeneralUtility::createVersionNumberedFilename() Replace with SystemResourceFactory / SystemResourcePublisherInterface (System Resource API, Feature #107537)

Credits & Attribution

Adapted from Boris Cherny's (Anthropic) code-simplifier
agent and Claude Code's bundled /simplify skill for TYPO3 contexts.

Copyright (c) Anthropic — Code simplification patterns (Apache-2.0 License)

Thanks to Netresearch DTT GmbH for their contributions to the TYPO3 community.

Installationen

Installationen 24
Globales Ranking #601 von 601

Sicherheitsprüfung

ath Safe
socket Safe
Warnungen: 0 Bewertung: 90
snyk Low
EU EU-Hosted Inference API

Power your AI Agents with the best open-source models.

Drop-in OpenAI-compatible API. No data leaves Europe.

Explore Inference API

GLM

GLM 5

$1.00 / $3.20

per M tokens

Kimi

Kimi K2.5

$0.60 / $2.80

per M tokens

MiniMax

MiniMax M2.5

$0.30 / $1.20

per M tokens

Qwen

Qwen3.5 122B

$0.40 / $3.00

per M tokens

So verwenden Sie diesen Skill

1

Install typo3-simplify by running npx skills add dirnbauer/webconsulting-skills --skill typo3-simplify in your project directory. Führen Sie den obigen Installationsbefehl in Ihrem Projektverzeichnis aus. Die Skill-Datei wird von GitHub heruntergeladen und in Ihrem Projekt platziert.

2

Keine Konfiguration erforderlich. Ihr KI-Agent (Claude Code, Cursor, Windsurf usw.) erkennt installierte Skills automatisch und nutzt sie als Kontext bei der Code-Generierung.

3

Der Skill verbessert das Verständnis Ihres Agenten für typo3-simplify, und hilft ihm, etablierte Muster zu befolgen, häufige Fehler zu vermeiden und produktionsreifen Code zu erzeugen.

Was Sie erhalten

Skills sind Klartext-Anweisungsdateien — kein ausführbarer Code. Sie kodieren Expertenwissen über Frameworks, Sprachen oder Tools, das Ihr KI-Agent liest, um seine Ausgabe zu verbessern. Das bedeutet null Laufzeit-Overhead, keine Abhängigkeitskonflikte und volle Transparenz: Sie können jede Anweisung vor der Installation lesen und prüfen.

Kompatibilität

Dieser Skill funktioniert mit jedem KI-Coding-Agenten, der das skills.sh-Format unterstützt, einschließlich Claude Code (Anthropic), Cursor, Windsurf, Cline, Aider und anderen Tools, die projektbezogene Kontextdateien lesen. Skills sind auf Transportebene framework-agnostisch — der Inhalt bestimmt, für welche Sprache oder welches Framework er gilt.

Data sourced from the skills.sh registry and GitHub. Install counts and security audits are updated regularly.

EU Made in Europe

Chat with 100+ AI Models in one App.

Use Claude, ChatGPT, Gemini alongside with EU-Hosted Models like Deepseek, GLM-5, Kimi K2.5 and many more.

Kundensupport