Add Google Gemini exports as a second generated platform

Proves the PLATFORMS registry extends cleanly: adds Gemini (Gem instructions)
alongside ChatGPT, generated from the same SKILL.md source.

- scripts/build-exports.mjs: register `gemini` -> exports/gemini/<bundle>/<skill>/
  GEM_INSTRUCTIONS.md (body + a one-line role primer from the description).
- Fix: the root exports/README.md now always lists every registered platform,
  so `--platform x` no longer drops the others from the overview.
- exports/gemini/: 172 generated Gem instruction files + index.
- README "Ready-to-use exports" and CHANGELOG now list Gemini.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016JWn5jRD5tcEFKrubjQ6Px
This commit is contained in:
Claude
2026-06-17 08:10:17 +00:00
parent 572b8acf8c
commit 46f5d939de
177 changed files with 30286 additions and 4 deletions
+14 -1
View File
@@ -38,6 +38,17 @@ const PLATFORMS = {
// "Description" field separate, so we emit the body only (no frontmatter).
render: ({ body }) => `${body.trim()}\n`,
},
gemini: {
label: 'Google Gemini — Gem instructions',
dir: 'exports/gemini',
file: 'GEM_INSTRUCTIONS.md',
groupByBundle: true,
// A Gemini Gem takes a single "Instructions" field. The skill body maps to
// it directly; we add a one-line role primer from the description so the Gem
// has framing even before the user's first message.
render: ({ description, body }) =>
`You are a specialised assistant. ${description}\n\nFollow these instructions:\n\n${body.trim()}\n`,
},
// Example of how a future platform slots in (kept commented, not generated):
// cursor: {
// label: 'Cursor — project rule (.mdc)',
@@ -187,7 +198,9 @@ const planned = new Map();
for (const [key, platform] of active) {
for (const [path, content] of planPlatform(key, platform, skills)) planned.set(path, content);
}
planned.set(join(exportsDir, 'README.md'), writeRootReadme(active, skills.length));
// The root index always lists every registered platform, not just the filtered
// subset, so `--platform x` never drops the others from the overview.
planned.set(join(exportsDir, 'README.md'), writeRootReadme(Object.entries(PLATFORMS), skills.length));
if (checkMode) {
let drift = 0;