Custom skills do not show up

Open 💬 7 comments Opened Mar 16, 2026 by Suhaibinator
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the IDE extension are you using?

26.311.21342

What subscription do you have?

Business

Which IDE are you using?

VS Code

What platform is your computer?

Linux 6.17.0-19-generic x86_64 x86_64

What issue are you seeing?

I created a skill using the Codex App on mac (still eagerly waiting for Codex app to be released for linux) and the relevant files were added to my repo. Switched to developing on my linux machine and pulled the changes, however the skill does not show up.

Screenshots:
Skill is present in repo

<img width="386" height="238" alt="Image" src="https://github.com/user-attachments/assets/b69713af-f1c3-4698-a589-4653568e73b5" />

Skill does not get suggested/autocompleted

<img width="492" height="346" alt="Image" src="https://github.com/user-attachments/assets/cff2e6fe-b2bd-4c8d-b22f-f466d3cfabdd" />

What steps can reproduce the bug?

Create a skill in a repo, try to reference it with a slash command.

What is the expected behavior?

Skills would autocomplete on slash if they are detected

Additional information

_No response_

View original on GitHub ↗

7 Comments

github-actions[bot] contributor · 4 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #13547
  • #13321
  • #13918

Powered by Codex Action

etraut-openai contributor · 4 months ago

Skills are typically referenced by $, but they should also show up when you use /.

Have you tried restarting the extension after you add the skill?

Are you sure that the SKILL.md frontmatter is valid?

Suhaibinator · 4 months ago
Skills are typically referenced by $, but they should also show up when you use /.

Aha, well it doesn't show up with the $ prefix either. See:

<img width="492" height="346" alt="Image" src="https://github.com/user-attachments/assets/2f97f62f-f682-4f42-80cc-940876449819" />

Have you tried restarting the extension after you add the skill?

Yes, also tried restarting VSCode entirely.

Are you sure that the SKILL.md frontmatter is valid?

I believe so. I generated the skill using the Codex App.

But here is the content just to be sure:

---
name: generate-protos
description: Regenerate protobuf outputs for this repository, including Go files under `be/proto_models` and TypeScript files under `fe/src/proto`, using the shared `go-common` proto imports and ts-proto plugin settings already used by the project. Use when Codex needs to compile `.proto` changes, refresh stale generated clients/models, or update protobuf outputs after adding imports or messages.
---

# Generate Protos

Regenerate the Go and TypeScript protobuf outputs for this repo with the same settings as the checked-in VS Code task.

## Workflow

1. Work from the repository root.
2. Check that `../go-common/proto` exists and `fe/node_modules/.bin/protoc-gen-ts_proto` is available.
3. Run `scripts/compile_protos.sh` for a full regeneration.
4. Review the generated diffs in `be/proto_models` and `fe/src/proto`. Do not hand-edit generated files.

## Quick Start

Compile every proto file:

```bash
.agent/skills/generate-protos/scripts/compile_protos.sh
/```

## Why This Is Always A Full Rebuild

`ts-proto` runs here with `outputIndex=true`, which rewrites the generated index files from only the `.proto` files included in the current invocation. Partial rebuilds therefore produce broken `fe/src/proto/index*.ts` files. Always regenerate the full set before finishing.

## Troubleshooting

- If `protoc` cannot resolve a shared proto such as `user.proto` or `attachment.proto`, confirm `../go-common/proto` exists.
- If Go generation fails on a new shared import, add another `--go_opt=M<file>.proto=git.per.com/suhaib/go-common/pkg/proto_models` entry in `scripts/compile_protos.sh`.
- If the TypeScript plugin is missing, install frontend dependencies so `fe/node_modules/.bin/protoc-gen-ts_proto` exists.
- If output locations or plugin flags change, update the script instead of typing a new one-off command.
Suhaibinator · 4 months ago

I replaced the "``" with "/`" because otherwise the github comment would assume that the first "``" was the end of the code snippet. In the actual SKILL.md file obviously that "/" is not present.

Suhaibinator · 4 months ago

Here's the cinematic landing page skill.md that I got off the internet somewhere (works with claude code and antigravity so I assume it's valid)

---
name: cinematic-landing-page
description: Builds high-fidelity, cinematic landing pages with GSAP animations, preset design systems, and interactive micro-UI components. Use when the user wants to create a premium landing page, marketing site, or product showcase with scroll animations and polished visual design.
---

# Cinematic Landing Page Builder

## Role

Act as a World-Class Senior Creative Technologist and Lead Frontend Engineer. You build high-fidelity, cinematic "1:1 Pixel Perfect" landing pages. Every site you produce should feel like a digital instrument — every scroll intentional, every animation weighted and professional. Eradicate all generic AI patterns.

## Agent Flow — MUST FOLLOW

When the user asks to build a site (or this file is loaded into a fresh project), immediately ask **exactly these questions** using AskUserQuestion in a single call, then build the full site from the answers. Do not ask follow-ups. Do not over-discuss. Build.

### Questions (all in one AskUserQuestion call)

1. **"What's the brand name and one-line purpose?"** — Free text. Example: "Nura Health — precision longevity medicine powered by biological data."
2. **"Pick an aesthetic direction"** — Single-select from the presets below. Each preset ships a full design system (palette, typography, image mood, identity label).
3. **"What are your 3 key value propositions?"** — Free text. Brief phrases. These become the Features section cards.
4. **"What should visitors do?"** — Free text. The primary CTA. Example: "Join the waitlist", "Book a consultation", "Start free trial".

---

## Aesthetic Presets

Each preset defines: `palette`, `typography`, `identity` (the overall feel), and `imageMood` (Unsplash search keywords for hero/texture images).

### Preset A — "Organic Tech" (Clinical Boutique)
- **Identity:** A bridge between a biological research lab and an avant-garde luxury magazine.
- **Palette:** Moss `#2E4036` (Primary), Clay `#CC5833` (Accent), Cream `#F2F0E9` (Background), Charcoal `#1A1A1A` (Text/Dark)
- **Typography:** Headings: "Plus Jakarta Sans" + "Outfit" (tight tracking). Drama: "Cormorant Garamond" Italic. Data: `"IBM Plex Mono"`.
- **Image Mood:** dark forest, organic textures, moss, ferns, laboratory glassware.
- **Hero line pattern:** "[Concept noun] is the" (Bold Sans) / "[Power word]." (Massive Serif Italic)

### Preset B — "Midnight Luxe" (Dark Editorial)
- **Identity:** A private members' club meets a high-end watchmaker's atelier.
- **Palette:** Obsidian `#0D0D12` (Primary), Champagne `#C9A84C` (Accent), Ivory `#FAF8F5` (Background), Slate `#2A2A35` (Text/Dark)
- **Typography:** Headings: "Inter" (tight tracking). Drama: "Playfair Display" Italic. Data: `"JetBrains Mono"`.
- **Image Mood:** dark marble, gold accents, architectural shadows, luxury interiors.
- **Hero line pattern:** "[Aspirational noun] meets" (Bold Sans) / "[Precision word]." (Massive Serif Italic)

### Preset C — "Brutalist Signal" (Raw Precision)
- **Identity:** A control room for the future — no decoration, pure information density.
- **Palette:** Paper `#E8E4DD` (Primary), Signal Red `#E63B2E` (Accent), Off-white `#F5F3EE` (Background), Black `#111111` (Text/Dark)
- **Typography:** Headings: "Space Grotesk" (tight tracking). Drama: "DM Serif Display" Italic. Data: `"Space Mono"`.
- **Image Mood:** concrete, brutalist architecture, raw materials, industrial.
- **Hero line pattern:** "[Direct verb] the" (Bold Sans) / "[System noun]." (Massive Serif Italic)

### Preset D — "Vapor Clinic" (Neon Biotech)
- **Identity:** A genome sequencing lab inside a Tokyo nightclub.
- **Palette:** Deep Void `#0A0A14` (Primary), Plasma `#7B61FF` (Accent), Ghost `#F0EFF4` (Background), Graphite `#18181B` (Text/Dark)
- **Typography:** Headings: "Sora" (tight tracking). Drama: "Instrument Serif" Italic. Data: `"Fira Code"`.
- **Image Mood:** bioluminescence, dark water, neon reflections, microscopy.
- **Hero line pattern:** "[Tech noun] beyond" (Bold Sans) / "[Boundary word]." (Massive Serif Italic)

---

## Fixed Design System (NEVER CHANGE)

These rules apply to ALL presets. They are what make the output premium.

### Visual Texture
- Implement a global CSS noise overlay using an inline SVG `<feTurbulence>` filter at **0.05 opacity** to eliminate flat digital gradients.
- Use a `rounded-[2rem]` to `rounded-[3rem]` radius system for all containers. No sharp corners anywhere.

### Micro-Interactions
- All buttons must have a **"magnetic" feel**: subtle `scale(1.03)` on hover with `cubic-bezier(0.25, 0.46, 0.45, 0.94)`.
- Buttons use `overflow-hidden` with a sliding background `<span>` layer for color transitions on hover.
- Links and interactive elements get a `translateY(-1px)` lift on hover.

### Animation Lifecycle
- Use `gsap.context()` within `useEffect` for ALL animations. Return `ctx.revert()` in the cleanup function.
- Default easing: `power3.out` for entrances, `power2.inOut` for morphs.
- Stagger value: `0.08` for text, `0.15` for cards/containers.

---

## Component Architecture (NEVER CHANGE STRUCTURE — only adapt content/colors)

### A. NAVBAR — "The Floating Island"
A `fixed` pill-shaped container, horizontally centered.
- **Morphing Logic:** Transparent with light text at hero top. Transitions to `bg-[background]/60 backdrop-blur-xl` with primary-colored text and a subtle `border` when scrolled past the hero. Use `IntersectionObserver` or ScrollTrigger.
- Contains: Logo (brand name as text), 3-4 nav links, CTA button (accent color).

### B. HERO SECTION — "The Opening Shot"
- `100dvh` height. Full-bleed background image (sourced from Unsplash matching preset's `imageMood`) with a heavy **primary-to-black gradient overlay** (`bg-gradient-to-t`).
- **Layout:** Content pushed to the **bottom-left third** using flex + padding.
- **Typography:** Large scale contrast following the preset's hero line pattern. First part in bold sans heading font. Second part in massive serif italic drama font (3-5x size difference).
- **Animation:** GSAP staggered `fade-up` (y: 40 → 0, opacity: 0 → 1) for all text parts and CTA.
- CTA button below the headline, using the accent color.

### C. FEATURES — "Interactive Functional Artifacts"
Three cards derived from the user's 3 value propositions. These must feel like **functional software micro-UIs**, not static marketing cards. Each card gets one of these interaction patterns:

**Card 1 — "Diagnostic Shuffler":** 3 overlapping cards that cycle vertically using `array.unshift(array.pop())` logic every 3 seconds with a spring-bounce transition (`cubic-bezier(0.34, 1.56, 0.64, 1)`). Labels derived from user's first value prop (generate 3 sub-labels).

**Card 2 — "Telemetry Typewriter":** A monospace live-text feed that types out messages character-by-character related to the user's second value prop, with a blinking accent-colored cursor. Include a "Live Feed" label with a pulsing dot.

**Card 3 — "Cursor Protocol Scheduler":** A weekly grid (S M T W T F S) where an animated SVG cursor enters, moves to a day cell, clicks (visual `scale(0.95)` press), activates the day (accent highlight), then moves to a "Save" button before fading out. Labels from user's third value prop.

All cards: `bg-[background]` surface, subtle border, `rounded-[2rem]`, drop shadow. Each card has a heading (sans bold) and a brief descriptor.

### D. PHILOSOPHY — "The Manifesto"
- Full-width section with the **dark color** as background.
- A parallaxing organic texture image (Unsplash, `imageMood` keywords) at low opacity behind the text.
- **Typography:** Two contrasting statements. Pattern:
  - "Most [industry] focuses on: [common approach]." — neutral, smaller.
  - "We focus on: [differentiated approach]." — massive, drama serif italic, accent-colored keyword.
- **Animation:** GSAP `SplitText`-style reveal (word-by-word or line-by-line fade-up) triggered by ScrollTrigger.

### E. PROTOCOL — "Sticky Stacking Archive"
3 full-screen cards that stack on scroll.
- **Stacking Interaction:** Using GSAP ScrollTrigger with `pin: true`. As a new card scrolls into view, the card underneath scales to `0.9`, blurs to `20px`, and fades to `0.5`.
- **Each card gets a unique canvas/SVG animation:**
  1. A slowly rotating geometric motif (double-helix, concentric circles, or gear teeth).
  2. A scanning horizontal laser-line moving across a grid of dots/cells.
  3. A pulsing waveform (EKG-style SVG path animation using `stroke-dashoffset`).
- Card content: Step number (monospace), title (heading font), 2-line description. Derive from user's brand purpose.

### F. MEMBERSHIP / PRICING
- Three-tier pricing grid. Card names: "Essential", "Performance", "Enterprise" (adjust to fit brand).
- **Middle card pops:** Primary-colored background with an accent CTA button. Slightly larger scale or `ring` border.
- If pricing doesn't apply, convert this into a "Get Started" section with a single large CTA.

### G. FOOTER
- Deep dark-colored background, `rounded-t-[4rem]`.
- Grid layout: Brand name + tagline, navigation columns, legal links.
- **"System Operational" status indicator** with a pulsing green dot and monospace label.

---

## Technical Requirements (NEVER CHANGE)

- **Stack:** React 19, Tailwind CSS v3.4.17, GSAP 3 (with ScrollTrigger plugin), Lucide React for icons.
- **Fonts:** Load via Google Fonts `<link>` tags in `index.html` based on the selected preset.
- **Images:** Use real Unsplash URLs. Select images matching the preset's `imageMood`. Never use placeholder URLs.
- **File structure:** Single `App.jsx` with components defined in the same file (or split into `components/` if >600 lines). Single `index.css` for Tailwind directives + noise overlay + custom utilities.
- **No placeholders.** Every card, every label, every animation must be fully implemented and functional.
- **Responsive:** Mobile-first. Stack cards vertically on mobile. Reduce hero font sizes. Collapse navbar into a minimal version.

---

## Build Sequence

After receiving answers to the 4 questions:

1. Map the selected preset to its full design tokens (palette, fonts, image mood, identity).
2. Generate hero copy using the brand name + purpose + preset's hero line pattern.
3. Map the 3 value props to the 3 Feature card patterns (Shuffler, Typewriter, Scheduler).
4. Generate Philosophy section contrast statements from the brand purpose.
5. Generate Protocol steps from the brand's process/methodology.
6. Scaffold the project: `npm create vite@latest`, install deps, write all files.
7. Ensure every animation is wired, every interaction works, every image loads.

**Execution Directive:** "Do not build a website; build a digital instrument. Every scroll should feel intentional, every animation should feel weighted and professional. Eradicate all generic AI patterns."
isCopyman · 3 months ago

I can reproduce a stronger variant of this issue.

Observed behavior:

  • codex CLI sees my newly added custom skills correctly.
  • The VS Code extension still only shows the older subset of skills.
  • This makes it look like the extension is not hot-reloading or refreshing the local skill registry after new skills are added.

Concrete example from my setup:

  • The repository contains newly added local skills under .agents/skills/
  • Codex CLI reports 13 skills available
  • The VS Code extension reports only 10 skills available
  • The missing ones are newly added local custom skills

Practical impact:

  • In CLI, the new skills can be discovered and used
  • In the VS Code extension, the same skills do not appear in the available-skill list, so the agent does not trigger them and falls back to older workflows

Expected behavior:

  • VS Code extension should detect the same local custom skills as Codex CLI
  • If hot reload is not supported, there should at least be a clear manual refresh / reload mechanism for skill discovery

This seems closely related to skill discovery caching / refresh behavior in the extension rather than the skill files themselves, because CLI and extension disagree on the same workspace.

isCopyman · 3 months ago

Linking a more specific follow-up repro here: #16607

That newer issue narrows this down to a resume-path problem:

  • fresh sessions can see the newly added skill
  • UI / explicit $skill invocation can refresh
  • but resumed old threads keep a stale model-visible ## Skills context

So this may be the same broader skill-refresh family, but #16607 focuses on the specific case where the developer-context skill inventory is stale after codex resume, even though discovery/UI already updated.