Skip to content

Commit 69e81e0

Browse files
committed
Make Discover searchable and localized by default
Discover now uses a local directory cache plus skills.sh full-site search so users can find skills outside the initially loaded lists. Skill summaries get bundled generated translations first, with the existing manual translation path left as a fallback for uncached or newly loaded descriptions. The docs now describe the broader agent registry and the release-facing behavior. Constraint: skills.sh exposes many more results than the homepage snapshot, so search must query the directory API and retain cache snapshots locally. Constraint: Local translation providers can be slow or unavailable, so bundled catalog lookup must be the primary path for known summaries. Rejected: Keep a global bulk translation button as the main solution | it times out on local models and asks users to do work the app can prepackage. Rejected: Commit local scanned agent directories | they are machine-local runtime data rather than product source. Confidence: high Scope-risk: moderate Directive: Keep Discover cache and translation cache separate; do not reintroduce global batch translation without bounded scope and user-visible progress. Tested: swift test Tested: npm run build in tui Tested: xcodebuild -project SkillsManager.xcodeproj -scheme SkillsManager -configuration Release -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO build Not-tested: GitHub Actions release workflow until the tag is pushed.
1 parent 33667ba commit 69e81e0

36 files changed

Lines changed: 8476 additions & 176 deletions

Package.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ let package = Package(
1818
.product(name: "Markdown", package: "swift-markdown"),
1919
.product(name: "MarkdownView", package: "MarkdownView"),
2020
],
21-
path: "SkillsManager"
21+
path: "SkillsManager",
22+
exclude: [
23+
"Assets.xcassets",
24+
"Info.plist",
25+
],
26+
resources: [
27+
.process("Resources"),
28+
]
2229
),
2330
.testTarget(
2431
name: "SkillsManagerTests",

README.md

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Skills Manager
22

3-
A native macOS app to manage skills across all your coding agents — Claude Code, Cursor, Copilot CLI, Codex, Gemini CLI, OpenClaw, and more.
3+
A native macOS app to manage skills across all your coding agents — Claude Code, Cursor, Codex, Gemini CLI, Qwen Code, Roo Code, Continue, OpenHands, OpenClaw, and more.
44

55
<img src="SkillsManager_Logo.png" width="80" alt="Skills Manager Icon">
66

@@ -20,11 +20,12 @@ A native macOS app to manage skills across all your coding agents — Claude Cod
2020

2121
Coding agent skills are scattered everywhere. Each agent has its own format, install path, and management story. Skills Manager brings them together in one place.
2222

23-
- **Discover** skills from [skills.sh](https://skills.sh/) and community repositories
23+
- **Discover** skills from [skills.sh](https://skills.sh/) and community repositories, including full-site search beyond the initially loaded list
2424
- **Install** to one or multiple agents at once
2525
- **Test** skills in the built-in LLM sandbox before committing
2626
- **Manage** installed skills — update, remove, star favorites
2727
- **Monitor** all your agents and their skill directories in real time
28+
- **Translate** discovered skill summaries with bundled Chinese descriptions and on-demand LLM fallback for newly loaded entries
2829

2930
## Requirements
3031

@@ -45,18 +46,64 @@ open SkillsManager.xcodeproj
4546

4647
## Supported Agents
4748

48-
| Agent | Status |
49-
|-------|--------|
50-
| Claude Code ||
51-
| Cursor ||
52-
| Copilot CLI ||
53-
| OpenAI Codex CLI ||
54-
| Gemini CLI ||
55-
| OpenClaw ||
49+
Skills Manager detects and scans every agent below through `AgentRegistry`. The `Install target` column marks agents that are available in the current multi-install picker; the remaining agents are still detected and scanned from their registered skills directory when installed locally.
50+
51+
| Agent | Registry ID | Install target |
52+
|-------|-------------|----------------|
53+
| Claude Code | `claude-code` | Yes |
54+
| Amp | `amp` | Scan |
55+
| Cline | `cline` | Scan |
56+
| Codex | `codex` | Yes |
57+
| Cursor | `cursor` | Yes |
58+
| Deep Agents | `deepagents` | Scan |
59+
| Firebender | `firebender` | Scan |
60+
| Gemini CLI | `gemini-cli` | Yes |
61+
| GitHub Copilot | `github-copilot` | Yes |
62+
| Kimi Code CLI | `kimi-cli` | Scan |
63+
| Replit | `replit` | Scan |
64+
| Warp | `warp` | Scan |
65+
| Antigravity | `antigravity` | Scan |
66+
| Augment | `augment` | Yes |
67+
| IBM Bob | `bob` | Scan |
68+
| CodeBuddy | `codebuddy` | Scan |
69+
| Command Code | `command-code` | Yes |
70+
| Continue | `continue` | Yes |
71+
| Cortex Code | `cortex` | Scan |
72+
| Crush | `crush` | Scan |
73+
| Droid | `droid` | Scan |
74+
| Goose | `goose` | Scan |
75+
| iFlow CLI | `iflow-cli` | Yes |
76+
| Junie | `junie` | Scan |
77+
| Kilo Code | `kilo` | Yes |
78+
| Kiro CLI | `kiro-cli` | Yes |
79+
| Kode | `kode` | Scan |
80+
| MCPJam | `mcpjam` | Yes |
81+
| Mistral Vibe | `mistral-vibe` | Scan |
82+
| Mux | `mux` | Yes |
83+
| Neovate | `neovate` | Yes |
84+
| OpenCode | `opencode` | Scan |
85+
| OpenHands | `openhands` | Yes |
86+
| Pi | `pi` | Yes |
87+
| Pochi | `pochi` | Scan |
88+
| Qoder | `qoder` | Scan |
89+
| Qwen Code | `qwen-code` | Yes |
90+
| Roo Code | `roo` | Yes |
91+
| Trae | `trae` | Scan |
92+
| Trae CN | `trae-cn` | Scan |
93+
| Windsurf | `windsurf` | Scan |
94+
| Zencoder | `zencoder` | Scan |
95+
| AdaL | `adal` | Scan |
96+
| OpenClaw | `openclaw` | Scan |
97+
98+
## Discover and Translation
99+
100+
Discover starts fast from a local cache at `~/.skills-manager/cache/discover-directory.json`, then refreshes from skills.sh in the background. Search uses the skills.sh full-site API when online and falls back to cached query snapshots when offline.
101+
102+
The app bundles a generated description translation catalog for Chinese summaries and still keeps an on-demand translation button as a temporary fallback for newly loaded or uncached descriptions. Local Ollama and LM Studio endpoints are normalized to IPv4 loopback (`127.0.0.1`) at runtime to avoid macOS `localhost` resolving to IPv6 `::1`.
56103

57104
## Architecture
58105

59-
Pure local architecture — no backend, works offline except for network-backed features like Discover detail loading and sandbox LLM calls. Reads and writes agent config files directly and uses local Git history for version management.
106+
Pure local architecture — no backend, works offline except for network-backed features like Discover refresh/search, detail loading, translation fallback, and sandbox LLM calls. Reads and writes agent config files directly and uses local Git history for version management.
60107

61108
Built with SwiftUI + Swift 6, SwiftData, macOS 14+.
62109

SkillsManager.xcodeproj/project.pbxproj

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
07645BE1977B0982C0BEE6AB /* DiscoverSkill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BCDCC5D3CA0926A51A3D84B /* DiscoverSkill.swift */; };
1111
08290777FDC8F4A16CC7E231 /* SidebarFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E8B78AFE5E90D7D1B044AC /* SidebarFilter.swift */; };
1212
0947139B78E3F9D9857F730A /* GitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 666D8599524120C18BABB3FF /* GitService.swift */; };
13+
0A3E7D2E4CE9431D8B03B7A1 /* description-translations.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A3E7D2D4CE9431D8B03B7A1 /* description-translations.json */; };
1314
0BC298A026115FE9AC9A14DD /* SymlinkInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BB7B6A6241828E4EFD62F95 /* SymlinkInstaller.swift */; };
1415
1426E7FB1017F49FB7C1E4D2 /* SkillCardComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1426E7FA1017F49FB7C1E4D2 /* SkillCardComponents.swift */; };
1516
164C12203FA1D8638EB72C2F /* SandboxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6BD0C5D68F6CEB4FE4C14CD /* SandboxView.swift */; };
17+
1AD4C31E8D91F40A9C8B7E62 /* DiscoverDirectoryCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AD4C31D8D91F40A9C8B7E62 /* DiscoverDirectoryCache.swift */; };
1618
2532A8AD74AC05FE72D82528 /* VersionHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50069145DEE4F107B789596A /* VersionHistoryView.swift */; };
1719
2639C198F4FBE87057F9AD62 /* FlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8813500160440D0FCB9E5DD9 /* FlowLayout.swift */; };
1820
30A6A3694F3DA4EA5B1103E4 /* InstallToAgentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F4DD17FD00BD98E6D23656 /* InstallToAgentView.swift */; };
@@ -56,8 +58,10 @@
5658
009782B1278EBB6BF3791164 /* DiscoverInstallActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverInstallActivity.swift; sourceTree = "<group>"; };
5759
0525175ED2964BB6E2E0B1B0 /* SkillsManagerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillsManagerApp.swift; sourceTree = "<group>"; };
5860
072BA9F86FFF3B545CCC344D /* SkillListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillListView.swift; sourceTree = "<group>"; };
59-
1BCDCC5D3CA0926A51A3D84B /* DiscoverSkill.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverSkill.swift; sourceTree = "<group>"; };
61+
0A3E7D2D4CE9431D8B03B7A1 /* description-translations.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "description-translations.json"; sourceTree = "<group>"; };
6062
1426E7FA1017F49FB7C1E4D2 /* SkillCardComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillCardComponents.swift; sourceTree = "<group>"; };
63+
1AD4C31D8D91F40A9C8B7E62 /* DiscoverDirectoryCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverDirectoryCache.swift; sourceTree = "<group>"; };
64+
1BCDCC5D3CA0926A51A3D84B /* DiscoverSkill.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverSkill.swift; sourceTree = "<group>"; };
6165
2D967A5962BEEE7981921A4F /* OpenClawAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenClawAdapter.swift; sourceTree = "<group>"; };
6266
2F161109A29CF7DCE1257393 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
6367
3BE38B49272B1AA0A1752A87 /* ClaudeCodeAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeCodeAdapter.swift; sourceTree = "<group>"; };
@@ -70,7 +74,7 @@
7074
5427F0708C634AC8F5F4B080 /* Skill.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Skill.swift; sourceTree = "<group>"; };
7175
57E8B78AFE5E90D7D1B044AC /* SidebarFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarFilter.swift; sourceTree = "<group>"; };
7276
666D8599524120C18BABB3FF /* GitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitService.swift; sourceTree = "<group>"; };
73-
71E86521947227FAD14E43AA /* SkillsManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SkillsManager.app; sourceTree = BUILT_PRODUCTS_DIR; };
77+
71E86521947227FAD14E43AA /* Skills Manager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Skills Manager.app"; sourceTree = BUILT_PRODUCTS_DIR; };
7478
7C2C11FFC9FF1183A71189CA /* FileWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileWatcher.swift; sourceTree = "<group>"; };
7579
7DBBBF8B70FCF8E665BA164F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
7680
7E21F4876DF0FEEB0B346AFA /* AppSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettings.swift; sourceTree = "<group>"; };
@@ -111,6 +115,14 @@
111115
/* End PBXFrameworksBuildPhase section */
112116

113117
/* Begin PBXGroup section */
118+
0A3E7D2C4CE9431D8B03B7A1 /* Resources */ = {
119+
isa = PBXGroup;
120+
children = (
121+
0A3E7D2D4CE9431D8B03B7A1 /* description-translations.json */,
122+
);
123+
path = Resources;
124+
sourceTree = "<group>";
125+
};
114126
2565A1AA7F123AF3D4BEA6FA /* Views */ = {
115127
isa = PBXGroup;
116128
children = (
@@ -167,6 +179,7 @@
167179
0525175ED2964BB6E2E0B1B0 /* SkillsManagerApp.swift */,
168180
8F12F295BAB888F551420916 /* Adapters */,
169181
4D2EB7D6A211BF96EB1F4130 /* Models */,
182+
0A3E7D2C4CE9431D8B03B7A1 /* Resources */,
170183
FC4F8ED5EF50AC8FD7653196 /* Services */,
171184
2565A1AA7F123AF3D4BEA6FA /* Views */,
172185
);
@@ -184,7 +197,7 @@
184197
E3C5A2C60A157CCF5CCA5040 /* Products */ = {
185198
isa = PBXGroup;
186199
children = (
187-
71E86521947227FAD14E43AA /* SkillsManager.app */,
200+
71E86521947227FAD14E43AA /* Skills Manager.app */,
188201
);
189202
name = Products;
190203
sourceTree = "<group>";
@@ -201,6 +214,7 @@
201214
52C4A4957C14CE0EEBB00D79 /* ProjectScanner.swift */,
202215
9FE67140FC42B93008948827 /* SkillFormatConverter.swift */,
203216
E755FBEC77714122731E7A45 /* SkillParser.swift */,
217+
1AD4C31D8D91F40A9C8B7E62 /* DiscoverDirectoryCache.swift */,
204218
E8D77BD375AECD6E0F14C13A /* SkillsDirectoryService.swift */,
205219
541163F5E744A67FA92AE00F /* SkillStore.swift */,
206220
8BB7B6A6241828E4EFD62F95 /* SymlinkInstaller.swift */,
@@ -229,7 +243,7 @@
229243
96A7F7E23F4149B692B6F9A1 /* MarkdownView */,
230244
);
231245
productName = SkillsManager;
232-
productReference = 71E86521947227FAD14E43AA /* SkillsManager.app */;
246+
productReference = 71E86521947227FAD14E43AA /* Skills Manager.app */;
233247
productType = "com.apple.product-type.application";
234248
};
235249
/* End PBXNativeTarget section */
@@ -239,7 +253,7 @@
239253
isa = PBXProject;
240254
attributes = {
241255
BuildIndependentTargetsInParallel = YES;
242-
LastUpgradeCheck = 1500;
256+
LastUpgradeCheck = 2640;
243257
TargetAttributes = {
244258
0B9641116DC5DB74BA44F450 = {
245259
ProvisioningStyle = Automatic;
@@ -275,6 +289,7 @@
275289
buildActionMask = 2147483647;
276290
files = (
277291
7E6931289A067C712BB9B78B /* Assets.xcassets in Resources */,
292+
0A3E7D2E4CE9431D8B03B7A1 /* description-translations.json in Resources */,
278293
);
279294
runOnlyForDeploymentPostprocessing = 0;
280295
};
@@ -292,6 +307,7 @@
292307
85E646533EC754C4C02414FE /* ClaudeCodeAdapter.swift in Sources */,
293308
5427BC541444486E97ABECF1 /* ContentView.swift in Sources */,
294309
4592F4178A0CFC42B0CA9986 /* DiscoverDirectoryCategory.swift in Sources */,
310+
1AD4C31E8D91F40A9C8B7E62 /* DiscoverDirectoryCache.swift in Sources */,
295311
DF192D807118C9C9E4CCBEDA /* DiscoverInstallActivity.swift in Sources */,
296312
89B2E44F4D139759398F63B0 /* DiscoverInstallToAgentView.swift in Sources */,
297313
07645BE1977B0982C0BEE6AB /* DiscoverSkill.swift in Sources */,
@@ -338,6 +354,7 @@
338354
CODE_SIGN_STYLE = Automatic;
339355
COMBINE_HIDPI_IMAGES = YES;
340356
COPY_PHASE_STRIP = YES;
357+
DEAD_CODE_STRIPPING = YES;
341358
ENABLE_HARDENED_RUNTIME = YES;
342359
INFOPLIST_FILE = SkillsManager/Info.plist;
343360
LD_RUNPATH_SEARCH_PATHS = (
@@ -387,9 +404,11 @@
387404
CLANG_WARN_UNREACHABLE_CODE = YES;
388405
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
389406
COPY_PHASE_STRIP = NO;
407+
DEAD_CODE_STRIPPING = YES;
390408
DEBUG_INFORMATION_FORMAT = dwarf;
391409
ENABLE_STRICT_OBJC_MSGSEND = YES;
392410
ENABLE_TESTABILITY = YES;
411+
ENABLE_USER_SCRIPT_SANDBOXING = YES;
393412
GCC_C_LANGUAGE_STANDARD = gnu11;
394413
GCC_DYNAMIC_NO_PIC = NO;
395414
GCC_NO_COMMON_BLOCKS = YES;
@@ -410,6 +429,7 @@
410429
ONLY_ACTIVE_ARCH = YES;
411430
PRODUCT_NAME = "$(TARGET_NAME)";
412431
SDKROOT = macosx;
432+
STRING_CATALOG_GENERATE_SYMBOLS = YES;
413433
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
414434
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
415435
SWIFT_VERSION = 5.0;
@@ -450,9 +470,11 @@
450470
CLANG_WARN_UNREACHABLE_CODE = YES;
451471
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
452472
COPY_PHASE_STRIP = NO;
473+
DEAD_CODE_STRIPPING = YES;
453474
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
454475
ENABLE_NS_ASSERTIONS = NO;
455476
ENABLE_STRICT_OBJC_MSGSEND = YES;
477+
ENABLE_USER_SCRIPT_SANDBOXING = YES;
456478
GCC_C_LANGUAGE_STANDARD = gnu11;
457479
GCC_NO_COMMON_BLOCKS = YES;
458480
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -466,6 +488,7 @@
466488
MTL_FAST_MATH = YES;
467489
PRODUCT_NAME = "$(TARGET_NAME)";
468490
SDKROOT = macosx;
491+
STRING_CATALOG_GENERATE_SYMBOLS = YES;
469492
SWIFT_COMPILATION_MODE = wholemodule;
470493
SWIFT_OPTIMIZATION_LEVEL = "-O";
471494
SWIFT_VERSION = 5.0;
@@ -478,6 +501,7 @@
478501
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
479502
CODE_SIGN_STYLE = Automatic;
480503
COMBINE_HIDPI_IMAGES = YES;
504+
DEAD_CODE_STRIPPING = YES;
481505
ENABLE_HARDENED_RUNTIME = YES;
482506
INFOPLIST_FILE = SkillsManager/Info.plist;
483507
LD_RUNPATH_SEARCH_PATHS = (
@@ -537,16 +561,16 @@
537561
/* End XCRemoteSwiftPackageReference section */
538562

539563
/* Begin XCSwiftPackageProductDependency section */
540-
96A7F7E23F4149B692B6F9A1 /* MarkdownView */ = {
541-
isa = XCSwiftPackageProductDependency;
542-
package = 96A7F7E03F4149B692B6F9A1 /* XCRemoteSwiftPackageReference "MarkdownView" */;
543-
productName = MarkdownView;
544-
};
545564
112275252DEF9637B772525E /* Markdown */ = {
546565
isa = XCSwiftPackageProductDependency;
547566
package = FCCF8DEBDCC1F6C6FC3CF62A /* XCRemoteSwiftPackageReference "swift-markdown" */;
548567
productName = Markdown;
549568
};
569+
96A7F7E23F4149B692B6F9A1 /* MarkdownView */ = {
570+
isa = XCSwiftPackageProductDependency;
571+
package = 96A7F7E03F4149B692B6F9A1 /* XCRemoteSwiftPackageReference "MarkdownView" */;
572+
productName = MarkdownView;
573+
};
550574
/* End XCSwiftPackageProductDependency section */
551575
};
552576
rootObject = E5CBF98AC0D7298B8F780F9F /* Project object */;

SkillsManager.xcodeproj/xcshareddata/xcschemes/SkillsManager.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "2640"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

SkillsManager/Adapters/ClaudeCodeAdapter.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,9 @@ struct ClaudeCodeAdapter: AgentAdapter {
203203
id: id,
204204
name: name,
205205
displayName: displayName,
206-
description: description,
206+
baseDescription: description,
207+
baseDescriptionLocale: DescriptionLocale.descriptionLocale(frontmatter: fm, description: description),
208+
localizedDescription: nil,
207209
source: source,
208210
version: fm["version"],
209211
filePath: skillFile,

SkillsManager/Adapters/OpenClawAdapter.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ struct OpenClawAdapter: AgentAdapter {
6969
id: "openclaw:\(root.lastPathComponent):\(relative)",
7070
name: skillName,
7171
displayName: displayName,
72-
description: description,
72+
baseDescription: description,
73+
baseDescriptionLocale: DescriptionLocale.descriptionLocale(frontmatter: frontmatter, description: description),
74+
localizedDescription: nil,
7375
source: .openClaw(root: root.lastPathComponent),
7476
version: frontmatter["version"],
7577
filePath: skillFile,

SkillsManager/Adapters/UniversalAdapter.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ struct UniversalAdapter: AgentAdapter {
134134
id: "universal:\(dirName)",
135135
name: dirName,
136136
displayName: displayName,
137-
description: description,
137+
baseDescription: description,
138+
baseDescriptionLocale: DescriptionLocale.descriptionLocale(frontmatter: fm, description: description),
139+
localizedDescription: nil,
138140
source: .local,
139141
version: fm["version"],
140142
filePath: dirURL.appendingPathComponent("SKILL.md"),

0 commit comments

Comments
 (0)