Automatic Content Tags
Generate content tags automatically in the Content Editor using the AI provider of your choice — Anthropic, OpenAI or DeepSeek.
Description
Automatic Content Tags adds an Auto Tagging action to the Jahia Content Editor. In one click it reads the text of the content you are editing, sends it to a large language model, and fills the content's tag field with relevant, on-topic tags — in the language you choose.
The module is LLM-agnostic: a single configuration key switches between Anthropic (Claude), OpenAI (GPT) and DeepSeek. There are no vendor SDKs bundled — every provider is called over plain HTTPS — and new providers can be added by registering a small OSGi service, so you are never locked in.
It is built to Jahia's security and integration standards: the action is POST-only, runs with the editor's own permissions (no privilege escalation), is protected by the CSRF guard, and never ships or logs your API key.
Key features
- One-click Auto Tagging action in the Content Editor 3-dots menu.
- Choose your AI provider — Anthropic, OpenAI or DeepSeek — with one config key. Model, endpoint, token limit, temperature and prompt are all configurable per provider.
- Pick the tag language at generation time, independently of the content language.
- Tags are written to Jahia's standard tagging field (j:tagList), so they work with existing facets, queries and tag-based navigation.
- The action appears only on taggable content and only when the module is enabled on the site.
- English and French user interface.
- Secure by design: POST-only endpoint, caller-session reads, CSRF-protected, no key in the bundle, content logged at debug level only.
Requirements
- Jahia 8.2.
- An API key for at least one supported provider (Anthropic, OpenAI or DeepSeek). Model usage is billed by the provider you choose.
Screenshots
How to install
- Install the module. In Jahia Administration → Modules, upload the module JAR (or install it directly from the Jahia Store), then start it.
- Enable it on your site. In Administration → Modules, add Automatic Content Tags to the site(s) where you want the action available. (The Auto Tagging action only appears on sites where the module is enabled.)
- Configure your AI provider. Create the file org.jahia.se.modules.contenttags.cfg in digital-factory-data/karaf/etc/ and set at least the active provider and its API key:
# Active provider: anthropic | openai | deepseek
llm.provider=anthropic# API key of the selected provider (required)
anthropic.api.key=sk-ant-...
#openai.api.key=sk-...
#deepseek.api.key=sk-...# Optional overrides (defaults shown)
#anthropic.model=claude-sonnet-4-6
#openai.model=gpt-5-mini
#deepseek.model=deepseek-chat
#llm.max.tokens=1024
#llm.max.source.chars=6000
#llm.user.prompt=Generate between 5 and 10 relevant tags for the following text. Respond ONLY with a JSON array of strings, without markdown or explanations.
The configuration is picked up automatically — no restart needed.
4. Use it. Open a content item in the Content Editor, open the 3-dots menu, click Auto Tagging, choose the tag language and click Apply. Save the content to persist the generated tags.
FAQ
Which AI providers are supported? Anthropic (Claude, Messages API), OpenAI (GPT, Chat Completions) and DeepSeek (Chat Completions). You pick one with the llm.provider key. Additional providers can be added by registering an LlmProvider OSGi service.
Do I need an API key, and does it cost anything? Yes — you need a key from the provider you choose, and model usage is billed by that provider according to their pricing. The module itself is free (MIT).
What content is sent to the AI provider? Only the internationalized text of the content item you are tagging, with HTML stripped and truncated to llm.max.source.chars (6000 by default). Nothing is sent until you click Apply. The module does not store your content or the responses.
Which content types can be tagged? Standard content, pages and main-resource content (jnt:content, jnt:page, jmix:mainResource). The action is hidden on other node types and on sites where the module is not enabled.
Does it tag unsaved changes? No. Tags are generated from the last saved version of the content. Save your edits first, then run Auto Tagging.
Where are the tags stored? In Jahia's standard tag list (j:tagList via the jmix:tagged mixin), so they integrate with existing tag facets, queries and navigation.
Does it replace existing tags? Yes. Applying generated tags replaces the current tag list for the item.
Can I control how many tags are generated, or the wording? Yes. Edit llm.user.prompt (and llm.max.tokens) in the configuration file to change the instruction sent to the model.
In which language are the tags generated? You choose the tag language in the dialog at generation time; it is independent of the content's edit language.
Is my API key safe? The key lives only in the OSGi configuration file on the server (karaf/etc), is never included in the module bundle, and is never written to the logs.
Does it work in production / clustered environments? Yes. It is a standard OSGi module with no special infrastructure requirements beyond outbound HTTPS access to your chosen provider's API.
MIT License
Copyright (c) 2026 Stephane Monier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.