Install shared skills for 11 more agents and stop Qoder listing skills twice (#31657)

* Install shared skills for 11 more agents

Add skill install provider entries for OpenClaude (own .openclaude folders,
OPENCLAUDE_CONFIG_DIR), and OpenCode 2, MiMo Code, OMP, Prime Agent, Qoder CN,
Codebuff, Freebuff, Ante, Jcode and DeepSeek Harness, which read the shared
.agents/skills folder at both scopes. A coverage test now requires every Orca
agent to have an entry or a recorded reason it has none.

* Use the shared skills folder for Qoder

Qoder's CLI loads .agents/skills at both scopes by default, so its own
.qoder/skills placement made every skill appear twice.

* Keep scanning Qoder's own skill folders

Qoder still reads .qoder/skills, so discovery keeps both folders as
discovery-only roots now that installs go to the canonical root.
This commit is contained in:
Jinwoo Hong
2026-10-22 15:23:40 -04:00
committed by GitHub
parent 8fc1698ebb
commit db6ab720bc
5 changed files with 124 additions and 9 deletions
+74 -6
View File
@@ -97,12 +97,6 @@ export const SKILL_INSTALL_PROVIDERS = Object.freeze([
globalSegments: ['.codebuddy', 'skills'],
workspaceSegments: ['.codebuddy', 'skills']
},
{
id: 'qoder',
displayName: 'Qoder',
globalSegments: ['.qoder', 'skills'],
workspaceSegments: ['.qoder', 'skills']
},
{
id: 'kiro',
displayName: 'Kiro',
@@ -118,6 +112,14 @@ export const SKILL_INSTALL_PROVIDERS = Object.freeze([
globalSegments: ['.gemini', 'config', 'skills'],
workspaceSegments: null
},
// Why: OpenClaude keeps its own `.openclaude` home; it does not read Claude's folders by default.
{
id: 'openclaude',
displayName: 'OpenClaude',
globalSegments: ['.openclaude', 'skills'],
workspaceSegments: ['.openclaude', 'skills'],
homeEnv: 'OPENCLAUDE_CONFIG_DIR'
},
// Why: every agent below reads the canonical .agents/skills root at both scopes.
{
id: 'autohand',
@@ -214,6 +216,72 @@ export const SKILL_INSTALL_PROVIDERS = Object.freeze([
displayName: 'GitHub Copilot',
globalSegments: null,
workspaceSegments: null
},
{
id: 'opencode2',
displayName: 'OpenCode 2',
globalSegments: null,
workspaceSegments: null
},
{
id: 'mimo-code',
displayName: 'MiMo Code',
globalSegments: null,
workspaceSegments: null
},
{
id: 'omp',
displayName: 'OMP',
globalSegments: null,
workspaceSegments: null
},
{
id: 'prime-agent',
displayName: 'Prime Agent',
globalSegments: null,
workspaceSegments: null
},
{
id: 'qoder',
displayName: 'Qoder',
globalSegments: null,
workspaceSegments: null
},
{
id: 'qoder-cn',
displayName: 'Qoder CN',
globalSegments: null,
workspaceSegments: null
},
{
id: 'codebuff',
displayName: 'Codebuff',
globalSegments: null,
workspaceSegments: null
},
{
id: 'freebuff',
displayName: 'Freebuff',
globalSegments: null,
workspaceSegments: null
},
{
id: 'ante',
displayName: 'Ante',
globalSegments: null,
workspaceSegments: null
},
{
id: 'jcode',
displayName: 'Jcode',
globalSegments: null,
workspaceSegments: null
},
{
id: 'dsh',
displayName: 'DeepSeek Harness',
globalSegments: null,
workspaceSegments: null
}
] satisfies SkillInstallProviderEntry[])