@agent-native/core 0.51.11 → 0.51.13
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/cli/connect.d.ts +3 -0
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +17 -7
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +134 -31
- package/dist/cli/skills.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/skills.d.ts
CHANGED
package/dist/cli/skills.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAKL,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AA6jBjE,eAAO,MAAM,sBAAsB,0tfAQlC,CAAC;AAmVF,eAAO,MAAM,mBAAmB,i1NAQ/B,CAAC;AAEF,eAAO,MAAM,6BAA6B,+2WASzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,+gIAOjC,CAAC;AAyBF,eAAO,MAAM,qBAAqB,ys4BAsdjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,q6iCA0iBjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoN/B,CAAC;AAIF,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/skills.js
CHANGED
|
@@ -45,16 +45,16 @@ Examples:
|
|
|
45
45
|
The add command installs the SKILL.md instructions, registers the app-backed
|
|
46
46
|
MCP connector, and then authenticates it in one step so you do not hit an OAuth
|
|
47
47
|
wall on the first tool call. By default, add targets every supported local
|
|
48
|
-
client this CLI can configure (Claude Code,
|
|
48
|
+
client this CLI can configure (Claude Code, Codex, and Cowork);
|
|
49
49
|
pass --client to narrow it. Authentication reuses "npx @agent-native/core@latest connect":
|
|
50
50
|
OAuth-capable clients (Claude Code) get a URL-only entry and a /mcp authenticate
|
|
51
51
|
prompt, while Codex / Cowork run the browser device-code flow. In a
|
|
52
52
|
non-interactive shell or CI the auth step is skipped and the exact
|
|
53
53
|
"npx @agent-native/core@latest connect <url> --client all" command is printed instead.
|
|
54
54
|
|
|
55
|
-
Running "npx @agent-native/skills@latest add ..."
|
|
56
|
-
|
|
57
|
-
register
|
|
55
|
+
Running "npx @agent-native/skills@latest add ..." uses this same shared install
|
|
56
|
+
flow with the broader BuilderIO skills catalog enabled. Pass --no-connect to
|
|
57
|
+
register MCP where possible without authenticating (leave auth to the host or run
|
|
58
58
|
"npx @agent-native/core@latest connect" later). Pass --mcp-url to register that connector against
|
|
59
59
|
a custom origin (an ngrok tunnel, a local dev server, or a self-hosted
|
|
60
60
|
deployment) instead of the built-in hosted default — a bare origin gets the
|
|
@@ -2246,6 +2246,14 @@ const CLIENT_HINTS = {
|
|
|
2246
2246
|
codex: "$CODEX_HOME/config.toml or ~/.codex/config.toml",
|
|
2247
2247
|
cowork: "~/.cowork/mcp.json",
|
|
2248
2248
|
};
|
|
2249
|
+
const SKILLS_CLIENTS = ["claude-code", "codex", "cowork"];
|
|
2250
|
+
const SKILL_INSTRUCTION_CLIENTS = ["claude-code", "codex"];
|
|
2251
|
+
const SKILL_INSTRUCTION_CLIENT_HINTS = {
|
|
2252
|
+
"claude-code": ".claude/skills or .claude/commands",
|
|
2253
|
+
"claude-code-cli": ".claude/skills or .claude/commands",
|
|
2254
|
+
codex: ".agents/skills or ~/.codex/skills",
|
|
2255
|
+
cowork: "MCP only",
|
|
2256
|
+
};
|
|
2249
2257
|
function normalizeKnownSkillTarget(value) {
|
|
2250
2258
|
const key = value?.trim().toLowerCase();
|
|
2251
2259
|
if (!key)
|
|
@@ -2632,11 +2640,36 @@ function normalizeClientIds(values) {
|
|
|
2632
2640
|
}
|
|
2633
2641
|
return out;
|
|
2634
2642
|
}
|
|
2635
|
-
function
|
|
2636
|
-
|
|
2643
|
+
function normalizeSkillsClientIds(values) {
|
|
2644
|
+
const seen = new Set();
|
|
2645
|
+
const out = [];
|
|
2646
|
+
for (const client of normalizeClientIds(values)) {
|
|
2647
|
+
const normalized = client === "claude-code-cli" ? "claude-code" : client;
|
|
2648
|
+
if (seen.has(normalized))
|
|
2649
|
+
continue;
|
|
2650
|
+
seen.add(normalized);
|
|
2651
|
+
out.push(normalized);
|
|
2652
|
+
}
|
|
2653
|
+
return out;
|
|
2654
|
+
}
|
|
2655
|
+
function resolveSkillsClientArg(client) {
|
|
2656
|
+
return normalizeSkillsClientIds(resolveClients(client));
|
|
2657
|
+
}
|
|
2658
|
+
function skillsClients(installsMcp) {
|
|
2659
|
+
return installsMcp ? SKILLS_CLIENTS : SKILL_INSTRUCTION_CLIENTS;
|
|
2660
|
+
}
|
|
2661
|
+
function filterSkillsClients(clients, installsMcp) {
|
|
2662
|
+
if (installsMcp)
|
|
2663
|
+
return clients;
|
|
2664
|
+
return clients.filter((client) => SKILL_INSTRUCTION_CLIENTS.includes(client));
|
|
2665
|
+
}
|
|
2666
|
+
function clientPromptOptions(installsMcp) {
|
|
2667
|
+
return skillsClients(installsMcp).map((client) => ({
|
|
2637
2668
|
value: client,
|
|
2638
2669
|
label: CLIENT_LABELS[client],
|
|
2639
|
-
hint:
|
|
2670
|
+
hint: installsMcp
|
|
2671
|
+
? CLIENT_HINTS[client]
|
|
2672
|
+
: SKILL_INSTRUCTION_CLIENT_HINTS[client],
|
|
2640
2673
|
}));
|
|
2641
2674
|
}
|
|
2642
2675
|
const DEFAULT_PUBLIC_SKILLS_SOURCE = "BuilderIO/skills";
|
|
@@ -2703,6 +2736,12 @@ function skillPromptOptions(options = {}) {
|
|
|
2703
2736
|
...publicSkillPromptOptions(options),
|
|
2704
2737
|
];
|
|
2705
2738
|
}
|
|
2739
|
+
function defaultSkillPromptTargets(options) {
|
|
2740
|
+
return [
|
|
2741
|
+
...DEFAULT_SKILL_PROMPT_TARGETS,
|
|
2742
|
+
...publicSkillEntries(options).map((entry) => entry.name),
|
|
2743
|
+
];
|
|
2744
|
+
}
|
|
2706
2745
|
function publicSkillSelectionTarget(skillNames) {
|
|
2707
2746
|
return `${PUBLIC_SKILL_TARGET_PREFIX}${skillNames.join(",")}`;
|
|
2708
2747
|
}
|
|
@@ -2756,9 +2795,13 @@ function shouldPrompt(parsed, options) {
|
|
|
2756
2795
|
}
|
|
2757
2796
|
async function promptForClients(context) {
|
|
2758
2797
|
const clack = await import("@clack/prompts");
|
|
2798
|
+
const message = context.installsMcp
|
|
2799
|
+
? "Install the MCP connector and skills for which local agents?\n" +
|
|
2800
|
+
" (space toggles, enter confirms; saved for next time)"
|
|
2801
|
+
: "Install skill instructions for which local agents?\n" +
|
|
2802
|
+
" (space toggles, enter confirms; saved for next time)";
|
|
2759
2803
|
const result = await clack.multiselect({
|
|
2760
|
-
message
|
|
2761
|
-
" (space toggles, enter confirms; saved for next time)",
|
|
2804
|
+
message,
|
|
2762
2805
|
options: context.options,
|
|
2763
2806
|
initialValues: context.initialClients,
|
|
2764
2807
|
required: true,
|
|
@@ -2801,7 +2844,7 @@ async function promptForPlanMode(context) {
|
|
|
2801
2844
|
{
|
|
2802
2845
|
value: "hosted",
|
|
2803
2846
|
label: "Hosted Plans, shareable links",
|
|
2804
|
-
hint: "Stores plans at plan.agent-native.com
|
|
2847
|
+
hint: "100% free and open source. Stores plans at plan.agent-native.com with sharing, comments, and browser editor. Requires one-time browser sign-in.",
|
|
2805
2848
|
},
|
|
2806
2849
|
{
|
|
2807
2850
|
value: "local-files",
|
|
@@ -2872,15 +2915,20 @@ async function promptForSkills(context) {
|
|
|
2872
2915
|
return [];
|
|
2873
2916
|
return result.filter((value) => typeof value === "string");
|
|
2874
2917
|
}
|
|
2875
|
-
async function resolveSkillsClients(parsed, options) {
|
|
2918
|
+
async function resolveSkillsClients(parsed, options, installsMcp) {
|
|
2876
2919
|
if (parsed.clientExplicit || !shouldPrompt(parsed, options)) {
|
|
2877
|
-
|
|
2920
|
+
const clients = filterSkillsClients(resolveSkillsClientArg(parsed.client), installsMcp);
|
|
2921
|
+
if (clients.length === 0) {
|
|
2922
|
+
throw new Error("Local-file skill instructions only support Codex or Claude Code clients.");
|
|
2923
|
+
}
|
|
2924
|
+
return clients;
|
|
2878
2925
|
}
|
|
2879
|
-
const initialClients =
|
|
2926
|
+
const initialClients = skillsClients(installsMcp);
|
|
2880
2927
|
const prompt = options.promptClients ?? promptForClients;
|
|
2881
|
-
const selected =
|
|
2928
|
+
const selected = normalizeSkillsClientIds(await prompt({
|
|
2882
2929
|
initialClients,
|
|
2883
|
-
options: clientPromptOptions(),
|
|
2930
|
+
options: clientPromptOptions(installsMcp),
|
|
2931
|
+
installsMcp,
|
|
2884
2932
|
}));
|
|
2885
2933
|
if (selected.length === 0)
|
|
2886
2934
|
return null;
|
|
@@ -2983,7 +3031,7 @@ async function resolveSkillTargets(parsed, options) {
|
|
|
2983
3031
|
available: promptOptions.map((option) => option.value).join(","),
|
|
2984
3032
|
});
|
|
2985
3033
|
const selected = await prompt({
|
|
2986
|
-
initialTargets:
|
|
3034
|
+
initialTargets: defaultSkillPromptTargets(options),
|
|
2987
3035
|
options: promptOptions,
|
|
2988
3036
|
});
|
|
2989
3037
|
if (!selected || selected.length === 0)
|
|
@@ -3221,7 +3269,7 @@ function preserveMcpUrlAppPathOverride(target, input) {
|
|
|
3221
3269
|
};
|
|
3222
3270
|
}
|
|
3223
3271
|
function dryRunInstallCommand(parsed, target) {
|
|
3224
|
-
const clients = parsed.clients ??
|
|
3272
|
+
const clients = parsed.clients ?? resolveSkillsClientArg(parsed.client);
|
|
3225
3273
|
const args = [
|
|
3226
3274
|
"@agent-native/core@latest",
|
|
3227
3275
|
"skills",
|
|
@@ -3353,17 +3401,20 @@ function isGithubSkillRepoTarget(target) {
|
|
|
3353
3401
|
function isPlainSkillRepoTarget(target) {
|
|
3354
3402
|
return isPlainSkillRepoPath(target) || isGithubSkillRepoTarget(target);
|
|
3355
3403
|
}
|
|
3356
|
-
function agentNativeSkillsInstallArgs(parsed, target, clients) {
|
|
3404
|
+
function agentNativeSkillsInstallArgs(parsed, target, clients, baseDir) {
|
|
3357
3405
|
const args = [
|
|
3358
3406
|
"--yes",
|
|
3359
3407
|
"@agent-native/skills@latest",
|
|
3360
3408
|
"add",
|
|
3409
|
+
"--copy",
|
|
3361
3410
|
target,
|
|
3362
3411
|
"--client",
|
|
3363
3412
|
clientArgForClients(clients),
|
|
3364
3413
|
"--scope",
|
|
3365
3414
|
parsed.scope,
|
|
3366
3415
|
];
|
|
3416
|
+
if (baseDir)
|
|
3417
|
+
args.push("--cwd", baseDir);
|
|
3367
3418
|
if (parsed.withGithubAction)
|
|
3368
3419
|
args.push("--with-github-action");
|
|
3369
3420
|
if (parsed.force)
|
|
@@ -3397,13 +3448,13 @@ async function addPlainSkillRepo(parsed, options) {
|
|
|
3397
3448
|
if (parsed.mcpUrl && !planSkillNamesSelected(parsed.plainSkillNames)) {
|
|
3398
3449
|
throw new Error("--mcp-url only applies to app-backed Agent Native skills.");
|
|
3399
3450
|
}
|
|
3400
|
-
const clients = parsed.clients ??
|
|
3451
|
+
const clients = parsed.clients ?? resolveSkillsClientArg(parsed.client);
|
|
3401
3452
|
const skillsAgents = skillsAgentsForClients(clients);
|
|
3402
3453
|
const selectedSkillNames = parsed.plainSkillNames ?? [];
|
|
3403
3454
|
if (skillsAgents.length === 0) {
|
|
3404
3455
|
throw new Error("Plain skill repositories can only install instructions for Codex or Claude Code clients.");
|
|
3405
3456
|
}
|
|
3406
|
-
const args = agentNativeSkillsInstallArgs(parsed, target, clients);
|
|
3457
|
+
const args = agentNativeSkillsInstallArgs(parsed, target, clients, options.baseDir);
|
|
3407
3458
|
if (!parsed.dryRun) {
|
|
3408
3459
|
const code = await (options.runCommand ?? runCommand)("npx", args, {
|
|
3409
3460
|
stdio: parsed.yes ? "silent" : "inherit",
|
|
@@ -3483,13 +3534,29 @@ async function connectAfterEnsure(installTarget, clients, parsed, options) {
|
|
|
3483
3534
|
options.log?.(`Authenticating ${installTarget.displayName}…`);
|
|
3484
3535
|
options.telemetry?.track("skills_cli connect started");
|
|
3485
3536
|
try {
|
|
3486
|
-
|
|
3537
|
+
const connectArgs = [
|
|
3487
3538
|
hostedUrl,
|
|
3488
3539
|
"--client",
|
|
3489
3540
|
clientArgForClients(clients),
|
|
3490
3541
|
"--scope",
|
|
3491
3542
|
parsed.scope,
|
|
3492
|
-
]
|
|
3543
|
+
];
|
|
3544
|
+
if (options.runConnect) {
|
|
3545
|
+
await options.runConnect(connectArgs);
|
|
3546
|
+
}
|
|
3547
|
+
else {
|
|
3548
|
+
await runConnect(connectArgs, {
|
|
3549
|
+
isInteractive: options.isInteractive,
|
|
3550
|
+
logOut: (message) => {
|
|
3551
|
+
if (message.trim())
|
|
3552
|
+
options.log?.(message);
|
|
3553
|
+
},
|
|
3554
|
+
logErr: (message) => {
|
|
3555
|
+
if (message.trim())
|
|
3556
|
+
options.log?.(message);
|
|
3557
|
+
},
|
|
3558
|
+
});
|
|
3559
|
+
}
|
|
3493
3560
|
options.telemetry?.track("skills_cli connect completed");
|
|
3494
3561
|
return { connected: true, connectCommand: "" };
|
|
3495
3562
|
}
|
|
@@ -3550,7 +3617,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3550
3617
|
if (!parsed.instructions && parsed.mcp) {
|
|
3551
3618
|
throw new Error("Context X-Ray does not need MCP config yet. Run without --mcp-only.");
|
|
3552
3619
|
}
|
|
3553
|
-
const clients = parsed.clients ??
|
|
3620
|
+
const clients = parsed.clients ?? resolveSkillsClientArg(parsed.client);
|
|
3554
3621
|
const skillsAgents = skillsAgentsForClients(clients);
|
|
3555
3622
|
if (parsed.dryRun) {
|
|
3556
3623
|
const githubActionPath = parsed.withGithubAction && knownTarget === "visual-plans"
|
|
@@ -3605,7 +3672,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3605
3672
|
if (parsed.mcpUrl) {
|
|
3606
3673
|
installTarget = withMcpUrlOverride(installTarget, parsed.mcpUrl);
|
|
3607
3674
|
}
|
|
3608
|
-
const clients = parsed.clients ??
|
|
3675
|
+
const clients = parsed.clients ?? resolveSkillsClientArg(parsed.client);
|
|
3609
3676
|
installTarget = preserveMcpUrlAppPathOverride(installTarget, parsed.mcpUrl);
|
|
3610
3677
|
const skillsAgents = skillsAgentsForClients(clients);
|
|
3611
3678
|
if (parsed.dryRun) {
|
|
@@ -3648,6 +3715,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3648
3715
|
let instructionsWritten;
|
|
3649
3716
|
let connected = false;
|
|
3650
3717
|
let connectCommand;
|
|
3718
|
+
let registeredMcpClients = shouldRegisterMcp ? clients : [];
|
|
3651
3719
|
try {
|
|
3652
3720
|
if (parsed.instructions) {
|
|
3653
3721
|
if (skillsAgents.length === 0) {
|
|
@@ -3710,7 +3778,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3710
3778
|
if (shouldRegisterMcp) {
|
|
3711
3779
|
commands.push(`npx @agent-native/core@latest app-skill ensure --manifest ${installTarget.loaded.file} --client ${parsed.client} --scope ${parsed.scope} --yes`);
|
|
3712
3780
|
if (!parsed.dryRun) {
|
|
3713
|
-
await ensureAppSkill(installTarget.loaded, {
|
|
3781
|
+
const ensureResult = await ensureAppSkill(installTarget.loaded, {
|
|
3714
3782
|
clients,
|
|
3715
3783
|
scope: parsed.scope,
|
|
3716
3784
|
baseDir: options.baseDir,
|
|
@@ -3718,6 +3786,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3718
3786
|
confirm: true,
|
|
3719
3787
|
log: options.log,
|
|
3720
3788
|
});
|
|
3789
|
+
registeredMcpClients = ensureResult.written.map((written) => written.client);
|
|
3721
3790
|
options.telemetry?.track("skills_cli mcp registered", {
|
|
3722
3791
|
skills: installTarget.skillNames.join(","),
|
|
3723
3792
|
});
|
|
@@ -3729,9 +3798,18 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3729
3798
|
const result = await connectAfterEnsure(installTarget, clients, parsed, options);
|
|
3730
3799
|
connected = result.connected;
|
|
3731
3800
|
connectCommand = result.connectCommand || undefined;
|
|
3801
|
+
if (connected)
|
|
3802
|
+
registeredMcpClients = clients;
|
|
3732
3803
|
if (connectCommand)
|
|
3733
3804
|
commands.push(connectCommand);
|
|
3734
3805
|
}
|
|
3806
|
+
else {
|
|
3807
|
+
const pendingClients = clients.filter((client) => !registeredMcpClients.includes(client));
|
|
3808
|
+
if (pendingClients.length > 0) {
|
|
3809
|
+
connectCommand = connectCommandFor(installTarget.loaded.manifest.hosted.url, pendingClients, parsed.scope);
|
|
3810
|
+
commands.push(connectCommand);
|
|
3811
|
+
}
|
|
3812
|
+
}
|
|
3735
3813
|
}
|
|
3736
3814
|
}
|
|
3737
3815
|
// `--with-github-action`: also drop the PR Visual Recap workflow into the
|
|
@@ -3791,7 +3869,7 @@ export async function addAgentNativeSkill(parsed, options = {}) {
|
|
|
3791
3869
|
mcpUrl: knownTarget === "visual-plans" && planMode === "local-files"
|
|
3792
3870
|
? ""
|
|
3793
3871
|
: installTarget.loaded.manifest.hosted.mcpUrl,
|
|
3794
|
-
mcpClients:
|
|
3872
|
+
mcpClients: registeredMcpClients,
|
|
3795
3873
|
dryRun: parsed.dryRun,
|
|
3796
3874
|
commands,
|
|
3797
3875
|
written: instructionsWritten,
|
|
@@ -3863,6 +3941,22 @@ function planModeSummary(mode) {
|
|
|
3863
3941
|
return "Self-hosted/custom Plan app";
|
|
3864
3942
|
return "Hosted Plans - shareable links and comments";
|
|
3865
3943
|
}
|
|
3944
|
+
function targetInstallsMcp(target, parsed) {
|
|
3945
|
+
if (!parsed.mcp)
|
|
3946
|
+
return false;
|
|
3947
|
+
if (publicSkillSelectionNames(target))
|
|
3948
|
+
return false;
|
|
3949
|
+
const knownTarget = normalizeKnownSkillTarget(target);
|
|
3950
|
+
if (knownTarget === "visual-plans")
|
|
3951
|
+
return parsed.planMode !== "local-files";
|
|
3952
|
+
if (knownTarget) {
|
|
3953
|
+
return !isLocalOnlyBuiltInSkill(BUILT_IN_APP_SKILLS[knownTarget]);
|
|
3954
|
+
}
|
|
3955
|
+
return true;
|
|
3956
|
+
}
|
|
3957
|
+
function targetsInstallMcp(targets, parsed) {
|
|
3958
|
+
return targets.some((target) => targetInstallsMcp(target, parsed));
|
|
3959
|
+
}
|
|
3866
3960
|
function instructionContentForSkill(skillName) {
|
|
3867
3961
|
if (skillName === "quick-recap") {
|
|
3868
3962
|
return "When writing final response status indicators, use the /quick-recap skill always.";
|
|
@@ -3955,9 +4049,16 @@ export async function runSkills(argv, options = {}) {
|
|
|
3955
4049
|
if (parsed.baseDir) {
|
|
3956
4050
|
options = { ...options, baseDir: path.resolve(parsed.baseDir) };
|
|
3957
4051
|
}
|
|
4052
|
+
const clackForLog = parsed.printJson
|
|
4053
|
+
? undefined
|
|
4054
|
+
: await import("@clack/prompts");
|
|
3958
4055
|
const log = parsed.printJson
|
|
3959
4056
|
? undefined
|
|
3960
|
-
: (message) =>
|
|
4057
|
+
: (message) => {
|
|
4058
|
+
if (!message.trim())
|
|
4059
|
+
return;
|
|
4060
|
+
clackForLog?.log.info(message);
|
|
4061
|
+
};
|
|
3961
4062
|
if (parsed.command === "help") {
|
|
3962
4063
|
process.stdout.write(`${HELP}\n`);
|
|
3963
4064
|
return;
|
|
@@ -4062,7 +4163,8 @@ export async function runSkills(argv, options = {}) {
|
|
|
4062
4163
|
mode: parsed.planMode,
|
|
4063
4164
|
});
|
|
4064
4165
|
}
|
|
4065
|
-
const
|
|
4166
|
+
const installsMcp = targetsInstallMcp(targets, parsed);
|
|
4167
|
+
const clients = await resolveSkillsClients(parsed, optionsWithTelemetry, installsMcp);
|
|
4066
4168
|
if (!clients) {
|
|
4067
4169
|
telemetry.track("skills_cli cancelled", { step: "clients" });
|
|
4068
4170
|
return;
|
|
@@ -4230,15 +4332,16 @@ export async function runSkills(argv, options = {}) {
|
|
|
4230
4332
|
clack.note(summary.join("\n"), `Installed ${installedNames} skill${results.length === 1 ? "" : "s"}`);
|
|
4231
4333
|
// GitHub Action follow-ups — kept as exact, copy-pasteable command lines.
|
|
4232
4334
|
for (const line of [githubActionLine, githubActionSuggestionLine].filter(Boolean)) {
|
|
4233
|
-
|
|
4335
|
+
clack.log.info(line);
|
|
4234
4336
|
}
|
|
4235
4337
|
const slashCommands = completedSkills.map((name) => `/${name}`).join(" ");
|
|
4236
|
-
const configuredEveryClient =
|
|
4338
|
+
const configuredEveryClient = SKILLS_CLIENTS.every((client) => clients.includes(client));
|
|
4237
4339
|
const clientHint = configuredEveryClient
|
|
4238
4340
|
? ""
|
|
4239
4341
|
: "\n Add another client later with --client <client> (e.g. --client claude-code).";
|
|
4342
|
+
const reloadTarget = mcpClients.length > 0 ? "skill + MCP server" : "skill";
|
|
4240
4343
|
clack.outro(`✅ All set! Start using ${slashCommands || "your new skills"} in your agent client.` +
|
|
4241
|
-
`\n You may need to reload the client for the
|
|
4344
|
+
`\n You may need to reload the client for the ${reloadTarget} to appear.` +
|
|
4242
4345
|
clientHint);
|
|
4243
4346
|
}
|
|
4244
4347
|
catch (error) {
|