What's Changed
Requires: KIO plugin ≥ 2.0.0
✨ New Features
Multi-Agent Architecture with Parallel Execution
The KIO backend now uses an orchestrator/agent model. An orchestrator handles the
conversation and delegates focused subtasks to specialized agents, including running
several agents in parallel for bulk/multi-item requests (for example, "optimize SEO for
the selected articles") or independent operations on the same content item. This can
significantly speed up bulk and multi-item requests.
Bulk Operations and Parallel Execution
kio.backend.max-parallel-agents-per-request: new property (default3) capping how
many agents may run in parallel for a single bulk/multi-item request. The main lever for
tuning response time vs. AI resource (token) consumption.kio.backend.max-bulk-items: new property (default50) capping the total number of
content items accepted for a single bulk operation, independent of how many run in parallel.
Prompt Caching
A multi-agent system adds some token overhead, and parallel execution can raise usage further.
KIO offsets this with substantially improved prompt caching, which now serves roughly 90% of
all input tokens from the provider cache, up substantially from before:
- OpenAI/Azure: improved from about 60% to about 90% of input tokens served from cache.
- Bedrock Converse (Anthropic Claude): prompt caching is now enabled at all, going from no
caching to roughly 85%.
Caching applies to the prefix shared by all requests (the system prompt and the tool
definitions), so it pays off most in multi-user installations. Cached tokens are reported
separately in the Debug Output.
Insights
The Debug Output now reports token usage and duration per agent call, per tool call, and as a
total summary for the whole request. This helps administrators and playbook/tool developers
understand and optimize the cost of a request, in particular when developing custom playbooks
or integrating tools via MCP. Insights were previously an internal-only feature; they are now
part of the regular debug output and are switched on together with it.
Per-Site Usage Tracking
KIO usage can now be tracked per site. The existing metric can be parameterized with a site ID to report usage for a specific site.
To track global usage, aggregation needs to be handled by the metrics consumer.
Incoming Links Tool
KIO can now list content items that link to a given content item, optionally filtered by
document type or the referencing property. This supports tasks such as reviewing or
clearing incoming links before unpublishing or deleting content.
🐛 Bug Fixes
- [AI-782]: Fixed confirming pending CMS changes: with Auto Apply Content Changes
switched off, not all previously determined properties were always used when writing the
confirmed change, which could lead to errors. Confirmed changes are now applied completely
and correctly. - [AI-823]: Fixed incorrect token-usage reporting for Amazon Bedrock prompt caching.
- [AI-633]: Fixed KIO continuing to process a request after the client canceled it.
- [AI-676]: Fixed
ReadContentToolconfusing content name and ID. - [AI-677]: Fixed page grids not being correctly initialized on newly created pages.
- [AI-759]: Fixed copying content incorrectly copying a folder or its children instead of
the requested content. - [AI-877]: Fixed KIO not properly recognizing non-content items (e.g. folders) selected in
the Library as context. - [AI-793]: Fixed KIO redundantly restating a pending decision in chat text in addition to
the decision buttons. - [AI-857]: Content with deleted references can now be read instead of failing.
- [AI-870]: Placements without an explicit
editableflag are now read correctly.
Validated Models
- OpenAI GPT-5.6-Terra, GPT-5.4-Nano (for image extraction)
- Azure AI GPT-5.6-Terra
- Anthropic Claude Sonnet 4.6 via Amazon Bedrock Converse
Note: For KIO Backend >= 2.0.0, OpenAI/Azure AI GPT-5.6-Terra is recommended over
Anthropic Claude Sonnet 4.6, as it delivers significantly faster response times. Claude
Sonnet 4.6 remains a validated option but is comparatively slower. See
Supported LLM Providers
for the full compatibility matrix.
⚠️ Action Required: Breaking Changes
- Requires KIO plugin >= 2.0.0. This backend release requires the matching
KIO plugin 2.0.0
or later, released at the same time. Upgrade the KIO plugin together with the backend. - GitHub playbook connector removed. The
GithubPlaybookConnector, deprecated since KIO
Backend 1.7.0, has been removed, and thecoremedia-contributions/kio-playgroundrepository
is archived and no longer supported as a playbook source. To migrate:- Copy any custom playbooks still loaded via the GitHub connector to the CoreMedia Content
Repository (global CMS path, site, or user home). - Remove all
kio.backend.playbooks.github.*properties from your configuration. They
are no longer supported and will be ignored. - Manage bundled CoreMedia Playbooks directly in the KIO sidebar under
Settings – Playbooks. - Review all custom playbooks after upgrading. More details in the Playbooks section below.
- Copy any custom playbooks still loaded via the GitHub connector to the CoreMedia Content
- Default LLM models have changed for OpenAI/Azure and Bedrock Converse example
configurations. Review your pinned model configuration before upgrading. See
Validated Models
for the full compatibility matrix. - Updated configuration for Azure OpenAI: with the Spring AI update to >= 2.0.0-M5,
Spring now reuses the OpenAI configuration properties (spring.ai.openai.*) for OpenAI
via Microsoft Azure as well; the previous dedicatedspring.ai.azure.openai.*properties
are no longer used. OpenAI now also has its own dedicated Spring profile instead of being
part of the "default" profile. Update your Azure configuration accordingly. See
Validated Models
for the updated configuration. enableInsightsuser preference removed. Insights are now part of the debug output and are
controlled solely by theenableDebugOutputpreference. Enable debug output wherever you
previously relied onenableInsights.- Usage metrics are now reported per site. The
kio.chat.requestandkio.chat.streammetrics
carry an additionalsitetag, usingsite=<NONE>for requests without a preferred site.
Self-managed deployments that evaluate these metrics themselves need to aggregate over thesite
tag wherever global usage was previously read from a single series, for example in dashboards,
alerts, or exports. For CoreMedia-managed deployments, no action is required; per-site usage will
soon be available through CoreMedia-provided dashboards.
Playbooks
Recommendation: If your project maintains custom playbooks (site-, user-, or CMS-based),
review and re-test them after upgrading, especially any playbook that overrides or extends
optimize-seo,optimize-geo,create-article,create-page, orassign-tags. Also verify
custom playbooks still resolve as expected after migrating away from the GitHub connector (see
Action Required: Breaking Changes above).
The bundled CoreMedia Playbooks received the following behavior changes in this release:
create-article
- Changed: The
htmlDescriptionproperty is now limited to 140 characters instead of 400.
assign-tags
- Changed: Finding Subject and Location tags now spells out exactly how to look them up: the
playbook runs specific taxonomy queries for theSubjectandLocationtaxonomy folders rather
than a vaguely worded lookup. The tag search now asks only for the tag id and name instead of
every field, and no longer repeats the full taxonomy listings in its reasoning or output. Before
searching for a location tag, the playbook first checks the content itself for an explicitly
named place; if none is named, it skips the location lookup entirely instead of scanning the
full location taxonomy every time. Location tags are now chosen only when they match an
explicitly named place in the content. - Fixed: Subject and Location tags are linked to the content only when tags were actually found
and chosen; when no matching tags exist, the playbook skips the linking step instead of applying
an empty selection.
create-page
- Added: Layout handling: if no layout is specified, the playbook reads the available layouts
and asks the user to pick one; if a layout is specified, it verifies the layout exists and asks
again when unsure. After the page is created, it initializes the page grid with the selected
layout. Folder selection now falls back to a folder-resolution step when no repository path is
provided. - Changed: The playbook is more insistent about asking the user for the page topic when none has
been provided, rather than proceeding without one.
optimize-geo
- Changed: Eligibility now depends strictly on top-level content properties. Text nested inside
other structures (for example, fields within a settings/struct property) no longer counts as
something to optimize. Generating thekeywordslist is now mandatory whenever the property
exists, even when every other property is already GEO-compliant. ThehtmlDescriptionproperty
is now limited to 140 characters instead of 400. - Fixed: When the content type has none of the supported top-level text properties, the playbook
now stops without modifying anything, instead of touching nested fields.
optimize-seo
- Changed: Content analysis now separates the tools by data type: text and property values are
read with the standard content reader, and embedded pictures, videos, or other media are analyzed
with the image-description tool. Using the image-description tool is now required before
generating alt text, detail text, or keywords for content that contains media. The
htmlDescriptionproperty is now limited to 140 characters instead of 400. - Fixed: Optimizing a picture is now fully self-contained within this playbook: it analyzes the
image itself and writes only the SEO-relevant properties (alt text, limited to 100 characters,
and detail text) without invoking any other playbook or touching unrelated properties like the
picture's title.
extract-image-metadata
- Changed: Clarifies that image blob data (the
dataproperty) is intentionally left out of
content reads and may look empty or appear as a placeholder; this does not mean the image is
missing, so the playbook always calls the image-description tool directly instead of checking
whether the blob looks populated. - Removed: Dropped the unused system-prompt parameter from the image-description tool call.
getting-started
- Changed: The playbook now explicitly instructs KIO not to call sub-agents or use tools while
running it, so the getting-started walkthrough is produced directly.