runwork 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/__tests__/claude-code-stats.test.js +173 -2
- package/dist/agents/__tests__/codex-stats.test.js +93 -0
- package/dist/agents/claude-code.js +140 -19
- package/dist/agents/claude-desktop.d.ts +2 -1
- package/dist/agents/claude-desktop.js +57 -0
- package/dist/agents/codex.d.ts +17 -1
- package/dist/agents/codex.js +144 -1
- package/dist/agents/detect.js +2 -1
- package/dist/agents/detection.d.ts +17 -0
- package/dist/agents/detection.js +89 -0
- package/dist/agents/generic-adapter.js +3 -13
- package/dist/agents/registry-data.d.ts +126 -0
- package/dist/agents/registry-data.js +436 -0
- package/dist/agents/registry.d.ts +8 -48
- package/dist/agents/registry.js +9 -192
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified agent registry (types + data + browser-safe lookups).
|
|
3
|
+
*
|
|
4
|
+
* This file is the SINGLE SOURCE OF TRUTH for every agent Runwork knows about:
|
|
5
|
+
* CLI adapters read from here (via `./registry.js`), and the desktop app
|
|
6
|
+
* re-exports from here (via the `@cli-agent-registry` path alias).
|
|
7
|
+
*
|
|
8
|
+
* Keep this file browser-safe: no `os`, `path`, `fs`, or other Node-only
|
|
9
|
+
* imports. Node-only path resolvers live next to this file in `./registry.ts`.
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Types
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Registry
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
const AGENT_REGISTRY = [
|
|
18
|
+
// === First-class agents (full Runwork support) ===
|
|
19
|
+
{
|
|
20
|
+
slug: 'claude-code',
|
|
21
|
+
name: 'Claude Code',
|
|
22
|
+
description: "Anthropic's AI coding agent for the terminal",
|
|
23
|
+
category: 'cli',
|
|
24
|
+
detection: { method: 'binary', target: 'claude' },
|
|
25
|
+
launch: { cli: 'claude', cliAcceptsPrompt: true },
|
|
26
|
+
logo: 'claude',
|
|
27
|
+
downloadUrl: 'https://docs.anthropic.com/en/docs/claude-code',
|
|
28
|
+
autoInstallable: true,
|
|
29
|
+
skillsPaths: { global: '.claude/skills', project: '.claude/skills' },
|
|
30
|
+
mcpConfigPath: '.claude/settings.json',
|
|
31
|
+
instructionFile: { global: '.claude/CLAUDE.md', project: '.claude/CLAUDE.md' },
|
|
32
|
+
mcpConfigKey: 'mcpServers',
|
|
33
|
+
firstClass: true,
|
|
34
|
+
quickStart: {
|
|
35
|
+
launchHint: 'Open your terminal and type `claude`',
|
|
36
|
+
skillCommand: '/skills',
|
|
37
|
+
examplePrompts: [
|
|
38
|
+
'Use /skills to see what your workspace can do',
|
|
39
|
+
'What integrations does my team have?',
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
slug: 'claude-desktop',
|
|
45
|
+
name: 'Claude Desktop',
|
|
46
|
+
aliases: ['Claude Desktop (Cowork)', 'Cowork'],
|
|
47
|
+
description: 'Claude as a desktop application',
|
|
48
|
+
category: 'desktop',
|
|
49
|
+
detection: {
|
|
50
|
+
method: 'any',
|
|
51
|
+
target: [
|
|
52
|
+
{ method: 'path', target: { macos: '/Applications/Claude.app' } },
|
|
53
|
+
{ method: 'windows-start-app', target: 'Claude' },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
launch: { app: { macos: 'Claude', windows: 'Claude' } },
|
|
57
|
+
logo: 'claude',
|
|
58
|
+
downloadUrl: 'https://claude.ai/download',
|
|
59
|
+
skillsPaths: { global: '.claude/skills', project: '.claude/skills' },
|
|
60
|
+
mcpConfigPath: {
|
|
61
|
+
macos: 'Library/Application Support/Claude/claude_desktop_config.json',
|
|
62
|
+
windows: 'AppData/Roaming/Claude/claude_desktop_config.json',
|
|
63
|
+
linux: '.config/Claude/claude_desktop_config.json',
|
|
64
|
+
},
|
|
65
|
+
mcpConfigKey: 'mcpServers',
|
|
66
|
+
firstClass: true,
|
|
67
|
+
quickStart: {
|
|
68
|
+
launchHint: 'Open Claude Desktop',
|
|
69
|
+
examplePrompts: [
|
|
70
|
+
"What can my team's Runwork workspace do?",
|
|
71
|
+
"Check my team's recent activity",
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
manualSetup: {
|
|
75
|
+
// Must run after the `connecting` scene: Scene7Connecting is what
|
|
76
|
+
// calls `runwork setup`, which writes the setup state that
|
|
77
|
+
// `runwork build-plugin` reads. Putting this earlier breaks the
|
|
78
|
+
// Download plugin button for first-time users.
|
|
79
|
+
title: 'Install Runwork plugin',
|
|
80
|
+
showAfter: 'connecting',
|
|
81
|
+
downloadArtifact: {
|
|
82
|
+
label: 'Download plugin',
|
|
83
|
+
filename: 'runwork-plugin.zip',
|
|
84
|
+
command: 'build-plugin',
|
|
85
|
+
},
|
|
86
|
+
steps: [
|
|
87
|
+
{ id: 'download', label: 'Click Download plugin above to save runwork-plugin.zip' },
|
|
88
|
+
{ id: 'open', label: "Open Claude Desktop and sign in if you haven't already" },
|
|
89
|
+
{ id: 'cowork', label: 'Go to the Cowork tab (top of the window)' },
|
|
90
|
+
{ id: 'customize', label: 'Click Customize in the sidebar' },
|
|
91
|
+
{ id: 'create-plugin', label: 'Click + next to Personal plugins, then Create plugin, then Upload plugin' },
|
|
92
|
+
{ id: 'pick-file', label: 'Select runwork-plugin.zip' },
|
|
93
|
+
{ id: 'add', label: 'Click Add to confirm' },
|
|
94
|
+
{ id: 'allow-network-go', label: 'Now go back and click your name at the bottom left, click Settings, go to Capabilities' },
|
|
95
|
+
{ id: 'allow-network', label: 'Scroll down and in Domain Allowlist panel, enable "Allow network egress", and then add "runwork.ai" and "*.runwork.ai" under "Additional allowed domains" so Cowork sessions can reach Runwork' },
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
slug: 'microsoft-copilot',
|
|
101
|
+
name: 'Microsoft Copilot',
|
|
102
|
+
description: 'AI assistant by Microsoft for everyday tasks',
|
|
103
|
+
category: 'desktop',
|
|
104
|
+
detection: {
|
|
105
|
+
method: 'any',
|
|
106
|
+
target: [
|
|
107
|
+
{ method: 'path', target: { macos: '/Applications/Microsoft Copilot.app' } },
|
|
108
|
+
{ method: 'windows-appx', target: 'Microsoft.Copilot' },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
launch: { app: { macos: 'Microsoft Copilot', windows: 'Microsoft Copilot' } },
|
|
112
|
+
logo: 'microsoft-copilot',
|
|
113
|
+
downloadUrl: 'https://www.microsoft.com/en-us/microsoft-copilot/for-individuals/get-copilot',
|
|
114
|
+
firstClass: true,
|
|
115
|
+
quickStart: {
|
|
116
|
+
launchHint: 'Open Microsoft Copilot',
|
|
117
|
+
examplePrompts: [
|
|
118
|
+
'Help me brainstorm ideas for a project',
|
|
119
|
+
'Summarize this document for me',
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
slug: 'microsoft-365-copilot',
|
|
125
|
+
name: 'Microsoft 365 Copilot',
|
|
126
|
+
aliases: ['M365 Copilot'],
|
|
127
|
+
description: 'AI assistant integrated with Microsoft 365 apps',
|
|
128
|
+
category: 'desktop',
|
|
129
|
+
detection: {
|
|
130
|
+
method: 'any',
|
|
131
|
+
target: [
|
|
132
|
+
{ method: 'path', target: { macos: '/Applications/Microsoft 365 Copilot.app' } },
|
|
133
|
+
{ method: 'windows-appx', target: 'Microsoft.M365Copilot' },
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
launch: { app: { macos: 'Microsoft 365 Copilot', windows: 'Microsoft 365 Copilot' } },
|
|
137
|
+
logo: 'microsoft-copilot',
|
|
138
|
+
downloadUrl: 'https://www.microsoft.com/en-us/microsoft-365-copilot/download-copilot-app',
|
|
139
|
+
firstClass: true,
|
|
140
|
+
quickStart: {
|
|
141
|
+
launchHint: 'Open Microsoft 365 Copilot',
|
|
142
|
+
examplePrompts: [
|
|
143
|
+
'Help me draft a project status update',
|
|
144
|
+
'Summarize the latest team emails',
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
slug: 'cursor',
|
|
150
|
+
name: 'Cursor',
|
|
151
|
+
description: 'Write and edit code with AI built into every keystroke, great for building features faster',
|
|
152
|
+
category: 'ide',
|
|
153
|
+
detection: {
|
|
154
|
+
method: 'any',
|
|
155
|
+
target: [
|
|
156
|
+
{ method: 'path', target: { macos: '/Applications/Cursor.app' } },
|
|
157
|
+
{ method: 'windows-start-app', target: 'Cursor' },
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
launch: { app: { macos: 'Cursor', windows: 'Cursor' }, cli: 'cursor' },
|
|
161
|
+
logo: 'cursor',
|
|
162
|
+
downloadUrl: 'https://cursor.com',
|
|
163
|
+
skillsPaths: { global: '.cursor/skills', project: '.cursor/skills' },
|
|
164
|
+
mcpConfigPath: '.cursor/mcp.json',
|
|
165
|
+
instructionFile: { project: '.cursor/rules/runwork.mdc' },
|
|
166
|
+
mcpConfigKey: 'mcpServers',
|
|
167
|
+
skillFormat: 'mdc',
|
|
168
|
+
firstClass: true,
|
|
169
|
+
quickStart: {
|
|
170
|
+
panelHint: 'Press Cmd+L for chat, or click the AI tab in the sidebar',
|
|
171
|
+
skillCommand: 'Check .cursor/rules/ for workspace skills',
|
|
172
|
+
examplePrompts: [
|
|
173
|
+
'Use Runwork tools to check team integrations',
|
|
174
|
+
'What workspace skills are available?',
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
// Codex desktop reads from ~/.codex (same directory as Codex CLI), so
|
|
180
|
+
// CLI-side sync can install skills and MCP servers for the desktop app
|
|
181
|
+
// even when the `codex` binary isn't on the user's PATH. Keep the
|
|
182
|
+
// skillsPaths / instructionFile in lockstep with the `codex` entry.
|
|
183
|
+
slug: 'codex-app',
|
|
184
|
+
name: 'Codex',
|
|
185
|
+
description: 'OpenAI desktop app for coding and agent workflows',
|
|
186
|
+
category: 'desktop',
|
|
187
|
+
detection: {
|
|
188
|
+
method: 'any',
|
|
189
|
+
target: [
|
|
190
|
+
{ method: 'path', target: { macos: '/Applications/Codex.app' } },
|
|
191
|
+
{ method: 'windows-appx', target: 'OpenAI.Codex' },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
launch: { app: { macos: 'Codex', windows: 'Codex' } },
|
|
195
|
+
logo: 'openai',
|
|
196
|
+
downloadUrl: 'https://openai.com/codex/',
|
|
197
|
+
skillsPaths: { global: '.codex/skills', project: '.agents/skills' },
|
|
198
|
+
instructionFile: { global: '.codex/instructions.md', project: 'AGENTS.md' },
|
|
199
|
+
firstClass: true,
|
|
200
|
+
quickStart: {
|
|
201
|
+
launchHint: 'Open Codex',
|
|
202
|
+
examplePrompts: [
|
|
203
|
+
'Use my workspace skills and integrations',
|
|
204
|
+
'Check what tools my team has connected',
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
slug: 'codex',
|
|
210
|
+
name: 'Codex CLI',
|
|
211
|
+
description: "AI in your terminal by OpenAI, great for coding, debugging, and automating dev tasks",
|
|
212
|
+
category: 'cli',
|
|
213
|
+
detection: { method: 'binary', target: 'codex' },
|
|
214
|
+
launch: { cli: 'codex', cliAcceptsPrompt: true },
|
|
215
|
+
logo: 'openai',
|
|
216
|
+
downloadUrl: 'https://github.com/openai/codex',
|
|
217
|
+
skillsPaths: { global: '.codex/skills', project: '.agents/skills' },
|
|
218
|
+
instructionFile: { global: '.codex/instructions.md', project: 'AGENTS.md' },
|
|
219
|
+
firstClass: true,
|
|
220
|
+
quickStart: {
|
|
221
|
+
launchHint: 'Open your terminal and type `codex`',
|
|
222
|
+
skillCommand: 'Check AGENTS.md for workspace skills',
|
|
223
|
+
examplePrompts: [
|
|
224
|
+
'Use your skills to check workspace activity',
|
|
225
|
+
'What integrations does my team use?',
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
slug: 'windsurf',
|
|
231
|
+
name: 'Windsurf',
|
|
232
|
+
description: 'Write and ship code with AI that understands your full project, built for fast iteration',
|
|
233
|
+
category: 'ide',
|
|
234
|
+
detection: {
|
|
235
|
+
method: 'any',
|
|
236
|
+
target: [
|
|
237
|
+
{ method: 'binary', target: 'windsurf' },
|
|
238
|
+
{ method: 'path', target: { windows: 'AppData/Local/Programs/Windsurf' } },
|
|
239
|
+
{ method: 'path', target: { windows: 'C:\\Program Files\\Windsurf' } },
|
|
240
|
+
],
|
|
241
|
+
},
|
|
242
|
+
launch: { app: { macos: 'Windsurf', windows: 'Windsurf' } },
|
|
243
|
+
logo: 'windsurf',
|
|
244
|
+
downloadUrl: 'https://windsurf.com',
|
|
245
|
+
skillsPaths: { global: '.codeium/windsurf/skills', project: '.windsurf/skills' },
|
|
246
|
+
mcpConfigPath: '.codeium/windsurf/mcp_config.json',
|
|
247
|
+
instructionFile: { global: '.codeium/windsurf/rules/runwork.md', project: '.windsurf/rules/runwork.md' },
|
|
248
|
+
mcpConfigKey: 'mcpServers',
|
|
249
|
+
skillFormat: 'windsurf-md',
|
|
250
|
+
firstClass: true,
|
|
251
|
+
quickStart: {
|
|
252
|
+
panelHint: 'Press Cmd+L to open Cascade',
|
|
253
|
+
skillCommand: 'Check .windsurf/rules/ for workspace skills',
|
|
254
|
+
examplePrompts: [
|
|
255
|
+
'Use Runwork tools to check team data',
|
|
256
|
+
'What workspace skills do I have?',
|
|
257
|
+
],
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
slug: 'gemini',
|
|
262
|
+
name: 'Gemini CLI',
|
|
263
|
+
description: 'AI in your terminal by Google, great for coding, research, and working across large codebases',
|
|
264
|
+
category: 'cli',
|
|
265
|
+
detection: { method: 'binary', target: 'gemini' },
|
|
266
|
+
launch: { cli: 'gemini', cliAcceptsPrompt: true },
|
|
267
|
+
logo: 'gemini',
|
|
268
|
+
downloadUrl: 'https://github.com/google-gemini/gemini-cli',
|
|
269
|
+
skillsPaths: { global: '.gemini/skills', project: '.gemini/skills' },
|
|
270
|
+
mcpConfigPath: '.gemini/settings.json',
|
|
271
|
+
instructionFile: { global: '.gemini/GEMINI.md', project: 'GEMINI.md' },
|
|
272
|
+
mcpConfigKey: 'mcpServers',
|
|
273
|
+
firstClass: true,
|
|
274
|
+
quickStart: {
|
|
275
|
+
launchHint: 'Open your terminal and type `gemini`',
|
|
276
|
+
skillCommand: 'Check GEMINI.md or .gemini/skills/',
|
|
277
|
+
examplePrompts: [
|
|
278
|
+
'Use your tools to check workspace activity',
|
|
279
|
+
'What can my workspace do?',
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
// === Additional agents with some custom handling ===
|
|
284
|
+
{
|
|
285
|
+
slug: 'copilot-vscode',
|
|
286
|
+
name: 'GitHub Copilot (VS Code)',
|
|
287
|
+
description: "GitHub's AI pair programmer in VS Code",
|
|
288
|
+
category: 'extension',
|
|
289
|
+
detection: { method: 'binary', target: 'code' },
|
|
290
|
+
launch: { app: { macos: 'Visual Studio Code', windows: 'Code' }, cli: 'code' },
|
|
291
|
+
logo: 'vscode',
|
|
292
|
+
downloadUrl: 'https://marketplace.visualstudio.com/items?itemName=GitHub.copilot',
|
|
293
|
+
skillsPaths: { global: '.copilot/skills', project: '.github/skills' },
|
|
294
|
+
mcpConfigPath: '.vscode/mcp.json',
|
|
295
|
+
mcpConfigKey: 'servers',
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
slug: 'cline',
|
|
299
|
+
name: 'Cline',
|
|
300
|
+
description: 'Autonomous AI coding agent for VS Code',
|
|
301
|
+
category: 'extension',
|
|
302
|
+
detection: { method: 'binary', target: 'cline' },
|
|
303
|
+
launch: { cli: 'cline', cliAcceptsPrompt: true },
|
|
304
|
+
logo: 'cline',
|
|
305
|
+
skillsPaths: { global: '.agents/skills', project: '.agents/skills' },
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
slug: 'copilot-cli',
|
|
309
|
+
name: 'GitHub Copilot CLI',
|
|
310
|
+
description: 'GitHub Copilot in the terminal',
|
|
311
|
+
category: 'cli',
|
|
312
|
+
detection: { method: 'binary', target: 'gh' },
|
|
313
|
+
logo: 'vscode',
|
|
314
|
+
skillsPaths: { global: '.copilot/skills', project: '.github/skills' },
|
|
315
|
+
mcpConfigPath: '.copilot/mcp-config.json',
|
|
316
|
+
mcpConfigKey: 'mcpServers',
|
|
317
|
+
},
|
|
318
|
+
// === Community agents (from skillshare targets.yaml) ===
|
|
319
|
+
{ slug: 'antigravity', name: 'Antigravity', aliases: ['Antigravity (Google)'], description: "Google's Antigravity AI agent", category: 'cli', detection: { method: 'binary', target: 'antigravity' }, logo: 'antigravity', skillsPaths: { global: '.gemini/antigravity/skills', project: '.agent/skills' } },
|
|
320
|
+
{ slug: 'amp', name: 'Amp', description: 'AI coding agent by Sourcegraph', category: 'cli', detection: { method: 'binary', target: 'amp' }, skillsPaths: { global: '.config/agents/skills', project: '.agents/skills' } },
|
|
321
|
+
{ slug: 'adal', name: 'AdaL', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'adal' }, skillsPaths: { global: '.adal/skills', project: '.adal/skills' } },
|
|
322
|
+
{ slug: 'astrbot', name: 'AstrBot', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'astrbot' }, skillsPaths: { global: '.astrbot/data/skills', project: 'data/skills' } },
|
|
323
|
+
{ slug: 'augment', name: 'Augment', description: 'AI coding assistant', category: 'ide', detection: { method: 'binary', target: 'augment' }, skillsPaths: { global: '.augment/skills', project: '.augment/skills' } },
|
|
324
|
+
{ slug: 'bob', name: 'Bob', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'bob' }, skillsPaths: { global: '.bob/skills', project: '.bob/skills' } },
|
|
325
|
+
{ slug: 'codebuddy', name: 'CodeBuddy', description: 'AI coding assistant', category: 'cli', detection: { method: 'binary', target: 'codebuddy' }, skillsPaths: { global: '.codebuddy/skills', project: '.codebuddy/skills' } },
|
|
326
|
+
{ slug: 'comate', name: 'Comate', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'comate' }, skillsPaths: { global: '.comate/skills', project: '.comate/skills' } },
|
|
327
|
+
{ slug: 'commandcode', name: 'Command Code', aliases: ['command-code'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'commandcode' }, skillsPaths: { global: '.commandcode/skills', project: '.commandcode/skills' } },
|
|
328
|
+
{ slug: 'continue', name: 'Continue', description: 'Open-source AI code assistant', category: 'extension', detection: { method: 'binary', target: 'continue' }, skillsPaths: { global: '.continue/skills', project: '.continue/skills' } },
|
|
329
|
+
{ slug: 'cortex', name: 'Cortex', aliases: ['Cortex (Snowflake)'], description: "Snowflake's AI coding agent", category: 'cli', detection: { method: 'binary', target: 'cortex' }, skillsPaths: { global: '.snowflake/cortex/skills', project: '.cortex/skills' } },
|
|
330
|
+
{ slug: 'crush', name: 'Crush', aliases: ['Crush (Charm)'], description: 'AI agent by Charm', category: 'cli', detection: { method: 'binary', target: 'crush' }, skillsPaths: { global: '.config/crush/skills', project: '.crush/skills' } },
|
|
331
|
+
{ slug: 'deepagents', name: 'Deep Agents', aliases: ['deep-agents'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'deepagents' }, skillsPaths: { global: '.deepagents/agent/skills', project: '.deepagents/skills' } },
|
|
332
|
+
{ slug: 'droid', name: 'Droid', aliases: ['Droid (Factory AI)'], description: "Factory AI's coding agent", category: 'cli', detection: { method: 'binary', target: 'droid' }, skillsPaths: { global: '.factory/skills', project: '.factory/skills' } },
|
|
333
|
+
{ slug: 'firebender', name: 'Firebender', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'firebender' }, skillsPaths: { global: '.firebender/skills', project: '.firebender/skills' } },
|
|
334
|
+
{ slug: 'goose', name: 'Goose', description: 'AI coding agent by Block', category: 'cli', detection: { method: 'binary', target: 'goose' }, skillsPaths: { global: '.config/goose/skills', project: '.goose/skills' } },
|
|
335
|
+
{ slug: 'hermes', name: 'Hermes', aliases: ['hermes-agent'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'hermes' }, skillsPaths: { global: '.hermes/skills', project: '.hermes/skills' } },
|
|
336
|
+
{ slug: 'iflow', name: 'iFlow CLI', aliases: ['iflow-cli'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'iflow' }, skillsPaths: { global: '.iflow/skills', project: '.iflow/skills' } },
|
|
337
|
+
{ slug: 'junie', name: 'Junie', description: 'JetBrains AI coding agent', category: 'ide', detection: { method: 'binary', target: 'junie' }, skillsPaths: { global: '.junie/skills', project: '.junie/skills' } },
|
|
338
|
+
{ slug: 'kilocode', name: 'Kilo Code', aliases: ['kilo'], description: 'AI coding agent', category: 'extension', detection: { method: 'binary', target: 'kilocode' }, skillsPaths: { global: '.kilocode/skills', project: '.kilocode/skills' } },
|
|
339
|
+
{ slug: 'kimi', name: 'Kimi Code CLI', aliases: ['kimi-cli'], description: "Moonshot AI's coding agent", category: 'cli', detection: { method: 'binary', target: 'kimi' }, skillsPaths: { global: '.config/agents/skills', project: '.agents/skills' } },
|
|
340
|
+
{ slug: 'kiro', name: 'Kiro', aliases: ['Kiro CLI', 'kiro-cli'], description: "AWS's AI coding agent", category: 'ide', detection: { method: 'binary', target: 'kiro' }, skillsPaths: { global: '.kiro/skills', project: '.kiro/skills' } },
|
|
341
|
+
{ slug: 'kode', name: 'Kode', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'kode' }, skillsPaths: { global: '.kode/skills', project: '.kode/skills' } },
|
|
342
|
+
{ slug: 'letta', name: 'Letta', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'letta' }, skillsPaths: { global: '.letta/skills', project: '.skills' } },
|
|
343
|
+
{ slug: 'lingma', name: 'Lingma', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'lingma' }, skillsPaths: { global: '.lingma/skills', project: '.lingma/skills' } },
|
|
344
|
+
{ slug: 'mcpjam', name: 'MCPJam', description: 'MCP-based AI agent', category: 'cli', detection: { method: 'binary', target: 'mcpjam' }, skillsPaths: { global: '.mcpjam/skills', project: '.mcpjam/skills' } },
|
|
345
|
+
{ slug: 'mux', name: 'Mux', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'mux' }, skillsPaths: { global: '.mux/skills', project: '.mux/skills' } },
|
|
346
|
+
{ slug: 'neovate', name: 'Neovate', description: 'AI coding agent for Neovim', category: 'extension', detection: { method: 'binary', target: 'neovate' }, skillsPaths: { global: '.neovate/skills', project: '.neovate/skills' } },
|
|
347
|
+
{ slug: 'omp', name: 'Oh My Pi', aliases: ['oh-my-pi'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'omp' }, skillsPaths: { global: '.omp/agent/skills', project: '.omp/skills' } },
|
|
348
|
+
{ slug: 'openclaw', name: 'OpenClaw', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'openclaw' }, skillsPaths: { global: '.openclaw/skills', project: 'skills' } },
|
|
349
|
+
{ slug: 'opencode', name: 'OpenCode', description: 'Open-source AI coding agent', category: 'cli', detection: { method: 'binary', target: 'opencode' }, skillsPaths: { global: '.config/opencode/skills', project: '.opencode/skills' } },
|
|
350
|
+
{ slug: 'openhands', name: 'OpenHands', description: 'Open-source AI coding agent', category: 'cli', detection: { method: 'binary', target: 'openhands' }, skillsPaths: { global: '.openhands/skills', project: '.openhands/skills' } },
|
|
351
|
+
{ slug: 'pi', name: 'Pi', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'pi' }, skillsPaths: { global: '.pi/agent/skills', project: '.pi/skills' } },
|
|
352
|
+
{ slug: 'pochi', name: 'Pochi', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'pochi' }, skillsPaths: { global: '.pochi/skills', project: '.pochi/skills' } },
|
|
353
|
+
{ slug: 'purecode', name: 'PureCode AI', aliases: ['purecode-ai'], description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'purecode' }, skillsPaths: { global: '.purecode/skills', project: '.agents/skills' } },
|
|
354
|
+
{ slug: 'qoder', name: 'Qoder', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'qoder' }, skillsPaths: { global: '.qoder/skills', project: '.qoder/skills' } },
|
|
355
|
+
{ slug: 'qwen', name: 'Qwen Code', aliases: ['qwen-code'], description: "Alibaba's AI coding agent", category: 'cli', detection: { method: 'binary', target: 'qwen' }, skillsPaths: { global: '.qwen/skills', project: '.qwen/skills' } },
|
|
356
|
+
{ slug: 'roo', name: 'Roo Code', description: 'AI coding agent', category: 'extension', detection: { method: 'binary', target: 'roo' }, skillsPaths: { global: '.roo/skills', project: '.roo/skills' } },
|
|
357
|
+
{ slug: 'trae', name: 'Trae', description: 'ByteDance AI coding IDE', category: 'ide', detection: { method: 'binary', target: 'trae' }, skillsPaths: { global: '.trae/skills', project: '.trae/skills' } },
|
|
358
|
+
{ slug: 'trae-cn', name: 'Trae CN', description: 'ByteDance AI coding IDE (China)', category: 'ide', detection: { method: 'binary', target: 'trae-cn' }, skillsPaths: { global: '.trae-cn/skills', project: '.trae/skills' } },
|
|
359
|
+
{ slug: 'mistral-vibe', name: 'Mistral Vibe', aliases: ['vibe'], description: "Mistral's AI coding agent", category: 'cli', detection: { method: 'binary', target: 'vibe' }, skillsPaths: { global: '.vibe/skills', project: '.vibe/skills' } },
|
|
360
|
+
{ slug: 'verdent', name: 'Verdent', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'verdent' }, skillsPaths: { global: '.verdent/skills', project: '.verdent/skills' } },
|
|
361
|
+
{ slug: 'warp', name: 'Warp AI', description: 'AI-powered terminal', category: 'cli', detection: { method: 'path', target: { macos: '/Applications/Warp.app', linux: '/usr/bin/warp-terminal' } }, skillsPaths: { global: '.agents/skills', project: '.agents/skills' } },
|
|
362
|
+
{ slug: 'witsy', name: 'Witsy', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'witsy' }, skillsPaths: { global: '.agents/skills', project: '.agents/skills' } },
|
|
363
|
+
{ slug: 'xcode-claude', name: 'Xcode Claude', description: 'Claude integration for Xcode', category: 'extension', detection: { method: 'path', target: { macos: 'Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig' } }, logo: 'claude', skillsPaths: { global: 'Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/skills', project: '.claude/skills' } },
|
|
364
|
+
{ slug: 'xcode-codex', name: 'Xcode Codex', description: 'Codex integration for Xcode', category: 'extension', detection: { method: 'path', target: { macos: 'Library/Developer/Xcode/CodingAssistant/codex' } }, logo: 'openai', skillsPaths: { global: 'Library/Developer/Xcode/CodingAssistant/codex/skills', project: '.codex/skills' } },
|
|
365
|
+
{ slug: 'zencoder', name: 'Zencoder', description: 'AI coding agent', category: 'cli', detection: { method: 'binary', target: 'zencoder' }, skillsPaths: { global: '.zencoder/skills', project: '.zencoder/skills' } },
|
|
366
|
+
{ slug: 'replit', name: 'Replit', description: 'AI-powered coding platform', category: 'ide', detection: { method: 'binary', target: 'replit' }, skillsPaths: { global: '.config/agents/skills', project: '.agents/skills' } },
|
|
367
|
+
];
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
// Indexes
|
|
370
|
+
// ---------------------------------------------------------------------------
|
|
371
|
+
const slugIndex = new Map();
|
|
372
|
+
const nameIndex = new Map();
|
|
373
|
+
for (const agent of AGENT_REGISTRY) {
|
|
374
|
+
slugIndex.set(agent.slug, agent);
|
|
375
|
+
nameIndex.set(agent.name, agent);
|
|
376
|
+
if (agent.aliases) {
|
|
377
|
+
for (const alias of agent.aliases) {
|
|
378
|
+
nameIndex.set(alias, agent);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// Custom adapters live in CLI source tree. This list stays manual so the CLI
|
|
383
|
+
// knows which agents to skip when falling back to the generic adapter.
|
|
384
|
+
const CUSTOM_ADAPTER_SLUGS = new Set([
|
|
385
|
+
'claude-code',
|
|
386
|
+
'claude-desktop',
|
|
387
|
+
'cursor',
|
|
388
|
+
'windsurf',
|
|
389
|
+
'codex',
|
|
390
|
+
'codex-app',
|
|
391
|
+
'cline',
|
|
392
|
+
'gemini',
|
|
393
|
+
]);
|
|
394
|
+
// ---------------------------------------------------------------------------
|
|
395
|
+
// Public API (browser-safe)
|
|
396
|
+
// ---------------------------------------------------------------------------
|
|
397
|
+
export function getAgent(slug) {
|
|
398
|
+
return slugIndex.get(slug);
|
|
399
|
+
}
|
|
400
|
+
export function getAgentByName(name) {
|
|
401
|
+
return nameIndex.get(name);
|
|
402
|
+
}
|
|
403
|
+
export function getAgents() {
|
|
404
|
+
return AGENT_REGISTRY;
|
|
405
|
+
}
|
|
406
|
+
export function getDetectableAgents() {
|
|
407
|
+
return AGENT_REGISTRY.filter((a) => a.detection);
|
|
408
|
+
}
|
|
409
|
+
export function getLaunchableAgents() {
|
|
410
|
+
return AGENT_REGISTRY.filter((a) => a.launch);
|
|
411
|
+
}
|
|
412
|
+
export function getFirstClassAgents() {
|
|
413
|
+
return AGENT_REGISTRY.filter((a) => a.firstClass);
|
|
414
|
+
}
|
|
415
|
+
export function getAgentsByCategory(category) {
|
|
416
|
+
return AGENT_REGISTRY.filter((a) => a.category === category);
|
|
417
|
+
}
|
|
418
|
+
export function isCLIAgent(slug) {
|
|
419
|
+
return getAgent(slug)?.category === 'cli';
|
|
420
|
+
}
|
|
421
|
+
export function isIDEAgent(slug) {
|
|
422
|
+
return getAgent(slug)?.category === 'ide';
|
|
423
|
+
}
|
|
424
|
+
export function isDesktopAgent(slug) {
|
|
425
|
+
return getAgent(slug)?.category === 'desktop';
|
|
426
|
+
}
|
|
427
|
+
/** Alias of {@link getAgent} kept for backward compatibility with CLI callers. */
|
|
428
|
+
export const getRegistryAgent = getAgent;
|
|
429
|
+
/** Alias of {@link getAgents} kept for backward compatibility with CLI callers. */
|
|
430
|
+
export const getRegistryAgents = getAgents;
|
|
431
|
+
export function getFirstClassSlugs() {
|
|
432
|
+
return AGENT_REGISTRY.filter((a) => a.firstClass).map((a) => a.slug);
|
|
433
|
+
}
|
|
434
|
+
export function getCustomAdapterSlugs() {
|
|
435
|
+
return CUSTOM_ADAPTER_SLUGS;
|
|
436
|
+
}
|
|
@@ -1,53 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* CLI-side agent registry entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* The data and browser-safe types / lookups live in `./registry-data.ts` so
|
|
5
|
+
* that the desktop package can import them without pulling in Node-only
|
|
6
|
+
* modules. This file keeps the existing public surface for CLI callers by
|
|
7
|
+
* re-exporting everything from the data module and adding the Node-only path
|
|
8
|
+
* resolvers used by the generic adapter and `sync` command.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
export type PlatformString = string | {
|
|
13
|
-
default?: string;
|
|
14
|
-
macos?: string;
|
|
15
|
-
windows?: string;
|
|
16
|
-
linux?: string;
|
|
17
|
-
};
|
|
18
|
-
export interface AgentDetection {
|
|
19
|
-
method: 'binary' | 'path';
|
|
20
|
-
target: PlatformString;
|
|
21
|
-
}
|
|
22
|
-
export interface AgentDefinition {
|
|
23
|
-
slug: string;
|
|
24
|
-
name: string;
|
|
25
|
-
aliases?: string[];
|
|
26
|
-
description: string;
|
|
27
|
-
category: AgentCategory;
|
|
28
|
-
detection: AgentDetection;
|
|
29
|
-
/** Skill file directories relative to $HOME (global) or project root (project) */
|
|
30
|
-
skillsPaths?: {
|
|
31
|
-
global?: PlatformString;
|
|
32
|
-
project?: PlatformString;
|
|
33
|
-
};
|
|
34
|
-
/** MCP config file path relative to $HOME */
|
|
35
|
-
mcpConfigPath?: PlatformString;
|
|
36
|
-
/** First-class agent = full Runwork support (custom adapter) */
|
|
37
|
-
firstClass?: boolean;
|
|
38
|
-
/** Instruction file path relative to $HOME (global) or project root (project) */
|
|
39
|
-
instructionFile?: {
|
|
40
|
-
global?: PlatformString;
|
|
41
|
-
project?: PlatformString;
|
|
42
|
-
};
|
|
43
|
-
/** MCP config JSON key where servers are stored (default: 'mcpServers') */
|
|
44
|
-
mcpConfigKey?: string;
|
|
45
|
-
/** Skill file format */
|
|
46
|
-
skillFormat?: 'skill-md' | 'mdc' | 'windsurf-md' | 'gemini-flat';
|
|
47
|
-
}
|
|
10
|
+
export * from './registry-data.js';
|
|
11
|
+
import type { PlatformString } from './registry-data.js';
|
|
48
12
|
export declare function resolvePlatformString(ps: PlatformString): string | undefined;
|
|
49
13
|
export declare function resolveToAbsolute(ps: PlatformString, scope: 'global' | 'project'): string | undefined;
|
|
50
|
-
export declare function getRegistryAgent(slug: string): AgentDefinition | undefined;
|
|
51
|
-
export declare function getRegistryAgents(): AgentDefinition[];
|
|
52
|
-
export declare function getFirstClassSlugs(): string[];
|
|
53
|
-
export declare function getCustomAdapterSlugs(): Set<string>;
|