subagents-sh 0.1.0

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.
Files changed (66) hide show
  1. package/README.md +57 -0
  2. package/dist/commands/add.d.ts +6 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +35 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/list.d.ts +7 -0
  7. package/dist/commands/list.d.ts.map +1 -0
  8. package/dist/commands/list.js +77 -0
  9. package/dist/commands/list.js.map +1 -0
  10. package/dist/commands/remove.d.ts +6 -0
  11. package/dist/commands/remove.d.ts.map +1 -0
  12. package/dist/commands/remove.js +25 -0
  13. package/dist/commands/remove.js.map +1 -0
  14. package/dist/commands/update.d.ts +7 -0
  15. package/dist/commands/update.d.ts.map +1 -0
  16. package/dist/commands/update.js +83 -0
  17. package/dist/commands/update.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +125 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types.d.ts +41 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +3 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils/fetch.d.ts +23 -0
  27. package/dist/utils/fetch.d.ts.map +1 -0
  28. package/dist/utils/fetch.js +124 -0
  29. package/dist/utils/fetch.js.map +1 -0
  30. package/dist/utils/fetch.test.d.ts +2 -0
  31. package/dist/utils/fetch.test.d.ts.map +1 -0
  32. package/dist/utils/fetch.test.js +246 -0
  33. package/dist/utils/fetch.test.js.map +1 -0
  34. package/dist/utils/install.d.ts +68 -0
  35. package/dist/utils/install.d.ts.map +1 -0
  36. package/dist/utils/install.js +140 -0
  37. package/dist/utils/install.js.map +1 -0
  38. package/dist/utils/install.test.d.ts +2 -0
  39. package/dist/utils/install.test.d.ts.map +1 -0
  40. package/dist/utils/install.test.js +565 -0
  41. package/dist/utils/install.test.js.map +1 -0
  42. package/dist/utils/manifest.d.ts +37 -0
  43. package/dist/utils/manifest.d.ts.map +1 -0
  44. package/dist/utils/manifest.js +74 -0
  45. package/dist/utils/manifest.js.map +1 -0
  46. package/dist/utils/manifest.test.d.ts +2 -0
  47. package/dist/utils/manifest.test.d.ts.map +1 -0
  48. package/dist/utils/manifest.test.js +278 -0
  49. package/dist/utils/manifest.test.js.map +1 -0
  50. package/dist/utils/paths.d.ts +49 -0
  51. package/dist/utils/paths.d.ts.map +1 -0
  52. package/dist/utils/paths.js +98 -0
  53. package/dist/utils/paths.js.map +1 -0
  54. package/dist/utils/paths.test.d.ts +2 -0
  55. package/dist/utils/paths.test.d.ts.map +1 -0
  56. package/dist/utils/paths.test.js +255 -0
  57. package/dist/utils/paths.test.js.map +1 -0
  58. package/dist/utils/telemetry.d.ts +5 -0
  59. package/dist/utils/telemetry.d.ts.map +1 -0
  60. package/dist/utils/telemetry.js +30 -0
  61. package/dist/utils/telemetry.js.map +1 -0
  62. package/dist/utils/telemetry.test.d.ts +2 -0
  63. package/dist/utils/telemetry.test.d.ts.map +1 -0
  64. package/dist/utils/telemetry.test.js +113 -0
  65. package/dist/utils/telemetry.test.js.map +1 -0
  66. package/package.json +57 -0
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # subagents
2
+
3
+ CLI for discovering and installing Claude Code subagents.
4
+
5
+ ## Installation
6
+
7
+ No installation required! Use directly with npx:
8
+
9
+ ```bash
10
+ npx subagents-sh add owner/repo/agent-name
11
+ ```
12
+
13
+ Or install globally:
14
+
15
+ ```bash
16
+ npm install -g subagents-sh
17
+ ```
18
+
19
+ ## Commands
20
+
21
+ ### Add a subagent
22
+
23
+ ```bash
24
+ npx subagents-sh add owner/repo/agent-name
25
+ ```
26
+
27
+ ### Search for subagents
28
+
29
+ ```bash
30
+ npx subagents-sh search <query>
31
+ ```
32
+
33
+ ### List installed subagents
34
+
35
+ ```bash
36
+ npx subagents-sh list
37
+ ```
38
+
39
+ ### Remove a subagent
40
+
41
+ ```bash
42
+ npx subagents-sh remove <name>
43
+ ```
44
+
45
+ ### Update all subagents
46
+
47
+ ```bash
48
+ npx subagents-sh update
49
+ ```
50
+
51
+ ## Learn More
52
+
53
+ Visit [subagents.sh](https://subagents.sh) to browse available subagents.
54
+
55
+ ## License
56
+
57
+ MIT
@@ -0,0 +1,6 @@
1
+ export interface AddOptions {
2
+ force?: boolean;
3
+ local?: boolean;
4
+ }
5
+ export declare function addCommand(identifier: string, options: AddOptions): Promise<void>;
6
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -0,0 +1,35 @@
1
+ import * as p from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { installSubagent } from '../utils/install.js';
4
+ export async function addCommand(identifier, options) {
5
+ const s = p.spinner();
6
+ const scope = options.local ? 'local' : 'global';
7
+ const scopeLabel = scope === 'global' ? '~/.claude/agents/' : './.claude/agents/';
8
+ try {
9
+ s.start(`Installing ${chalk.cyan(identifier)} to ${chalk.dim(scopeLabel)}`);
10
+ const result = await installSubagent(identifier, {
11
+ force: options.force,
12
+ scope,
13
+ });
14
+ s.stop(result.isUpdate
15
+ ? `Updated ${chalk.green(result.name)}`
16
+ : `Installed ${chalk.green(result.name)}`);
17
+ p.note([
18
+ `${chalk.dim('Location:')} ${result.path}`,
19
+ `${chalk.dim('Scope:')} ${scope}`,
20
+ '',
21
+ `Claude Code will automatically use this subagent`,
22
+ `when relevant to your tasks.`,
23
+ ].join('\n'), 'Success');
24
+ }
25
+ catch (err) {
26
+ s.stop('Installation failed');
27
+ const message = err instanceof Error ? err.message : 'Unknown error';
28
+ p.log.error(chalk.red(message));
29
+ if (message.includes('already installed')) {
30
+ p.log.info(`Run with ${chalk.cyan('--force')} to overwrite.`);
31
+ }
32
+ process.exit(1);
33
+ }
34
+ }
35
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,OAAmB;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAiB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,MAAM,UAAU,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAElF,IAAI,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE;YAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK;SACN,CAAC,CAAC;QAEH,CAAC,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ;YACb,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACvC,CAAC,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC5C,CAAC;QAEF,CAAC,CAAC,IAAI,CACJ;YACE,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;YAC1C,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE;YACjC,EAAE;YACF,kDAAkD;YAClD,8BAA8B;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAErE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ListOptions {
2
+ global?: boolean;
3
+ local?: boolean;
4
+ all?: boolean;
5
+ }
6
+ export declare function listCommand(options?: ListOptions): Promise<void>;
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAoDD,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1E"}
@@ -0,0 +1,77 @@
1
+ import chalk from 'chalk';
2
+ import * as p from '@clack/prompts';
3
+ import { listManifestSubagents } from '../utils/manifest.js';
4
+ import { listSubagentFiles } from '../utils/paths.js';
5
+ function displaySubagents(manifestSubagents, fileSubagents, scopeLabel) {
6
+ // Combine both sources, preferring manifest data
7
+ const manifestNames = new Set(manifestSubagents.map((s) => s.name));
8
+ const orphanFiles = fileSubagents.filter((f) => !manifestNames.has(f));
9
+ if (manifestSubagents.length === 0 && orphanFiles.length === 0) {
10
+ console.log(chalk.dim(` No subagents installed in ${scopeLabel}`));
11
+ console.log();
12
+ return;
13
+ }
14
+ // Show tracked subagents
15
+ for (const subagent of manifestSubagents) {
16
+ const name = chalk.green(subagent.name);
17
+ const source = chalk.dim(`(${subagent.source})`);
18
+ const desc = subagent.description
19
+ ? chalk.gray(` - ${subagent.description}`)
20
+ : '';
21
+ console.log(` ${name} ${source}${desc}`);
22
+ if (subagent.tools) {
23
+ // Handle both array and comma-separated string formats
24
+ const toolsList = Array.isArray(subagent.tools)
25
+ ? subagent.tools
26
+ : String(subagent.tools).split(',').map((t) => t.trim());
27
+ if (toolsList.length > 0) {
28
+ const tools = toolsList.map((t) => chalk.cyan(t)).join(', ');
29
+ console.log(` ${chalk.dim('Tools:')} ${tools}`);
30
+ }
31
+ }
32
+ console.log();
33
+ }
34
+ // Show orphan files (files without manifest entry)
35
+ if (orphanFiles.length > 0) {
36
+ console.log(chalk.dim(' Untracked files:'));
37
+ for (const file of orphanFiles) {
38
+ console.log(` ${chalk.yellow(file)} ${chalk.dim('(not in manifest)')}`);
39
+ }
40
+ console.log();
41
+ }
42
+ }
43
+ export async function listCommand(options = {}) {
44
+ // Determine which scopes to show
45
+ const showGlobal = options.global || options.all || (!options.local);
46
+ const showLocal = options.local || options.all;
47
+ let totalCount = 0;
48
+ if (showGlobal) {
49
+ const globalManifest = listManifestSubagents('global');
50
+ const globalFiles = listSubagentFiles('global');
51
+ const globalManifestNames = new Set(globalManifest.map((s) => s.name));
52
+ const globalOrphans = globalFiles.filter((f) => !globalManifestNames.has(f));
53
+ console.log();
54
+ console.log(chalk.bold('Global agents') + chalk.dim(' (~/.claude/agents/)'));
55
+ console.log();
56
+ displaySubagents(globalManifest, globalFiles, 'global scope');
57
+ totalCount += globalManifest.length + globalOrphans.length;
58
+ }
59
+ if (showLocal) {
60
+ const localManifest = listManifestSubagents('local');
61
+ const localFiles = listSubagentFiles('local');
62
+ const localManifestNames = new Set(localManifest.map((s) => s.name));
63
+ const localOrphans = localFiles.filter((f) => !localManifestNames.has(f));
64
+ console.log();
65
+ console.log(chalk.bold('Local/Project agents') + chalk.dim(' (./.claude/agents/)'));
66
+ console.log();
67
+ displaySubagents(localManifest, localFiles, 'local scope');
68
+ totalCount += localManifest.length + localOrphans.length;
69
+ }
70
+ if (totalCount === 0) {
71
+ p.log.info('No subagents installed.');
72
+ p.log.info(`Run ${chalk.cyan('npx subagents-sh add owner/repo/name')} to install one.`);
73
+ return;
74
+ }
75
+ console.log(chalk.dim(`Total: ${totalCount} subagent(s)`));
76
+ }
77
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface RemoveOptions {
2
+ global?: boolean;
3
+ local?: boolean;
4
+ }
5
+ export declare function removeCommand(name: string, options?: RemoveOptions): Promise<void>;
6
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5F"}
@@ -0,0 +1,25 @@
1
+ import chalk from 'chalk';
2
+ import * as p from '@clack/prompts';
3
+ import { uninstallSubagent } from '../utils/install.js';
4
+ export async function removeCommand(name, options = {}) {
5
+ try {
6
+ // Determine scope - if neither specified, auto-detect
7
+ let scope;
8
+ if (options.global) {
9
+ scope = 'global';
10
+ }
11
+ else if (options.local) {
12
+ scope = 'local';
13
+ }
14
+ // If neither flag is set, scope remains undefined and uninstallSubagent will auto-detect
15
+ const result = uninstallSubagent(name, { scope });
16
+ p.log.success(`Removed ${chalk.green(name)} from ${result.scope} scope`);
17
+ p.log.info(chalk.dim(`Deleted: ${result.path}`));
18
+ }
19
+ catch (err) {
20
+ const message = err instanceof Error ? err.message : 'Unknown error';
21
+ p.log.error(chalk.red(message));
22
+ process.exit(1);
23
+ }
24
+ }
25
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,UAAyB,EAAE;IAC3E,IAAI,CAAC;QACH,sDAAsD;QACtD,IAAI,KAA+B,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;QACD,yFAAyF;QAEzF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAElD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC;QACzE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface UpdateOptions {
2
+ global?: boolean;
3
+ local?: boolean;
4
+ all?: boolean;
5
+ }
6
+ export declare function updateCommand(options?: UpdateOptions): Promise<void>;
7
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F9E"}
@@ -0,0 +1,83 @@
1
+ import chalk from 'chalk';
2
+ import * as p from '@clack/prompts';
3
+ import { updateAllSubagents, updateAllScopesSubagents } from '../utils/install.js';
4
+ import { listManifestSubagents } from '../utils/manifest.js';
5
+ export async function updateCommand(options = {}) {
6
+ // Determine which scopes to update
7
+ const updateAll = options.all;
8
+ const updateLocal = options.local && !options.all;
9
+ const updateGlobal = options.global || (!options.local && !options.all);
10
+ if (updateAll) {
11
+ // Update both scopes
12
+ const globalInstalled = listManifestSubagents('global');
13
+ const localInstalled = listManifestSubagents('local');
14
+ const totalCount = globalInstalled.length + localInstalled.length;
15
+ if (totalCount === 0) {
16
+ p.log.info('No subagents installed in any scope.');
17
+ p.log.info(`Run ${chalk.cyan('npx subagents-sh add owner/repo/name')} to install one.`);
18
+ return;
19
+ }
20
+ console.log();
21
+ console.log(chalk.bold(`Updating ${totalCount} subagent(s) across all scopes...`));
22
+ console.log();
23
+ const results = await updateAllScopesSubagents((name, scope, status, error) => {
24
+ const scopeLabel = scope === 'global' ? chalk.dim('[global]') : chalk.dim('[local]');
25
+ switch (status) {
26
+ case 'updating':
27
+ console.log(` ${chalk.dim('Updating')} ${name} ${scopeLabel}...`);
28
+ break;
29
+ case 'updated':
30
+ console.log(` ${chalk.green('✓')} ${name} ${scopeLabel}`);
31
+ break;
32
+ case 'error':
33
+ console.log(` ${chalk.red('✗')} ${name} ${scopeLabel}: ${error}`);
34
+ break;
35
+ }
36
+ });
37
+ console.log();
38
+ const totalUpdated = results.global.updated.length + results.local.updated.length;
39
+ const totalErrors = results.global.errors.length + results.local.errors.length;
40
+ if (totalUpdated > 0) {
41
+ p.log.success(`Updated ${totalUpdated} subagent(s)`);
42
+ }
43
+ if (totalErrors > 0) {
44
+ p.log.warning(`Failed to update ${totalErrors} subagent(s)`);
45
+ }
46
+ }
47
+ else {
48
+ // Update single scope
49
+ const scope = updateLocal ? 'local' : 'global';
50
+ const scopeLabel = scope === 'global' ? '~/.claude/agents/' : './.claude/agents/';
51
+ const installed = listManifestSubagents(scope);
52
+ if (installed.length === 0) {
53
+ p.log.info(`No subagents installed in ${scope} scope.`);
54
+ p.log.info(`Run ${chalk.cyan('npx subagents-sh add owner/repo/name')} to install one.`);
55
+ return;
56
+ }
57
+ console.log();
58
+ console.log(chalk.bold(`Updating ${installed.length} subagent(s) in ${scope} scope...`));
59
+ console.log(chalk.dim(` ${scopeLabel}`));
60
+ console.log();
61
+ const { updated, errors } = await updateAllSubagents({ scope }, (name, status, error) => {
62
+ switch (status) {
63
+ case 'updating':
64
+ console.log(` ${chalk.dim('Updating')} ${name}...`);
65
+ break;
66
+ case 'updated':
67
+ console.log(` ${chalk.green('✓')} ${name}`);
68
+ break;
69
+ case 'error':
70
+ console.log(` ${chalk.red('✗')} ${name}: ${error}`);
71
+ break;
72
+ }
73
+ });
74
+ console.log();
75
+ if (updated.length > 0) {
76
+ p.log.success(`Updated ${updated.length} subagent(s)`);
77
+ }
78
+ if (errors.length > 0) {
79
+ p.log.warning(`Failed to update ${errors.length} subagent(s)`);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import * as p from '@clack/prompts';
5
+ import figlet from 'figlet';
6
+ import { addCommand } from './commands/add.js';
7
+ import { listCommand } from './commands/list.js';
8
+ import { removeCommand } from './commands/remove.js';
9
+ import { updateCommand } from './commands/update.js';
10
+ const VERSION = '0.1.0';
11
+ // ASCII banner using figlet (same ANSI Shadow font as homepage)
12
+ function showBanner() {
13
+ const banner = figlet.textSync('subagents', {
14
+ font: 'ANSI Shadow',
15
+ horizontalLayout: 'default',
16
+ });
17
+ console.log(chalk.cyan(banner));
18
+ console.log(chalk.dim(` CLI for Claude Code subagents • v${VERSION}`));
19
+ console.log(chalk.dim(` https://subagents.sh`));
20
+ console.log();
21
+ }
22
+ const program = new Command();
23
+ program
24
+ .name('subagents-sh')
25
+ .description('CLI for discovering and installing Claude Code subagents')
26
+ .version(VERSION);
27
+ // Add command
28
+ program
29
+ .command('add <identifier>')
30
+ .description('Install a subagent from the registry or GitHub')
31
+ .option('-f, --force', 'Overwrite existing subagent')
32
+ .option('-l, --local', 'Install to project directory (./.claude/agents/)')
33
+ .addHelpText('after', `
34
+ Examples:
35
+ $ npx subagents-sh add anthropics/claude-code/backend-architect
36
+ $ npx subagents-sh add user/repo/agent-name
37
+ $ npx subagents-sh add user/repo/agent-name --local
38
+
39
+ Storage locations:
40
+ Global (default) ~/.claude/agents/ Available in all projects
41
+ Local (--local) ./.claude/agents/ Project-specific, shareable via git
42
+ `)
43
+ .action(async (identifier, options) => {
44
+ p.intro(chalk.bgCyan.black(' subagents '));
45
+ await addCommand(identifier, options);
46
+ p.outro('Done!');
47
+ });
48
+ // List command
49
+ program
50
+ .command('list')
51
+ .alias('ls')
52
+ .description('List installed subagents')
53
+ .option('-g, --global', 'Show only global agents (default)')
54
+ .option('-l, --local', 'Show only project agents')
55
+ .option('-a, --all', 'Show agents from both locations')
56
+ .addHelpText('after', `
57
+ Examples:
58
+ $ npx subagents-sh list # Show global agents (default)
59
+ $ npx subagents-sh list --local # Show project agents only
60
+ $ npx subagents-sh list --all # Show agents from both locations
61
+ `)
62
+ .action(async (options) => {
63
+ await listCommand(options);
64
+ });
65
+ // Remove command
66
+ program
67
+ .command('remove <name>')
68
+ .alias('rm')
69
+ .description('Remove an installed subagent')
70
+ .option('-g, --global', 'Remove from global scope')
71
+ .option('-l, --local', 'Remove from local/project scope')
72
+ .addHelpText('after', `
73
+ Examples:
74
+ $ npx subagents-sh remove agent-name # Auto-detect location
75
+ $ npx subagents-sh remove agent-name --global # Remove from global
76
+ $ npx subagents-sh remove agent-name --local # Remove from project
77
+ `)
78
+ .action(async (name, options) => {
79
+ await removeCommand(name, options);
80
+ });
81
+ // Update command
82
+ program
83
+ .command('update')
84
+ .alias('up')
85
+ .description('Update all installed subagents')
86
+ .option('-g, --global', 'Update global agents only (default)')
87
+ .option('-l, --local', 'Update project agents only')
88
+ .option('-a, --all', 'Update agents in both locations')
89
+ .addHelpText('after', `
90
+ Examples:
91
+ $ npx subagents-sh update # Update global agents (default)
92
+ $ npx subagents-sh update --local # Update project agents only
93
+ $ npx subagents-sh update --all # Update all agents
94
+ `)
95
+ .action(async (options) => {
96
+ p.intro(chalk.bgCyan.black(' subagents '));
97
+ await updateCommand(options);
98
+ p.outro('Done!');
99
+ });
100
+ // Search command (redirects to website)
101
+ program
102
+ .command('search [query]')
103
+ .description('Search for subagents (opens subagents.sh)')
104
+ .action((query) => {
105
+ const url = query
106
+ ? `https://subagents.sh?q=${encodeURIComponent(query)}`
107
+ : 'https://subagents.sh';
108
+ console.log();
109
+ console.log(`Search for subagents at: ${chalk.cyan(url)}`);
110
+ console.log();
111
+ });
112
+ // Handle unknown commands
113
+ program.on('command:*', () => {
114
+ console.error(chalk.red(`Unknown command: ${program.args.join(' ')}\n`));
115
+ program.help();
116
+ });
117
+ // Show banner and help if no command provided
118
+ if (!process.argv.slice(2).length) {
119
+ showBanner();
120
+ program.outputHelp();
121
+ process.exit(0);
122
+ }
123
+ // Parse arguments
124
+ program.parse();
125
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export type StorageScope = 'global' | 'local';
2
+ export interface SubagentFrontmatter {
3
+ name: string;
4
+ description?: string;
5
+ tools?: string[];
6
+ [key: string]: unknown;
7
+ }
8
+ export interface ParsedSubagent {
9
+ frontmatter: SubagentFrontmatter;
10
+ content: string;
11
+ raw: string;
12
+ }
13
+ export interface InstalledSubagent {
14
+ name: string;
15
+ path: string;
16
+ source: string;
17
+ description?: string;
18
+ tools?: string[] | string;
19
+ installedAt: string;
20
+ updatedAt: string;
21
+ }
22
+ export interface Manifest {
23
+ version: string;
24
+ subagents: Record<string, InstalledSubagent>;
25
+ }
26
+ export interface FetchResult {
27
+ content: string;
28
+ source: {
29
+ owner: string;
30
+ repo: string;
31
+ name: string;
32
+ branch: string;
33
+ path: string;
34
+ };
35
+ }
36
+ export interface TelemetryPayload {
37
+ subagentId: string;
38
+ event: 'download' | 'view' | 'copy';
39
+ metadata?: Record<string, unknown>;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // CLI Types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY"}
@@ -0,0 +1,23 @@
1
+ import type { FetchResult } from '../types.js';
2
+ /**
3
+ * Parse a subagent identifier (owner/repo/name or full GitHub URL)
4
+ */
5
+ export declare function parseIdentifier(identifier: string): {
6
+ owner: string;
7
+ repo: string;
8
+ name: string;
9
+ };
10
+ /**
11
+ * Fetch subagent content from GitHub
12
+ * Tries multiple paths to find the agent file
13
+ */
14
+ export declare function fetchFromGitHub(owner: string, repo: string, name: string, branch?: string): Promise<FetchResult>;
15
+ /**
16
+ * Check if a GitHub repo exists and is accessible
17
+ */
18
+ export declare function checkRepoExists(owner: string, repo: string): Promise<boolean>;
19
+ /**
20
+ * Get the default branch for a repository
21
+ */
22
+ export declare function getDefaultBranch(owner: string, repo: string): Promise<string>;
23
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CA+CA;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,SAAS,GACd,OAAO,CAAC,WAAW,CAAC,CA+CtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASnF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAenF"}