Usage 

Using the AI Cowriter 

Once the extension is installed and configured:

  1. Open any content element with a rich text field in the TYPO3 backend
  2. You will see a new AI Cowriter button in the CKEditor toolbar
CKEditor toolbar with Cowriter button

The Cowriter button appears at the right end of the CKEditor toolbar.

  1. Optionally select the text you want to process (or leave empty to use the full content element)
  2. Click the Cowriter button — a dialog opens

Task-based dialog 

Cowriter task dialog

The Cowriter dialog with task selection, context scope, and additional instructions.

The Cowriter dialog lets you choose what to do with your content:

Task selection
Choose from predefined tasks like "Improve Text", "Summarize", "Extend / Elaborate", "Fix Grammar & Spelling", or translations. Each task has a description shown below the dropdown. You can also select "Custom instruction" to write a freeform prompt.
Saved prompts
Below the instruction, Save as prompt stores the current instruction under a title. Your prompts appear in the task list under My prompts; choosing one fills the instruction, and Delete prompt next to the description removes it. With Share with other editors, other editors find the prompt under Shared prompts once an administrator has approved it (Saved prompts). Until then your list marks it "awaiting approval". A saved prompt runs as a custom instruction.
LLM configuration
Choose which LLM configuration runs the task. The first option, "Task setting", keeps the configuration the task names, or the default configuration when the task names none. The list shows only the configurations your backend groups may use; a configuration restricted to other groups is neither listed nor accepted. The picker appears once the list has loaded and stays hidden when there is nothing to choose.
Audience, tone of voice and length (optional)
Pick an audience and a tone of voice from the prompt snippets the administrator maintains in nr-llm, and a length step from Much shorter to Much longer. They apply to this request only. When the page TSconfig sets a target length for the content element's type, the length step scales that target, and the result shows the word count next to it (Audience, tone and target length).
Versions
Ask for one, two or three versions. With more than one, a choice above the result switches between them, and Insert takes the one shown. Several versions arrive together, not while they are written.
Tools (off by default)
With Let the AI look up content with tools that change nothing, the model may call the nr-llm tools that run without an approval, for example to search the site's content, before it answers. A tool of the site that changes content needs an approval in nr-llm, and the dialog has no step to give one, so it is not offered. A tool from a remote MCP server is judged by what its operator declares: only one declared as needing approval is left out. Which tools a backend user may use is set in nr-llm; with none left, the task runs without tools. The answer is not streamed and comes as one version; the result line names the number of tool steps.
Context scope

Control how much context the AI receives:

  • Selection — only the highlighted text (pre-selected when you have a selection)
  • Full content — the entire editor content
  • Content element — the full tt_content record
  • Page content — all content on the current page
  • Parent page / Grandparent page — include ancestor page content for broader context

Options that require a record context (Content element and above) are disabled when the record cannot be detected.

Reference pages (optional)
Add pages whose content should be included as reference material. Search by title or UID, and specify a relation label (e.g., "style guide", "reference material").
Additional instructions (optional)
Add ad-hoc rules for the current request, e.g., "Write in formal tone" or "Keep sentences short".
Execute and preview

Click Execute to send the request to the LLM. The answer appears in the preview while the model writes it; when it is complete, the preview shows the final text with the model name. You can then:

  • Click Insert to replace the content in the editor
  • Click Reset to clear the result and adjust settings
  • Click Execute again to refine the result (the previous output becomes the new input)
  • Click Cancel to discard
Your AI usage
Below the result, Your AI usage opens a table of your own requests, tokens and cost today and this month, read from nr-llm. With a personal budget, each value shows the limit next to it ("12 of 50") and a bar; without one, the table says that no personal limit is set and still counts your requests. Cost is an estimate in USD. Today counts from 00:00, this month from the first day of the month, both in server time. The table is read again after every request.
Budget refusal
When a limit is used up, the request is refused. The preview names the limit, for example "This limit is used up: your daily cost.", and Your AI usage opens. A limit of an LLM configuration applies to all users of that configuration together. The same message appears for translation, alt text and field suggestions.

Available tasks 

Tasks are configured in the nr-llm extension (tx_nrllm_task table) with category = 'content'. The following default tasks are provided:

Task Description
Improve Text Enhance readability and quality while preserving meaning
Summarize Create a concise summary of the content
Extend / Elaborate Add depth, detail, and examples
Fix Grammar & Spelling Correct grammar and spelling with minimal changes
Translate to English Translate content to English
Translate to German Translate content to German

Inline translation 

The Translate dropdown in the CKEditor toolbar lets you translate selected text without opening the full dialog.

  1. Select the text you want to translate
  2. Click the Translate button (globe icon) in the toolbar
  3. Choose the target language from the dropdown
  4. A notification confirms the translation is in progress
  5. The selected text is replaced with the translation

The dropdown lists the languages of the site the record belongs to, with the titles of the site configuration. Translations into a language use the formality configured for it, for example the formal address for German. Records outside every site get a fixed list: German, English, French, Spanish, Italian, Dutch, Portuguese, Polish, Japanese and Chinese. See Translation languages and formality.

DeepL translates when it is set up in nr-llm (an API key is configured and stored) and supports the target language. Otherwise the language model of the default LLM configuration from the nr-llm extension translates. A request to the API may pass a configuration parameter; the translation then always uses that configuration's language model, also when DeepL could translate the language.

When the administrator switched on the revision of DeepL translations (Revising DeepL translations), a language model revises the translation before it replaces the selection. This takes a second request and a little longer. The success notification then reads "Translated to … and revised by AI". When the revision cannot be applied, the DeepL translation is inserted as it came and the notification has no hint.

Alt text generation 

The Vision button (image icon) generates alt text for images using LLM vision analysis.

  1. Click on an image in the editor to select it
  2. Click the Vision button in the toolbar
  3. A notification confirms the analysis is in progress
  4. The alt text is set on the image automatically

The alt text is written in the language of the record you edit: a content element in the German language of the site gets a German alt text. This needs a saved record; in a new record that has not been saved yet, the language is not known and the model chooses it. What the alt text should contain is set by the administrator (configuration).

Image generation 

The Generate image button (picture with a sparkle) creates an image from a description. It is shown only when the administrator switched the feature on (configuration), and it is disabled in an editor without the image plugin of rte-ckeditor-image.

  1. Place the cursor where the image should go
  2. Click the Generate image button
  3. Check the proposed description, change it, or write your own (up to 1000 characters), and click Generate
  4. Wait while the image is generated; this can take one or two minutes
  5. The image is stored in your upload folder and inserted at the cursor

The dialog Cowriter - Generate image says what the image is for, for example for element "Our test" on page "Airfryer Test", and proposes a description built from the element's header, the page title and the beginning of the element's text. The proposal is marked as such: it is put together from the saved record, not written by the AI, and no request goes to the AI until you click Generate. It goes into the description field only while the field is empty, so text you started to type is never replaced. A new element that has not been saved yet gets no proposal. Below, About this suggestion names the image model and says that only your description is sent.

The description becomes the image's alternative text. It says what you asked for, not what the model drew: check it and correct it where needed. You can close the dialog while the image is generated and go on editing: the image is still inserted when it is ready, where the cursor was when you clicked the button, as long as the record stays open. If you save and close the record or leave the page in the meantime, nothing is inserted; the image is then in your upload folder. If the request is cut off, for example by a timeout, a message says so; the image may then already be in your upload folder.

Generating an image for a file field 

File fields, such as Images or Media of a content element, have a Generate image button below the list of files when the administrator switched the feature on.

  1. Click Generate image below the field
  2. Check the proposed description or write your own (up to 1000 characters) and click Generate
  3. Wait while the image is generated; this can take one or two minutes
  4. The image is stored in your upload folder and added to the field as a new file
  5. Save the record to keep it

You can close the dialog while the image is generated: the image is still added to the field when it is ready, as long as the record stays open. If you save and close the record or leave the page in the meantime, it is not added; it is then in your upload folder. The dialog names the field and the record the image is for and proposes a description from the record, as in the rich text editor. When the field is full, the button is hidden until you remove a file. Fields that do not accept PNG files have no button. The new file has no alternative text of its own: enter one in the file's Alternative field where needed.

Inline suggestions 

When the administrator switched them on (configuration), the editor proposes how your text goes on while you write:

  1. Write at the end of a paragraph and pause
  2. After a moment a suggestion appears as grey text after the cursor
  3. Press Tab to insert it, or keep typing to ignore it

Escape, any other key, a click or leaving the editor removes the suggestion. Nothing is inserted unless you press Tab, and the grey text is never saved. Tab inserts the suggestion only while one is shown; otherwise it works as usual. A Tab pressed within a moment of the suggestion appearing also works as usual and removes the suggestion. To leave the field while a suggestion is shown, press Escape, then Tab. Ctrl+Z takes an inserted suggestion back.

Suggestions appear only at the end of a paragraph or heading with enough text (by default 30 characters), never in list items or table cells, and never while text is selected. A screen reader announces "Suggestion available, press Tab to accept" with the suggestion.

The Inline suggestions button in the toolbar switches suggestions off for you and on again, in every rich text field of the backend; your choice is kept in this browser. Each suggestion counts against your AI budget, also one you do not take.

Tasks shortcut 

The Tasks dropdown (document icon) lets you open the Cowriter dialog with a specific task pre-selected, skipping the task selection step.

  1. Click the Tasks button (document icon) in the toolbar
  2. Select a task from the dropdown (tasks are loaded from nr-llm)
  3. The Cowriter dialog opens with the chosen task pre-selected
  4. Review, optionally adjust instructions, and execute

Tasks are loaded once when you first open the dropdown and cached for the duration of the editing session. If you create new tasks in the LLM module, reload the page to see them in the dropdown.

Field suggestions 

Outside the rich text editor, the Suggest values with AI button (light bulb icon) next to a form field asks the LLM for alternative values. By default it sits next to these fields:

  • Page properties, General: Page title (pages.title), URL Segment (pages.slug), Alternative Navigation Title (pages.nav_title) and Subtitle (pages.subtitle)
  • Page properties, SEO: Title for search engines (pages.seo_title) and Description for search engines (pages.description)
  • Page properties, Social Media: Open Graph Title, Open Graph Description, X / Twitter Title and X / Twitter Description (pages.og_title, pages.og_description, pages.twitter_title, pages.twitter_description)
  • Page properties, Metadata: Abstract (pages.abstract) and Keywords (pages.keywords)
  • Content elements: Header and Subheader (tt_content.header, tt_content.subheader)

Tabs and labels are those of TYPO3 14.3 with the system extension seo; other versions may place a field on another tab.

The SEO and social media fields exist only with the system extension seo. Administrators can change the list, see Field suggestions.

  1. Click the light bulb button next to the field (or focus it and press Enter or Space)
  2. The suggestions appear in a list below the field; by default there are three
  3. Click a suggestion (or move to it with the arrow keys and press Enter) to insert it into the field; the cursor moves into the field
  4. Save the record to keep the value
Page properties, SEO tab: three AI suggestions listed below the Title for search engines field, with a close button and a status line under the list

The suggestion list below Title for search engines: three suggestions to pick from and the status line that announces them.

Nothing is saved automatically: a picked suggestion only changes the form, exactly as if you had typed it, and Escape closes the list without changing anything.

The suggestions are generated from:

  • the page title,
  • the current value of the field, including text you typed but have not saved yet,
  • the other text fields of the record you may see (for a content element its header and text, so a headline describes the element and not the whole page; for a page its descriptive fields),
  • for a content element, the descriptive fields of its page you may see: navigation title, subtitle, abstract, description, keywords, the SEO and social media titles and descriptions, and other page fields with the light bulb button,
  • the text of the content elements on the page,
  • the title of the parent page and the titles of up to five neighbouring pages (pages on the same level).

Only visible pages you may see in the page tree are named: hidden, scheduled and deleted pages, folders, menu separators and the recycler never are. Titles are taken in the language of the record where the page has a visible translation; for a translated content element the page title and page fields come from the page translation too. In a workspace, pages and content elements are read as they look in your workspace; drafts of other workspaces are never used. The data sent is limited in size, see What a suggestion request sends. Which of these sources went into a suggestion is listed under About this suggestion.

Each field gets its own instruction and length limit, and a suggestion longer than the limit is shortened at a word boundary before you see it:

Field What the AI writes At most
Page title The page topic, without the site name 70
Navigation title 1 to 3 words for menus 30
Subtitle One phrase that adds to the title 120
Abstract 1 to 3 sentences for teasers and page lists 500
Title for search engines The topic first, without the site name 60
Description One or two sentences for search result snippets 160
Keywords 3 to 8 comma-separated keywords 255
Open Graph / X title A catchy title for link previews 70
Open Graph / X description One or two sentences for link previews 200
URL segment 1 to 5 words for the last path segment 60
Content element header What the element is about 80
Content element subheader One phrase that adds to the header 120
Other configured fields A value for the field, named by its label 255

A lower max in the field's TCA wins over these numbers. For the URL segment the AI only proposes the words of the last path segment. TYPO3 adds the parent page path and turns the words into a valid URL segment. It checks that the URL segment is unique the same way as for a segment you type in.

The button only appears for fields you may edit (a read-only field shows no button), and the server checks your permissions again for every request: you need write access to the table, access to the field if it is an exclude field, and edit rights on the page (for a new page: the right to create pages below the parent page).

Categories are not filled by the button. For tags, use the Keywords suggestions and copy the terms you want to use. Image alternative texts are not suggested here, because the text model never sees the image: use Alt text generation in the rich text editor.

Presenting a text as tabs or accordion 

When the administrator switched it on (configuration), a text element has the button Present as tabs or accordion next to its rich text. It turns the text into a new Tabs or Accordion element, with one tab or panel per section.

  1. Save the element: the button works with the saved text
  2. Click Present as tabs or accordion (or focus it and press Enter or Space)
  3. Below the field you see the proposed sections: a title you can change and the beginning of the section's text
  4. Choose Tabs or Accordion
  5. Click Create element

The new element appears directly after this one, on the same page and in the same column. It is hidden until you switch: this element stays visible and is not changed, so visitors see no difference yet. Below the proposal you then have three buttons:

  • Show the new element and hide the original makes the new element visible and hides this one, in one step. In a workspace both changes are part of your workspace: publish the two elements together, so the live page never shows both or neither. The button is not offered for an element with translations or for a connected translation (see below).
  • Open the page in the Layout module shows the page with the new element, so you can check it first.
  • Open the new element opens it for editing.

If the form has unsaved changes, the last two buttons ask first, as every link out of the form does. Escape or Cancel closes the proposal without creating anything; while the element is being created, the proposal stays open until the result is there.

An element with translations is not switched. Translated pages show a translation only while the element in the default language is visible: hiding this element would hide its translations too. To replace it:

  1. In the Layout module, translate the new element into each language (Translate)
  2. Make the new element and its translations visible
  3. Hide this element

Do not delete it: deleting an element in the default language also deletes its translations. The proposal and the result say so.

What the new element takes over from the original: the header, the column, the language, its access restrictions (Usergroup Access Rights, Publish Date, Expiration Date) and, where you may edit them, the header layout, frame and spacing. The images of a Text & Images or Text & Media element go into the first tab or panel; the proposal says when you may not add images there, and then they are not taken over. Anything else (for example a link on the header, the subheader, the image position or categories) is not taken over.

A translation that is connected to its default-language element becomes a new element of its own in that language, not connected to the default language (the proposal says so). On a page in connected translation mode the page module then reports the page as mixed. Such a translation is not switched either. On a site that falls back to the default language the new element may not appear as expected: on TYPO3 13.4 not at all, on 14.3 next to the default-language content. To replace such a translation, create the new element from the default-language element instead and translate it.

A text with headings is divided at its headings; the heading becomes the title of its tab and text before the first heading becomes an "Introduction". A text without headings is divided by the AI, which only chooses where sections start and suggests their titles; your text is not rewritten. Only this second case counts against your AI budget. The introduction is named in the language of the element ("Einleitung" for a German element). In a workspace the new element is created in your workspace.

The button only appears when you may create such an element on the page. Below the proposal, About this suggestion says whether the AI was asked: for a text divided at its headings it says that no language model was used.

About this suggestion 

Every Cowriter dialog that asks the AI has a collapsed section About this suggestion at its end: the list of field suggestions, the overview of all fields, the image dialog and the proposal for tabs or an accordion. Open it with a click, or move to it with Tab and press Enter or Space. It shows:

  • Created by: the Cowriter extension and the feature
  • nr-llm configuration: the configuration that answered (name and identifier)
  • Model: the model and provider that answered, as nr-llm reports them, or "not reported by nr-llm"
  • Context sent to the model: the sources of the request as a list of names and counts, for example "Page title", "12 page fields", "Content of 5 elements", "Title of the parent page", "Titles of 3 neighbouring pages". The list never repeats the data itself. It is counted after the size limit, so a source that was cut off is not listed.
  • Current settings: the feature, the fields with suggestions you may edit, the number of suggestions and the limits (requests per minute, size of the page content and of all data, number of neighbouring pages). For images: the image model and where it is set.
  • Change the settings: links to the Cowriter extension configuration (for system maintainers, who may open the Settings module) and to the nr-llm configuration record (for administrators). The links open in a new window, so the record you edit stays open.

Nothing in the section is information you could not see otherwise: the configuration is one you may use, the fields are fields you may edit. The provider's address, keys and other configurations are never shown.

The list of AI suggestions below the Header field of a content element, with the opened section "About this suggestion": the extension and feature, the nr-llm configuration, the model, the list of context sources sent and the current settings

About this suggestion below the field suggestions of a content element header.

Suggestions for all fields at once 

The Suggest values for all fields with AI button in the document header of the record form (next to Save and Close) reviews every field of the record that has the light bulb button in one go. It appears only when the form shows at least one such field you may edit.

  1. Click the button (or move to it with Tab and press Enter or Space)
  2. A dialog lists the fields in a table: the field, its current value (including text you typed but have not saved yet), the suggestion and the reason for it. While the AI works, Apply selected is disabled and a status line says so; when the list is there, the cursor is on the first checkbox (on the table caption when no change is suggested at all)
  3. Where a change is suggested, the row has a checked checkbox and the suggestion in a text field you can edit; editing a suggestion checks its box again. Where the current value is already good, the row says No change suggested and gives the reason
  4. Uncheck the values you do not want and click Apply selected
  5. The checked values are written into the form fields and the form is marked as changed; a notification says how many values were applied
  6. Review the values and save the record
Dialog "AI suggestions for all fields" over the page properties: a table with the columns Apply, Field, Current value, Suggestion and Reason; checked rows with an editable suggestion for the page title, URL segment, subtitle and the SEO and Open Graph fields, one row "No change suggested" for the navigation title, and the buttons Cancel and Apply selected

The overview of all fields: each suggestion with its reason, checked where a change is suggested. Long texts get a text area.

Cancel, Escape or the close button leave the form as it was. Nothing is saved until you save the record.

The values follow the same instructions and length limits as the light bulb button next to a single field (Field suggestions), and the values and reasons are written in the language of the record. The server checks every field: a field you may not edit is left out of the request, and every value is shortened to the field's limit before you see it. Text from the AI is always shown and inserted as plain text.

Below the table, About this suggestion names the model and the context the review was based on; the overview sends the same sources as a single field.

The whole review is one request: it counts once against your rate limit of 20 requests per minute and is one call to the AI (nr-llm), however many fields it covers; two calls when the answer does not have the expected format and nr-llm asks the model once more to repair it. Both count against the AI budget. That call sends the context once and is larger than a single-field request, so it uses more tokens than one suggestion for one field.

Model override 

You can override the default model for a specific prompt by using the #cw: prefix followed by the model identifier:

#cw:gpt-5.2-thinking Write a detailed technical analysis of our API architecture
Copied!

The model name must match a model available in your configured LLM provider. Valid model names follow the pattern: alphanumeric characters, hyphens, underscores, dots, colons, and forward slashes.