Hello @mxr576 - you are right, we need a better solution, the menu can contain all kinds of links (not only to nodes).
UX / Concept is created in this related issue 📌 [Metag] UX concept for AI Dashboard / Status Page / Kickstarter Active . Setting to postponed, until we have clear concept.
Let's take a proper round of UX, then we implement the best solution.
- Workshop - Start with Drupal and AI. Up and running with the AI ecosystem in Drupal in no time.
- Speaker(s): Christoph Breidert (breidert), Frederik Wouters (Wouters_f)
- Drupal AI Workshop Slides
I tested the functionality in detail and it works great !
However, I found a small error:
The content sections in /llms.txt correctly show the links as Markdown links (.md appended to the URL). However, the menu links do not show Markdown links (.md missing in the URL)
Testing steps:
- Setup Drupal CMS without any additional settings
- Require recipe:
$ ddev composer require drupal/ai_recipe_llm_optimized_content - Apply recipe:
$ ddev drush recipe ../recipes/ai_recipe_llm_optimized_content - Checkout settings and
/llms.txt - Add new page and add to menu and observe the change in
/llms.txt - Add blog post content type to Drupal CMS via project browser (
/admin/modules/browse/recipes) - Add LLMs.txt content section called 'Blog' with some description
- Create blog post, and add to content section 'Blog'
- Observe that
/llms.txtnow contains a new section with the blog - Enable footer section and observe footer links in
/llms.txt
After completing the steps /llms.txt looks like this:
# Demo Website
Cool website slogan
## Main menu
- [Blog](https://drupal-cms.ddev.site/blog)
- [Demo Page](https://drupal-cms.ddev.site/demo-page)
- [Home](https://drupal-cms.ddev.site/)
## Blog
Blog articles.
- [A celebration of Drupal and open-source contributions](https://drupal-cms.ddev.site/blog/2025-01/celebration-drupal-and-open-source-contributions.md)
The Drupal project continues to serve as a model for open-source collaboration, powered by a global community of contributors. With more than 100,000 contributors from around the globe, the project highlights the transformative impact of open-source on the digital landscape.
- [Cool Blog post](https://drupal-cms.ddev.site/blog/2025-10/cool-blog-post.md)
Y, viéndole don Quijote de aquella manera, con muestras de tanta tristeza, le dijo: Sábete, Sancho, que no es un hombre más que otro si no hace más que otro. Todas estas borrascas que nos suceden son señales de que presto ha de serenar el tiempo y han de sucedernos bien las cosas; porque no es posible que el mal ni el bien sean durables, y de aquí se sigue que, habiendo durado mucho el mal, el bien está ya cerca. Así que, no debes congojarte por las desgracias que a mí me suceden, pues a ti no te cabe parte dellas.Y, viéndole don Quijote de aquella manera, con muestras de tanta tristeza, le dijo: Sábete, Sancho, que no es un hombre más que otro si no hace más que otro.
## Footer menu
- [Privacy policy](https://drupal-cms.ddev.site/privacy-policy)
First content was created: https://www.drupal.org/project/ai_recipe_content_classification →
Content styling was updated on AI Image Classification project page → .
Design of project page will happen in child issue #3549923: Create design of Image Classification Product Page →
The bulk operation will be handled in a child issue #3549922: Create bulk operation for image classification → .
Recipe was updated, it now has descriptions for the new fields.
Recipe project → page was updated. Design and layout is needed.
This works nicely and was tested here 🌱 [Meta] AI Image Classification Active
It works as expected
When you apply the recipe you get the following functionality automatically configured:
* Media type image has AI alt text configured using "Field widget actions"
* Media type image has the additional fields "Image Description" and "Image Tags" which are automatically filled out using AI automators
Steps for testing:
mkdir my-drupal-site && cd my-drupal-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project "drupal/recommended-project:^11"
ddev composer require drush/drush
ddev drush site:install --account-name=admin --account-pass=admin -y
ddev launch
ddev composer require 'drupal/ai:^1.2@RC'
ddev composer require drupal/token
ddev composer require 'drupal/ai_provider_openai:^1.1'
git clone git@git.drupal.org:project/ai_recipe_image_classification.git recipes/
ddev drush en ai token ai_provider_openai
Setup OpenAI via UI and leave default settings.
ddev drush recipe ../recipes/ai_recipe_image_classification
ddev drush recipe ../recipes/ai_recipe_image_classification
8/8 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓]
Applied AI Image Classification recipe recipe.
[OK] AI Image Classification recipe applied successfully
I tested but get an error.
Steps to reproduce:
mkdir my-drupal-site && cd my-drupal-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project "drupal/recommended-project:^11"
ddev composer require drush/drush
ddev drush site:install --account-name=admin --account-pass=admin -y
ddev launch
ddev composer require drupal/ai:"1.2.0-beta1"
ddev composer require drupal/token
git clone git@git.drupal.org:project/ai_recipe_image_classification.git recipes/
ddev drush en ai token
ddev composer require 'drupal/ai_provider_openai:^1.1'
Setup OpenAI via UI and configure GPT-4 for all default settings.
ddev drush recipe ../recipes/ai_recipe_image_classification
7/7 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓]
Applied AI Image Classification recipe recipe.
[OK] AI Image Classification recipe applied successfully
Upload and save image (manually enter alt text)
Error message:
Referrer https://my-drupal-site.ddev.site/media/1/edit?destination=/admin/content/media
Message Error invoking model response: Invalid content type. image_url is only supported by certain models.
No stack trace.
Features:
Limit llms.txt to default language (multilingual we do later): [# https://www.drupal.org/project/llm_support/issues/3548950] →
Populate llms.txt with sensible default values:
- Meta description of startpage with fallback to site slogan
- Main Menu
- View with included pages
Todo:
Create tokens, view, and field "Include in llms.txt" as base field
Implementation idea: Create a custom field using https://www.drupal.org/project/custom_field → with two values and an automator to populate this field.
breidert → created an issue. See original summary → .
In the first iteration the recipe should only have a button to create an alt text.
However, it would be nice if it also came with a a views bulk operation, to generate multiple alt texts.
breidert → created an issue.
breidert → created an issue.
breidert → created an issue. See original summary → .
Design work is done in this issue: [Meta] - UX / Design Conversational Interface 📌 [Meta] - UX / Design Conversational Interface Active
Commenting on here as requested in the slack message.
Based on the last conversation about chat placements and options we concluded the following for the "Fullscreen Icon of the chat":
Chats can be place via blocks. The chat placement block will have the following position settings:
- Sticky: Right or Left
- Inline
- Sidebar: Expand or Fullscreen or None
When sidebar is selected the chat appears as in the screenshot. The screenshot shows the full screen setting, in which the chat opens on a modal. Note we still chose to name it "Fullscreen" because this is more common terminology. If "Expand" is chose an expander icon is show which simply increases and resets the width of the sidebar. Potentially both settings have more options like pixels or percent. We are also considering a setting to automatically set the chat to fullscreen, if the response has a certain length. This is useful if the response does not fit into the sidebar. However, this is not relevant to the wireframe. If "None" no icon is shown.
The screenshot is based on the L&F of the Figma wireframe available here.
I was also thinking about the last part of the sentence ...can be created from ground up.
@thomas.Wardin → - Do you have a better suggestion for the whole sentence?
Existing pages can be reused as templates, or dedicated templates can be created from the ground up.
The text was changed from
Content templates module provides a user-friendly and flexible solution for creating and managing custom templates to control the layouts of content (nodes) and streamline editorial workflow. It allows site administrators and content editors to create visually appealing templates for different types of content tailored to specific target audiences. Templates can be easily created from existing nodes and can be customised later on. With a single click, new content is created from a template, and a reference to the template is retained for easy retrieval of all nodes created from specific templates.
to
Content templates module provides an intuitive and flexible way to create and manage custom templates based on existing content (nodes). Existing pages can be reused as templates, or dedicated templates can be created from the ground up. This enables site administrators and content editors to design templates for different use cases. Templates can be organized by topic, and new content can be generated from a template with a single click. Each new page keeps a reference to the template it was created from, making it easy to retrieve and manage all content associated with a specific template.
The relevant sentence that was confusing was changed to ... to create and manage custom templates based on existing content (nodes). Existing pages can be reused as templates, or dedicated templates can be created ...
kristen pol → credited breidert → .
valthebald → credited breidert → .
breidert → created an issue.
Sounds interesting
A first version of the report was created and is reviewed internally. Feedback from Paul, Baddý, and Dries was requested.
Design and layout of the report have started.
kristen pol → credited breidert → .
valthebald → credited breidert → .
First draft is in this Google-Doc.
breidert → created an issue.
kristen pol → credited breidert → .
I tested locally. Of course it would be better to disable the button, if no text is selected and show a tooltip. But I think it is good for now.
Before:
After:
Add skill tags for issue discovery
Add skill tags for issue discovery
valthebald → credited breidert → .
This looks awesome
For reference: Drupal CMS SEO Tools
If we want to pick up the idea with the focus keyword, it would fit nicely as a new field called field_seo_focus_keyword and use it when generating content for field_seo_title and field_seo_description.
We are currently doing an AI SEO project with one of our clients. On their side there is an experienced SEO specialist. From his side the main SEO works arises around the "focus keyword".
Currently we are thinking around the lines of adding a field to all content types called "Focus keyword". This will be used in various use cases such as generating title texts, preview texts (meta tags, cards, introductions, etc.), and content. It will also be used for internal linking to make sure the link texts use the focus keyword of the link target pages.
We are currently exploring what more we can do to make an SEO specialists day to day job working with content creators more efficient.
I think conceptually the issue could be split in SEO analysis (figure out what is going on) and SEO content creation (create or optimize content that ranks).
Once we have first versions, I will share the results with you.
Since guardrails can appear in many places such as automators, agents, tools, content suggestions, CKEditor, etc. we need a list of configuration UIs where the functionality can be added. Best would be with screenshots as we might need UX work to create a pleasant configuration experience.
We need something like this for Drupal AI as well.
@kristen - should be not add the above as issue template?
I mean here: https://www.drupal.org/node/add/project-issue/ai →
Instead of the existing default template:
<h3 id="summary-problem-motivation">Problem/Motivation</h3>
<h4 id="summary-steps-reproduce">Steps to reproduce (required for bugs, but not feature requests)</h4>
Please provide information like AI modules enabled, which AI provider, browser, etc.
<h3 id="summary-proposed-resolution">Proposed resolution</h3>
<h3 id="summary-remaining-tasks">Remaining tasks</h3>
<h3>Optional: Other details as applicable (e.g., User interface changes, API changes, Data model changes)</h3>
I did an in depth review of the proposed documentation change.
I really like the quality and the clarify of the new "Issue guidelines". However, I find them a bit long and fear contributors might not read them. But after spending some time thinking about it, I could not suggest improvements or come up with a better way to document issues.
I only suggested some small text changes for which I felt they made the text more neutral. I left the suggestions as comments in the MR.
However, when my suggestions are accepted or declined the issue can be set to RTBC from my point of view.
@lussoluca after speeking with @marcus_johansson we prefer the addon version. Please close the .ddev MR.
I tested commands the MR, and it works after fixing one small error (I left a comment in the MR).
mkdir ai-dev && cd ai-dev
ddev config --project-type=drupal11 --docroot=web --php-version=8.3 --corepack-enable
ddev add-on get lussoluca/ddev-drupal-suite
ddev drupal-init 11.2.2
ddev drupal-get-module ai 1.2.x
ddev drupal-get-recipe ai_dev_recipe 1.0.x
The recipe applies nicely. I like how you are asked during installation to enter your keys for Anthropic and OpenAI.
The current working version of the high-level roadmap is here.
breidert → created an issue.
When navigating to https://new.drupal.org/ai/survey I see the survey is not using the full available width.
The survey is responsive, if possible change to use the full width.
valthebald → credited breidert → .
kristen pol → credited breidert → .
kristen pol → credited breidert → .
I like it, but I might be biased :-)
Looks good Kristen
@kristen I would suggest the following:
Bug
Title
Clear, concise summary of the problem (e.g., "Crash on login when username is blank")
Description
- What’s happening vs. what’s expected?
- Include any error messages, stack traces, or logs.
- If it’s a regression, mention when it last worked.
- Describe expected behavior
Steps to Reproduce in Drupal AI DDEV environment
1. Go to ‘...’
2. Click on ‘...’
3. See error
Environment
- Drupal version:
- Drupal AI version:
- Browser (if relevant):
- Any relevant config or flags
Todos
- Fix the bug
- Provide testing instructions in Drupal AI DDEV environment
Requirements / Acceptance Criteria
- When I follow the testing instructions I can verify the feature works
URLs (if applicable)
- Link to the affected page (can be relative)
Screenshots (if applicable)
- Provide a screenshot showing the issue
Feature
Title
Short summary of the feature (e.g., "Add dark mode toggle in settings")
Description
- What is the feature?
- What problem does it solve or what value does it add?
User Story / Use Case
As a [type of user], I want to [goal] so that [benefit].
Todos
- Create concept
- Implement
- Provide testing instructions in Drupal AI DDEV environment
- Provide documentation
Requirements / Acceptance Criteria
- When I read the documentation I understand how the feature is supposed to work
- When I follow the testing instructions I can verify the feature works
Design / UI Notes
- Link to mockups, wireframes, or design files if available
Dependencies or Related Work
- Mention any backend work, third-party libraries, or affected components
URLs (if applicable)
- Link to spec, design, or existing feature area
Screenshots (if applicable)
- Add mockups, visual references, or examples
Task
Task Requirements
Title
Describe the task clearly (e.g., "Provide documentation for new contributors")
Description
- What needs to be done and why
- Not necessarily user-facing
Checklist / Subtasks
- Break down into actionable steps if helpful
Context / Background
- Link to related tickets, technical docs, Slack threads, etc.
Todos
- Describe what needs to be done
Requirements / Acceptance Criteria
- Describe what does “finished” looks like
Effort Estimation based on current information
Re-Build Logging (Buckets 1-3 above): 10-15 days
The majority of the work goes into the re-creation of the AI logging sub-module, and updating the Extended Logger → module.
Creating sensible management views (like number of tokens spent, or number of AI calls) does not take so much time. Most of the work for this would be to define what views make sense.
Creating a log export function does not take much time.
Create OTEL integration: 5-10 days
The creation of a new sub-module called AI Oberservability is not very difficult. The majority of the work flows into mapping AI event data to OTEL's traces, spans, attrributes, and events in a meaningful way. The module Opentelemetry → also needs to be upgraded.
Delivery
It is planned that EPAM delivers above functionality with their own team. Communication with the core maintainers Marcus and Artem will be via a dedicated channel in Slack (#ai-obersability).
First the new logging will be developed, then the OTEL integration.
> The About you should be the first step
Not sure, usually you do it the other way around. Personal stuff at the end. I think if people filled out the complete survey, they would like to get the results. Therefore, they would also fill out the about you section on the last page.
breidert → created an issue.