Repository navigation
Conversation
The extension skills now ask which agent an extension is filed under and
write it as an optional `agent` field at the manifest root, beside id,
name and version: a plain string, or { name, order } where order
suggests the agent heading's position in the left nav.
- The portal groups every extension sharing an agent under one heading;
"DevOps" merges into the built-in DevOps group
- Every top-level frontend.menus[] node renders as a child of the
heading; a menu node's order positions it under the heading only
- The agent order suggests the heading's own position (lowest wins),
overridable via config.json ai-menu.order keyed by the heading id
- One agent per extension; omitted rather than written as agent: ""
- The helloworld template carries { "name": "DevOps", "order": 30 } at
the root and drops its DevOps wrapper node
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
aboutte
force-pushed
the
feature/extension-agent-field
branch
from
October 12, 2026 14:50
3e8496d to
dcf9796
Compare
The console now decides agent, heading order and position; the manifest agent is the backup and the way customer extensions get their own heading. Document validation and config.json override keys, and update the template and samples to a root agent with no DevOps wrapper. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The backend validates the manifest agent only on new input: an upload is rejected with HTTP 400, a deploy through an extension resource fails its provisioning, and an extension already installed with a bad agent still loads, re-enables and rolls back. Say so, and limit the object form to customer extensions that set a heading order, matching the customer bullet. Note that an agent merged into a built-in heading is moved by the built-in's config key. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When an author builds an extension, the extension skills now ask which agent it should be filed under. The answer is written as an optional
agentfield at the root of the manifest, next toid,nameandversion:agentunder one left-nav heading, titled with the agent's name and marked with a shared agent icon."DevOps"merges into the existing built-in DevOps group instead of creating a second one.frontend.menus[]node becomes a child of the agent's heading. Don't wrap menus in a node titled after the agent.orderpositions it under the heading. The agent'sordersuggests the heading's own position; when extensions disagree, the lowest wins. The deployment'sconfig.jsonai-menu.orderoverrides it, keyed by the heading id (ai-suite-agent-<slug>, e.g.ai-suite-agent-release-management).agent: "".Why the root, not the menu node
An earlier commit in this PR put
agenton the top-level menu node. That mixed two levels in one object: the agent describes the extension, but it sat on one of its menus. It also needed a title-matching rule (a node titled like its agent became the heading), which made a node'sordermean either the heading's position or the node's own. Movingagentto the root removes both.Changes
reference/08-parent-child-and-menus.md: the "Filing under an agent" section now covers the root field (string or{ name, order }), the starter list, menus as children of the heading, menu order vs. agent order, theconfig.jsonoverride, the DevOps merge, and an example manifest.reference/02-authoring-guide.md: shows the optional rootagentin the example manifest.duplo-extension-dev/SKILL.md: "Agent" is a Phase 1 item to settle before scaffolding, including the optional heading order..claude/commands/duplo-extension.md: "agent" is in the command's clarifying-questions list.templates/helloworld/manifest.json: the scaffold has"agent": "DevOps"at the root, and its DevOps wrapper node is gone, so Hello World is the top-level menu.Depends on
The platform reads the root field only with these two PRs (same ticket, DUPLOAI-3907):
agentand returns it from the UI manifest endpoint. Until then, the backend drops unknown root fields when it saves an extension's manifest.agent.Testing
🤖 Generated with Claude Code