> ## Documentation Index
> Fetch the complete documentation index at: https://seilabs-docs-skills-registry-and-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Skills Registry

> Install Sei Foundation agent skills into your AI coding assistant with one command. Each skill teaches your assistant a focused slice of Sei — contracts, frontend, precompiles, nodes, payments, security, bridges, or migration.

export const SkillsRegistry = () => {
  const SKILLS = [{
    id: 'sei-contracts',
    title: 'Smart Contracts',
    domain: 'Contracts',
    href: '/evm/evm-general',
    desc: 'Foundry and Hardhat setup, the Sei gas model, OCC-aware contract design, and verifying on Seiscan via Sourcify.'
  }, {
    id: 'sei-frontend',
    title: 'Frontend',
    domain: 'Frontend',
    href: '/evm/building-a-frontend',
    desc: 'wagmi + viem chain config, Sei Global Wallet, dual-address UX, and fast-finality patterns for 400ms blocks.'
  }, {
    id: 'sei-precompiles',
    title: 'Precompiles',
    domain: 'Precompiles',
    href: '/evm/precompiles/example-usage',
    desc: 'Call Sei native precompiles — Bank, Staking, Distribution, Governance, and more — from Solidity and viem.'
  }, {
    id: 'sei-nodes',
    title: 'Nodes & Validators',
    domain: 'Infrastructure',
    href: '/node',
    desc: 'Run full nodes and validators: state sync, snapshots, monitoring, and the SeiDB storage backend.'
  }, {
    id: 'sei-payments',
    title: 'Payments',
    domain: 'Payments',
    href: '/ai/x402',
    desc: 'Accept and send payments on Sei with USDC and x402 HTTP-native micropayments.'
  }, {
    id: 'sei-security',
    title: 'Security',
    domain: 'Security',
    href: '/evm/debugging-contracts',
    desc: 'Simulate-before-write, safe randomness, address-association checks, and AI-agent safety guardrails.'
  }, {
    id: 'sei-bridges',
    title: 'Bridges',
    domain: 'Bridges',
    href: '/evm/bridging/layerzero',
    desc: 'Bridge assets to and from Sei — LayerZero V2 OFTs, Wormhole, and Circle CCTP v2 for native USDC.'
  }, {
    id: 'sei-migration',
    title: 'Migration',
    domain: 'Migration',
    href: '/evm/migrate-from-other-evms',
    desc: 'Port EVM and Solana apps to Sei — the behavioral deltas that break a naive port, plus a Solana-to-Sei concept map.'
  }];
  const INSTALL_CMD = 'npx skills add https://docs.sei.io';
  const FILTERS = ['All', 'Contracts', 'Frontend', 'Precompiles', 'Infrastructure', 'Payments', 'Security', 'Bridges', 'Migration'];
  const [isDark, setIsDark] = useState(false);
  useEffect(() => {
    const el = document.documentElement;
    const update = () => setIsDark(el.classList.contains('dark'));
    update();
    const obs = new MutationObserver(update);
    obs.observe(el, {
      attributes: true,
      attributeFilter: ['class']
    });
    return () => obs.disconnect();
  }, []);
  const [filter, setFilter] = useState('All');
  const [filterHover, setFilterHover] = useState(null);
  const Icon = ({domain, size = 22}) => {
    const common = {
      xmlns: 'http://www.w3.org/2000/svg',
      width: size,
      height: size,
      viewBox: '0 0 24 24',
      fill: 'none',
      stroke: 'currentColor',
      strokeWidth: 1.8,
      strokeLinecap: 'round',
      strokeLinejoin: 'round',
      'aria-hidden': true
    };
    if (domain === 'Contracts') return <svg {...common}>
					<path d="M16 18l6-6-6-6" />
					<path d="M8 6l-6 6 6 6" />
				</svg>;
    if (domain === 'Frontend') return <svg {...common}>
					<rect x="2" y="3" width="20" height="14" rx="2" />
					<path d="M8 21h8M12 17v4" />
				</svg>;
    if (domain === 'Precompiles') return <svg {...common}>
					<rect x="4" y="4" width="16" height="16" rx="2" />
					<path d="M9 9h6v6H9zM2 9h2M2 15h2M20 9h2M20 15h2M9 2v2M15 2v2M9 20v2M15 20v2" />
				</svg>;
    if (domain === 'Infrastructure') return <svg {...common}>
					<rect x="2" y="4" width="20" height="6" rx="2" />
					<rect x="2" y="14" width="20" height="6" rx="2" />
					<path d="M6 7h.01M6 17h.01" />
				</svg>;
    if (domain === 'Payments') return <svg {...common}>
					<rect x="2" y="5" width="20" height="14" rx="2" />
					<path d="M2 10h20" />
				</svg>;
    if (domain === 'Security') return <svg {...common}>
					<path d="M12 3l8 4v5c0 5-3.4 8-8 9-4.6-1-8-4-8-9V7z" />
					<path d="M9 12l2 2 4-4" />
				</svg>;
    if (domain === 'Bridges') return <svg {...common}>
					<path d="M2 17 Q12 6 22 17" />
					<path d="M2 17v3M22 17v3M8 12.5V20M16 12.5V20" />
				</svg>;
    if (domain === 'Migration') return <svg {...common}>
					<path d="M3 8h13M13 5l3 3-3 3" />
					<path d="M21 16H8M11 13l-3 3 3 3" />
				</svg>;
    return <svg {...common}>
				<circle cx="12" cy="12" r="9" />
			</svg>;
  };
  const CopyIcon = ({size = 14}) => <svg xmlns="http://www.w3.org/2000/svg" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<rect x="9" y="9" width="13" height="13" rx="2" />
			<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
		</svg>;
  const CheckIcon = ({size = 14}) => <svg xmlns="http://www.w3.org/2000/svg" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<path d="M20 6L9 17l-5-5" />
		</svg>;
  const ArrowRightIcon = ({size = 14, style}) => <svg xmlns="http://www.w3.org/2000/svg" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" style={style} aria-hidden="true">
			<path d="M5 12h14M12 5l7 7-7 7" />
		</svg>;
  const [SkillCard] = useState(() => ({skill, isDark}) => {
    const [hover, setHover] = useState(false);
    const [copied, setCopied] = useState(false);
    const [copyHover, setCopyHover] = useState(false);
    const [linkHover, setLinkHover] = useState(false);
    const copy = async () => {
      try {
        await navigator.clipboard.writeText(INSTALL_CMD);
        setCopied(true);
        setTimeout(() => setCopied(false), 1600);
      } catch (e) {}
    };
    const accent = isDark ? 'var(--sei-maroon-25)' : 'var(--sei-maroon-100)';
    const linkColor = isDark ? linkHover ? 'var(--sei-cream)' : 'var(--sei-maroon-25)' : 'var(--sei-maroon-100)';
    return <div onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} className="flex flex-col h-full p-5 transition-all duration-200" style={{
      backgroundColor: hover ? 'rgba(128,128,128,0.10)' : 'rgba(128,128,128,0.05)',
      border: '1px solid rgba(128,128,128,0.20)',
      borderRadius: '12px',
      transform: hover ? 'translateY(-2px)' : 'none'
    }}>
				<div className="flex items-center gap-3 mb-3">
					<span className="inline-flex items-center justify-center" style={{
      width: 40,
      height: 40,
      borderRadius: 10,
      backgroundColor: isDark ? 'rgba(185,155,161,0.14)' : 'rgba(96,0,20,0.08)',
      color: accent,
      flexShrink: 0
    }}>
						<Icon domain={skill.domain} />
					</span>
					<div className="flex flex-col">
						<h3 className="text-base font-semibold text-neutral-900 dark:text-neutral-100 leading-tight" style={{
      margin: 0
    }}>
							{skill.title}
						</h3>
						<code className="text-xs text-neutral-500 dark:text-neutral-400" style={{
      fontFamily: 'var(--sei-font-mono)'
    }}>
							{skill.id}
						</code>
					</div>
				</div>

				<p className="text-sm text-neutral-600 dark:text-neutral-400 leading-relaxed flex-grow" style={{
      marginTop: 0
    }}>
					{skill.desc}
				</p>

				<div className="flex items-center justify-between gap-3 mt-4">
					<span className="inline-flex items-center text-xs font-medium px-2 py-0.5" style={{
      color: accent,
      backgroundColor: isDark ? 'rgba(185,155,161,0.12)' : 'rgba(96,0,20,0.07)',
      borderRadius: 999
    }}>
						{skill.domain}
					</span>
					<a href={skill.href} aria-label={`View ${skill.title} docs`} onMouseEnter={() => setLinkHover(true)} onMouseLeave={() => setLinkHover(false)} className="inline-flex items-center gap-1 text-sm font-medium no-underline" style={{
      color: linkColor,
      transition: 'color 0.2s'
    }}>
						<span>View docs</span>
						<ArrowRightIcon size={13} style={{
      transform: linkHover ? 'translateX(0.2rem)' : 'none',
      transition: 'transform 0.25s'
    }} />
					</a>
				</div>

				<button type="button" onClick={copy} onMouseEnter={() => setCopyHover(true)} onMouseLeave={() => setCopyHover(false)} className="inline-flex items-center justify-between gap-2 w-full mt-3 px-3 py-2 text-left" style={{
      backgroundColor: copyHover ? 'rgba(128,128,128,0.12)' : 'rgba(128,128,128,0.06)',
      border: '1px solid rgba(128,128,128,0.20)',
      borderRadius: 8,
      cursor: 'pointer'
    }} aria-label="Copy the Sei Foundation skills install command">
					<code className="text-xs text-neutral-700 dark:text-neutral-300 truncate" style={{
      fontFamily: 'var(--sei-font-mono)'
    }}>
						{INSTALL_CMD}
					</code>
					<span className="inline-flex items-center shrink-0" style={{
      color: copied ? isDark ? '#34d399' : '#059669' : accent
    }}>
						{copied ? <CheckIcon /> : <CopyIcon />}
					</span>
				</button>
			</div>;
  });
  const visible = filter === 'All' ? SKILLS : SKILLS.filter(s => s.domain === filter);
  return <div>
			{}
			<div className="flex flex-wrap gap-2 mb-6">
				{FILTERS.map(f => {
    const active = filter === f;
    const hovered = filterHover === f;
    return <button key={f} type="button" onClick={() => setFilter(f)} onMouseEnter={() => setFilterHover(f)} onMouseLeave={() => setFilterHover(null)} className="text-sm font-medium px-3 py-1.5 transition-colors" style={{
      borderRadius: 999,
      cursor: 'pointer',
      color: active ? '#ffffff' : isDark ? '#d4d4d4' : '#404040',
      backgroundColor: active ? isDark ? 'var(--sei-maroon-100)' : 'var(--sei-maroon-100)' : hovered ? 'rgba(128,128,128,0.14)' : 'rgba(128,128,128,0.07)',
      border: '1px solid rgba(128,128,128,0.20)'
    }}>
							{f}
						</button>;
  })}
			</div>

			{}
			<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5">
				{visible.map(skill => <SkillCard key={skill.id} skill={skill} isDark={isDark} />)}
			</div>

			{visible.length === 0 && <div className="py-10 text-sm text-neutral-500 dark:text-neutral-400 italic">No skills in this category yet.</div>}
		</div>;
};

Sei Foundation publishes a set of **agent skills** — focused, installable knowledge packs that make your AI coding assistant Sei-aware. They're hosted directly on this docs site and follow the open [`skill.md`](https://www.mintlify.com/blog/skill-md) standard, so any compatible assistant (Claude Code, Cursor, Windsurf, and others) can install them.

## Install

Install the complete Foundation set with one command — the CLI detects your installed assistants and lets you pick which to install into:

```bash theme={"dark"}
npx skills add https://docs.sei.io
```

<Info>
  This fetches every skill served at `docs.sei.io/.well-known/skills/` and installs the ones you select. Skills stay current on every docs deploy — no manual updates.
</Info>

## Foundation skills

Filter by domain to find what fits your project. Every card copies the same command — `npx skills add https://docs.sei.io` — which then lets you pick exactly which skills to install, so you can keep your assistant's context lean.

<SkillsRegistry />

## How skills work

Each Foundation skill is a single `SKILL.md` file with YAML frontmatter describing **when** an assistant should reach for it and a focused playbook of Sei-specific facts, code, and pitfalls. Skill content is authored in the canonical [`sei-protocol/sei-skill`](https://github.com/sei-protocol/sei-skill) repository and generated into this site — to fix or extend a skill, open a PR there. Because they're served from this site, they're also discoverable by autonomous agents:

<CardGroup cols={2}>
  <Card title="Discovery endpoint" icon="rss">
    Agents can enumerate every skill at `docs.sei.io/.well-known/skills/` and fetch any `SKILL.md` directly — no install step required.
  </Card>

  <Card title="Always up to date" icon="arrows-rotate">
    Skills are generated from [`sei-protocol/sei-skill`](https://github.com/sei-protocol/sei-skill), versioned under `.mintlify/skills/`, and redeploy with the docs.
  </Card>
</CardGroup>

## Foundation vs. the full sei-skill

The skills above are **focused** — one domain each, ideal when you want to keep your assistant's context tight. If you'd rather load a single comprehensive knowledge base covering every domain at once, use the full [**sei-skill**](/ai/sei-skill) instead.

| Use a Foundation skill when…                      | Use the full [sei-skill](/ai/sei-skill) when…  |
| ------------------------------------------------- | ---------------------------------------------- |
| You work mostly in one area (e.g. contracts only) | You want all-domain coverage in one install    |
| You want to keep assistant context lean           | You're starting a new Sei project from scratch |
| You're composing your own skill set               | You want the editor-resident Claude Code skill |

## Community skills

The skills registry is open. Ecosystem teams — DEXs, lending protocols, oracles, infra providers — can publish their own skills so developers building on top of them get accurate, integration-specific guidance from their AI assistant.

<Card title="Publish your skill" icon="upload" href="https://github.com/sei-protocol/sei-docs">
  Host a `SKILL.md` in your own docs (any Mintlify site serves `/.well-known/skills/` automatically), then open a `sei-docs` PR to get it listed in this registry. Foundation skill content itself lives in [`sei-protocol/sei-skill`](https://github.com/sei-protocol/sei-skill).
</Card>

## Next steps

<CardGroup cols={2}>
  <Card title="sei-skill" icon="brain" href="/ai/sei-skill">
    The full multi-domain knowledge base, with per-assistant install instructions and example prompts.
  </Card>

  <Card title="MCP Server" icon="plug" href="/ai/mcp-server">
    Give your assistant live on-chain access — read balances, send transactions, and query network state.
  </Card>
</CardGroup>
