From da22ed88b8bc4d05355aa4278a39697d12c2f3af Mon Sep 17 00:00:00 2001 From: Pedro Rodrigues Date: Wed, 28 Jan 2026 16:33:07 +0000 Subject: [PATCH] Revert "fix: remove CLAUDE.md symlink generation from build" This reverts commit c07c2346015b926651da116732cb4c116b11a6a9. --- .github/workflows/ci.yml | 12 ++++----- AGENTS.md | 1 + packages/skills-build/src/build.ts | 27 +++++++++++++++++++ packages/skills-build/src/config.ts | 2 ++ .../AGENTS.md | 3 +++ .../CLAUDE.md | 1 + 6 files changed, 40 insertions(+), 6 deletions(-) create mode 120000 skills/supabase-postgres-best-practices/CLAUDE.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 134779b..515d099 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: '20' + node-version: "20" - name: Install dependencies run: npm install @@ -30,7 +30,7 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: '20' + node-version: "20" - name: Install dependencies working-directory: packages/skills-build @@ -53,18 +53,18 @@ jobs: exit 1 fi - sanity-test: - name: Sanity Test (skills add) + test: + name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: - node-version: '20' + node-version: "20" - name: Install dependencies run: npm install - name: Run sanity tests - run: npm run test + run: npm run test:sanity diff --git a/AGENTS.md b/AGENTS.md index 7208117..4bc4def 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,7 @@ skills/ {skill-name}/ SKILL.md # Required: skill manifest (Agent Skills spec) AGENTS.md # Generated: navigation guide for agents + CLAUDE.md # Generated: symlink to AGENTS.md references/ _sections.md # Required: section definitions {prefix}-{name}.md # Reference files diff --git a/packages/skills-build/src/build.ts b/packages/skills-build/src/build.ts index 2fc2401..bb9561d 100644 --- a/packages/skills-build/src/build.ts +++ b/packages/skills-build/src/build.ts @@ -1,8 +1,11 @@ import { existsSync, + lstatSync, readdirSync, readFileSync, statSync, + symlinkSync, + unlinkSync, writeFileSync, } from "node:fs"; import { basename, join } from "node:path"; @@ -243,6 +246,25 @@ function skillNameToTitle(skillName: string): string { .join(" "); } +/** + * Create CLAUDE.md symlink pointing to AGENTS.md + */ +function createClaudeSymlink(paths: SkillPaths): void { + const symlinkPath = paths.claudeSymlink; + + // Remove existing symlink or file if it exists + if (existsSync(symlinkPath)) { + const stat = lstatSync(symlinkPath); + if (stat.isSymbolicLink() || stat.isFile()) { + unlinkSync(symlinkPath); + } + } + + // Create symlink (relative path so it works across environments) + symlinkSync("AGENTS.md", symlinkPath); + console.log(` Created symlink: CLAUDE.md -> AGENTS.md`); +} + /** * Build AGENTS.md for a specific skill * @@ -271,6 +293,7 @@ function buildSkill(paths: SkillPaths): void { // Header output.push(`# ${paths.name}\n`); + output.push(`> **Note:** \`CLAUDE.md\` is a symlink to this file.\n`); // Brief description output.push(`## Overview\n`); @@ -282,6 +305,7 @@ function buildSkill(paths: SkillPaths): void { output.push(`${paths.name}/`); output.push(` SKILL.md # Main skill file - read this first`); output.push(` AGENTS.md # This navigation guide`); + output.push(` CLAUDE.md # Symlink to AGENTS.md`); if (existsSync(paths.referencesDir)) { output.push(` references/ # Detailed reference files`); } @@ -347,6 +371,9 @@ function buildSkill(paths: SkillPaths): void { writeFileSync(paths.agentsOutput, output.join("\n")); console.log(` Generated: ${paths.agentsOutput}`); console.log(` Total references: ${referenceFiles.length}`); + + // Create CLAUDE.md symlink + createClaudeSymlink(paths); } // Run build when executed directly diff --git a/packages/skills-build/src/config.ts b/packages/skills-build/src/config.ts index 9e20937..ae273db 100644 --- a/packages/skills-build/src/config.ts +++ b/packages/skills-build/src/config.ts @@ -17,6 +17,7 @@ export interface SkillPaths { skillDir: string; referencesDir: string; agentsOutput: string; + claudeSymlink: string; skillFile: string; } @@ -38,6 +39,7 @@ export function getSkillPaths(skillName: string): SkillPaths { skillDir, referencesDir: join(skillDir, "references"), agentsOutput: join(skillDir, "AGENTS.md"), + claudeSymlink: join(skillDir, "CLAUDE.md"), skillFile: join(skillDir, "SKILL.md"), }; } diff --git a/skills/supabase-postgres-best-practices/AGENTS.md b/skills/supabase-postgres-best-practices/AGENTS.md index 4f31812..cb45e6b 100644 --- a/skills/supabase-postgres-best-practices/AGENTS.md +++ b/skills/supabase-postgres-best-practices/AGENTS.md @@ -1,5 +1,7 @@ # supabase-postgres-best-practices +> **Note:** `CLAUDE.md` is a symlink to this file. + ## Overview Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations. @@ -10,6 +12,7 @@ Postgres performance optimization and best practices from Supabase. Use this ski supabase-postgres-best-practices/ SKILL.md # Main skill file - read this first AGENTS.md # This navigation guide + CLAUDE.md # Symlink to AGENTS.md references/ # Detailed reference files ``` diff --git a/skills/supabase-postgres-best-practices/CLAUDE.md b/skills/supabase-postgres-best-practices/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/skills/supabase-postgres-best-practices/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file