@mmerterden/multi-agent-pipeline 20.8.1 → 20.8.3

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 (77) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/docs/facts.json +3 -3
  3. package/index.js +1 -0
  4. package/install/_codex-agents.mjs +1 -1
  5. package/install/_common.mjs +535 -53
  6. package/install/_dev-only-files.mjs +1 -0
  7. package/install/_mcp-register.mjs +173 -117
  8. package/install/catalog-history.json +1 -0
  9. package/install/claude.mjs +293 -226
  10. package/install/codex.mjs +7 -7
  11. package/install/copilot.mjs +13 -11
  12. package/install/index.mjs +92 -27
  13. package/install/templates/claude-hooks.json +9 -9
  14. package/manifest.json +77 -79
  15. package/package.json +6 -2
  16. package/pipeline/commands/multi-agent/update/SKILL.md +28 -17
  17. package/pipeline/lib/confusables.json +79 -33
  18. package/pipeline/lib/extract-conventions.sh +3 -3
  19. package/pipeline/lib/json-file-lock.mjs +27 -7
  20. package/pipeline/lib/normalize-text.mjs +86 -17
  21. package/pipeline/lib/outbound-gate.mjs +13 -4
  22. package/pipeline/lib/redact.mjs +87 -14
  23. package/pipeline/multi-agent-refs/analysis/evidence.md +1 -1
  24. package/pipeline/multi-agent-refs/analysis/synthesis.md +1 -1
  25. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  26. package/pipeline/multi-agent-refs/conventions-defaults.md +1 -1
  27. package/pipeline/multi-agent-refs/features/unattended-security.md +2 -2
  28. package/pipeline/scripts/agent-guard.py +150 -25
  29. package/pipeline/scripts/audit-log.sh +3 -4
  30. package/pipeline/scripts/autopilot-runner.mjs +14 -5
  31. package/pipeline/scripts/doctor.mjs +8 -2
  32. package/pipeline/scripts/log-metric.sh +9 -3
  33. package/pipeline/scripts/migrate-prefs.mjs +18 -4
  34. package/pipeline/scripts/pre-commit-check.sh +119 -31
  35. package/pipeline/scripts/scan-agent-config.sh +9 -9
  36. package/pipeline/scripts/unattended_policy.py +12 -3
  37. package/pipeline/scripts/uninstall.mjs +88 -1
  38. package/pipeline/scripts/usage-identity.mjs +1 -1
  39. package/pipeline/scripts/usage-register.mjs +1 -1
  40. package/pipeline/skills/.skill-manifest.json +11 -11
  41. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +6 -3
  42. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +43 -0
  43. package/pipeline/skills/shared/external/core-nfc/SKILL.md +31 -0
  44. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  45. package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +1 -1
  46. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +3 -3
  47. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +2 -1
  48. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +14 -13
  49. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
  50. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +7 -7
  51. package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +105 -4
  52. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +20 -5
  53. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +8 -7
  54. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +7 -8
  55. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +20 -7
  56. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +4 -3
  57. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +8 -7
  58. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +15 -8
  59. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +17 -9
  60. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +39 -17
  61. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +28 -7
  62. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +5 -4
  63. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +3 -2
  64. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -2
  65. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
  66. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +4 -4
  67. package/pipeline/skills/shared/external/permissionkit/SKILL.md +15 -6
  68. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +2 -1
  69. package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -4
  70. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +1 -1
  71. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +25 -6
  72. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
  73. package/pipeline/skills/shared/external/skill-creator/template.md +1 -1
  74. package/pipeline/skills/shared/external/vision-framework/SKILL.md +3 -1
  75. package/pipeline/scripts/gen-ref-toc.mjs +0 -279
  76. package/pipeline/scripts/make-manifest.mjs +0 -199
  77. package/pipeline/scripts/scorecard-snapshot.mjs +0 -178
@@ -1,22 +1,12 @@
1
1
  /**
2
2
  * Register the companion MCP server with a host CLI.
3
3
  *
4
- * WHY THIS IS SHARED
5
- *
6
- * Codex got MCP registration when its installer was written; Copilot never did, and
7
- * neither did Claude Code. The result was a host that carried the full pipeline skill
8
- * set and could not call a single one of the 83 toolkit tools those skills depend
9
- * on - `design-check`, every `ios_*` / `android_*` simulator call, the archive audits.
10
- * Nothing failed at install time, and the skills only fail when a run actually reaches
11
- * for a tool.
12
- *
13
- * Claude Code was the longest-lived instance of that bug and the easiest to miss,
14
- * because a maintainer who registered the server by hand once sees a working tree
15
- * forever while every fresh install ships without it.
4
+ * Every host's skills call the toolkit's tools (`design-check`, every `ios_*` /
5
+ * `android_*` simulator call, the archive audits), and a missing server shows up
6
+ * only when a run reaches for one of them, so each installer registers it.
16
7
  *
17
8
  * All three CLIs take the same shape (`<cli> mcp add [scope] <name> -- <command>
18
- * [args...]`), so the difference was purely which installers called it. One
19
- * implementation, three callers.
9
+ * [args...]`), so one implementation serves all three installers.
20
10
  *
21
11
  * @module install/_mcp-register
22
12
  */
@@ -32,18 +22,14 @@ export const MCP_SERVER_NAME = "multi-agent-toolkit";
32
22
  export const MCP_SERVER_PACKAGE = "@mmerterden/multi-agent-toolkit-mcp";
33
23
 
34
24
  /**
35
- * The spec the host is registered with. `@latest` is deliberate and it is the
36
- * difference between "the toolkit was published" and "the toolkit is running".
37
- *
38
- * Measured before this was added: the registration was the bare package name,
39
- * npx found ANY cached version and reused it, and a machine that had cached
40
- * 3.0.0 kept starting 3.0.0 after 3.1.0 was published and tagged `latest`. The
41
- * new tool existed on the registry and in the docs, and in no running server.
25
+ * The spec the host is registered with. `@latest` makes each server start
26
+ * resolve the newest published toolkit: with a bare package name, npx reuses
27
+ * any cached version, so a machine keeps starting whatever it cached first
28
+ * after newer releases are published.
42
29
  *
43
30
  * The cost is a registry round-trip when the MCP server starts, and an offline
44
- * start now depends on what npx can resolve from its cache rather than on a
45
- * cached version being present at all. That trade was made explicitly: a stale
46
- * server is a silent wrong answer, a failed start is a loud one.
31
+ * start depends on what npx can resolve from its cache. A stale server is a
32
+ * silent wrong answer, a failed start is a loud one.
47
33
  */
48
34
  export const MCP_SERVER_SPEC = `${MCP_SERVER_PACKAGE}@latest`;
49
35
 
@@ -87,7 +73,8 @@ export function scopeRegistryFlag(pkg = MCP_SERVER_PACKAGE, registry = MCP_REGIS
87
73
  export const LEGACY_MCP_SERVER_NAME = "dev-toolkit";
88
74
 
89
75
  /**
90
- * Per-host CLI invocation details.
76
+ * Per-host CLI invocation details, built at call time so a caller that changes
77
+ * HOME (a test, a sandboxed install) gets candidates under that HOME.
91
78
  *
92
79
  * `candidates`: where the CLI might live. A bare name is resolved through PATH by
93
80
  * execFileSync. The explicit paths matter for Copilot: `copilot` is frequently a
@@ -97,26 +84,32 @@ export const LEGACY_MCP_SERVER_NAME = "dev-toolkit";
97
84
  * ~/.local/share/gh/copilot/.
98
85
  *
99
86
  * `scopeArgs`: options inserted before the server name. Only Claude Code needs
100
- * them, and it needs them badly: `claude mcp add` defaults to `--scope local`,
101
- * which binds the server to whichever directory the installer happened to run
102
- * in. Every other project would then see no multi-agent-toolkit server at all. Codex
103
- * writes `~/.codex/config.toml` and Copilot writes `~/.copilot/mcp-config.json`,
104
- * both already user-global, so both take no scope flag - passing one errors.
87
+ * them: `claude mcp add` defaults to `--scope local`, which binds the server to
88
+ * whichever directory the installer happened to run in. Codex writes
89
+ * `~/.codex/config.toml` and Copilot writes `~/.copilot/mcp-config.json`, both
90
+ * already user-global, so both take no scope flag - passing one errors.
91
+ *
92
+ * `getArgs`: extra options for `mcp get` that make it print JSON.
93
+ *
94
+ * @param {"claude"|"codex"|"copilot"} host
105
95
  */
106
- const HOSTS = Object.freeze({
107
- claude: {
108
- candidates: ["claude", join(homedir(), ".local", "bin", "claude")],
109
- scopeArgs: ["--scope", "user"],
110
- },
111
- codex: {
112
- candidates: ["codex"],
113
- scopeArgs: [],
114
- },
115
- copilot: {
116
- candidates: ["copilot", join(homedir(), ".local", "share", "gh", "copilot", "copilot")],
117
- scopeArgs: [],
118
- },
119
- });
96
+ function hostConfig(host) {
97
+ const home = homedir();
98
+ const hosts = {
99
+ claude: {
100
+ candidates: ["claude", join(home, ".local", "bin", "claude")],
101
+ scopeArgs: ["--scope", "user"],
102
+ getArgs: [],
103
+ },
104
+ codex: { candidates: ["codex"], scopeArgs: [], getArgs: ["--json"] },
105
+ copilot: {
106
+ candidates: ["copilot", join(home, ".local", "share", "gh", "copilot", "copilot")],
107
+ scopeArgs: [],
108
+ getArgs: ["--json"],
109
+ },
110
+ };
111
+ return hosts[host] || { candidates: [host], scopeArgs: [], getArgs: [] };
112
+ }
120
113
 
121
114
  /**
122
115
  * First candidate that exists as a file, or the first bare name to let PATH resolution
@@ -127,7 +120,7 @@ const HOSTS = Object.freeze({
127
120
  * @returns {string}
128
121
  */
129
122
  function resolveCli(host) {
130
- const candidates = HOSTS[host]?.candidates || [host];
123
+ const { candidates } = hostConfig(host);
131
124
  for (const c of candidates) {
132
125
  if (c.includes("/") && existsSync(c)) return c;
133
126
  }
@@ -139,37 +132,76 @@ function saysAlreadyExists(text) {
139
132
  return /already exists/i.test(text);
140
133
  }
141
134
 
135
+ const outputOf = (e) =>
136
+ `${e?.stderr?.toString() ?? ""}\n${e?.stdout?.toString() ?? ""}\n${e?.message ?? ""}`;
137
+
138
+ /**
139
+ * The command line a registered server starts, as `[command, ...args]`, read
140
+ * from `<cli> mcp get`. Accepts the JSON form (Codex, Copilot: an object
141
+ * carrying `command` and `args`, possibly nested) and the text form (Claude
142
+ * Code: `Command:` and `Args:` lines; Copilot's text puts both on `Command:`).
143
+ *
144
+ * @param {string} text
145
+ * @returns {string[]|null}
146
+ */
147
+ export function parseRegisteredSpec(text) {
148
+ const raw = String(text || "").trim();
149
+ if (!raw) return null;
150
+ try {
151
+ const find = (node) => {
152
+ if (!node || typeof node !== "object") return null;
153
+ if (typeof node.command === "string") {
154
+ return [node.command, ...(Array.isArray(node.args) ? node.args.map(String) : [])];
155
+ }
156
+ for (const v of Object.values(node)) {
157
+ const hit = find(v);
158
+ if (hit) return hit;
159
+ }
160
+ return null;
161
+ };
162
+ const hit = find(JSON.parse(raw));
163
+ if (hit) return hit;
164
+ } catch {
165
+ /* not JSON: read the text form */
166
+ }
167
+ const command = /^\s*Command:\s*(.+)$/m.exec(raw)?.[1]?.trim();
168
+ if (!command) return null;
169
+ const args = /^\s*Args:\s*(.*)$/m.exec(raw)?.[1]?.trim();
170
+ const words = (s) => s.split(/\s+/).filter(Boolean);
171
+ return args === undefined ? words(command) : [...words(command), ...words(args)];
172
+ }
173
+
142
174
  /**
143
- * Register the MCP server. Idempotent from the caller's point of view, though the
144
- * three CLIs get there by three different routes:
175
+ * Register the MCP server, keeping whatever registration exists until a
176
+ * replacement is in place.
177
+ *
178
+ * The add runs first. The three CLIs answer a duplicate differently:
145
179
  *
146
180
  * - `codex mcp add` replaces an existing entry and exits 0.
147
181
  * - `copilot mcp add` refuses, printing `Server "<name>" already exists` and exiting 1.
148
182
  * - `claude mcp add` refuses, printing `MCP server <name> already exists in <scope>
149
183
  * config` and exiting **0**.
150
184
  *
151
- * So neither the exit code nor the stream tells you on its own. A non-zero exit is not
152
- * automatically a failure, and a zero exit is not automatically a fresh write - which
153
- * is why the "already exists" test runs on both paths. Reporting an existing server as
154
- * "skipped MCP registration (Command failed)" would send the user to fix something that
155
- * is already correct.
156
- *
157
- * An existing entry under the same name is removed and re-added so its spec follows
158
- * the installed version (the entry is installer-owned; the reason is at the remove
159
- * below). A user who points the toolkit at a local checkout registers it under a
160
- * different name or re-applies the change after an update.
185
+ * so "already exists" is looked for on both the success and the failure path.
186
+ * On a duplicate, the registered spec is read back with `mcp get` and compared
187
+ * with the one this release wants. The same spec is left alone. A different
188
+ * spec is replaced (remove, then add); if that add fails, the previous spec is
189
+ * added back so the host never ends up with no server. A spec that cannot be
190
+ * read back is not replaced, because it could not be restored.
161
191
  *
162
192
  * Never fatal: a missing CLI or a failed write must not fail the install, because the
163
193
  * rest of the tree is still correct and useful. It prints the manual command instead.
164
194
  *
165
195
  * @param {"claude"|"codex"|"copilot"} host
166
196
  * @param {string} label - host label for log lines
167
- * @returns {{registered: boolean, alreadyPresent?: boolean, reason?: string}}
197
+ * @param {{cli?: string}} [opts] - `cli` overrides the CLI lookup (tests)
198
+ * @returns {{registered: boolean, alreadyPresent?: boolean, staleSpec?: boolean, replaced?: boolean, reason?: string}}
168
199
  */
169
- export function registerMcpServer(host, label) {
170
- const cli = resolveCli(host);
171
- const scopeArgs = HOSTS[host]?.scopeArgs || [];
200
+ export function registerMcpServer(host, label, { cli: cliOverride } = {}) {
201
+ const cli = cliOverride || resolveCli(host);
202
+ const { scopeArgs, getArgs } = hostConfig(host);
172
203
  const npxArgs = ["-y", ...scopeRegistryFlag(), MCP_SERVER_SPEC];
204
+ const desired = ["npx", ...npxArgs];
173
205
  const manual = `${host} mcp add ${scopeArgs.join(" ")}${scopeArgs.length ? " " : ""}${MCP_SERVER_NAME} -- npx ${npxArgs.join(" ")}`;
174
206
 
175
207
  if (isDryRun()) {
@@ -186,75 +218,99 @@ export function registerMcpServer(host, label) {
186
218
  return { registered: false, reason: "opted out" };
187
219
  }
188
220
 
189
- // Drop the pre-rename entry before adding the new one. Best-effort by design:
190
- // "not registered" is the common case (a fresh install) and is not an error,
191
- // and a host that cannot remove it is not a reason to skip the add.
221
+ // Bounded: an installer must never hang on a child process. These are local
222
+ // config reads and writes and return in milliseconds.
223
+ const run = (args) => execFileSync(cli, args, { stdio: "pipe", timeout: 20_000 });
224
+ const add = (spec) => {
225
+ try {
226
+ const stdout = run(["mcp", "add", ...scopeArgs, MCP_SERVER_NAME, "--", ...spec]);
227
+ // Claude Code refuses a duplicate on the success path (exit 0).
228
+ return saysAlreadyExists(stdout?.toString() ?? "") ? "exists" : "added";
229
+ } catch (e) {
230
+ const out = outputOf(e);
231
+ if (saysAlreadyExists(out)) return "exists";
232
+ const why =
233
+ e?.code === "ENOENT"
234
+ ? `${host} not on PATH`
235
+ : (out.split("\n").find((l) => l.trim()) || "unknown error").trim();
236
+ return { failed: why };
237
+ }
238
+ };
239
+
240
+ // The pre-rename entry (LEGACY_MCP_SERVER_NAME) would advertise the same tools
241
+ // under a second name. Best-effort: "not registered" is the common case.
192
242
  try {
193
- execFileSync(cli, ["mcp", "remove", ...scopeArgs, LEGACY_MCP_SERVER_NAME], {
194
- stdio: "pipe",
195
- timeout: 20_000,
196
- });
243
+ run(["mcp", "remove", ...scopeArgs, LEGACY_MCP_SERVER_NAME]);
197
244
  console.log(` -> ${label}: removed the legacy ${LEGACY_MCP_SERVER_NAME} registration`);
198
245
  } catch {
199
246
  /* not present, or the host declines - either way the add below is what matters */
200
247
  }
201
248
 
202
- // Drop the CURRENT entry too, so the add below rewrites its spec. Without this
203
- // the host answers "already exists", the installer reported success, and the
204
- // stored args stayed whatever an older version wrote - which is how a machine
205
- // kept starting the toolkit from a bare package name (and therefore from
206
- // whatever npx had cached) long after the spec gained `@latest`. The entry is
207
- // installer-owned, so replacing it is not clobbering a user's work; a host
208
- // that refuses the remove is reported below rather than counted as current.
209
- let replacedExisting = false;
249
+ const first = add(desired);
250
+ if (first === "added") {
251
+ console.log(
252
+ ` -> ${label}: registered the ${MCP_SERVER_NAME} MCP server (${MCP_SERVER_SPEC})`,
253
+ );
254
+ return { registered: true };
255
+ }
256
+ if (first !== "exists") {
257
+ console.log(` -> ${label}: skipped MCP registration (${first.failed})`);
258
+ console.log(` run manually: ${manual}`);
259
+ return { registered: false, reason: first.failed };
260
+ }
261
+
262
+ let previous;
210
263
  try {
211
- execFileSync(cli, ["mcp", "remove", ...scopeArgs, MCP_SERVER_NAME], {
212
- stdio: "pipe",
213
- timeout: 20_000,
214
- });
215
- replacedExisting = true;
264
+ previous = parseRegisteredSpec(run(["mcp", "get", MCP_SERVER_NAME, ...getArgs])?.toString());
216
265
  } catch {
217
- /* not registered yet - the common case on a fresh install */
266
+ previous = null;
267
+ }
268
+ if (previous && previous.join("\u0000") === desired.join("\u0000")) {
269
+ console.log(
270
+ ` -> ${label}: ${MCP_SERVER_NAME} MCP server already registered (${MCP_SERVER_SPEC})`,
271
+ );
272
+ return { registered: true, alreadyPresent: true };
273
+ }
274
+ if (!previous) {
275
+ console.log(
276
+ ` -> ${label}: ${MCP_SERVER_NAME} already registered; its spec could not be read, so it was ` +
277
+ `left as-is. To make sure it runs ${MCP_SERVER_SPEC}, re-register with: ${manual}`,
278
+ );
279
+ return { registered: true, alreadyPresent: true, staleSpec: true };
218
280
  }
219
281
 
220
282
  try {
221
- // Bounded: an installer must never hang on a child process. This is a local config
222
- // write and returns in milliseconds.
223
- const stdout = execFileSync(
224
- cli,
225
- ["mcp", "add", ...scopeArgs, MCP_SERVER_NAME, "--", "npx", ...npxArgs],
226
- { stdio: "pipe", timeout: 20_000 },
283
+ run(["mcp", "remove", ...scopeArgs, MCP_SERVER_NAME]);
284
+ } catch (e) {
285
+ console.log(
286
+ ` -> ${label}: ${MCP_SERVER_NAME} is registered with an older spec and the host declined ` +
287
+ `to remove it (${(
288
+ outputOf(e)
289
+ .split("\n")
290
+ .find((l) => l.trim()) || "unknown error"
291
+ ).trim()}). ` +
292
+ `Re-register manually with: ${manual}`,
227
293
  );
228
- // Claude Code refuses a duplicate on the SUCCESS path (exit 0), so the check
229
- // cannot live in the catch alone.
230
- if (saysAlreadyExists(stdout?.toString() ?? "")) {
231
- // Reached only when the remove above did not take. The entry survives, but
232
- // its spec is whatever was there before, so this is not a current
233
- // registration - say that instead of reporting a clean pass.
234
- console.log(
235
- ` -> ${label}: ${MCP_SERVER_NAME} already registered and the host declined to replace it; ` +
236
- `its spec may predate ${MCP_SERVER_SPEC}. Re-register manually with: ${manual}`,
237
- );
238
- return { registered: true, alreadyPresent: true, staleSpec: true };
239
- }
294
+ return { registered: true, alreadyPresent: true, staleSpec: true };
295
+ }
296
+ const replaced = add(desired);
297
+ if (replaced === "added" || replaced === "exists") {
240
298
  console.log(
241
- ` -> ${label}: ${replacedExisting ? "re-registered" : "registered"} the ${MCP_SERVER_NAME} MCP server (${MCP_SERVER_SPEC})`,
299
+ ` -> ${label}: re-registered the ${MCP_SERVER_NAME} MCP server (${MCP_SERVER_SPEC})`,
242
300
  );
243
- return { registered: true };
244
- } catch (e) {
245
- // The CLI writes its diagnosis to stderr, which execFileSync parks on the error
246
- // rather than in `message`. Read both, or "already exists" is invisible.
247
- const out = `${e?.stderr?.toString() ?? ""}\n${e?.stdout?.toString() ?? ""}\n${e?.message ?? ""}`;
248
- if (saysAlreadyExists(out)) {
249
- console.log(` -> ${label}: ${MCP_SERVER_NAME} MCP server already registered, left as-is`);
250
- return { registered: true, alreadyPresent: true };
251
- }
252
- const why =
253
- e?.code === "ENOENT"
254
- ? `${host} not on PATH`
255
- : (out.split("\n").find((l) => l.trim()) || "unknown error").trim();
256
- console.log(` -> ${label}: skipped MCP registration (${why})`);
257
- console.log(` run manually: ${manual}`);
258
- return { registered: false, reason: why };
301
+ return { registered: true, replaced: true };
302
+ }
303
+ const restored = add(previous);
304
+ if (restored === "added" || restored === "exists") {
305
+ console.log(
306
+ ` -> ${label}: could not update ${MCP_SERVER_NAME} (${replaced.failed}); the previous ` +
307
+ `registration was restored. Re-register manually with: ${manual}`,
308
+ );
309
+ return { registered: true, alreadyPresent: true, staleSpec: true, reason: replaced.failed };
259
310
  }
311
+ console.log(
312
+ ` -> ${label}: could not update ${MCP_SERVER_NAME} (${replaced.failed}) or restore the previous ` +
313
+ `registration (${restored.failed}). Register it manually with: ${manual}`,
314
+ );
315
+ return { registered: false, reason: replaced.failed };
260
316
  }
@@ -0,0 +1 @@
1
+ {"version":1,"prefix":16,"skills":{"accessibility-compliance-accessibility-audit":{"SKILL.md":["32e0d706f70a97da","942f1b56aa62c7be","c1a179a1ef509445","ccdf5ccea77bcc67","e33281303004b7c1"]},"agent-introspection-debugging":{"SKILL.md":["1df7d1b16ec3c72d","9e01fae7f1b115b0","9eb3e213f3af32a2","dea92cb76c90c5f5","f5ce39e9383a348a"]},"agentflow":{"SKILL.md":["0d0a8035f3d4f7b7","6e95c6d8f784b19e","e291ad706b3a825a","e70f05f3463903ac"]},"alarmkit":{"SKILL.md":["26555e9a587d7bc2","61780175798aed7d","7dcd211b193b40b1","a8a5b74647fdcbf9","db377d0483606198"],"evals/evals.json":["524589355d767fd3","ab5b5ad3032cb12e","f66977399dc5d567"],"references/alarmkit-patterns.md":["1bbf687a56d7f58a","66c0681c738889cc","b9fa685d45a64938"]},"android-architecture":{"SKILL.md":["135629ae258804fd","288c16da517161e2","8910a20a3c9ccb39","cd48136310186623","ff7965c5807bab3f"],"references/patterns.md":["098ccbc08f4b2a50"]},"android-build-quality-gates":{"SKILL.md":["23b3bf9279f531c8","4a1ce989aabcfadc","bf0cc4f365a28cd8"],"references/patterns.md":["56c0a99c2092555f","7820cf2feede4a8e"]},"android-datastore":{"SKILL.md":["2ddb95b92c026776","98de84d36c87ea6c"],"references/patterns.md":["2ca8a2cb3037ebdf"]},"android-design-tokens-codegen":{"SKILL.md":["544009394c4efa0f","8a2e09c669e42d29"],"references/patterns.md":["33d867a5058b928a"]},"android-jetpack-compose-expert":{"SKILL.md":["372dac11c9adb7e0","55817790d1eea4cb","7e9b94b3a140eafb","9b286cf5b5c5b2aa","f51303084bb1de9b"],"references/patterns.md":["f83cb7fa77a1d314"]},"android-mvi-viewmodel":{"SKILL.md":["295dd3c0340e1288","44adc6177d49e5d4","c93544173108c986","f44280b9a4c6947c"],"references/patterns.md":["d1f755ea40f92496"]},"android-performance":{"SKILL.md":["16f0b27b2048cfd0","34da231a7c6b285c","94225cc8b6b0c246","a0a901ada347d71e","fca8ae5ba2301f1b"],"references/patterns.md":["1598070ce917afe3","4f926a2c43e8754f","9a84d79e412e8d07"]},"android-security":{"SKILL.md":["01e1c41ed83942a0","9c8b3b2a13d897c9","b7c2921cf1ba2207","b94f1a1855e83f7c"],"references/patterns.md":["036d3e75681357be","82f8dc082fd766e0"]},"android-ui-verification":{"SKILL.md":["66acbbf09f5caf2f","8800946164534181"]},"android_ui_verification":{"SKILL.md":["73af0b93016f29b5","98511618c7accd83"]},"api-patterns":{"SKILL.md":["2f593c2fcdf9ce61","6c6a5227e8ae59b1","75fc5d27b6bd9c5a","a2623a6a6c5f8235","f43343c30fe0282b"],"references/contract-details.md":["2a0f9331caa000f1"]},"api-security-best-practices":{"SKILL.md":["17cebb555c3726d0","65e01ef029feb218","c2b2addc4750f44f","c57c433022d0bab1","f19ff6fea558d1a9"],"references/abuse-controls.md":["7e568b9dc74fac3e"],"references/auth.md":["e94db830ce662797"],"references/identity-and-access.md":["c487e49572f5aaea"],"references/input-validation.md":["fb8ecf918af4f129"],"references/operations.md":["24f1dedb2f4c976c"],"references/rate-limiting.md":["76ced848a677e72f"],"references/request-handling.md":["790539ac90d474a1"]},"app-clips":{"SKILL.md":["7f32e95c0c1d7637","9d325973f4804d02","cbcb6a9d001ce856","deaef00c2b024206","f526f006207792d8"],"evals/evals.json":["18579bae69cbffbb","26e0b581889727ef"],"references/data-handoff-notifications-location.md":["72e1a39343dcceb2","ba607dccc66fc517"],"references/routing-and-experiences.md":["307753daea2bbb09","5c9d417b64552614"],"references/size-capabilities-and-promotion.md":["20557a162d1ce013","9c2238babb2bbb9f"]},"app-intents":{"SKILL.md":["03016eaff64de999","044e7b67bf61d5cf","35856699d0c4c090","87fb435121ead4c0","c362f75db36b345d"],"evals/evals.json":["3c42d73416772990","5de88998af0f7b0d"],"references/appintents-advanced.md":["1eedba8d2688619f","993d078e95f8ded3","be1607869a0c75e5","d2c99c0de6766371","d84c98b9117f73c9"]},"app-store-changelog":{"SKILL.md":["0dbd4205f3d2856a","513bd5de6eb963c3","a8f783ca46809642"],"references/release-notes-guidelines.md":["c0beecb1ec36fa97"],"scripts/collect_release_changes.sh":["f7e4659a351f224d"]},"app-store-optimization":{"SKILL.md":["27cdcd50685f8fa7","5afe9b965b68bd2f","72a649313d0ffa74","7a102fc9cb21203e","86cc78fa34a1a306","f41f3214596ed6ba"],"evals/evals.json":["a0275e15507bce7a","b059e585d37184fc"],"references/keyword-research-methodology.md":["4a96463f01f35da5","83a6ebdb3cece6b6","c7ddc3cd4834ea31"],"references/product-page-variants.md":["2810d4eb04776622","668ada4cf416b2ed","ca44ae2459757bba"]},"app-store-review":{"SKILL.md":["4478fca651dd6b0b","62758307d39ae24a","b45eae30af92e48c","bcb658d0cc965578","d49de9a605bd9b32","f155e8b26ac3dd43"],"evals/evals.json":["32f048bd476860f4","b8223ab948a63b90"],"references/code-signing.md":["08d9cf8781c4811f","db4d593dddbd01f6"],"references/privacy-manifest.md":["05f172e32daebb14","bfa54015da06f374","dd2bd0c523318fa3"],"references/rejection-patterns.md":["16651a986875004f","76fca63cca06065e"],"references/review-checklists.md":["4c116a8804abce01","ec70c6c68f79ac62","f28ebb6f851ab865"]},"apple-on-device-ai":{"SKILL.md":["07a2219619916a51","3772c52eee5c4d2a","656faaa265b93d7b","a5158cfb1717954f","f35cc482c6fad8b8"],"evals/evals.json":["651cc7e36011ba9e","e0f49cf13e1a9187"],"references/coreml-conversion.md":["70827aa681a473b0","ea2761e461a726ff","ed19f597b7d42846"],"references/coreml-optimization.md":["2dcc576e532ee30a","d049fa90f13bd2f6","f7d457e6f52ad0cc"],"references/foundation-models.md":["8b2015b4d4be0ddd","b4824d40cc47f018","f08f94e773e52de3"],"references/mlx-swift.md":["6bf90025da7204fa","798a764f787d2b60","bde80718fe768661"]},"architecture":{"SKILL.md":["031c247d0cd314d0","31a0327a9ea438ab","3e0e7801c6913f78","8fd241f7ee282964"],"references/adr-and-review.md":["62ca6275fb8bd865"]},"authentication":{"SKILL.md":["0107386d5a651aa4","10da7610c921fef8","483ff2c3d32c7e7d","cf635b8dd0e66286","d6f951dc3234f6a6"],"evals/evals.json":["393dcb1f5b7d2943","84912c8d74a016e6"],"references/keychain-biometric.md":["2df057352be6f331","63fca62bfed05ff7","b28eba36b8b97cb9","d21a482f8c8745ec"],"references/passkeys.md":["952d7080c790897e","d61a4cb5ed69b5a9"]},"avkit":{"SKILL.md":["027783075e942078","bcd65242f3cfdfe5","f8877e4afcad50fd"],"evals/evals.json":["4ff764b8f19d61d2","adfbdff445b492c7"],"references/avkit-patterns.md":["23fa4efb083b09cb","bcb1ff6bef259dd6"]},"background-processing":{"SKILL.md":["0b06859fb09dd582","2dd63d1b4d639d52","3a61178c9711dceb","53748934fbb36c17","62b93a2ff73acee0","925057b6fda25151"],"evals/evals.json":["588f381cb072b613","c21922ca151b1a9e"],"references/background-task-patterns.md":["40ca350cfd2e4f4a","a45df5a1e8a0c4a4","bdfb4a45df0b35f8","c3989ffbaebd35ac","ee646ed3b6e89300"]},"backlog":{"BACKLOG.md":["38cc1837268d0113","af8b77957c3a3a57","d492b69f71d839cc"],"SKILL.md":["10c416396082d4e6","4751dda846296583","5c61982308169701","721ff2fda2dc3002","b5de3c49671ca1cc","e09fdb81caba4a06","e5296011423e5612"]},"callkit-voip":{"SKILL.md":["19d421ba3990e647","1e803d2954a55adb","2559172fe7299a35","5bd0be5a1e081597","d0d3baf0a31ccce3"],"evals/evals.json":["0d764542cfb20bc6","2b1460e54014d579","2bd7d5e94737e5f4"],"references/callkit-patterns.md":["5e91a38874979fec","796a989c82e95332","9d95a35c96eb9cff"]},"ci-cd-pipelines":{"SKILL.md":["15a8baa497c78497","64b2b9402ad65e0f","7d124b39024ee42c","807b0714f3eb29ba","a11f65b73f52a430","efc34676a5738233"]},"clean-code":{"SKILL.md":["5976723b1b10aca9","ab827b364fbebdd4","b26bb5f0e390d42f","ddea1c8f7fe1dc26","e556610923eec0cd"]},"closed-loop-delivery":{"SKILL.md":["7847e9c898046ec2","e437620fed0c9a98"]},"cloudkit-sync":{"SKILL.md":["622db8ae64841268","73a86a6083a7fdc2","865486f4bec811dc","a5eb6e6fe703f413","af59ac0bd82349df"],"evals/evals.json":["33a96943b7cabb3c","7c056dcc43fceeee","f5ded29ab40d5f72"],"references/cloudkit-patterns.md":["18595b764bb96ef6","2f3a56c098706028","b6dc9246011a1ea9"]},"compose-components":{"SKILL.md":["1518275e3e954ccb","7fdb05f4fca292fd","d2bdb2a19200c4ce","d3ca84ccce45fb17","da2b67cfdc3ee7a7"],"references/patterns.md":["30f0cee58cae0bf9"]},"compose-navigation":{"SKILL.md":["01d929db483c0151","3afda0796373475d","4558d5f099ed4c6b","9e1867ac33ab46fc","a8dacf3c898b9009","f073cc5d4894487b","fea1c7ea18e9538e"],"references/patterns.md":["94e550dd646dd4c6","bddfa289baf33f89"]},"compose-testing":{"SKILL.md":["2629be3cfda11f39","624ea9355a50d83e","681ce75304045af1","add33bed31fd3ee8","bb7b68ea8c492e1a","ca33d3bb49893a1c","e0d867e2da4f94a5"],"references/patterns.md":["018753f1aaaa7dc4","515e356475534515","7839d3c73eb95794","eea0aa108e13bc98"]},"contacts-framework":{"SKILL.md":["247643d2f0951283","329e95b6101326c3","74661306bf4336eb","fa5d6c1930487a9d"],"evals/evals.json":["d71148dd587f53ec","f9faaf2d85fc2118"],"references/contacts-patterns.md":["1dbb51bc9cd6b198","53e12b91c8667fc1","597cc47382b31487"]},"context-compression":{"SKILL.md":["23d8a0230051b5ed","99dec76fd47cb8b7","9bdbfcc7d77bba31","ef8f6193c8e0916f"]},"core":{"apple-archive-compliance/SKILL.md":["2076b4e8a1d4fbe5","264f369299910811","2eec9a3063520ca9","3aad495762c28733","5fe5dc1dfc8fd519","61b3845f9815d600","6645226b0d1643cc","6d6111c234479d73","7dfce6f8a64c7afa","9425c0160af3fc42","9d44663292f929ce","c93ae68f4523c918","da5462b2744baaea","dd35017231b2d12e","eb90a47043da70fd","f118e7d914aa956b","f78da6666b102602","fb1682ef58af3217"],"apple-archive-compliance/references/rules.yml":["e3e020f0d8221cc1"],"google-play-compliance/SKILL.md":["10ab82c007bb131c","40d35312d62b008c","586fc0658190744a","5eaf0888a27f2e3d","69c60ea6f4a8a33f","6a9cd80ea300cdd2","71953b218facec14","a2ed78be1af1bbdc","ace517f6cb9e6902","cb740051889e2a8e","cc2b509089ac3052","dcc4b20f5afc8c17"],"google-play-compliance/references/rules.yml":["95db9bf7bde0c84c"],"multi-agent-analysis-jira/SKILL.md":["47cddad7c8d9d705","7432db1a829f042b","7bd50c991ea0fba3"],"multi-agent-analysis-resolve/SKILL.md":["058fa7554ee64ba9","71b150a796d1b86f","c2260ab0cc1be800","d8dc207dd5c0997f","e4ed7066cc9be20c","ebf649ad8a7d7e91","fe8b5e8ce6305fda"],"multi-agent-analysis/SKILL.md":["0c8ca90e965b5147","2308b15bf29803b4","44fa8316b61b5f02","621981554f1ec168","935d339881de281a","99d33fba3dbcaa4c","9dbabae3410a0cb9","a3003565a38ca474","bd0a642dbaa1b1e1","bd24742caa36224d","c2efcd29d268f602","fb764635909d8359"],"multi-agent-autopilot-off/SKILL.md":["4dd33a6cee953f10","666043be62c22d0f","6adc0fd60364c5a6","e7363dcb8ae5d570","f2ffcda242c4da61"],"multi-agent-autopilot-on/SKILL.md":["078c8298f3c66426","1d9475ac2bc749eb","35caabe2794e219f","47f69287927c9876","71cf3b6274fb7c0c","7d30625718251a01","86b90dcda0066fc8","b325074bedf439fc"],"multi-agent-autopilot-status/SKILL.md":["1db6a8faae847ad6","3d96399f4044c1f8","4dbac1109a6c9999","63e2bdcc92157692","7b256932fe3e72a5","c42480ca2b6dcb36","cb8b3706cc3b4730"],"multi-agent-autopilot/SKILL.md":["2f96f853bb2b2e2b","35b9a14140cea0e8","5cdae8a5101a193e","64556bd865c5e863","84d15d3de44e521b","8767eae5aa0eb701","89bd3b2d0b02d559","ba0a20b2b941452e","c11153f824d1f02e","f6aaebdd0185b07a","fc7e77cb6e59fd3e"],"multi-agent-build-optimize/SKILL.md":["3622a56355127fdd","45743801e537b077","51de7a347ea2182f","591d8ed8ec0ae21f","9567b9990174ce3f","ce4232bb7aca4c7d"],"multi-agent-channels/SKILL.md":["075f26af8f5cc1b7","089247e700ea61fa","0d51be7e3d04bba1","1a000d668cf1f994","2338d705998896f8","25391ac7f3d5fabd","46211b900464c85a","51f31dfad8492545","5c1b28f6d16cbedf","6159287acae03dd4","656e187078f70de9","6e7de1347c253296","6e8bcf62ea6fa34d","7b1f030080cfcbaf","862276be34d377b6","8a1b5c9b3ede9739","9fc03cab9a4777ab","9fdbeca87d6f0b68","a4c877998beb251e","a95ffd702819630f","cf384aee606f95c8","d3e7616962dd90e6"],"multi-agent-complaint-analysis/SKILL.md":["09c09ff1e3f6470e","15e4ae106f99c133","1cd0dc229e2330eb","ddc56ba318c6b09c"],"multi-agent-create-jira/SKILL.md":["1f36baa3258cb43f","317fdbf57f0fe892","48cca976fbeb43c2","682d255828871f83","86e5a3bc4c75fdd1","b7f845ace8dcccc0"],"multi-agent-delete/SKILL.md":["7a995792b4be9f2b","9066ae13e329d3bc","94c2ea063b99332f","b0b2d57f68507827","c9b98a2204dab607","d541a838966b9b96","e2755a16c907674e"],"multi-agent-design-check/SKILL.md":["0e2e8400aaf00851","1629ded4e00eda24","42bd8456879538f7","4313447b0eca2a68","5686b9b3094896a7","5719babdfcc5755a","75259190e1e0dcbf","aa3e8bd70dd03ddd","c5e161c5ee9aab3d","cc99c1af367df2ac","cd475ac0ec5e1ba1","f9ba07d3e0f7dbc9"],"multi-agent-dev-autopilot/SKILL.md":["13ef3b776508ecfd","211ad3da60613812","24eb0f98c2c699cc","29f89a8cc3cc6d01","38e293cdddba94e9","44792245e40be2cc","4ed70f49e2dd3ae7","697ce248a1c6fe63","89e5611529d13956","97431471bcb0e571","a77f7ea1ec8807a7","c965f47458c8ea88","d5a21d92f6c1cb24","e4611e05106511e5"],"multi-agent-dev-local-autopilot/SKILL.md":["372e2ec22279f091","3d498d33c3a55f34","446fe9fd8510f1cb","466f965ed778cf4d","4d286763aaeb2c46","730487ef93db5742","82b897fd5f0f0aab","98ea72fa3d30ae2d","9c8af37642b389cf","bfed69f41d978a04","d8544143c9a0ffa0"],"multi-agent-dev-local/SKILL.md":["0c5ec22a3806b2de","107aa1bead47442a","19558b11b8c2f57d","203fd3ca1647d5c5","241d19fc3108a63d","36f51cb2863bd19f","60af8d9cd14309d6","71876ca513d8cd27","80e4af89fce1287e","85e7bac9699493d6","8a2544ddfa3c0d98","fed208adfe6dc3dd"],"multi-agent-dev/SKILL.md":["01ee0c8fb42c4a11","07f64e13c524581c","1e2a0456056f3e55","4edf35d36a88c6b1","56883cb2ff72ba53","61d33b3dd2045142","83946f78bdaf0ab0","8eaeb9b315a7652c","97238fc368b547f6","a556477d11bd90b4","bdb56dc093669ecd","c3ee38de5451529c","d57051e6b8adb011","f13d01ead2e0a9c1","fe79571ed64c79cc"],"multi-agent-diff-explain/SKILL.md":["050b10f3c25db4bc","2c981ac11fd32de0","56229381e7235538","57891b86c63d0505","8f6fc0ad6e2b54a6","916652761ad96958","96d5881e2b57ae18","b72b0805f85634f6"],"multi-agent-doctor/SKILL.md":["30642cf21198a0c2","5e56773b8a804b5b"],"multi-agent-enrich/SKILL.md":["db3bc8aa83216c64"],"multi-agent-feedback/SKILL.md":["535e625d2cb4c5cb","fa58816116348f12"],"multi-agent-finish/SKILL.md":["1c73a4abe6ba0020","430c70d080b87f3a","8149042718e5bb9e","94b52a7a69496cbf","9af3957b40728109"],"multi-agent-forget/SKILL.md":["06708ee2a8274f88","2917e82ff1b1be41","b81549fbf346b6d3"],"multi-agent-garbage-collect/SKILL.md":["323b77d840f0bc2a","5e676039d1c7fdb2","a1cdf34761de7422"],"multi-agent-generate-bug/SKILL.md":["791e44e2aba0de55"],"multi-agent-generate-task/SKILL.md":["4707f43a56fc3d68"],"multi-agent-generate/SKILL.md":["ca18bddb38730541"],"multi-agent-graph/SKILL.md":["5347f3380831432e","6bc751e8ed937818","7386961a30558810"],"multi-agent-help/SKILL.md":["044515081d4707c5","0cb3e19b1cef945e","1059d78d29a8cee7","1e65ea8dbccc4cdc","1fba052f83efd7e8","27e027922c15b502","2e120cb4e643f5e7","3217c826c1666018","33424e904c15c21c","38b9b4c62472a27e","41af491c7e0d64b3","43cabf49a4d4918d","46c66449550677e8","51f217a0e863d4c4","539e5c1b0836d2fa","59aa2f5af3668ce3","640add415d2de89c","67a5c26a7d148a1c","8d23aaccd49b2232","8e78aaa595f71b15","95df2ed417a1a172","9dcecee9c029b6ab","9e9c91cf4af18646","aca8b3c80079ac71","b3752780320c4c15","b4e5a97da66bb6b1","b865d631ff741a89","bfa823b2aac42a7b","c2c247ba6725439f","c689d435d2f292aa","cbeb3ded6c571463","d68890931bc7ab55","d778a184e791c4ac","e61e2899670ec104","fc59f0ff566e5ed6","fcc5bb2f1068c192"],"multi-agent-ios-coding-standard/SKILL.md":["1777281398a3589d","5b4faa0a8acec37b","83adae739a9e173f","a579f0794d2d03e0","ac2a2b76f5873b4b","b5b3a819628cbd40","dd373f1b2dd34bbd","dfa867dd33950269"],"multi-agent-issue/SKILL.md":["03ef3fe7457b0e50","1d2e9ca65b6d1e57","41598e52fa6dac03","8165551bface95fc","89f214caa5ce43ee","9d3d1cbfc9e508ba","cb4f7967954cf5ef","f20e056bcb38c5a3","f4b36c0e1374f8f5","f9a518fe6ac56059"],"multi-agent-jira/SKILL.md":["1f78b37d55357c4c","2f4043f524660bb8","37a9ee45628d7300","38d7047da85e516b","70691ca05687c9d2","7314060d391d452e","85878feb8e3d8f19","8e4dc07dbfa73554","cb32b006c08377f5","ec65df0473d51fe9"],"multi-agent-kill/SKILL.md":["0994677e56a71619","3317aa24aad8da73","996e7eb56e6a1c69","9ebe1f9f656debf3","9f32cf3ea3e9fd5b","a26dda7dc548f1f4","dd5b553485346954","e14155fe52a9388d"],"multi-agent-language/SKILL.md":["0dcfe977ecec5f38","1b96fb2b6d1667ad","2dce0d8c9d8a0185","517a7eefb0f7179e","7797ad6324b10236","7dc0034c1926bb25","99e3620390d0aabe","9a59138c32d08137","b36cc8b14c3c19d9","b9a43a9d00bb1ce2"],"multi-agent-local-autopilot/SKILL.md":["21f01e29605de707","2f5ef23db60cdf66","5930b0c20becce82","67d6590f02749b5d","7e627a9e8e100cc7","8ac630128eb2c8c2","98db961e2c771ac5","b768b431ba89b602","c183c3a0be7749f0","d7876488630492bb","f0ff71f1a03cb712","f3bd52b9a7808c62"],"multi-agent-local/SKILL.md":["0433443cb1148f36","469993ba03746b16","8a91eadf06ec8adc","8c1d3f3bae901e06","b453ddc03b46bc34","c4b4b40162e24e33","dbb3806cb48c2415","ee08efa99bfc0cce","f04031a17b92287c"],"multi-agent-log/SKILL.md":["3227822c52de85c2","5a88dafc0d10be7a","6a963822a96146df","8365e15e0e351d1c","85960e56d2da0ad3","dd07c73666d1bac4","e8ed88cc5527c62d"],"multi-agent-manual-test/SKILL.md":["028b3ff3574ad099","20a2098a52a6ca91","30e4785a81ce6003","381215902f668908","697ff6897cdc2156","731ee0926e6e347e","a6fe153b6f59bae8","c0d4f51e0b3e8f8a","c48eca34b6b262b6","d56cea7c1140b96a","f6db50bfaee5440e","fb5f6f52092c1f48"],"multi-agent-model/SKILL.md":["38bdda205647d4ce","52a111482e5e1336"],"multi-agent-prune-logs/SKILL.md":["11b9f69521c5a1e9","202bdc91978df189","bf63f45cd149d913"],"multi-agent-prune-prompts/SKILL.md":["b03d02f407eb9182","e7b2412e1b35525a"],"multi-agent-purge/SKILL.md":["192ef2140617e677","36c6c0c5ad9ed2ae","481ce7da5e54a28b","51b33bf1e1d02a56","7659818320e03624","8c439b3f6a8db592","8f5ad5238dd9ef2b","a7f617e3ef772ce2","e228835627b247e6","e615f9bed1941641"],"multi-agent-refactor/SKILL.md":["0433743e16da7124","07e372f06db74c7e","1ac4a7f82bb2ec04","35176592b0652af0","4deaca8d04c20200","5e751b40815235f6","67f2aac91a4ffba0","7449194ef51b9166","7843c1859f65af7c","7e79602a4c4c9586","858e71ae75718c35","8a00bf74011b7d69","919a9f61e2347b74","a0beb61375f94a40","a610888aa9e7aa8a","c2da073afb68ce5d","d240884322a59ccd","e77b4894cc2609de","f3e747cfcf64ec3b","ffe3b73ffc537758"],"multi-agent-research/SKILL.md":["08cb2fc367a15f72","67366bce76310a42"],"multi-agent-resume-local/SKILL.md":["160a31e3039502dd","283d42f791699112","3a432dd53851eb81","bf2bece615939dbf","ce9243c753954a51"],"multi-agent-resume/SKILL.md":["11810829ed7eb650","11930a831a5606a3","1ed0fab0b334e42a","6858dd6d48f15264","708d3ecf404792bb","b77e20927b8aef87","b81d4624bb8fc500","c5b4161fb2a60142","ecb7ed72d116e001","ef6fac5dac6139b1","fd6b4f56cae9bbf9"],"multi-agent-review-analysis/SKILL.md":["568d0c6b7930c8d5","b5dde07b288581e9"],"multi-agent-review-issue/SKILL.md":["54392721ae5d1aa7","6c6dd284646d20a5","7021273260ddcd81","ff133383cac92512"],"multi-agent-review-jira/SKILL.md":["6368b3fe9fddbc8b","9e7b1d9b22095dc9","fc2cb3f27c917c53"],"multi-agent-review/SKILL.md":["08dee7120ad34c86","1355105137cdeb2d","192e786261f8eebe","2c400152b6ec5a5f","3af239b493d96f0c","57116211a1a6a996","5a6fb87fbde93585","6821d66945a05aa3","7740d7696ae99f37","79e4f9d9ca639c12","9984d8bbfe34a7ac","b57c64c1eb71702c","bc23e7dc39c5d62e","beced644415239e7","c0a258b02ca3e45b","cde9d156898dc2c4","d4401c342826272f","d4db039f98c488a3","e94f1899fb599f00","f7119983a62b6d90"],"multi-agent-route-off/SKILL.md":["2079af7e70a10383","ef46989435d0eb2b"],"multi-agent-route-on/SKILL.md":["3093b2d962652d46","3bace68f3ac9a880"],"multi-agent-route-status/SKILL.md":["066886efef0634a6","c6225747aab4bedd"],"multi-agent-routines/SKILL.md":["2b5a6f58136f17c9","93622057bc9b235b","e5191077237255f7"],"multi-agent-save/SKILL.md":["17499851f45be3b7","326a3bfef7037e16","4d14b067d30564d7","e0cdf936597d5ec6"],"multi-agent-scaffold/SKILL.md":["04080d19c9bfae62","95145a55ee02a840"],"multi-agent-scan/SKILL.md":["4c9e1641667fe2d1","5f05ed81267d2b09","67c461c3bddd7c2f","836664a2f7c3b1c2","8498106a177b8abc","8868d4a2736d14c5","ace82da545ff8c6e","c2afcfb2751c16d8","cc6294f1fa615424","cf5bab9abae18cb8"],"multi-agent-search/SKILL.md":["088e12ca1d74b84d","2693e5ae07a805f9","38afd84d205d9eb6","4014d77589569fc9","83ac835ae0abc04b","9feb0ee22b7fcea7","a07bc06011a4510c","b23727b26ab7f599","bb6b466f23e3d998","c554d54ecfb182fb","fd234d14b28fac78"],"multi-agent-security-review/SKILL.md":["4e168391294b26ae","950d18507cf36be0"],"multi-agent-serve/SKILL.md":["202a420194168c66","37f94171495657b3"],"multi-agent-setup/SKILL.md":["0577ca03b189f506","1253879a39540055","25dfc0efd2501465","3236175c6a93b52f","3a7c0b9df6a91930","42345af927261775","487e977187c40d87","4a3fca42e5db659e","4a5fd2ddc91c3607","6156217950c2531c","61d0b22357daaa24","684e8e858481e185","880e63d1a843dd81","8c00d53c23674564","8cce97779d40b708","945e847009e958f4","b7a6cd3474da36af","c3b1b030fa5ffe91","d13d6441cf82fefc","df8c0b541f06dbbd","e3791d7d0286eb40","e71f2ba601a9c500","f9e855dc4ef7311d"],"multi-agent-ship/SKILL.md":["697ab9a63135cb1f","aae4097349fc4f93"],"multi-agent-stack/SKILL.md":["05c13d9796091913","09784cfd98bd91b0","0fbd4b010fa402ae","16ab28e8b758dfd4","314f2c738c7f78b0","4788cdb777bd24d4","70aa440eeebb689a","8350d84adfac0626","aa4366df2afe034f","ae4c48a2d6449ca9","b31a99f046d526c0","d7ab3d9d1941a5e9","dae8a3696888017a","e400429121838cae","ed8472385fc55994","fa8989ca83a19df2"],"multi-agent-status/SKILL.md":["1d5d22bffa886cfb","2f7647dae4719eef","370f90f5c3bc1b86","59a2ad0e1b16a180","629474f3907862e1","66ff2041e7206aac","6e8685dd37ba0d95","976e98c751067b36","cdbf377f4b349dde","df146523bbd09a05","e1033d5b5a5a2762"],"multi-agent-steer/SKILL.md":["4462e229d9a82a68","4b34476519c3e068","99c4d5d34699b201"],"multi-agent-store-ready/SKILL.md":["59b48c8d2f2369ba","90d969ae2beb89cc","b51e87cd7a1f1c28","bc27c4fb1c80ae81"],"multi-agent-sync/SKILL.md":["064cd39df847019e","078f9508e345a1ad","0aa3873bb2145aad","0c0e2bde0e7a1d7d","0c6883a9f602539e","0cf4696a3500639c","13ec42b9838449f3","1dd14da2715d35be","1e89e7a10d0733ab","210939bef61e58fb","25e40d4baef7344b","26024e8ad9fc3551","2ca583600d457f41","2eb9aea873ec3629","32188d9c8f3ba2ba","35fcf64d836759ed","3a3d31527b0b7b0a","49bb9adbe38012ae","49f1565e2a0a0115","5523dfe40a787e02","58de653129a100a4","6132b18767373789","698bf76539944f07","6c2c2f0b4e9eb8e3","7365a5b7e67d4091","78c9488363ebe115","7c6741b1d7c9fcda","852a584cf7eda252","87523c0741b8bf82","8771fe5bb5ee7995","8a908b08df6df946","8d867cd6239e69f3","8fcf972ea367c7b2","95a51655ac4fd621","985ca20244733fee","9b85c7714ffe01a9","9cffc98ba88147b8","9da02ecc7f910215","9f03e482606d7336","a7b87c5fa34716b0","aa7ce2bb12059c1e","ab589335579110a7","af1156866eb4bf87","b57106747e7960cd","bded710d7c134958","be6e62651c6fc058","c40fb20f9f048679","cdc2b56cb918cb28","cf991be0aa5ebd31","d2416ec606f7b555","e15cd25f196d7eaa","e78d5a4bf90073c8","e7a52d09a735b49b","ef386cd8987e3949","f29482725a768e2b","fb62e1ab6d6454ab","fed566b40cc76721"],"multi-agent-test-accessibility/SKILL.md":["667f3aeed3bb6ebf","d7199412820d5804","fd4283fd06ce82a1"],"multi-agent-test-dark-mode/SKILL.md":["a3b73330861e52b1","d4decfa2cef02f1c","d4e31b7a3bc79c85"],"multi-agent-test-dynamic-type/SKILL.md":["7aad6feee318c2da","921ae85d0a22fea8","a11d1523763c44f8"],"multi-agent-test-screenshots/SKILL.md":["0f3b47efa9e4e92f","74386bf36ecd4929","d9f8940734320fc8"],"multi-agent-test/SKILL.md":["110d3ae358211c3d","3b6261e3c5745799","42e48a273f63b567","6f227609e13426d1","851fb89f2651c36a","8637b961d644de1e","a3bf45a4141cb148","a88550aef3e7b1b0","ab1ce1675c652937","b9f661926502ff9b","cf7b5babe76d07c6","e6b06f7b1432389d"],"multi-agent-testflight-validation/SKILL.md":["09272851496dfd60","3f720f3fb2485173","a66e086fc464dfb5","ae20fee2362865f7"],"multi-agent-uninstall/SKILL.md":["319f1308e7387cc1","441e7052dd73f9be","56416d1321d4c761","79e72c6f0bdd2a0e","ed93a698b46cbce4"],"multi-agent-update/SKILL.md":["0fb99b08d20f8600","143cf4afb234478d","1d23b2a7385a115e","53e0f7510bee231e","61cffb7f13221621","94cff83f55c130f1","9864444a4785257d","cd7245157795cf50","cf7f8cef33d2ba08","cf9ed964e43d1bd7","d1e50444d33bc864","feb7ef0fa2dc01c6"],"multi-agent/SKILL.md":["1404849c6688eee5","22a35dd1b3a78a38","275b2e123d414261","2f240a1e9afca72b","3354a00c3c0207a0","37ad59ecb8577a97","3f50998db79b1639","3f7ecfcfac63f9c7","43d86f5eba1cf90d","4c015af802672b12","4f059d10b6db74ab","53026919eb918a81","5528e1799a055360","577be80b6f36bb13","5f42434e93604ae1","5f87c92ba452b47f","63ced4fd123ebf23","6929313f07daf863","6db755fef0f62607","728ae04ed42a90ee","7ed23065b6681c73","7f520924385a723b","85b3bd28aa435e53","89c7a9d799c8ff13","8a0fa68d72f62719","8f2183d2f5e75ecb","90865ffff8ff2674","90ff40f40a35c4ac","963ec6f11cfc6b8f","967131914860ef4c","99073d380c968203","9ae4e1078c20ec10","9ddcb4976080409d","a7a0a3d8daeb0313","a93453b7a5457c7d","ac8af02fdbed74f9","b0f705deec3a4e00","b1cc1e6bc6f76c39","b1edde323ddfa551","b382e579cfab4cec","b4de5c2f9a01f9c2","b68e8d103c0e5f57","ca721a5e97b66b90","cd5cfc25bcdef577","cfac9b789a7fe3ae","dcb683591fcc6eee","e3d2d06b1ecdcbca","e72f0cbe263f0c21","ef6309e1406f1455","f20d3c1e2714e0bb","f25e202d460cea4b","f7220f085511b63c","ffe8dfdf0ea34beb"]},"core-bluetooth":{"SKILL.md":["0d33b4bfae0e4526","3f07f9d2d821a3cb","544a286865ec0f05","ed686b611a0b5b31","fd9e3ead863cee67"],"evals/evals.json":["45d367cb611c2b57","bf1b420d434415da"],"references/ble-patterns.md":["6c66d37119f404d7","752ed1442dbb09aa","d04428a028ae772a"]},"core-data":{"SKILL.md":["54d5d2de2c34387b","721dfc55dbda295d","86a8558b13bed046","ef964a883504597d"],"evals/evals.json":["2393a1f8ae120012","edbe253ec5bb3dda"]},"core-motion":{"SKILL.md":["0f1a3909c683c2ff","74292779dc827a9d","83c2428f8b6f11f9","e7859b2c4475263c"],"evals/evals.json":["49dd7cd0ad6722c7","b88f25dbb4b466d3"],"references/motion-patterns.md":["9608cf6e667d3a62","e33d878bb315a092","e52eeeb5af46a970"]},"core-nfc":{"SKILL.md":["06936ce8f0665711","34b24c10cb403161","60cb77257ba9acf5","6e0cd3dfc7269f37","fc5d70fba32cb183"],"evals/evals.json":["73809c927bf4b00f","84667f12cd0eb8ce"],"references/nfc-patterns.md":["7bafcd50dbac31c8","dd176c5318a26a98","e676dd486693144c"]},"coreml":{"SKILL.md":["19245b2802ab2eb2","515fcac19ac8990a","8fc9445eb932ee78","9b0a5dd0ff0a0800","e827f3e50b61e4a1"],"evals/evals.json":["89c5447eb8c2dcd3","9a35fbb5c83ad620"],"references/coreml-swift-integration.md":["8c9104ec88e88457","904ed16c2a716528","db03b9e55ece1c4c"]},"council":{"SKILL.md":["834a292c32748435","bd4064c4e88f285b","edccd9c2cf7d90af","fdc7d4e9b94f99e8"]},"cryptokit":{"SKILL.md":["48bc1225a6a40c3c","8fa136ccc7db1f81","ece1eef89e84ae28","ef12fe24722b1a50"],"evals/evals.json":["878406699220dc36","967c4e26f924625d"],"references/cryptokit-patterns.md":["901591202e666a82","dffe1c47568661e4"]},"css-modern":{"SKILL.md":["2a462ab11c0d55ff","89de328ef705c26e","93f6afb494eec4a1","e3d133fa7ca181c1","ed324072e05b80e2","ffe2bb13e899701f"]},"database-patterns":{"SKILL.md":["19505fe3476784ba","2986791ae92bfb06","2f473cbe1ef4ad74","44b5a4e10b191415","91fb8ee35561df2c","ba20bebf445c6c53"]},"debugging-instruments":{"SKILL.md":["08507091c104debf","207dfb181c696ca0","7e0540ea0b82527c","b43a4accf37cb699","ddd9a9b8c7b9a45f"],"evals/evals.json":["4da1f499d666f156","5b455ddeac22d970"],"references/instruments-guide.md":["50f564d2ca19ec5a","559558761e6a0d77","ca887dfbcf8ba229","fef4b7e84c71b323"],"references/lldb-patterns.md":["381c65c4cb452279","48769889e17e4675","e7157e3f180d12a9"]},"debugging-strategies":{"SKILL.md":["1efaba58656478f1","4aed6663af095336","657a187d41e3d0f5","6d6e9af528c9a1f3","801f18c6fce269c6"],"references/hard-cases.md":["ca18d6f13818aa22"]},"device-integrity":{"SKILL.md":["079b0d54adc7104b","1eabe04aba3122b6","40e46f01892e23aa","6b7067d4059ffddf","8c59917638c73db5"],"evals/evals.json":["1148513dd95f2e46","ad6587165cfadcab"],"references/device-integrity-patterns.md":["4de13b25a7c6a5c9","d37a78c2b3f4ece6"]},"docker-expert":{"SKILL.md":["156ef53e23d95b8c","3319d3c85ceabbd0","68cb567bfb4d123c","ca23c3669d66a9bd"],"references/patterns.md":["00f1cff704097883"]},"energykit":{"SKILL.md":["36e7f04ef1ab7488","4ec488cdffe2c84d","bd532145c155a90b","d969b78f8f966481"],"evals/evals.json":["1f3e73aaf7323da8","a2341574af20d874"],"references/energykit-patterns.md":["2e5a9b423cfb24bc","78a70a0e073faa6a","8c2292193cf140cd"]},"eventkit-calendar":{"SKILL.md":["3d48933952dc919d","677215c3fe3b90e7","75fe0cc7cd30fb54","824e746f421723e0","accca4fef6921c9a","e9f6b6427c91e45a"],"evals/evals.json":["1b56d7ceae7e0aa2","5d5040c699a1e1cf","829a40729b4b6540","c1de619f15637f6e"],"references/eventkit-patterns.md":["08a61b8324478560","6580dce711c43b64","7edfb9e0828e3a53"]},"evidence-github":{"SKILL.md":["235d41587d8ef979","2d24f68e2247c914"]},"evidence-registry":{"SKILL.md":["9f739d1e83c40664","bd6200ae3523c292"]},"fastapi-pro":{"SKILL.md":["172e58208d737780","b5b643d264fb0d11","d0d2fc5fce57f50c","d20e3825c81d8672","da9969766126f877"],"references/app-structure.md":["def775d9465a6cf4"],"references/testing-and-deployment.md":["951be08f95a1e42d"]},"firebase":{"SKILL.md":["0adf58c95c029efc","4fede1c4fb5bf6ab","6e43b2a5556f4f92","811518b96a8900b4","8ad436609d5b22a3"]},"github-actions-templates":{"SKILL.md":["1d4ab1162181a401","1e7f32612d41c084","8a630f9851520c10","d85c8bb4b86f16fc","e62bb19ef39ee7eb"],"references/patterns.md":["12c17250fca37871"]},"gradle-kotlin-dsl":{"SKILL.md":["2aba1420004c8312","4595355c626e574e","86b6b3669bc56f41","d5ede438388f58ac"],"references/patterns.md":["5ef241e39894ec07","ba87fd617db2b2a4"]},"healthkit":{"SKILL.md":["2f5d90034b57cc55","873ae11df501f744","c803cc323d4f7fde","df6c325ed6aefbb1"],"evals/evals.json":["00f88e07b8573797","8659444582940680"],"references/healthkit-patterns.md":["2ec3926e011f27f1","c4c77bbd2b6dcc6b","e71dc9d5334988fe"]},"help-skills":{"SKILL.md":["b7f7e83ae40b174e","cb45d81fba1d660e"]},"hig-components-content":{"SKILL.md":["1a0dca3e6c7070fc","3be2dc41ae024a50","4f2aa6b62c723765","7ef239a8cf346be9","bf9e553ad618a551"],"references/content-views.md":["570b044a51cbc3ed"]},"hig-components-layout":{"SKILL.md":["47a5d55bfd19156c","6b0a9317f4050091","a1f32ca7907b5c0c","ace12e49fe3ed33c","ecc585770d33d490"],"references/containers.md":["c68c89156c845ae0"]},"hig-components-status":{"SKILL.md":["2ad17aaccf15b611","60c0951c1ca6067a","66bf5ea253280ee9","724cc55ccce744f8","d0727315f8fb0669"]},"hig-components-system":{"SKILL.md":["07427769b0098df4","1fbb59918c3cc101","30ba379f4701c644","b3778230859f5649","e504853d6f9b421c"],"references/surfaces.md":["f8fcf8242f74b6dc"]},"hig-foundations":{"SKILL.md":["2839448348e9793e","3d1913d5ca83e3af","4c6ed762afc736da","92b27a3f1a49dd02","a80538411af055af"],"references/foundations-detail.md":["acbad265fa711ab9"]},"hig-inputs":{"SKILL.md":["4827ed99795eae59","a27c9f5ddb8c14cf","a627bce4e3c0b795","bd6ebbb846d13da4","f57186a1a6876635"]},"hig-patterns":{"SKILL.md":["1f00eb63ba9313f0","57d7077789a4f596","9dcf809b1e34d354","e4286188faee0170","fc1ed9ed0762fc4a"],"references/patterns.md":["caf2ef18bd21e0a2"]},"hig-platforms":{"SKILL.md":["866c9fe86297eb49","da435958cca677af","e17bbd49b568b6b1","ee41802894b14b5a","f2b72218ffc981a3"]},"hig-technologies":{"SKILL.md":["042260fc2dd40517","78e7ae572a20f00e","84888e011491d646","f1c58991de41265c","fd373e2c1853fa07"],"references/technologies.md":["564d658e81917a99"]},"homekit-matter":{"SKILL.md":["152f49d99ddc865f","42aa350f8b3228ae","574aece4d58c88f1","c8cc6f638b309e28"],"evals/evals.json":["39dc053c13022e28","659714823ea95732","9960addb93133aa5"],"references/matter-commissioning.md":["4331f07835618e9e","613ea49b51d46231","cab0da8d93443175"]},"html-semantic":{"SKILL.md":["8152d95c659ce128","9875670f5bdba860","a6c5f9480b1f5aa8","cc3dbb22eb345570","d1843836d4702e5b","f30c0772d4acfa08"]},"humanizer":{"SKILL.md":["01968736c215f039","1cf50fa053dfd4d6","46639f02c5f24c5c","86dfc78284edede4","8c34edb7d3bbea3a","b04a39a67cb76845","bbc55dd81e7ca632","c999d5e41c3ee7fe","da993d88d5126635"]},"ios-accessibility":{"SKILL.md":["0a93d64c3c43f6cb","6c60e98fb38c34b7","6e2b9f8ef9d98493","94fd8a0a7110d6b9","f86be786edb96bac"],"evals/evals.json":["780b5dc62cdee6c0","b59cca71f0db8f31"],"references/a11y-patterns.md":["15bafeca23f56c20","82c194d08fa91c5a","9acd791bf63a1cd0"],"references/media-accessibility.md":["33c2464ed825cac4","b796732360c1d568"],"references/nutrition-labels.md":["0212023196e18f11","485aeab5971abb3e"]},"ios-coding-standard":{"SKILL.md":["25293b357b6f5099","4f54c1b6bee6dfe9","a40a8c34a4ad0831","ea3dc744539bf26b"],"modules/_TEMPLATE.yml":["27b3eb1107754034","b59a2a6a81032857"],"references/STANDARD.md":["09a6adb2a6a426bb","5a5c41de129d329e","653bb0466648945b","889ac09f8d2d7202","8b3f1c00ec4b0953","ceb33f5b6d591869"],"references/lint-local.sh":["27ef1acc3efade22","54c93f3ac2ab5891","bd645bb569f30fb5","d3968a511097a9db"],"references/rules.yml":["02903330519e6544","15110d2c7df01642","26a2f4dd7d0c4459","3d4618f76c18abc7","726162c87375b59b","aa6d090e684bd584","ab9316af637f8dab","c0e01214c2e3d5d8","edd10ffaf529f437","fadfbca3bc1f851c"],"references/swiftlint.draft.yml":["03ac6c19b6c1fb19","669d0b78ad3b9d2f","6a243b073afcbe72"],"scripts/check_structure.py":["dcb257ec1ef558e8"]},"ios-debugger-agent":{"SKILL.md":["58f6340de97c4616","88b75ff448b714dc","b0b05f1bedae2c09"]},"ios-developer":{"SKILL.md":["272e712e0d0b050a","54d4b2d0680de821","8a0905421f4dd9b5","bc645ab816a4d9af"]},"ios-localization":{"SKILL.md":["11caaaa0b6ec27d9","2e1f4a7aecf17d4f","599fc26c03d5d3fb","7ff4dc059bc3ccce","a50b1fe2638f2358","be5194e57e9308c9","c405f97b7ce02134"],"evals/evals.json":["1c450699c83ae023","638707d041a0b3e9","8c5f668649da3c11"],"references/formatstyle-locale.md":["c28277c853e625ae","dd26836eb8a45b9e","fa9dc7e0d125c081"],"references/string-catalogs.md":["4ed7f1f4337947c1","5337ab405ba42e9e","b1a7647d51956ee0","f290989c3a9c1e78","f6080c1b902c924b"]},"ios-module-structure":{"SKILL.md":["0b76cd3413da1ed6","159a8607aee811ac","2a4fa395cee5b8f8","7e55915567b36729","dda9730225ab1d45"],"modules/_TEMPLATE.yml":["437f148068ea66d1","bb5328c47d29a7ce","d88ec534e1a5fdf3","fe1295ac4548262e"],"references/rules.yml":["3a15cafabd586b50","989120a317109db1","eca0b4dfa8d8d56d"],"scripts/check_structure.py":["2457194d36ebe70a","8b0d019250901a43","dcb257ec1ef558e8","e172f957cda68cfe"]},"ios-networking":{"SKILL.md":["09762878320ae525","65f3932b0cfd68b8","8c1df97237fc3556","8c637779be6e40df","ecb295af3ea82590"],"evals/evals.json":["79c891ea55b043b5","c62efae4c2b067f5"],"references/background-websocket.md":["30af972f07b20c6b","608c53d7214bc9d6","f521b6fb61d7b367"],"references/file-storage-patterns.md":["5795be97b84cc4a1","a6542c638507f1ab"],"references/lightweight-clients.md":["bd8b6786656b8ede","cb64143c87537f36"],"references/network-framework.md":["404d26d3202ae185","6d67f3965bd43e6b","c78091fd5a098182"],"references/urlsession-patterns.md":["750f206902a55f22","a0cb6432b7e12415","c966d568e5310e58"]},"ios-security":{"SKILL.md":["ba88f571c3bd17bf","f92240eac872e67f"],"references/app-review-guidelines.md":["e0d3e8a1a71351ed"],"references/cryptokit-advanced.md":["bb763d38ef77e4ec"],"references/file-storage-patterns.md":["a6542c638507f1ab","f5ea414eefd79320"],"references/privacy-manifest.md":["b8fffd2d756ade38"]},"ios-simulator":{"SKILL.md":["09b6578cd04080b4","14d40bdeecd6967d","403c4da5ec34b4de","63d5821acbb0ffd8"],"evals/evals.json":["68bfa392b92b8c0a","c284a8b91b494f15"],"references/simctl-commands.md":["2e7be8a3d9765a79","5ffcfcac18072e34"]},"kotlin-coroutines-expert":{"SKILL.md":["027416f32fa88335","3cc1d32bcd45e422","3fea5aee506c0129","8a52af6a6d7846c2","ed73e8da02a1690c"],"references/patterns.md":["277afa39fe134053"]},"live-activities":{"SKILL.md":["163faa17504cd882","56e45e23b9a1b1d3","60f68dbcf0eb4e7e","6adcdef27574ce02","9c19650b9234f8da","e88760fc96826849"],"evals/evals.json":["10443dc1bdb76f64","1b04900a76d8b127","3ce618d2b04d8bec","f8e0e25d2a380268"],"references/activitykit-patterns.md":["5078a6d7a45f24fd","fbc5c051a6caa7b4"],"references/live-activity-patterns.md":["6a871bb7c1f34978"]},"localization-reuse-map":{"SKILL.md":["1b92cf31d2965a66","3c1d784ed99a6e7d","4a63c0900c9ebeab","5168d3007200d3c4","77597fbac5afd765","7f5d87a6af9b5e61","9d8c2ec54dfbbded","f39d40437ffb4518","fbbfa7d7b23a71fd"],"example-mapping.json":["007fa6f736eb75e9","1ee120979221e108","837c273598585fd3","8bb0411c97327ca6","907e7cec078242d8","caca4ac3e995b099","d91dfdc8ab7bfb6f"],"reference/format-and-output.md":["1927f8c26861e5d4","5333d8ca7af181db","56f79bc1e1eeeca9","8c14759d8b6d38be","c041819aabb8c79b","e5ba482eab922ff9"],"reference/publish-and-snapshot.md":["015781f2011674d6","1cd88a60432939f4","32dd076420bb9376","71bfc052c6c93033","740794cafbb03905","8ab43a588742aee5"],"reference/sources-and-recipes.md":["1eeef87ccd274955","3c774dd5baa02e7d","3d4c57af1aa26e2e","4bb3f368f4b5915b","515ba3d753368f89","5e2bebec1ebdc65b","6d3b0f3da3779fbe","d3bb4465e97316de"],"scripts/_shared.py":["1a7a69580c4e6922","63f7423ca26ebebb"],"scripts/build-artifact.py":["0be5d8de4bb18e3e","137a381141deed66","5aeaa90bbfe9dce9","77bc49382e1bf5a9","97a48f0faa531b4e","aa054b014b768358","b9422fc60c9dba3c","f215461fdc2449cb"],"scripts/build-spreadsheet.py":["057528e4f6f8e56d","405a019f810e623d","44acb8fe244f7840","68dce8d985fff8f3","a5788ce642eaa7e0"],"scripts/fetch-annotations.py":["42940218db298978","666488b8fbd4c703","8351fe6702611dfc","900c891b63f96c25","99d0dd6d4cde0e33"],"scripts/fetch-legacy-labels.py":["1ab2894e568c131b","34aef04772d763b6","5ffc591e469362b4","a9138c6c52421c54","b8a6b2c470aeb2c4"],"scripts/publish-confluence.py":["060026e36ec44aeb","181a72eeac2bfda9","18adf162da1f8024","47f52f4831750fd8","b42b0b169468929c"],"scripts/render-key-shots.py":["15d9c4dedd242213","945287e54a39c9c0","db62915298956fad","ea413d4e45aa6891"],"scripts/render-overlay.py":["2e95dfb027df8216","3578ccf3a69c62ab","4547162acd4529f6","96bed64a20fd57d6","a1f09ee67e3825f5","d74fa7d6e8993048"],"scripts/resolve-legacy-values.py":["667843569f8355a4","670b099d9a7ac364","7304a32e4120d9ad","a16424ee8472f4b9","bce67a49aa4d325a"],"scripts/resolve-new-values.py":["039a4b99864b9c95","6416222611a31c1d","960e11b052266e45","a1d50de0c4ce42ad","a941dd07064540ac","c00424a82fdf302b","c430b95eca0eba44","dde95c9218a02774"],"scripts/scan-screen-keys.py":["243465eb13679af7","7416dcb9291b60b3","a9b7b346cc152627","db61249042bef220","e979d7a7fc3f7752","fcbd37f546714c97"],"scripts/snapshot-resources.sh":["7f235c25c17e30dc","96b9e09c5815ba8f","a9c30e3ecfb27778"],"scripts/verify-map.py":["57eeef3567ab7af9","6d25e9560001a7bd","a00aa99ae0f24c9e","af924128b536e05f","bedbb09ff883c156","ef745c571b7a0aa3"]},"macos-menubar-tuist-app":{"SKILL.md":["214b97f432fe2de3","6c6f1339a2bd4b2e","e4f0f97faee6ba22"]},"macos-spm-app-packaging":{"SKILL.md":["0ee93e739dab7270","66bfcb4ecadf7b39","bc5f8f4f9afb5c06","c2f973d12328b079","ecf5f31890848618"],"assets/templates/bootstrap/Package.swift":["3207b8e65dc61e41"],"assets/templates/bootstrap/Sources/MyApp/Resources/.keep":["e69de29bb2d1d643"],"assets/templates/bootstrap/Sources/MyApp/main.swift":["e31701692e0f4a14"],"assets/templates/bootstrap/version.env":["6c5435e9d5cd95ff"],"assets/templates/build_icon.sh":["464c485e1cc7c438"],"assets/templates/compile_and_run.sh":["8bec4bc15edb47f6"],"assets/templates/launch.sh":["92af4e19b557bff3"],"assets/templates/make_appcast.sh":["1dce6d9667186a58"],"assets/templates/package_app.sh":["1175cbc3f536c3e4","fc68dfdf9501fc43"],"assets/templates/setup_dev_signing.sh":["2cf19f23d1c369f0","42014d16ca5503db"],"assets/templates/sign-and-notarize.sh":["2e74bbed516aa44f","d6245762ad88d284"],"assets/templates/version.env":["6c5435e9d5cd95ff"],"references/packaging.md":["acaf317c55aa0f2a"],"references/release.md":["55930863c04abed7"],"references/scaffold.md":["1eee900cc5dfea57"]},"mapkit-location":{"SKILL.md":["0072848651e8f423","1573c75070c54c56","201711d9e2613e7b","5ec87b50e43b9d86","6b4d965fbaa466a9","8977477e782ad2ab","9ca941ffaccf3294"],"evals/evals.json":["3c31dd7be56df807","6e10b00dcab44526","7738c274139776fa"],"references/corelocation-patterns.md":["caa47ff80c12d7c0"],"references/mapkit-corelocation-patterns.md":["3a0dde3395636a5c","b04f81d982d40f43"],"references/mapkit-patterns.md":["325d970be1da9fbe","6cdc82673c8a8b7c","7c32b53bc68428a1","fd21b7d83d2c455d"]},"metrickit-diagnostics":{"SKILL.md":["1aa8a3b446e0fabb","71e14c2887586641","ba7b3396286ba023","e5fa7f6a80cea3d0","fccc45302c5569f3"],"evals/evals.json":["2f8e238184a4a57b","8edc989358d6f122","d9b27e8cdf1e5a30"],"references/metrickit-patterns.md":["c75b9e1f1bb945c2","f932cc1cd5684ab9"]},"module-structure":{"SKILL.md":["d8d27ca038271ee3"],"modules/_TEMPLATE.yml":["bb5328c47d29a7ce"],"references/rules.yml":["2f94d772b2482239"],"scripts/check_structure.py":["dc3a03d0291cc8c7"]},"monorepo-architect":{"SKILL.md":["36ea2995a5eaa699","674bfb45e4f5db96","74b9b807a169929b","b98520c93c939af6","f5eeb32f3fceea43"],"references/patterns.md":["aadce352f814d502"]},"multi-agent":{"SKILL.md":["0db5be73fb8fb281","4da1f9fd3c9ef039","7c3900c29284a2b7","b1edde323ddfa551","c6278147e6c72bdb","d15736ffc9131133"]},"multi-agent-autopilot":{"SKILL.md":["c11153f824d1f02e"]},"multi-agent-dev":{"SKILL.md":["4b9a37d3b8b30326","5bc732948290d8ef","97238fc368b547f6","9ba6c4f290934c98","b4ee201feccdcc81","c3dcdcd8359fe6d0"]},"multi-agent-dev-autopilot":{"SKILL.md":["0fa5573ad0cbe4c1","38e293cdddba94e9","dedb4277f45e5530","e633282ee441c6db","e761ebc03be5f681"]},"multi-agent-enrich":{"SKILL.md":["db3bc8aa83216c64"]},"multi-agent-help":{"SKILL.md":["4d9416b9fc21dd65","a094137ba764fb67","a90eadc529cc15ce","bfa823b2aac42a7b","e244fd38af3359c1"]},"multi-agent-issue":{"SKILL.md":["9c519ab66962c698","f4b36c0e1374f8f5"]},"multi-agent-jira":{"SKILL.md":["2f4043f524660bb8","f0cb49725ed969c9"]},"multi-agent-kill":{"SKILL.md":["dd5b553485346954"]},"multi-agent-log":{"SKILL.md":["3227822c52de85c2"]},"multi-agent-purge":{"SKILL.md":["7659818320e03624"]},"multi-agent-refactor":{"SKILL.md":["f3e747cfcf64ec3b"]},"multi-agent-resume":{"SKILL.md":["1ed0fab0b334e42a"]},"multi-agent-review":{"SKILL.md":["c7de3c01ee22e1a0","cde9d156898dc2c4"]},"multi-agent-scan":{"SKILL.md":["cf5bab9abae18cb8"]},"multi-agent-search":{"SKILL.md":["a07bc06011a4510c"]},"multi-agent-setup":{"SKILL.md":["25dfc0efd2501465","4b05ecb77b38519e","4ffda38c9b474df0","65bd62617e407278","7c63b321e2edd7d4","f54c1cb9ddb37759"]},"multi-agent-status":{"SKILL.md":["2f7647dae4719eef"]},"multi-agent-sync":{"SKILL.md":["1e11bed43b4f383e","cdc2b56cb918cb28"]},"multi-agent-test":{"SKILL.md":["8637b961d644de1e"]},"multi-agent-update":{"SKILL.md":["53e0f7510bee231e"]},"musickit-audio":{"SKILL.md":["0a4524a463c773de","4e84041fe3d5e92f","5342e696b829933a","775a2b4021e5bb47"],"evals/evals.json":["1ac6031c8243c1a6","3e4b16788e99538a","97fac6c5927d247a"],"references/musickit-patterns.md":["15250283f82f55cc","6c5702096c31563d","a99a151f398083cb"]},"natural-language":{"SKILL.md":["24d71620fe8a8f3a","38c3cdb651817555","921506abc9555515","e10a35fb7ad5c3e2"],"evals/evals.json":["321e1331ab07259e","4c0cda0b382d174c"],"references/translation-patterns.md":["0e620c63a104c046","7e5cb9bfa1c50f9b","9a211a4ef7d0869c"]},"nextjs-app-router":{"SKILL.md":["3e4cb53dfda41f1b","51861327892d41c0","6736da360de6c4dd","997c86194dbe2fc5","a5b56c74befbb57b","c624c042aab900b0"]},"nodejs-backend-patterns":{"SKILL.md":["5b3028979e5bff17","98a7771eea1fc301","a98f031103b402fb","b9d01b165335cfc5","f02bf0e5f4b25380"],"references/runtime-patterns.md":["b18ac17522f14f0d"],"references/testing-and-frameworks.md":["4a3d566ceea7df5b"]},"observability-engineer":{"SKILL.md":["2240bf2d1f58fc80","6bc408c8d13455cf","b7f6432e3bbb91d3","ee278bdff7d78dc1"],"references/patterns.md":["e4f76f0551b7c8fb"]},"passkit-wallet":{"SKILL.md":["8da312567a9c148e","9b168d546f843018","b0b2866bab8aaaac","cf23cc5e08b4bd88","e448fa1a07b96adb","ff232d1be1dc9c99"],"evals/evals.json":["0ecef4b6354bb21a","43440a65abe1bb8e","446df23a24219fee","f401ad727a05147b"],"references/wallet-passes.md":["48f80441ee58fe4f","9bbc9e263384db28","b0c87a499d05c618","c734579b8e90bfdb","f215e940f5da6bc5"]},"pdfkit":{"SKILL.md":["453f8ae0694d32e5","a5ac1cf6907e31ae","b79039aac542a139"],"evals/evals.json":["7157b6ab88e87250","8b2c7ea3110e1c0b"],"references/pdfkit-patterns.md":["64dc1d2e577ed851","83405bb99df39dba"]},"pencilkit-drawing":{"SKILL.md":["2b81019639188b45","84b6735d56b7037c","896542690c8c341c","daf132d07953dae7","e1f0e2cc7b87235a"],"evals/evals.json":["01fe48b6b1e7ec70","7e885deff030429c","9a32eb172fa00516","e4445c48087aef09"],"references/paperkit-integration.md":["f4c7db2a2edde46f"],"references/pencilkit-patterns.md":["2b6a3f10f830cd53","ac94f3a7f993dcf7","ad5e5f9302c4baf4","cfaf34a7ec848f14"]},"permissionkit":{"SKILL.md":["a41937563e7cfabd","c69a1470fd68c215","cc80baabc40c26ff","d6e0052b2b710e52","dca0a9263f28a993"],"evals/evals.json":["0da830d2b47da4cb","52691489148feb12"],"references/permissionkit-patterns.md":["2feeb247c8f118db","4633bb4c0105ca0a","6c995a41d8e98953","99bd7dd0d4bb522b"]},"photos-camera-media":{"SKILL.md":["6540238c089e4834","a196568345fc11bc","d762b7dafbf3464a","f44ace21c9b0924e","f4a02a02677b0695"],"references/av-playback.md":["bed152ed03d00c66","cf6135cde33faba3"],"references/camera-capture.md":["368fd8ebaa107e29","8ae9d67fb5b4710b","e39b20576c0b1e98"],"references/image-loading-caching.md":["3363d0865ed8774b","7fe9abc791beaa46","a47bdce2062bd381"],"references/photokit-patterns.md":["aafa3d9c43a5ff6f","c14b964c961c5be1"],"references/photospicker-patterns.md":["d3c09b514546611a"]},"play-store-review":{"SKILL.md":["091c3c370f0953d0","378f1076a734abb0"]},"push-notifications":{"SKILL.md":["576a628ee55fdab6","5aa0c47a02719674","818e70b4f41c6c88","8d36cf3e42cca671","c4cf31bf8017b20c","cbbe0509c4fb199a"],"evals/evals.json":["2935fa6c0ddd6eb6","6f48025e8862c671"],"references/notification-patterns.md":["761bc2836fa85042","97c4ad50ea010f92","9d8488d4a74204ed","c22519d90881fa22"],"references/rich-notifications.md":["0dc11156752d13bc","2fe4f8da698acf76","76d09c902ca935b8"]},"python-patterns":{"SKILL.md":["141892979a77d9da","51551fa8fefee10a","8eff447d0766aba8","cd361fdff8600d95","d25fc477c37b0540","d5a07f96797a74a0"]},"react-best-practices":{"SKILL.md":["281275f640f9afd7","420ba7bc13efffda","4e65bf225d2425ff","8abc7a73d4138e37","ad042584e9bfb91e"]},"realitykit-ar":{"SKILL.md":["3b52c43e8a741e99","55515e855565dbb7","616b2bec63cef77d","72c05b3aada79767","a1bd71e96f7cdb39"],"evals/evals.json":["1382f84cfb54354a","67ce095cac657c6e","8648b60f0d380e26","b325a81f622411ed"],"references/realitykit-patterns.md":["12fdbf3996b3af77","2b9b7b3136cb388d","5e11470128ea4e4b"]},"rest-api-design":{"SKILL.md":["092bd328034c9475","a07e8610da1fd460","c0f64d56ad1531ad","c17c817f566ecdf9","ed6af9b97dc414e8","ff59dab91072c85e"]},"retrofit-networking":{"SKILL.md":["02769868225242bc","053009196884580d","1436f4aefe67cec1","884900887b07beb9","f8f3f451977a23a9"],"references/patterns.md":["0435d0c754f25757","e122c1c4e83f2de7","e17336e9c101dfc9"]},"room-database":{"SKILL.md":["1bf058f1918ada6b","83fc6d72d25d22f2","b9c1c6c231ca7ae4","eca2c0457861c88a"],"references/patterns.md":["3a4c63b80420ab1d","4e12e8ad66f2a15e","6bd46d0c06281439","bb12164f5a2d84fd"]},"search-first":{"SKILL.md":["1190ebfea433086d","270bbeb0f97a3551","88c19e94a16df10b","babfc48d74e6ff31"]},"security-review":{"SKILL.md":["7c8c2aa855907c04","b13bd8dc086918fa"],"references/owasp-mobile-top10-2024.md":["9029ac7281fc58ce"],"references/owasp-web-api-top10-2021.md":["3c66827fbac6dbe3"]},"shareplay-activities":{"SKILL.md":["5abee46f722a458c","5ae0d40c0760405c","60cf17d4f691fa8d","b582e1b462992a6e"],"evals/evals.json":["19a4b272f2a7a2a3","69e4653f9aec756a"],"references/shareplay-patterns.md":["a9019f046004cd6e","dcd943ba10e25a5c","f28eac5377a4693a"]},"signal-community":{"SKILL.md":["5abfd8e7db80efac","74853a6871b9b927","9d22d3c701dec4a0","dec093a43badb52f"]},"skill-creator":{"SKILL.md":["41c6011636dd2473","6206f77930083282","99167ad6e017612c","e9b593ca2ae70785"],"audit.md":["32792f90fc9aa709","5c51ff3f7b615d6d","640aa5f06e85d11f"],"checklist.md":["8f4cb25cf66df24f","e11171735d6e00d7","e2696655c4ac4264"],"examples.md":["592d2afbdd3512a7","8de76c287af60b2b","9f516ea4c1042a3a"],"label-check.md":["4a7bea9ebd4f2d49","960ccfed6de90fb2","cdf3ce0d991a1e95"],"scripts/audit-panel.js":["099130784aeeba3a","657d6fbac12e49c2","bd4bdf43e70db99e","bf3a54dd4773c7be"],"template.md":["40d0dfad47efa83a","62bbc0b96bc6e884","807b54eacbfc0046","9ad8f0ef961a9b0d","a0d860b39f95b36d"]},"speech-recognition":{"SKILL.md":["494172755717d2f0","8bd14e9e67ceafef","bbfa8fbf6c325d41","c667ce7490f6069c","fddbc700186da341"],"evals/evals.json":["02ef8a42c979a273","e496b6d9fd6d53a2"],"references/speechanalyzer-patterns.md":["39cabfb3bc1697bf","589fa9af3f5a253d"]},"spm-build-analysis":{"SKILL.md":["21faa3f3cfb5537d","34ce475e429deb67","aba9255761fe43d2"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/recommendation-format.md":["46affd6e24baaee3"],"references/spm-analysis-checks.md":["d15cd390fe84d185"],"scripts/check_spm_pins.py":["fd11a586516e8ed6"]},"storekit":{"SKILL.md":["0cadea5c9fa2931b","31dea4aa616ed1a3","39b67aa74fc8850e","a0edaf74c83d782f","e4de68439161f077"],"evals/evals.json":["baf61e4561d263ff","d93344af86b43562"],"references/app-review-guidelines.md":["08e583eba1de6b18","2189f562b69f40d8","677f0a9b540f08f6"],"references/core-patterns.md":["c1daab4adeacc777","d6aa671039b1e43d","f3d4df3f5d892936"],"references/storekit-advanced.md":["1ea6b3bf38002015","72088af46ff75685","b119eae778ceff4c"]},"swift-api-design-guidelines":{"SKILL.md":["06a99558d06551e9","2433594a1e129f46","aa4508680cacc3ec","fd55241fa69824d0"],"evals/evals.json":["2eb6a569719f285a","d84ade939f130787"],"references/argument-labels-and-parameters.md":["42f998f9c79120b1","61d813ce3663507e"],"references/conventions-and-special-rules.md":["3c7e5e4f7589d852","3ed58e7a21831bd8"],"references/naming-and-clarity.md":["58f4397ce32a68b0","d80473d6b48cf77b"],"references/side-effects-and-mutating-pairs.md":["028a294b3662ca70","63c53e3cf0a2280f"]},"swift-architecture":{"SKILL.md":["7e52c2144e2ac74b","c5b7a2d16765a684","cbce0b25306986b8"],"evals/evals.json":["4383a336a295ed60","dffa773456f2f4b4"]},"swift-charts":{"SKILL.md":["288a8caa7c65b533","2e87e3e6f4e624a8","ec69f2474896e278","f87c80df2a5561d7"],"evals/evals.json":["624d8d7eb846f853","90d4ba04e9452b1d"],"references/charts-patterns.md":["0d761fdecc37ab13","15ba8e4f36151cfe","d9e7830f4056fdc0"]},"swift-codable":{"SKILL.md":["209eeafbc9073a2a","aa589b35fca705d6","d64bb3d8fdc67ca1","f82c980832051130"],"evals/evals.json":["40fce78c3e084e15","794e949f2ecd52df"]},"swift-concurrency":{"SKILL.md":["582c16df51720042","631f08a6244ff2b7","69c771295ddff2b6","87de919fb02b4a36","936ac8029dd62966","9eccaf7e7c24e049","d1f02b7ada46f026"],"evals/evals.json":["13ee8d6a268b8e75","b6f9d8a4122d27ee"],"references/approachable-concurrency.md":["7a950454f8c4d6b9","b241a85b9ca64ae2","be84e859f6c2bccc"],"references/async-algorithms.md":["3f919fcd5f8f228d","ebec64fec4cb870a"],"references/bridging-interop.md":["17209453e1520f3e","ec5d81163ecec6e3"],"references/concurrency-patterns.md":["1902f2d51098b33e","b9c034a085213572","bc8f936c3781be52"],"references/diagnostics.md":["37b47a18f63d0762","64429701fd85557e"],"references/swift-6-2-concurrency.md":["0f37f08e7d45e7b3","f98fc225500f8020"],"references/swiftui-concurrency.md":["5c0387d24f9d4cf3","84abb9e173dca3c9","f42347d48ab907fe"],"references/synchronization-primitives.md":["23af41b7dcddeadd","7579b3122c8656f8","9bec4d155885c851","ec2d78b099926ff7"]},"swift-concurrency-expert":{"SKILL.md":["1a9e5ab389588402","27ba408185dfd4ce","d6fdd869e76e7fc8","d9bbf7aba93323a4","fb24f4a7baca49e9"],"references/approachable-concurrency.md":["b495d1393e06b603"],"references/swift-6-2-concurrency.md":["3b19511ff2ca1e34"],"references/swiftui-concurrency-tour-wwdc.md":["ab248b25cd728496"]},"swift-concurrency-pro":{"SKILL.md":["5549099b5473626a","60f9e9cf52be824c","91b5944c2e0333d6","b4e1c094e93e6d02"],"references/actors.md":["0067376c30bb4193","aea5bfdca37c1d99"],"references/async-streams.md":["4f345553d4ca2a54","fae21f76066c7bd4"],"references/bridging.md":["13f0560c7cd28f27","1dbcfc4447020755"],"references/bug-patterns.md":["1f66e60c68d3a6e0","2475312120196c7e"],"references/cancellation.md":["cdbb82ec14a1bc91","e6a02711e048d197"],"references/diagnostics.md":["958e617d4f01214c","e1bca7d8b1984ccf"],"references/hotspots.md":["50041984e0914f1d","d405cc4e81370158"],"references/interop.md":["8c6fafb25bf291e2","ce7f24aaa5095ede"],"references/new-features.md":["52a67fd290b6dda0","e48088abb747b1a9"],"references/structured.md":["ca68b24f8802e9a1","e7314ade5ec9511e"],"references/testing.md":["0d46d8aba7fdb0d9","97cbcbe4b0060fd8"],"references/unstructured.md":["d51c1fbe0fcc6609","efe905e8265015ba"]},"swift-formatstyle":{"SKILL.md":["1f11f08e9465f3a5","577ee7b9f4e0fd2e","d97b5ffc55adbafe"]},"swift-language":{"SKILL.md":["04f600280eb8a0fc","2d3d509b222116d3","3c0518453994593e","9fad3739c3098c9f","d855f49f7694fd37"],"evals/evals.json":["2e8e7a01f8641aad","fe9de946b5c1104f"],"references/swift-attributes-interop.md":["2d19098b08a0f98e","a3cf78822388c2a6"],"references/swift-patterns-extended.md":["1d9972e55bb0a1df","4317cda88f0caa9d","94b8a4f596a50da6"]},"swift-security":{"SKILL.md":["05f312790007b910","1cbc8202ad1fc986","ae9bd06f72516b33","caeb7634fe73acb0","db6ebc342db5cf1c"],"evals/evals.json":["52a98ad4ac09067e","e99ef5e8dd02af63"],"references/biometric-authentication.md":["22f1215c864c52dd","fe45994cb7ec2114"],"references/certificate-trust.md":["70773a75fca5367c","864cef3925454dfb","d7133496c358abb1"],"references/common-anti-patterns.md":["619432546bbbdeb2","fbd3d383bdcc9394"],"references/compliance-owasp-mapping.md":["a45ed9b3f3ee83bc","badf4581f4fd2d90"],"references/credential-storage-patterns.md":["6ebe42e722406515","ec9cbe1cfcb7e5bd"],"references/cryptokit-public-key.md":["1a3486c1052de25c","e7565bf1e5e9553a"],"references/cryptokit-symmetric.md":["981676623044f439","dbe25f0b7ac400ba"],"references/keychain-access-control.md":["4bd9f84b87871e26","60a04eefac2a546d"],"references/keychain-fundamentals.md":["3d16e8aaeb9f0f7a","423bd2b2e24a6b95","fa6dedf3a4fb9299"],"references/keychain-item-classes.md":["74676c08d3d8ba5b","cc38f002b69d9f60"],"references/keychain-sharing.md":["57201739cc6db1d5","d9d072d7388dc191"],"references/migration-legacy-stores.md":["21e7209c693d645a","ccae791a3ac84d5b"],"references/secure-enclave.md":["113e26d52d1cd24b","1d7402528eba8f49","8b289dc65c2e4924"],"references/testing-security-code.md":["029975bfab5049eb","878386b4e2300bd0"]},"swift-testing":{"SKILL.md":["53a04af1b34fd174","6f61f7b71ba69f85","811670c43eea4200","85c5bfc91fc0e2eb","d12a5ed7a4dd7cb6"],"evals/evals.json":["28222cc3b5f54e94","46cc49a27649d1aa","4efbe70b713f8d26"],"references/testing-advanced.md":["3e5e637344c9c3d1","932738caa5ad4808","dda63d93bd7f3825"],"references/testing-patterns.md":["4021c8496b39539a","408db833083c44b2","caabfb69b1b9ba12","db7fde7ca065f600"]},"swift-testing-pro":{"SKILL.md":["09549d8855915091","0a5e2567a4394f53","7c73e80b4fc29bd1","b26429479c8615d2"],"references/async-tests.md":["0f78073de51989e5","4e207a4379e1dd6e"],"references/core-rules.md":["a0894956930a71d2","e20e131c7aa45984"],"references/migrating-from-xctest.md":["dc297619536b03e5","eed74b336ebf9bc3"],"references/new-features.md":["53b85df7923d462d","57670a61c233fafb","b1b362281cce86eb"],"references/writing-better-tests.md":["23439fc4a529c019","4a7d0a3f8830c596"]},"swiftdata":{"SKILL.md":["6432478b7d7da3e4","8bf0dd968ce3837c","a829f4b879957186","e3890456d2821071","ea3be9889632e070"],"evals/evals.json":["4ef36c1b1ac66eee","a2d8db55e15bc178"],"references/core-data-coexistence.md":["0033d32e5e52bdf1","5065c366e173a09f","aabf85136ca507c3"],"references/indexing.md":["9edd6d55420c8e4b","b58acec792f148f5"],"references/predicate-pitfalls.md":["04d56b5340e2fcde","5a8fe6f9304b8797"],"references/swiftdata-advanced.md":["0b6812b2a2b7eb43","1c64aa614ed72079","af7bf732b26079f2"],"references/swiftdata-queries.md":["56e650ce97c2ceae","68da6df5ba364f22","f5093ff0f88c9b93"]},"swiftdata-pro":{"SKILL.md":["74039828d0433107","82fcafb62ae54550","83735a31b8b58e3d","a05b5835048630c2"],"references/class-inheritance.md":["bc2e0dd869f3fb42","d64d8d4670bb6356"],"references/cloudkit.md":["1f55a50724cc6325","f08de639727aca20"],"references/core-rules.md":["647894adb5dc9a2e","d8a81666a12ac5ca"],"references/indexing.md":["8e9dadfd91e9d357"],"references/predicates.md":["b4cf2a362b142fac"]},"swiftlint":{"SKILL.md":["24624367a5ae3cb7","5ceacca1ce396c1b","874480dc9a26a418","a5e01149832c5500"],"references/adoption-and-configuration.md":["005fc5ed569abbd6","14234713eca99d42"],"references/custom-rules-and-analyze.md":["5b96c963b7ca545c","eba0602c93280d8e"],"references/plugins-run-scripts-and-integrations.md":["27421bda1d00001d","48a126ad9924e421"],"references/rule-reference.md":["4f407e1937d4aefb","bfc8c33e622cebb0"],"references/rules-suppressions-and-baselines.md":["b0eac573f9f2655a","d3eba6b1ea954191"]},"swiftui-animation":{"SKILL.md":["2fe290f0718d5cd0","50aab94af6df412f","ab02ccdac1e95645","cf7fdf9d421d5bba","d408d7bab838c985"],"references/animation-advanced.md":["11cbcdfa80750733","a2b4899cbd13c9eb","a9bd9544a3b3b65f"],"references/core-animation-bridge.md":["65a50852c7be0c2b","c57256b7390a7424","fa46951493c8ae1d"]},"swiftui-expert-skill":{"SKILL.md":["12963b5e700683d3","729872ad608ef0ee","f12241cbaac234d5"],"references/accessibility-patterns.md":["6f0ea0c1275696c5"],"references/animation-advanced.md":["561e111f2e5d801c"],"references/animation-basics.md":["859682a9106895d7"],"references/animation-transitions.md":["29b3f98430348202"],"references/charts-accessibility.md":["a0f4cd6547a071a1","c641d1bfd1205133"],"references/charts.md":["014adcf19b9cb8e2","c1017071189f88a9"],"references/image-optimization.md":["81ba2c9d5ca3f856","b55f4a6803a1b877"],"references/latest-apis.md":["bba9f7b5af970ed8","c193bfe038e5742a"],"references/layout-best-practices.md":["03e9a6d023290b06","8a14454fbb728210"],"references/liquid-glass.md":["907b5c460d6621c1"],"references/list-patterns.md":["1922789f0f0be8db","64595bccc9fd44aa"],"references/macos-scenes.md":["c0a40b68547aeea2","c6056056e2246c9a"],"references/macos-views.md":["0eadb17b4ed72694","239a6d24329d110a"],"references/macos-window-styling.md":["40825d9b57c36054","4f4126550b189e3d"],"references/performance-patterns.md":["1a595afcb2910729"],"references/scroll-patterns.md":["7fe5001886a100c7"],"references/sheet-navigation-patterns.md":["d06b38782f587146"],"references/state-management.md":["777537b4dc9f134c","7e868bb84f0aa349"],"references/view-structure.md":["7b37816a8920019d","bc80541decc05629"]},"swiftui-gestures":{"SKILL.md":["0749dab3051e66f7","086d63eda518da76","65a559c575948cd6","747e4dd071ec8c2d","7b2d183662d9d876"],"references/gesture-patterns.md":["26172187effbb54e","3ae1202cf6e55c75","439939727e2c2770","cad8986dc1ab3b15"]},"swiftui-layout-components":{"SKILL.md":["34ffcf8b76760fa6","6c313161f162977e","b083849a294ad0c8","c82bd2c8f531ae40"],"references/form.md":["58259c52d6d29218","d993b8c8faf3bc45","e7de4d452c65f7be"],"references/grids.md":["4ea60a33c4633873","59bdcf655d981a45","91f88e900556d630","b1511140b822b977"],"references/list.md":["2fc3a0d0c788d44e","d531ad6b491358c7","ee3f67612b1d72e6"],"references/scrollview.md":["495e5578b6c84f8e","8b874604654a39b6","c3c028a3f8ff5148","d968d3bc9d2076d9"]},"swiftui-liquid-glass":{"SKILL.md":["487f1269a1e9c5c5","b37d88cfa67c9768","bdd79149accb6c8e","f259fe492f5d4895"],"references/liquid-glass.md":["309078adf225435d","6ef03ccd4ac6eadd"]},"swiftui-navigation":{"SKILL.md":["0ac287208933595d","65fa450e97991ef1","a48ba4b45712c392","bb42f9a436340011","d3ff78677d3e026f"],"references/deeplinks.md":["1688b8352019459b","8c341ea9e716189c","ccbd3b991dc729e0","fd193f0d8a07c69a"],"references/navigationstack.md":["1d3cd0fe1c17650b","39592226f06ecf2c","42b9c8a3ee384e6d","b2af1b4af73285a9"],"references/sheets.md":["21d364199327b783","7d3d964a9d2cf91b"],"references/tabview.md":["0e8af9fae1aad3b4","0f27b3d74ed1645d","5f03a45ad9aebece","7aa50b425d3c9a54"]},"swiftui-patterns":{"SKILL.md":["2d7f04bc90b764b7","3ce3fc169e21f780","46c8a3636f84c3c6","77419b8008e89406","855657b7c6f12a39","bdefc10200e1b840"],"references/architecture-patterns.md":["8604b15d17baf2c7","a0a9d969cfe798c1","e2d9bab2741d7f24","f9f8ca1667618a3d"],"references/deprecated-migration.md":["21f393a40070ee00","bd57572dd2afefda","ebf96c85fb318860"],"references/design-polish.md":["2d15a26ed5a6609d","30009a25a45c2f1a","557220389c01254c","5cb2f06dbd0c9556"],"references/platform-and-sharing.md":["03f41dfc521adb33","12123c9b9a16891a","de0d19d925bbb642","fc66454ceddc3297"]},"swiftui-performance":{"SKILL.md":["61dbacd001bde9b5","bcf8de921319a8b0","df977a79c49c68a8","e028c28cac217354","ef66eb840e67fce5"],"references/demystify-swiftui-performance-wwdc23.md":["02a22091e569b069","3eabcc1a5c4f30bb","47ada9b775c93fdf"],"references/optimizing-swiftui-performance-instruments.md":["01040bdf1bdefff0","3080feb7cfac8ec2","60f2d25c3c5d810d"],"references/understanding-hangs-in-your-app.md":["0e5b61fc9f3c93e8","ba627ee895a7b581","e9b80d28eba3a2bf"],"references/understanding-improving-swiftui-performance.md":["5a65ef1f2e004d39","d60d5fa12e509b57","e2a9fbeaae985d18"],"references/wwdc-session-sources.md":["3a0068addc3cf515","53a9ffcc4c08532e"]},"swiftui-performance-audit":{"SKILL.md":["267bdd76473b012c","3e835952e191d330","7d2623e09962db78","fe55a0e6d61dd4aa"],"references/code-smells.md":["8d5a7bb6e4d4fa63"],"references/demystify-swiftui-performance-wwdc23.md":["02a22091e569b069"],"references/optimizing-swiftui-performance-instruments.md":["3080feb7cfac8ec2"],"references/profiling-intake.md":["39b6530de509ec91"],"references/report-template.md":["97982c7a731e4c59"],"references/understanding-hangs-in-your-app.md":["e9b80d28eba3a2bf"],"references/understanding-improving-swiftui-performance.md":["e2a9fbeaae985d18"]},"swiftui-pro":{"SKILL.md":["7ac7bd144401bbad","c97b82f439d26f55","d2705361bd1f781f","e8e699bc72e7d02d"],"references/accessibility.md":["4a4536700df10214","7cb96c146b2e99da"],"references/api.md":["0a7db8c5ce943c44","bfd5199bdadce3ab"],"references/data.md":["952571f8d07f0b4a","c9b394fafb06a638"],"references/design.md":["8e14b6ee8a8204ef","a5956397d61e263e"],"references/hygiene.md":["7593014c094fec70","80bc9c5f5fcda352"],"references/navigation.md":["44b402565600a787","5db9e58e44954dd4"],"references/performance.md":["6b35b9b81918a5a4","72c5a037df7f9038"],"references/swift.md":["7b2f59bf7a03b69a","92f32b1b5829e3c2"],"references/views.md":["064123513acc4162","41ec1bed356ad838"]},"swiftui-ui-patterns":{"SKILL.md":["0bc9699b5505a7fd","4fa8bc0ebe404536","7debb87dd672c762","bcbf1d69a2643e26","e96f7e02c52672c6"],"references/app-wiring.md":["c70eabcd816a7653"],"references/async-state.md":["4fe831372427be00"],"references/components-index.md":["213b32285249f012"],"references/controls.md":["8abfb39cb2f33c2d"],"references/deeplinks.md":["a64894834e31739a"],"references/focus.md":["0642a7632956b439"],"references/form.md":["d993b8c8faf3bc45"],"references/grids.md":["7d2ef51c31af0f83"],"references/haptics.md":["41942bea558ccd8a"],"references/input-toolbar.md":["9506d3fad9dfc9d2"],"references/lightweight-clients.md":["be356f614b8d86bf"],"references/list.md":["7b570fafe064d5da"],"references/loading-placeholders.md":["13775fb2acfe2003"],"references/macos-settings.md":["0e02cb9e7e47aee7"],"references/matched-transitions.md":["3aef1a19ca8732fb"],"references/media.md":["ceedf65018a6111f"],"references/menu-bar.md":["f87f56efe0045154"],"references/navigationstack.md":["decf5c42b056af5a"],"references/overlay.md":["13388c38b659e0f8"],"references/performance.md":["b574e73aa7739a5a"],"references/previews.md":["a07a3d8da098318e"],"references/scroll-reveal.md":["a278ece6c260fa6f"],"references/scrollview.md":["fcabfe5c89fdb432"],"references/searchable.md":["f862c623a34b6037"],"references/sheets.md":["ce52412241bdb3e9"],"references/split-views.md":["fe3734977026e219"],"references/tabview.md":["2a44bfe515720864"],"references/theming.md":["573deae3b6a9b810"],"references/title-menus.md":["707049b85c3c7486"],"references/top-bar.md":["ba7a7b73c7bc70df"]},"swiftui-uikit-interop":{"SKILL.md":["4d11a3d874b523d3","7566b0004f7e3f1c","b4bd47697d8c5386","b8a61906e0d5b1d6"],"references/hosting-migration.md":["27a5c0985cea874a","29a8c09eb8ade0f8","af689a733e99d3b0"],"references/representable-recipes.md":["1201258df1bfcf6d","20e4a4f1ef1a1072","ed03bf511fde9f0a"]},"swiftui-view-refactor":{"SKILL.md":["159999562d79180d","8201c566899d537d","c6adafda1c16216a"],"references/mv-patterns.md":["12d4bcccf5bbe185"]},"swiftui-webkit":{"SKILL.md":["16859d1eb04970f3","330d770f90aec77c","6ceb08075cbb7b10","ad9cd47fe2b7dbbf","ecb2cdb569ffd024"],"references/loading-and-observation.md":["64d612c20f79f873","dd7b1ce558d50b3f"],"references/local-content-and-custom-schemes.md":["11a254728033c5eb","743b53cc7715dcc0"],"references/migration-and-fallbacks.md":["640f3e846f668f8b","6f3bcd72c30e114c","aa52b6bed54305be"],"references/navigation-and-javascript.md":["96c7beceae065447","d57eea517babc987"]},"tailwind-css":{"SKILL.md":["1d8ec088cff4d0ce","437b3fc1999570e9","562cc67d2d4ae6f4","81dcd57d4008278c","90507d86949d428e","c05b214efec5d9f3"]},"testing-backend":{"SKILL.md":["23ea869fbab22191","36d38450a5fa46f1","75a4df19b38f4ce7","7fd771ec1c7375e1","d8015d90e8453357","d90d1c3a92582c77"]},"tipkit":{"SKILL.md":["10992bab0523c1f9","502dafc1ba1366fc","7ed72c0c19ce6755","f21fca74a4fc16b0"],"references/tipkit-patterns.md":["6f4825d5cb5e60d3","9e503f09eaced045","f0f02785eb651a9d"]},"typescript-patterns":{"SKILL.md":["176d5a094cecfdbe","1c7c04f245b71e1c","2a36dc7e1de8e614","2c925c6e0ada0449","ba37c1c542efda0f","d65fc1233cfc8ec3"]},"vision-framework":{"SKILL.md":["1f39df6a36fd1787","58355521fa3ec3ce","8061d2fbc53ea67e","9742f78eb401bcb0","dd9922cd9dbf266e","f7f4b60b2cd3f131"],"references/vision-requests.md":["422a63fad0feef00","691eedb7238c808f","9833a4b08d1c85b2"],"references/visionkit-scanner.md":["20630afc935b1f84","762ba707e9131faa","cc206ad0758c3607"]},"vue-composition":{"SKILL.md":["128961d16ddbb2cf","51216244b426c6b2","899df886590ca302","c4c6a0a91dbc1bee","e6b7d0522dd4e1d9","f9ff96e5f3f38cc1"]},"weatherkit":{"SKILL.md":["38cd012d7472c2a1","90d79a206c114ca2","9fe6bd2c0df81f40","a0aa9ca4304e8567","ee54cedd5d9aa8e1"],"references/weatherkit-patterns.md":["6f9e76fe7f847803","72a96207a0c901be","e728ac1c495a53c6"]},"web-accessibility":{"SKILL.md":["484a6f5c362c0f56","53a9016046073876","7cc32174677b0f85","8b34cf44bf46cb16","d725d695efb82d29"]},"web-performance":{"SKILL.md":["1922a01bab3433fd","42253f076c8981a1","9f7f7303df4a0250","cd95b6e710eeaa0b","db8cc2a87f70fecd","ddfdb76b7eb26afa"]},"web-testing":{"SKILL.md":["4e35d6d7d132bfa7","5fd0fa0b2f62fab7","78aa8aab3e4309cf","8220686d16f48e64","95e5c21b011dfde3","f783dd4d70d54aa4"]},"widgetkit":{"SKILL.md":["0d073cd2b7d5815b","2a5daf1b9fbc00f6","9672e3f6d8b3a328","d894543ce784a89a","d9c2ed0c164568b2","fe904d5ca0d827f2"],"references/widgetkit-advanced.md":["2b84a5d63c35b003","5943cb9db469f22b","71ba48f15b256732","dcceece3c3c47e3a","efe575d5df9859fb","ff26cc8e8cb30c54"]},"xcode-build-benchmark":{"SKILL.md":["32ff2f3d54db92d5","424bde764ebc9958","b4002e3ca46e936f"],"references/benchmark-artifacts.md":["15abe5a05042cca4"],"references/benchmarking-workflow.md":["6bcd530e6cbf4df9"],"schemas/build-benchmark.schema.json":["0ae8a9df71607c89","411dd720f73e450a"],"scripts/benchmark_builds.py":["784a7495b00752a9"]},"xcode-build-fixer":{"SKILL.md":["1edf140969b1ec1c","34781613fac62e15","6c301a0f40efdabb"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/fix-patterns.md":["adf3cd3b8a79e941"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/benchmark_builds.py":["784a7495b00752a9"]},"xcode-build-orchestrator":{"SKILL.md":["98eb94c55b4e80c3","b94f7fde8b66d12c","e06ecfa152688918"],"references/benchmark-artifacts.md":["e630b03e54452dc2"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/orchestration-report-template.md":["f598b45b38c63080"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/benchmark_builds.py":["784a7495b00752a9"],"scripts/diagnose_compilation.py":["bb97085391b6df63"],"scripts/generate_optimization_report.py":["fc97cec8dd97a0b1"]},"xcode-compilation-analyzer":{"SKILL.md":["0ecf5d0fc7750c61","7d10ec48afe43e79","bb4ce06872edc333"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/code-compilation-checks.md":["6d2e0577b5df0c9b"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/diagnose_compilation.py":["bb97085391b6df63"]},"xcode-project-analyzer":{"SKILL.md":["329045474abc7a8b","eb4e69d7a7bd9281","eee4f6f2466e83ab"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/project-audit-checks.md":["cf42305190b14b81"],"references/recommendation-format.md":["46affd6e24baaee3"]}}}