Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
"name": "python-skills",
"source": "./plugins/python-skills",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin.",
"version": "1.0.0",
"version": "1.0.1",
"license": "Apache-2.0",
"keywords": ["python", "guidelines", "docstrings", "best-practices", "idiomatic"],
"category": "development",
Expand Down
3 changes: 2 additions & 1 deletion .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Ask yourself: "What can I delete instead of add, and does this trace to what was
- Reflect on tool results before acting, then plan and take the best next action.
- Run independent operations in parallel.
- Verify your solution before finishing.
- Before committing to an approach, and after two failed attempts at the same problem, get a second opinion with `/codex-advisor` or `/fable-advisor` if either is installed.
- Never create files unless necessary. Prefer editing. Never create docs (*.md, README) unless asked.
- Prefer `rg` over `grep`.
- When updating code, check related code in the same and other files for consistency.
Expand Down Expand Up @@ -54,7 +55,7 @@ Use `gh` CLI for all GitHub interactions. Never clone repositories to read code.

## Python Coding

For full Python guidelines, install and enable the `python-skills` plugin (`python-guidelines` skill). Key rules always in effect:
For full Python guidelines, install and enable the `python-skills` plugin (`python-guidelines` skill). Read its `references/` files (idiomatic patterns, Zen of Python, Google style guide, Effective Python) before you write the code, not after. Key rules always in effect:

- **Package manager**: uv (NOT pip). **Paths**: pathlib, not os.path.
- **Verify before planning**: Run `python -c "..."` to test hypotheses. Never assume.
Expand Down
2 changes: 1 addition & 1 deletion .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"name": "python-skills",
"source": "./plugins/python-skills",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin.",
"version": "1.0.0",
"version": "1.0.1",
"license": "Apache-2.0"
},
{
Expand Down
65 changes: 65 additions & 0 deletions .github/workflows/site-refresh.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Website daily refresh

# Cloudflare Workers Builds redeploys on every push to main, so the star count on both
# sites is only as fresh as the last push. This rebuilds and deploys once a day, and
# skips when a push or an earlier refresh already deployed within the last 24 hours.

on:
schedule:
- cron: "17 6 * * *"
workflow_dispatch:
inputs:
force:
description: Deploy even if something already shipped in the last 24 hours
type: boolean
default: false

permissions:
contents: read
actions: read

jobs:
refresh:
name: Rebuild and deploy
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ github.token }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
steps:
- uses: actions/checkout@v4
- name: Check whether a deploy is due
id: check
env:
GH_TOKEN: ${{ github.token }}
run: |
pushed=$(git log -1 --format=%ct)
refreshed=$(gh run list --workflow site-refresh.yml --status success --limit 1 --json updatedAt --jq '.[0].updatedAt // empty')
[ -n "$refreshed" ] && refreshed=$(date -d "$refreshed" +%s) || refreshed=0
newest=$(( pushed > refreshed ? pushed : refreshed ))
age=$(( $(date +%s) - newest ))
echo "Last deploy was $(( age / 3600 ))h ago"
echo "due=$([ $age -ge 86400 ] || [ "${{ inputs.force }}" = "true" ] && echo true || echo false)" >> "$GITHUB_OUTPUT"
[ -n "$CLOUDFLARE_API_TOKEN" ] || echo "::warning::CLOUDFLARE_API_TOKEN is unset, nothing will deploy"
- uses: actions/setup-node@v4
if: steps.check.outputs.due == 'true' && env.CLOUDFLARE_API_TOKEN != ''
with:
node-version: 22
cache: npm
cache-dependency-path: site/package-lock.json
- run: npm ci --prefix site
if: steps.check.outputs.due == 'true' && env.CLOUDFLARE_API_TOKEN != ''
- name: Deploy claudesettings.com
if: steps.check.outputs.due == 'true' && env.CLOUDFLARE_API_TOKEN != ''
env:
SITE_VARIANT: settings
run: |
npm run build --prefix site
npx --yes wrangler deploy --config wrangler.claudesettings.jsonc
- name: Deploy agentplugins.net
if: steps.check.outputs.due == 'true' && env.CLOUDFLARE_API_TOKEN != ''
env:
SITE_VARIANT: plugins
run: |
npm run build --prefix site
npx --yes wrangler deploy --config wrangler.agentplugins.jsonc
4 changes: 3 additions & 1 deletion .github/workflows/site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:
- ".cursor-plugin/marketplace.json"
- "plugins/**/.claude-plugin/plugin.json"
- "plugins/**/gemini-extension.json"
- "AGENTS.md"
- ".codex/config.toml"
- "INSTALL.md"
- ".github/workflows/site.yml"
pull_request:
Expand All @@ -26,6 +26,8 @@ jobs:
build:
name: Build websites
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
Expand Down
4 changes: 2 additions & 2 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Complete installation guide for Claude Code, dependencies, and this configuration.

> Use the [plugin marketplace](README.md#installation) to install agents/commands/hooks/MCP. You'll still need to complete prerequisites and create the AGENTS.md symlink.
> Use the [plugin marketplace](README.md#installation) to install agents/commands/hooks/MCP. You'll still need to complete prerequisites and set up the shared guidance file.

## Prerequisites

Expand Down Expand Up @@ -131,7 +131,7 @@ npm install -g prettier@3.6.2 prettier-plugin-sh

### Create Shared Agent Guidance

Create symlinks for cross-tool compatibility ([AGENTS.md](https://agents.md/)):
Start from [`.claude/CLAUDE.md`](https://github.com/fcakyon/claude-codex-settings/blob/main/.claude/CLAUDE.md), the guidance file this repo ships for your projects. `/claude-tools:sync-claude-md` pulls it into `~/.claude/CLAUDE.md`; in a single project, paste it as `CLAUDE.md` instead. Then symlink it for cross-tool compatibility ([AGENTS.md](https://agents.md/)):

```bash
ln -sfn CLAUDE.md AGENTS.md
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ cursor plugin install simplify@claude-settings

</details>

Create symlinks for cross-tool compatibility:
Want the shared agent guidance too? [`.claude/CLAUDE.md`](https://github.com/fcakyon/claude-codex-settings/blob/main/.claude/CLAUDE.md) is the file written for your projects. Run `/claude-tools:sync-claude-md` to pull it into `~/.claude/CLAUDE.md`, or paste it into a project as `CLAUDE.md`, then point the other tools at the same file:

```bash
ln -sfn CLAUDE.md AGENTS.md
ln -sfn CLAUDE.md GEMINI.md
ln -sfn CLAUDE.md AGENTS.md # Codex CLI, Cursor, Copilot
ln -sfn CLAUDE.md GEMINI.md # Gemini CLI
```

## Plugins
Expand Down
2 changes: 1 addition & 1 deletion plugins/python-skills/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "python-skills",
"version": "1.0.0",
"version": "1.0.1",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin.",
"license": "Apache-2.0"
}
2 changes: 1 addition & 1 deletion plugins/python-skills/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "python-skills",
"version": "1.0.0",
"version": "1.0.1",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin.",
"license": "Apache-2.0"
}
2 changes: 1 addition & 1 deletion plugins/python-skills/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "python-skills",
"version": "1.0.0",
"version": "1.0.1",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin.",
"license": "Apache-2.0"
}
2 changes: 1 addition & 1 deletion plugins/python-skills/gemini-extension.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "python-skills",
"version": "1.0.0",
"version": "1.0.1",
"description": "Python best practices grounded in PEP 8, PEP 20 (Zen of Python), Google Python Style Guide, and Effective Python by Brett Slatkin."
}
10 changes: 5 additions & 5 deletions plugins/python-skills/skills/python-guidelines/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ Ask yourself: "Would a new developer understand this function from the docstring

## Reference Files

For deeper guidance, see the reference files in `references/`:
Read the matching file before you write the code, not after:

- `zen-of-python.md` -- Full Zen of Python (PEP 20) with annotations
- `google-style-guide.md` -- Curated sections: exceptions, defaults, imports, naming, comments
- `idiomatic-patterns.md` -- 18 Python idioms with before/after code examples
- `effective-python-tips.md` -- Key tips from "Effective Python" by Brett Slatkin, organized by category
- [`references/idiomatic-patterns.md`](references/idiomatic-patterns.md) -- read when writing loops, comprehensions, unpacking, context managers, or dataclasses. 18 idioms with before/after code
- [`references/zen-of-python.md`](references/zen-of-python.md) -- read when choosing between two designs or judging whether an abstraction earns its place. PEP 20 with annotations
- [`references/google-style-guide.md`](references/google-style-guide.md) -- read when deciding on exceptions, mutable defaults, import style, naming, or comments
- [`references/effective-python-tips.md`](references/effective-python-tips.md) -- read when reviewing or refactoring existing code. Key tips from "Effective Python" (Brett Slatkin)
4 changes: 2 additions & 2 deletions site/src/components/Editor.astro
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ const lines = editorFiles.map((file) => {
<div class="tree-row folder-row"><span class="tree-caret">⌄</span><Icon name="folder" size={18} /><span>.claude</span></div>
<button class="tree-row tree-file is-active" type="button" data-file="claude"><Icon name="file" size={17} /><span>CLAUDE.md</span></button>
<button class="tree-row tree-file" type="button" data-file="settings"><Icon name="file" size={17} /><span>settings.json</span></button>
<div class="tree-row folder-row"><span class="tree-caret">›</span><Icon name="folder" size={18} /><span>.codex</span></div>
<div class="tree-row folder-row"><span class="tree-caret">⌄</span><Icon name="folder" size={18} /><span>.codex</span></div>
<button class="tree-row tree-file" type="button" data-file="codex"><Icon name="file" size={17} /><span>config.toml</span></button>
<div class="tree-row folder-row"><span class="tree-caret">›</span><Icon name="folder" size={18} /><span>.vscode</span></div>
<button class="tree-row tree-file root-file" type="button" data-file="agents"><Icon name="file" size={17} /><span>AGENTS.md</span></button>
</aside>
<div class="editor-main">
<div class="tabs" role="tablist" aria-label="Configuration files">
Expand Down
6 changes: 4 additions & 2 deletions site/src/components/Header.astro
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
import Icon from "./Icon.astro";
import { repositoryUrl, type SiteVariant } from "../lib/content";
import { repositoryStars, repositoryUrl, type SiteVariant } from "../lib/content";

interface Props {
variant: SiteVariant;
}

const { variant } = Astro.props;
const settings = variant === "settings";
const stars = await repositoryStars();
const nav = settings
? [["Install", "#install"], ["Plugins", "#plugins"], ["Configuration", "#configuration"], ["GitHub", repositoryUrl]]
: [["Browse", "#browse"], ["Install", "#install"], ["Compatibility", "#compatibility"], ["GitHub", repositoryUrl]];
Expand All @@ -20,6 +21,7 @@ const nav = settings
</nav>
<a class="button primary header-cta" href={repositoryUrl} target="_blank" rel="noreferrer">
<Icon name="github" size={21} />
<span>View on GitHub</span>
<span class="cta-label">View on GitHub</span>
{stars && <span class="star-count"><Icon name="star" size={15} />{stars.toLocaleString("en-US")}<span class="sr-only"> stars</span></span>}
</a>
</header>
13 changes: 12 additions & 1 deletion site/src/components/Icon.astro
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
export type IconName =
| "arrow" | "chevron" | "copy" | "file" | "folder" | "github" | "linkedin" | "search" | "star" | "x"
| "claude" | "openai" | "cursor" | "gemini";

interface Props {
name: "arrow" | "chevron" | "copy" | "file" | "folder" | "github" | "search";
name: IconName;
size?: number;
}

Expand All @@ -9,6 +13,13 @@ const { name, size = 20 } = Astro.props;

<svg width={size} height={size} viewBox="0 0 24 24" fill="none" aria-hidden="true">
{name === "github" && <path fill="currentColor" d="M12 .7a11.5 11.5 0 0 0-3.64 22.4c.58.1.79-.25.79-.56v-2.23c-3.22.7-3.9-1.37-3.9-1.37-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.7.08-.7 1.16.08 1.78 1.2 1.78 1.2 1.04 1.77 2.72 1.26 3.38.96.1-.75.4-1.26.74-1.55-2.57-.29-5.27-1.28-5.27-5.69 0-1.26.45-2.28 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.16 1.18a10.96 10.96 0 0 1 5.76 0c2.2-1.49 3.16-1.18 3.16-1.18.63 1.59.23 2.76.11 3.05.74.81 1.19 1.83 1.19 3.09 0 4.42-2.71 5.39-5.29 5.68.42.36.78 1.06.78 2.14v3.17c0 .31.21.67.8.56A11.5 11.5 0 0 0 12 .7Z" />}
{name === "x" && <path fill="currentColor" d="M18.9 1.15h3.68l-8.04 9.19L24 22.85h-7.41l-5.8-7.58-6.64 7.58H.47l8.6-9.83L0 1.15h7.59l5.25 6.93zm-1.3 19.49h2.04L6.49 3.24H4.3z" />}
{name === "linkedin" && <path fill="currentColor" d="M20.45 20.45h-3.55v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46zM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13zm1.78 13.02H3.56V9h3.56zM22.22 0H1.77C.79 0 0 .77 0 1.73v20.54C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.73V1.73C24 .77 23.2 0 22.22 0z" />}
{name === "star" && <path fill="currentColor" d="m12 2.6 2.9 5.9 6.5.95-4.7 4.58 1.11 6.47L12 17.44l-5.81 3.06 1.11-6.47L2.6 9.45l6.5-.95z" />}
{name === "claude" && <path fill="currentColor" d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z" />}
{name === "openai" && <path fill="currentColor" d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" />}
{name === "cursor" && <path fill="currentColor" d="M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23" />}
{name === "gemini" && <path fill="currentColor" d="M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81" />}
{name === "arrow" && <path d="m9 18 6-6-6-6M5 12h10" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />}
{name === "chevron" && <path d="m9 18 6-6-6-6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />}
{name === "copy" && <path d="M8 8h10v11H8zM5 5h10v3M5 5v11h3" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round" />}
Expand Down
9 changes: 5 additions & 4 deletions site/src/components/PluginsPage.astro
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
---
import Icon from "./Icon.astro";
import PluginDirectory from "./PluginDirectory.astro";
---

Expand All @@ -16,9 +17,9 @@ import PluginDirectory from "./PluginDirectory.astro";
<p>Support labels are derived from the manifest files present in each plugin directory.</p>
</div>
<div class="compatibility-rail">
<div><strong>Claude Code</strong><span>Plugins, skills, agents, hooks and commands</span></div>
<div><strong>Codex CLI</strong><span>Plugins, skills and shared agent guidance</span></div>
<div><strong>Cursor</strong><span>Plugins, skills and project guidance</span></div>
<div><strong>Gemini CLI</strong><span>Extensions, skills, agents and hooks</span></div>
<div><Icon name="claude" size={26} /><strong>Claude Code</strong><span>Plugins, skills, agents, hooks and commands</span></div>
<div><Icon name="openai" size={26} /><strong>Codex CLI</strong><span>Plugins, skills and shared agent guidance</span></div>
<div><Icon name="cursor" size={26} /><strong>Cursor</strong><span>Plugins, skills and project guidance</span></div>
<div><Icon name="gemini" size={26} /><strong>Gemini CLI</strong><span>Extensions, skills, agents and hooks</span></div>
</div>
</section>
Loading
Loading