fix(agents): add more skills button to agent skills settings missing (#14258)

### What this PR does

| Before | After |
| --- | --- |
| <img height="500" alt="before"
src="https://pub-a9416c5573a34388b8d9465d8bef4257.r2.dev/pr/agent-skills-before-1776180807.png"
/> | <img height="500" alt="after"
src="https://pub-a9416c5573a34388b8d9465d8bef4257.r2.dev/pr/agent-skills-after-1776181506.png"
/> |

Adds an "Add More Skills" button to the top-right of the agent settings
Skills tab. Clicking it closes the agent settings popup and navigates to
Settings > Skills.

**中文原文:**
在 Agent 设置页的「技能」tab 中,在右上角增加一个「+ 添加更多技能」按钮,点击后关闭设置弹窗并跳转到 Settings
里的技能管理页。按钮样式参考助手设置页里的「+ 选择模型」。

### Why we need it and why it was done in this way

Users currently have to manually close the agent settings popup and
navigate to Settings > Skills to install new skills. This button
provides a direct shortcut, improving discoverability and workflow
efficiency.

The following tradeoffs were made:
- Reused the same button style as "Select Model" for visual consistency.
- Used `TopView.hide('AgentSettingsPopup')` +
`window.navigate('/settings/skills')` to close the popup before
navigating.

The following alternatives were considered:
- Opening Skills settings in a nested view within the popup — rejected
to keep the popup simple.

### Breaking changes

None.

### Special notes for your reviewer

- The button text is fully translated for all supported locales (en,
zh-cn, zh-tw, ja, de, es, fr, pt, ru, ro, el).
- Button style matches the existing "+ Select Model" button in assistant
settings.

### Checklist

- [x] PR: The PR description is expressive enough and will help future
contributors
- [x] Code: [Write code that humans can
understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans)
and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle)
- [x] Refactor: You have [left the code cleaner than you found it (Boy
Scout
Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html)
- [ ] Upgrade: Impact of this change on upgrade flows was considered and
addressed if required
- [x] Documentation: A [user-guide update](https://docs.cherry-ai.com)
was considered and is present (link) or not required. Check this only
when the PR introduces or changes a user-facing feature or behavior.
- [x] Self-review: I have reviewed my own code (e.g., via
[`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`,
or GitHub UI) before requesting review from others

### Release note

```release-note
Add "Add More Skills" button to agent settings Skills tab for quick navigation to the global Skills management page.
```

Signed-off-by: zhengke090@gmail.com <zhengke090@126.com>
Co-authored-by: zhengke090@gmail.com <zhengke090@126.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kennyzheng
2026-04-15 14:28:12 +08:00
committed by GitHub
parent e2366b351f
commit ae8f0888bc
12 changed files with 31 additions and 9 deletions

View File

@@ -490,6 +490,7 @@
},
"prompt": "Prompt Settings",
"skills": {
"addMore": "Add More Skills",
"builtin": "Built-in",
"noFilterResults": "No matching skills",
"noSkills": "No skills installed. Install skills from Settings > Skills.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "提示词设置",
"skills": {
"addMore": "添加更多技能",
"builtin": "内置",
"noFilterResults": "没有匹配的技能",
"noSkills": "暂无已安装的技能。前往 设置 > 技能 安装技能。",

View File

@@ -490,6 +490,7 @@
},
"prompt": "提示設定",
"skills": {
"addMore": "添加更多技能",
"builtin": "內建",
"noFilterResults": "沒有符合的技能",
"noSkills": "未安裝任何技能。請前往「設定」>「技能」安裝技能。",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Prompt-Einstellungen",
"skills": {
"addMore": "Weitere Skills hinzufügen",
"builtin": "Integriert",
"noFilterResults": "Keine übereinstimmenden Fähigkeiten",
"noSkills": "Keine Skills installiert. Installiere Skills über Einstellungen > Skills.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Ρυθμίσεις Προτροπής",
"skills": {
"addMore": "Προσθήκη περισσότερων δεξιοτήτων",
"builtin": "Ενσωματωμένο",
"noFilterResults": "Δεν υπάρχουν αντιστοιχιζόμενες δεξιότητες",
"noSkills": "Δεν έχουν εγκατασταθεί δεξιότητες. Εγκαταστήστε δεξιότητες από Ρυθμίσεις > Δεξιότητες.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Configuración de indicaciones",
"skills": {
"addMore": "Añadir más habilidades",
"builtin": "Incorporado",
"noFilterResults": "Sin habilidades coincidentes",
"noSkills": "No hay habilidades instaladas. Instala habilidades desde Ajustes > Habilidades.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Paramètres de l'invite",
"skills": {
"addMore": "Ajouter plus de compétences",
"builtin": "Intégré",
"noFilterResults": "Aucune compétence correspondante",
"noSkills": "Aucune compétence installée. Installez des compétences depuis Paramètres > Compétences.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "プロンプト設定",
"skills": {
"addMore": "スキルを追加",
"builtin": "組み込み",
"noFilterResults": "一致するスキルがありません",
"noSkills": "スキルがインストールされていません。設定 > スキルからスキルをインストールしてください。",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Configurações de Prompt",
"skills": {
"addMore": "Adicionar Mais Skills",
"builtin": "Integrado",
"noFilterResults": "Nenhuma habilidade correspondente",
"noSkills": "Nenhuma habilidade instalada. Instale habilidades em Configurações > Habilidades.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Setări prompt",
"skills": {
"addMore": "Adaugă mai multe abilități",
"builtin": "Încorporat",
"noFilterResults": "Nicio abilitate potrivită",
"noSkills": "Nicio abilitate instalată. Instalează abilități din Setări > Abilități.",

View File

@@ -490,6 +490,7 @@
},
"prompt": "Настройки подсказки",
"skills": {
"addMore": "Добавить навыки",
"builtin": "Встроенный",
"noFilterResults": "Нет подходящих навыков",
"noSkills": "Навыки не установлены. Установите навыки в разделе Настройки > Навыки.",

View File

@@ -1,9 +1,9 @@
import CollapsibleSearchBar from '@renderer/components/CollapsibleSearchBar'
import { TopView } from '@renderer/components/TopView'
import { useInstalledSkills } from '@renderer/hooks/useSkills'
import type { InstalledSkill, LocalSkill } from '@types'
import type { CardProps } from 'antd'
import { Card, Empty, Spin, Switch, Tag } from 'antd'
import { Puzzle } from 'lucide-react'
import { Button, Card, type CardProps, Empty, Spin, Switch, Tag } from 'antd'
import { Plus, Puzzle } from 'lucide-react'
import { type FC, memo, useCallback, useEffect, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
@@ -143,12 +143,23 @@ export const InstalledSkillsSettings: FC<AgentOrSessionSettingsProps> = ({ agent
<SettingsItem divider={false}>
<SettingsTitle
contentAfter={
<CollapsibleSearchBar
onSearch={setFilter}
placeholder={t('agent.settings.skills.searchPlaceholder', 'Search skills...')}
tooltip={t('agent.settings.skills.searchPlaceholder', 'Search skills...')}
style={searchBarStyle}
/>
<>
<CollapsibleSearchBar
onSearch={setFilter}
placeholder={t('agent.settings.skills.searchPlaceholder', 'Search skills...')}
tooltip={t('agent.settings.skills.searchPlaceholder', 'Search skills...')}
style={searchBarStyle}
/>
<Button
icon={<Plus size={18} />}
style={{ marginLeft: 'auto' }}
onClick={() => {
TopView.hide('AgentSettingsPopup')
window.navigate('/settings/skills')
}}>
{t('agent.settings.skills.addMore', 'Add More Skills')}
</Button>
</>
}>
{t('agent.settings.skills.title', 'Installed Skills')}
</SettingsTitle>