Communitygithub.com

diegosouzapw/awesome-omni-skills

Skill für das Astro Web Framework. Verwenden Sie diese Skill, wenn der Benutzer inhaltsorientierte Websites mit Astro erstellen möchte – standardmäßig null JavaScript, Insel-Architektur, Multi-Framework-Komponenten und Markdown/MDX-Unterstützung – und der Operator den ursprünglichen Workflow, die kopierten Support-Dateien und die Herkunft vor dem Zusammenführen oder der Übergabe bewahren soll.

Was ist awesome-omni-skills?

Diese Skill ist eine redaktionelle Aufnahme des Astro-Workflows aus dem Repository `plugins/antigravity-awesome-skills/skills/astro` von `https://github.com/sickn33/antigravity-awesome-skills`, verpackt in das native Omni-Skills-Format. Sie bewahrt die vollständige Herkunft des importierten Quellcodes durch einen `external_source`-Block in der `metadata.json` und eine separate `ORIGIN.md`-Datei. Der Hauptfokus liegt darauf, dass der Operator den upstream-Workflow, die Support-Dateien und den Repository-Kontext intakt hält, während der öffentliche Validator und der private Enhancer normal weiterarbeiten können. Die Skill-Dokumentation enthält eine detaillierte Schritt-für-Schritt-Anleitung für Astro: von der Projekteinrichtung (`npm create astro@latest`) über die Komponentensyntax, dateibasiertes Routing, Content Collections, selektive Hydrierung mit `client:`-Direktiven bis hin zum SSR-Modus. Sie ist ideal für Entwickler, die inhaltsreiche Websites (Blogs, Dokumentationen, Portfolios) mit hoher Performance und minimalem JavaScript erstellen möchten.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor✓Antigravity✓Gemini CLI✓OpenCode
npx skills add https://github.com/diegosouzapw/awesome-omni-skills/tree/HEAD/skills/astro-v2

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Astro Web Framework

Übersicht

Diese öffentliche Aufnahmekopie verpackt plugins/antigravity-awesome-skills/skills/astro aus https://github.com/sickn33/antigravity-awesome-skills in das native Omni Skills-Redaktionsformat, ohne den Ursprung zu verbergen.

Verwenden Sie sie, wenn der Operator den upstream-Workflow, die Support-Dateien und den Repository-Kontext intakt halten muss, während der öffentliche Validator und der private Enhancer ihren normalen downstream-Fluss fortsetzen.

Diese Aufnahme bewahrt die kopierten upstream-Dateien intakt und verwendet den external_source-Block in metadata.json sowie ORIGIN.md als Provenienzanker für die Überprüfung.

Astro Web Framework

Importierte Quellabschnitte, die nicht sauber auf die öffentlichen Überschriften abgebildet werden konnten, sind unten oder in den Support-Dateien weiterhin erhalten. Bemerkenswerte importierte Abschnitte: Funktionsweise, Sicherheitshinweise, Häufige Fallstricke, Einschränkungen.

Wann diese Skill verwenden

Verwenden Sie diesen Abschnitt als Trigger-Filter. Er sollte die Aktivierungsgrenze explizit machen, bevor der Operator Dateien lädt, Befehle ausführt oder einen Pull-Request öffnet.

  • Verwenden beim Erstellen eines Blogs, einer Dokumentationsseite, einer Marketingseite oder eines Portfolios
  • Verwenden, wenn Performance und Core Web Vitals die höchste Priorität haben
  • Verwenden, wenn das Projekt inhaltslastig mit Markdown- oder MDX-Dateien ist
  • Verwenden, wenn Sie SSG (statische) Ausgabe mit optionalem SSR für dynamische Routen wünschen
  • Verwenden, wenn der Benutzer nach .astro-Dateien, Astro.props, Content Collections oder client:-Direktiven fragt
  • Verwenden, wenn die Anfrage klar mit der importierten Quellintention übereinstimmt: Inhaltsorientierte Websites mit Astro erstellen – standardmäßig null JavaScript, Insel-Architektur, Multi-Framework-Komponenten und Markdown/MDX-Unterstützung.

Bedientabelle

SituationHier startenWarum es wichtig ist
Erste Verwendungmetadata.jsonBestätigt Repository, Branch, Commit und importierten Pfad durch den external_source-Block, bevor der kopierte Workflow berührt wird
ProvenienzprüfungORIGIN.mdGibt Prüfern einen Audit-Trail in Klartext für die importierte Quelle
Workflow-AusführungSKILL.mdBeginnt mit der kleinsten kopierten Datei, die die Ausführung materiell ändert
Unterstützender KontextSKILL.mdFügt die nächstrelevanteste kopierte Quelldatei hinzu, ohne das gesamte Paket zu laden
Übergabeentscheidung## Verwandte SkillsHilft dem Operator, bei Abweichung der Aufgabe zu einer stärkeren nativen Skill zu wechseln

Workflow

Dieser Workflow ist bewusst gleichzeitig redaktionell und operativ. Er hält die importierte Quelle für den Operator nützlich, während er gleichzeitig die öffentlichen Aufnahmestandards erfüllt, die den downstream Enhancer-Fluss speisen.

  1. Bestätigen Sie das Benutzerziel, den Umfang des importierten Workflows und ob diese Skill noch der richtige Router für die Aufgabe ist.
  2. Lesen Sie die Übersichts- und Provenienzdateien, bevor Sie kopierte upstream Support-Dateien laden.
  3. Laden Sie nur die Referenzen, Beispiele, Prompts oder Skripte, die das Ergebnis für die aktuelle Anfrage materiell ändern.
  4. Führen Sie den upstream-Workflow aus, während Provenienz- und Quellgrenzen in den Arbeitsnotizen explizit bleiben.
  5. Validieren Sie das Ergebnis anhand der upstream-Erwartungen und der Beweise, auf die Sie in den kopierten Dateien verweisen können.
  6. Eskalieren oder übergeben Sie an eine verwandte Skill, wenn die Arbeit aus dem Kernbereich dieses importierten Workflows herausfällt.
  7. Dokumentieren Sie vor dem Zusammenführen oder Schließen, was verwendet wurde, was geändert wurde und was der Prüfer noch überprüfen muss.

Importierte Workflow-Notizen

Importiert: Übersicht

Astro ist ein Web-Framework, das für inhaltsreiche Websites konzipiert ist – Blogs, Dokumentationen, Portfolios, Marketingseiten und E-Commerce. Seine Kerninnovation ist die Insel-Architektur: Standardmäßig sendet Astro null JavaScript an den Browser. Interaktive Komponenten werden selektiv als isolierte „Inseln“ hydriert. Astro unterstützt gleichzeitig React, Vue, Svelte, Solid und andere UI-Frameworks im selben Projekt, sodass Sie das richtige Werkzeug pro Komponente wählen können.

Importiert: Funktionsweise

Schritt 1: Projekteinrichtung

npm create astro@latest my-site
cd my-site
npm install
npm run dev

Integrationen nach Bedarf hinzufügen:

npx astro add tailwind        # Tailwind CSS
npx astro add react           # React-Komponentenunterstützung
npx astro add mdx             # MDX-Unterstützung
npx astro add sitemap         # Automatische sitemap.xml
npx astro add vercel          # Vercel SSR-Adapter

Projektstruktur:

src/
  pages/          ← Dateibasiertes Routing (.astro, .md, .mdx)
  layouts/        ← Wiederverwendbare Seiten-Schalen
  components/     ← UI-Komponenten (.astro, .tsx, .vue, usw.)
  content/        ← Typsichere Content Collections (Markdown/MDX)
  styles/         ← Globales CSS
public/           ← Statische Assets (werden unverändert kopiert)
astro.config.mjs  ← Framework-Konfiguration

Schritt 2: Astro-Komponentensyntax

.astro-Dateien haben einen Code-Fence oben (server-seitig) und eine Vorlage darunter:

---
// src/components/Card.astro
// Dieser Block läuft NUR auf dem Server – niemals im Browser
interface Props {
  title: string;
  href: string;
  description: string;
}

const { title, href, description } = Astro.props;
---

<article class="card">
  <h2><a href={href}>{title}</a></h2>
  <p>{description}</p>
</article>

<style>
  /* Automatisch auf diese Komponente begrenzt */
  .card { border: 1px solid #eee; padding: 1rem; }
</style>

Schritt 3: Dateibasierte Seiten und Routing

src/pages/index.astro          → /
src/pages/about.astro          → /about
src/pages/blog/[slug].astro    → /blog/:slug (dynamisch)
src/pages/blog/[...path].astro → /blog/* (Auffangpfad)

Dynamische Route mit getStaticPaths:

---
// src/pages/blog/[slug].astro
export async function getStaticPaths() {
  const posts = await getCollection('blog');
  return posts.map(post => ({
    params: { slug: post.slug },
    props: { post },
  }));
}

const { post } = Astro.props;
const { Content } = await post.render();
---

<h1>{post.data.title}</h1>
<Content />

Schritt 4: Content Collections

Content Collections bieten typsicheren Zugriff auf Markdown- und MDX-Dateien:

// src/content/config.ts
import { z, defineCollection } from 'astro:content';

const blog = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),
    tags: z.array(z.string()).default([]),
    draft: z.boolean().default(false),
  }),
});

export const collections = { blog };
---
// src/pages/blog/index.astro
import { getCollection } from 'astro:content';

const posts = (await getCollection('blog'))
  .filter(p => !p.data.draft)
  .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());
---

<ul>
  {posts.map(post => (
    <li>
      <a href={`/blog/${post.slug}`}>{post.data.title}</a>
      <time>{post.data.date.toLocaleDateString()}</time>
    </li>
  ))}
</ul>

Schritt 5: Inseln – Selektive Hydrierung

Standardmäßig rendern UI-Framework-Komponenten zu statischem HTML ohne JavaScript. Verwenden Sie client:-Direktiven zum Hydrieren:

---
import Counter from '../components/Counter.tsx';  // React-Komponente
import VideoPlayer from '../components/VideoPlayer.svelte';
---

<!-- Statisches HTML – kein JavaScript an den Browser gesendet -->
<Counter initialCount={0} />

<!-- Beim Seitenladen sofort hydrieren -->
<Counter initialCount={0} client:load />

<!-- Hydrieren, wenn die Komponente in den sichtbaren Bereich scrollt -->
<VideoPlayer src="/demo.mp4" client:visible />

<!-- Nur hydrieren, wenn der Browser im Leerlauf ist -->
<Analytics client:idle />

<!-- Nur bei einer bestimmten Media Query hydrieren -->
<MobileMenu client:media="(max-width: 768px)" />

Schritt 6: Layouts

---
// src/layouts/BaseLayout.astro
interface Props {
  title: string;
  description?: string;
}
const { title, description = 'My Astro Site' } = Astro.props;
---

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>{title}</title>
    <meta name="description" content={description} />
  </head>
  <body>
    <nav>...</nav>
    <main>
      <slot />  <!-- Seiteninhalt wird hier gerendert -->
    </main>
    <footer>...</footer>
  </body>
</html>
---
// src/pages/about.astro
import BaseLayout from '../layouts/BaseLayout.astro';
---

<BaseLayout title="About Us">
  <h1>About Us</h1>
  <p>Welcome to our company...</p>
</BaseLayout>

Schritt 7: SSR-Modus (On-Demand-Rendering)

Aktivieren Sie SSR für dynamische Seiten, indem Sie einen Adapter setzen:

// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';

export default defineConfig({
  output: 'hybrid',  // 'static' | 'server' | 'hybrid'
  adapter: vercel(),
});

Einzelne Seiten mit export const prerender = false für SSR aktivieren.

Beispiele

Beispiel 1: Direkt nach dem upstream-Workflow fragen

Verwenden Sie @astro-v2 für <Aufgabe>. Starten Sie vom kopierten upstream-Workflow, laden Sie nur die Dateien, die das Ergebnis ändern, und halten Sie die Provenienz in der Antwort sichtbar.

Erklärung: Dies ist der sicherste Ausgangspunkt, wenn der Operator den importierten Workflow, aber nicht das gesamte Repository benötigt.

Beispiel 2: Um eine Provenienz-gestützte Überprüfung bitten

Überprüfen Sie @astro-v2 anhand von metadata.json und ORIGIN.md. Erklären Sie dann, welche kopierten upstream-Dateien Sie zuerst laden würden und warum.

Erklärung: Verwenden Sie dies vor der Überprüfung oder Fehlerbehebung, wenn Sie eine präzise, auditierbare Erklärung der Herkunft und Dateiauswahl benötigen.

Beispiel 3: Die kopierten Support-Dateien vor der Ausführung eingrenzen

Verwenden Sie @astro-v2 für <Aufgabe>. Laden Sie nur die kopierten Referenzen, Beispiele oder Skripte, die das Ergebnis ändern, und nennen Sie die Dateien explizit, bevor Sie fortfahren.

Erklärung: Dies hält die Skill im Einklang mit progressiver Offenlegung, anstatt standardmäßig das gesamte kopierte Paket zu laden.

Beispiel 4: Ein Prüfungspaket erstellen

Überprüfen Sie @astro-v2 anhand der kopierten upstream-Dateien plus Provenienz. Fassen Sie dann etwaige Lücken vor dem Zusammenführen zusammen.

Erklärung: Dies ist nützlich, wenn der PR auf eine menschliche Überprüfung wartet und Sie ein wiederholbares Audit-Paket wünschen.

Importierte Nutzungshinweise

Importiert: Beispiele

Beispiel 1: Blog mit RSS-Feed

// src/pages/rss.xml.ts
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';

export async function GET(context) {
  const posts = await getCollection('blog');
  return rss({
    title: 'My Blog',
    description: 'Latest posts',
    site: context.site,
    items: posts.map(post => ({
      title: post.data.title,
      pubDate: post.data.date,
      link: `/blog/${post.slug}/`,
    })),
  });
}

Beispiel 2: API-Endpunkt (SSR)

// src/pages/api/subscribe.ts
import type { APIRoute } from 'astro';

export const POST: APIRoute = async ({ request }) => {
  const { email } = await request.json();

  if (!email) {
    return new Response(JSON.stringify({ error: 'Email required' }), {
      status: 400,
      headers: { 'Content-Type': 'application/json' },
    });
  }

  await addToNewsletter(email);
  return new Response(JSON.stringify({ success: true }), { status: 200 });
};

Beispiel 3: React-Komponente als Insel

// src/components/SearchBox.tsx
import { useState } from 'react';

export default function SearchBox() {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);

  async function search(e: React.FormEvent) {
    e.preventDefault();
    const data = await fetch(`/api/search?q=${query}`).then(r => r.json());
    setResults(data);
  }

  return (
    <form onSubmit={search}>
      <input value={query} onChange={e => setQuery(e.target.value)} />
      <button type="submit">Search</button>
      <ul>{results.map(r => <li key={r.id}>{r.title}</li>)}</ul>
    </form>
  );
}
---
import SearchBox from '../components/SearchBox.tsx';
---
<!-- Sofort hydriert – diese Insel ist interaktiv -->
<SearchBox client:load />

Best Practices

Behandeln Sie die generierte öffentliche Skill als überprüfbare Verpackungsschicht um das upstream-Repository. Das Ziel ist es, die Provenienz explizit zu halten und nur das kopierte Quellmaterial zu laden, das die Ausführung materiell verbessert.

  • ✅ Halten Sie die meisten Komponenten als statische .astro-Dateien – hydrieren Sie nur, was interaktiv sein muss
  • ✅ Verwenden Sie Content Collections für alle Markdown/MDX-Inhalte – Sie erhalten Typsicherheit und automatische Validierung
  • ✅ Bevorzugen Sie client:visible gegenüber client:load für Komponenten unterhalb des Bildschirmrands, um das anfängliche JS zu reduzieren
  • ✅ Verwenden Sie import.meta.env für Umgebungsvariablen – prefixen Sie öffentliche Variablen mit PUBLIC_
  • ✅ Fügen Sie von astro:transitions für flüssige Seitennavigation ohne vollständiges SPA hinzu
  • ❌ Verwenden Sie nicht client:load auf jeder Komponente – dies konterkariert Astros Leistungsvorteil
  • ❌ Setzen Sie keine Geheimnisse in .astro-Frontmatter, die in clientseitigen Vorlagen verwendet werden

Importierte Betriebshinweise

Importiert: Best Practices

  • ✅ Halten Sie die meisten Komponenten als statische .astro-Dateien – hydrieren Sie nur, was interaktiv sein muss
  • ✅ Verwenden Sie Content Collections für alle Markdown/MDX-Inhalte – Sie erhalten Typsicherheit und automatische Validierung
  • ✅ Bevorzugen Sie client:visible über client:load für Komponenten unterhalb des Bildschirmrands, um das anfängliche JS zu reduzieren
  • ✅ Verwenden Sie import.meta.env für Umgebungsvariablen – prefixen Sie öffentliche Variablen mit PUBLIC_
  • ✅ Fügen Sie <ViewTransitions /> von astro:transitions für flüssige Seitennavigation ohne vollständiges SPA hinzu
  • ❌ Verwenden Sie nicht client:load auf jeder Komponente – dies konterkariert Astros Leistungsvorteil
  • ❌ Setzen Sie keine Geheimnisse in .astro-Frontmatter, die in clientseitigen Vorlagen verwendet werden
  • ❌ Überspringen Sie nicht getStaticPaths für dynamische Routen im statischen Modus – Builds werden fehlschlagen

Fehlerbehebung

Problem: Der Operator hat den importierten Kontext übersprungen und zu generisch geantwortet

Symptome: Das Ergebnis ignoriert den upstream-Workflow in plugins/antigravity-awesome-skills/skills/astro, erwähnt keine Provenienz oder verwendet überhaupt keine kopierten Quelldateien. Lösung: Öffnen Sie erneut metadata.json, ORIGIN.md und die relevantesten kopierten upstream-Dateien. Prüfen Sie zuerst den external_source-Block, dann wiederholen Sie die Provenienz, bevor Sie fortfahren.

Problem: Der importierte Workflow fühlt sich bei der Überprüfung unvollständig an

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

diegosouzapw/awesome-omni-skills

AgentFolio workflow skill. Use this skill when the user needs Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

AgentFolio workflow skill. Use this skill when the user needs Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Agent skill at skills/ai-ugc-ads/SKILL.md

diegosouzapw/awesome-omni-skills

Copy Editing workflow skill. Use this skill when the user needs You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Copy Editing workflow skill. Use this skill when the user needs You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Copy Editing workflow skill. Use this skill when the user needs You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Fal Image Edit workflow skill. Use this skill when the user needs AI-powered image editing with style transfer and object removal and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Fal Image Edit workflow skill. Use this skill when the user needs AI-powered image editing with style transfer and object removal and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

frontend-design workflow skill. Use this skill when the user needs Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics. Do NOT use for design review or audit (use web-design-guidelines or web-quality-audit) and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Frontend Design (Distinctive, Production-Grade) workflow skill. Use this skill when the user needs You are a frontend designer-engineer, not a layout generator and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

i18n & Localization workflow skill. Use this skill when the user needs Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

i18n & Localization workflow skill. Use this skill when the user needs Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Interactive Portfolio workflow skill. Use this skill when the user needs Expert in building portfolios that actually land jobs and clients - and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Interactive Portfolio workflow skill. Use this skill when the user needs Expert in building portfolios that actually land jobs and clients - and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Landing Page Generator workflow skill. Use this skill when the user needs Generates high-converting Next.js/React landing pages with Tailwind CSS. Uses PAS, AIDA, and BAB frameworks for optimized copy/components (Heroes, Features, Pricing). Focuses on Core Web Vitals/SEO and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Landing Page Generator workflow skill. Use this skill when the user needs Generates high-converting Next.js/React landing pages with Tailwind CSS. Uses PAS, AIDA, and BAB frameworks for optimized copy/components (Heroes, Features, Pricing). Focuses on Core Web Vitals/SEO and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Interactive Portfolio workflow skill. Use this skill when the user needs Expert in building portfolios that actually land jobs and clients - and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

Paid Creative AI workflow skill. Use this skill when the user needs When the user wants to create AI-generated ad creative, test performance creative, manage creative fatigue, or optimize paid media with AI tools. Also use when the user mentions 'ad creative,' 'performance creative,' 'creative testing,' 'creative fatigue,' 'Meta ads,' 'Google ads,' 'TikTok ads,' 'AI ads,' 'ad budget,' 'ROAS,' 'Advantage+,' or 'Performance Max.' This skill covers AI-powered paid creative from generation through performance optimization. Do NOT use for technical implementation, code review, or software architecture and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

SEO-AEO Landing Page Writer workflow skill. Use this skill when the user needs Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

diegosouzapw/awesome-omni-skills

SEO-AEO Landing Page Writer workflow skill. Use this skill when the user needs Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

Verwandte Skills