---
title: "The tool surface"
description: "Every tool this server offers, one page each."
canonical: index.html
navigation-title: "Tools"
---

<a id="the-tool-surface"></a>

# The tool surface

Every tool this server offers, one page each. A page says the tool's name, what it takes, the fields it answers with and what a call to it comes back with. This is the list of them.

Every tool answers twice: the readable text, and the same answer as `structuredContent` that matches the `outputSchema` the tool declares. Matches come with their source, coverage and score, checks as command strings, components, icons and labels as typed records, commit diagnostics as `level`/`code`/`message`. So
composing several tools does not mean parsing headings and code fences back out
of prose. All tools carry the `readOnlyHint` annotation. Only `typo3_feedback_record` writes anything, and then only a new file.

Names are `typo3_<subject>_<verb>`, with the verb from a fixed set. `lookup` finds and may find nothing, `guide` composes an answer for a task, `list` enumerates. `scope` states what a source covers, `describe` states what one thing you name is, `record` writes. So the name already says what shape the
answer has.

`bin/cli tools:index` writes the half of a page above its `Answered` heading from the classes that answer the calls. `bin/cli tools:check` fails where it has gone stale. A surface written out a second time by hand stops to describe the answer at the first change nobody carried across. What is
below that heading is one of two things, and the sentence it opens with says
which. Where a tool's answers read nothing an installation contains, they derive from the code and that same check holds them. Where they do, a call to an installation has to produce them. `bin/cli tools:record` writes those and nothing checks them. So such a page may say what it answered on a day the code has since moved past. The check counts how many of them predate the last change to `knowledge/` or `src/`, and fails on none of them. Two tools have no answered
half at all, on purpose, and say so in its place.

A client may get fewer than these. `TYPO3_DEV_COMPANION_EXCLUDE_TOOLS` names the tools a caller does not want, and the two feedback tools exist only in a standalone checkout. `typo3_server_scope` names what stayed out.

The schema on a page is YAML. A key per field, the fields of an object or of a list entry nested under it, and the value is the type. A field carries `# optional` where it may be absent, because required is the promise. A required output field is present on every path through the tool, misses included. Absolute paths in a recorded answer read `<repository>`, `<installation>` and `<home>`, so no page carries one machine's layout.

Each page names the sources that can answer that tool, under its annotations and at the foot of its description. It links them into [Where an answer comes from](../answer-sources.md). That is the same statement read the other way round, one heading per source with the tools it answers. What it settles is not what a tool is about. It settles whether a caller can ask it at all in the state the machine is in.

**[typo3\_backend\_module\_lookup](typo3_backend_module_lookup.md)**

List the backend modules registered in the TYPO3 installation you work
in.

**[typo3\_changelog\_lookup](typo3_changelog_lookup.md)**

Search the TYPO3 changelog.

**[typo3\_commit\_message\_guide](typo3_commit_message_guide.md)**

Draft and check a TYPO3 commit message.

**[typo3\_component\_lookup](typo3_component_lookup.md)**

Look up TYPO3 backend UI components by name or topic.

**[typo3\_configuration\_lookup](typo3_configuration_lookup.md)**

Read an effective TYPO3\_CONF\_VARS value from the installation you work
in.

**[typo3\_documentation\_lookup](typo3_documentation_lookup.md)**

Search or read the official live TYPO3 documentation for a covered TYPO3
line.

**[typo3\_extension\_describe](typo3_extension_describe.md)**

Describe what one installed extension registers.

**[typo3\_feedback\_list](typo3_feedback_list.md)**

List the feedback typo3\_feedback\_record recorded, newest first, so a
session can work them off.

**[typo3\_feedback\_record](typo3_feedback_record.md)**

Leave feedback about a gap, wrong answer, or missing capability of this
knowledge server.

**[typo3\_flexform\_lookup](typo3_flexform_lookup.md)**

Resolve one TCA field of type=flex to the data structure the
installation uses.

**[typo3\_fluid\_namespace\_list](typo3_fluid_namespace_list.md)**

List the Fluid ViewHelper namespaces that are global in the TYPO3
installation you work in.

**[typo3\_forge\_lookup](typo3_forge_lookup.md)**

Reads the TYPO3 issue tracker at forge.typo3.org through the bot
protection the core's own AGENTS.md warns a hand-written request about.

**[typo3\_gerrit\_lookup](typo3_gerrit_lookup.md)**

Whether a TYPO3 core patch already exists and what state its review is
in, read from review.typo3.org.

**[typo3\_hint\_lookup](typo3_hint_lookup.md)**

Return hints for TYPO3 core paths or task topics, grouped by section.

**[typo3\_icon\_lookup](typo3_icon_lookup.md)**

Validate or find icon identifiers in the TYPO3 backend icon registry of
the installation you work in.

**[typo3\_label\_lookup](typo3_label_lookup.md)**

Search the labels registered in the TYPO3 installation you work in and
the XLF files below project config/sites.

**[typo3\_permalink\_lookup](typo3_permalink_lookup.md)**

Validate docs.typo3.org permalink identifiers and turn old documentation
URLs into the identifiers that replace them.

**[typo3\_project\_describe](typo3_project_describe.md)**

Describe the repository this server started in and the TYPO3
installation it has made.

**[typo3\_record\_lookup](typo3_record_lookup.md)**

Read the rows of any table this installation has TCA for.

**[typo3\_reference\_list](typo3_reference_list.md)**

List the worked examples the TYPO3 core ships of its own conventions,
and what each one is a reference for.

**[typo3\_rule\_lookup](typo3_rule_lookup.md)**

Search the TYPO3 rules and procedures this server carries, by topic.

**[typo3\_schema\_lookup](typo3_schema_lookup.md)**

List the columns TYPO3 derives for a table from its TCA.

**[typo3\_script\_lookup](typo3_script_lookup.md)**

Find notes for TYPO3 core scripts and commands.

**[typo3\_server\_scope](typo3_server_scope.md)**

Orientation for this server.

**[typo3\_service\_lookup](typo3_service_lookup.md)**

Find what the dependency injection container of the TYPO3 installation
you work in assembles.

**[typo3\_snapshot\_scope](typo3_snapshot_scope.md)**

Report whether component contracts come from the active installation or
the bundled fallback.

**[typo3\_system\_extension\_lookup](typo3_system_extension_lookup.md)**

Answer whether an extension is part of the TYPO3 core, and on which
versions.

**[typo3\_task\_guide](typo3_task_guide.md)**

Answers what one change owes, which a repository's own conventions file
cannot.

**[typo3\_ter\_lookup](typo3_ter_lookup.md)**

Read what the TYPO3 Extension Repository has published under an
extension key, live from extensions.typo3.org.

**[typo3\_test\_run\_guide](typo3_test_run_guide.md)**

Say what this core checkout needs before a test can run at all, and
which Build/Scripts/runTests.sh commands to run once it can.

**[typo3\_translation\_domain\_lookup](typo3_translation_domain_lookup.md)**

Compute the translation domain an XLF file resolves to, from its path.
