playbooks 0.1.18 → 0.1.20

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/README.md CHANGED
@@ -268,8 +268,9 @@ Skills can be installed to any of these supported agents. Use `-g, --global` to
268
268
  | Codex | `codex` | `.agents/skills/` | `~/.agents/skills/` |
269
269
  | Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
270
270
  | Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
271
+ | Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
271
272
  | Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
272
- | Cursor | `cursor` | `.cursor/skills/` | `~/.cursor/skills/` |
273
+ | Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
273
274
  | Droid | `droid` | `.agents/skills/` | `~/.agents/skills/` |
274
275
  | Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.agents/skills/` |
275
276
  | GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.agents/skills/` |
@@ -297,6 +298,7 @@ Skills can be installed to any of these supported agents. Use `-g, --global` to
297
298
  | Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
298
299
  | Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
299
300
  | Zencoder | `zencoder` | `.zencoder/skills/` | `~/.zencoder/skills/` |
301
+ | Universal | `universal` | `.agents/skills/` | `~/.agents/skills/` |
300
302
  <!-- available-agents:end -->
301
303
 
302
304
  > [!NOTE]
@@ -360,8 +362,8 @@ The CLI searches for skills in these locations within a repository:
360
362
  - `.codebuddy/skills/`
361
363
  - `.commandcode/skills/`
362
364
  - `.continue/skills/`
365
+ - `.cortex/skills/`
363
366
  - `.crush/skills/`
364
- - `.cursor/skills/`
365
367
  - `.goose/skills/`
366
368
  - `.iflow/skills/`
367
369
  - `.junie/skills/`
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { program } from "commander";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "playbooks",
11
- version: "0.1.18",
11
+ version: "0.1.20",
12
12
  description: "Install agent skills, MCPs and docs into your coding agents from any git repository.",
13
13
  type: "module",
14
14
  bin: {
@@ -53,6 +53,7 @@ var package_default = {
53
53
  "codex",
54
54
  "command-code",
55
55
  "continue",
56
+ "cortex",
56
57
  "crush",
57
58
  "cursor",
58
59
  "droid",
@@ -81,7 +82,8 @@ var package_default = {
81
82
  "trae",
82
83
  "trae-cn",
83
84
  "windsurf",
84
- "zencoder"
85
+ "zencoder",
86
+ "universal"
85
87
  ],
86
88
  homepage: "https://playbooks.com",
87
89
  author: "",
@@ -208,6 +210,15 @@ var agents = {
208
210
  return existsSync(join(process.cwd(), ".continue")) || existsSync(join(home, ".continue"));
209
211
  }
210
212
  },
213
+ cortex: {
214
+ name: "cortex",
215
+ displayName: "Cortex Code",
216
+ skillsDir: ".cortex/skills",
217
+ globalSkillsDir: join(home, ".snowflake/cortex/skills"),
218
+ detectInstalled: async () => {
219
+ return existsSync(join(home, ".snowflake/cortex"));
220
+ }
221
+ },
211
222
  crush: {
212
223
  name: "crush",
213
224
  displayName: "Crush",
@@ -220,7 +231,7 @@ var agents = {
220
231
  cursor: {
221
232
  name: "cursor",
222
233
  displayName: "Cursor",
223
- skillsDir: ".cursor/skills",
234
+ skillsDir: ".agents/skills",
224
235
  globalSkillsDir: join(home, ".cursor/skills"),
225
236
  detectInstalled: async () => existsSync(join(home, ".cursor"))
226
237
  },
@@ -466,6 +477,14 @@ var agents = {
466
477
  detectInstalled: async () => {
467
478
  return existsSync(join(home, ".zencoder"));
468
479
  }
480
+ },
481
+ universal: {
482
+ name: "universal",
483
+ displayName: "Universal",
484
+ skillsDir: ".agents/skills",
485
+ globalSkillsDir: universalGlobalSkillsDir,
486
+ showInUniversalList: false,
487
+ detectInstalled: async () => false
469
488
  }
470
489
  };
471
490
  async function detectInstalledAgents() {
@@ -478,7 +497,9 @@ async function detectInstalledAgents() {
478
497
  return results.filter((r) => r.installed).map((r) => r.type);
479
498
  }
480
499
  function getUniversalAgents() {
481
- return Object.entries(agents).filter(([_, config]) => config.skillsDir === ".agents/skills").map(([type]) => type);
500
+ return Object.entries(agents).filter(
501
+ ([_, config]) => config.skillsDir === ".agents/skills" && config.showInUniversalList !== false
502
+ ).map(([type]) => type);
482
503
  }
483
504
  function getNonUniversalAgents() {
484
505
  return Object.entries(agents).filter(([_, config]) => config.skillsDir !== ".agents/skills").map(([type]) => type);
@@ -758,6 +779,9 @@ async function parseSkillMd(skillMdPath) {
758
779
  if (!data.name || !data.description) {
759
780
  return null;
760
781
  }
782
+ if (typeof data.name !== "string" || typeof data.description !== "string") {
783
+ return null;
784
+ }
761
785
  return {
762
786
  name: data.name,
763
787
  description: data.description,
@@ -863,6 +887,7 @@ async function discoverSkills(basePath, subpath) {
863
887
  join3(searchPath, ".codex/skills"),
864
888
  join3(searchPath, ".commandcode/skills"),
865
889
  join3(searchPath, ".continue/skills"),
890
+ join3(searchPath, ".cortex/skills"),
866
891
  join3(searchPath, ".crush/skills"),
867
892
  join3(searchPath, ".cursor/skills"),
868
893
  join3(searchPath, ".factory/skills"),
@@ -7009,10 +7034,23 @@ var formatStars = (value) => {
7009
7034
  }
7010
7035
  return `${value}`;
7011
7036
  };
7037
+ var formatInstalls = (value) => {
7038
+ if (!value || value <= 0) return "";
7039
+ if (value >= 1e6) {
7040
+ const rounded = (value / 1e6).toFixed(1).replace(/\.0$/, "");
7041
+ return `${rounded}M`;
7042
+ }
7043
+ if (value >= 1e3) {
7044
+ const rounded = (value / 1e3).toFixed(1).replace(/\.0$/, "");
7045
+ return `${rounded}k`;
7046
+ }
7047
+ return `${value}`;
7048
+ };
7012
7049
  var buildLabel = (result) => {
7013
7050
  const owner = result.repoOwner ?? "unknown";
7014
7051
  const repo = result.repoName ?? "repo";
7015
7052
  const stars = formatStars(result.stars ?? null);
7053
+ const installs = formatInstalls(result.installCount ?? null);
7016
7054
  const suffixParts = [];
7017
7055
  if (result.isOfficial) {
7018
7056
  suffixParts.push("official");
@@ -7020,6 +7058,9 @@ var buildLabel = (result) => {
7020
7058
  if (stars) {
7021
7059
  suffixParts.push(`stars:${stars}`);
7022
7060
  }
7061
+ if (installs) {
7062
+ suffixParts.push(`installs:${installs}`);
7063
+ }
7023
7064
  const suffix = suffixParts.length > 0 ? ` ${suffixParts.join(" | ")}` : "";
7024
7065
  return `${result.name} (${owner}/${repo})${suffix}`.trim();
7025
7066
  };
@@ -9622,13 +9663,27 @@ function formatFindSkillMarkdown(query, outcome) {
9622
9663
  continue;
9623
9664
  }
9624
9665
  const tag = result.isOfficial ? "[official]" : "[community]";
9625
- lines.push(`- ${tag} npx playbooks add skill ${repo} --skill ${skillName}`);
9666
+ const installs = formatInstallCount(result.installCount ?? null);
9667
+ const installsText = installs ? ` ${installs}` : "";
9668
+ lines.push(`- ${tag}${installsText} npx playbooks add skill ${repo} --skill ${skillName}`);
9626
9669
  if (description) {
9627
9670
  lines.push(` ${truncateLine(description, 140)}`);
9628
9671
  }
9629
9672
  }
9630
9673
  return lines.join("\n");
9631
9674
  }
9675
+ function formatInstallCount(value) {
9676
+ if (!value || value <= 0) return "";
9677
+ if (value >= 1e6) {
9678
+ const rounded = (value / 1e6).toFixed(1).replace(/\.0$/, "");
9679
+ return `(${rounded}M installs)`;
9680
+ }
9681
+ if (value >= 1e3) {
9682
+ const rounded = (value / 1e3).toFixed(1).replace(/\.0$/, "");
9683
+ return `(${rounded}k installs)`;
9684
+ }
9685
+ return `(${value} install${value === 1 ? "" : "s"})`;
9686
+ }
9632
9687
  function truncateLine(value, maxLength) {
9633
9688
  if (value.length <= maxLength) return value;
9634
9689
  const sliced = value.slice(0, Math.max(0, maxLength - 1)).trimEnd();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playbooks",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "Install agent skills, MCPs and docs into your coding agents from any git repository.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,6 +45,7 @@
45
45
  "codex",
46
46
  "command-code",
47
47
  "continue",
48
+ "cortex",
48
49
  "crush",
49
50
  "cursor",
50
51
  "droid",
@@ -73,7 +74,8 @@
73
74
  "trae",
74
75
  "trae-cn",
75
76
  "windsurf",
76
- "zencoder"
77
+ "zencoder",
78
+ "universal"
77
79
  ],
78
80
  "homepage": "https://playbooks.com",
79
81
  "author": "",