diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 35b5ad0..7bc29d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -262,3 +262,34 @@ Use an existing category when possible. The validator warns on unknown categorie Current categories: **Auth**, **Core**, **DeFi**, **Frontend**, **Governance**, **Infrastructure**, **Integration**, **Motoko**, **Security** To add a new category: update the description string in `skills/skill.schema.json`, the `KNOWN_CATEGORIES` array in `scripts/check-project.js`, and the `CATEGORY_ORDER` array in `src/lib/skills.ts`. + +--- + +## Adding a Community Skill + +Community skills are maintained by third parties and linked from `skills.internetcomputer.org` under the **Ecosystem** section. DFINITY curates the list but does not own or maintain the skill content. + +### Requirements + +1. The skill must exist at a public GitHub URL and follow the [Agent Skills spec](https://agentskills.io/specification) — a valid `SKILL.md` with `name` and `description` frontmatter. +2. The maintainer must be reachable: a GitHub org or a contact listed in the repository. +3. The linked file must be stable. If the URL goes dead and is not fixed within a reasonable time, the entry will be removed. + +### How to add + +Open a PR that adds one entry to [`community/index.json`](community/index.json): + +```json +{ + "name": "your-skill-name", + "title": "Your Skill Title", + "description": "One or two sentences: what it does and when an agent should load it.", + "maintainer": "Your Org Name", + "github": "https://github.com/your-org/your-repo/tree/main/skills/your-skill", + "added": "YYYY-MM-DD" +} +``` + +The `description` should match or be condensed from the `description` field in your `SKILL.md`. + +**No eval results required.** Community skill PRs are lightweight: one JSON entry, a reachable maintainer, and a working link to a valid `SKILL.md`. diff --git a/README.md b/README.md index 0a6467b..8e79adc 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,16 @@ node scripts/evaluate-skills.js --triggers-only # Trigger evals Results are saved to `evaluations/results/` (gitignored). See [CONTRIBUTING.md](CONTRIBUTING.md#4-add-evaluation-cases) for how to write eval cases and prompts. +## Community Skills + +Third-party skills for the ICP ecosystem, maintained by their respective authors. These appear in the **Ecosystem** section on the skills site, clearly separated from DFINITY-maintained skills. + +| Skill | Maintainer | Description | +|-------|------------|-------------| +| [Liquidium SDK Integration](https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/skills/liquidium-sdk-integration) | Liquidium Inc | Authless instant-loan flow, market data, and profile-based lending via `@liquidium/client` on ICP. | + +Community skills are not maintained by DFINITY. To propose a community skill, see [CONTRIBUTING.md](CONTRIBUTING.md#adding-a-community-skill). + ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add or update skills. diff --git a/community/index.json b/community/index.json new file mode 100644 index 0000000..ea1f822 --- /dev/null +++ b/community/index.json @@ -0,0 +1,10 @@ +[ + { + "name": "liquidium-sdk-integration", + "title": "Liquidium SDK Integration", + "description": "Authless instant-loan flow, market data, and profile-based lending via @liquidium/client on the Internet Computer. Covers LiquidiumClient setup, instantLoans, accounts, lending, positions, and quote modules.", + "maintainer": "Liquidium Inc", + "github": "https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/skills/liquidium-sdk-integration", + "added": "2026-06-09" + } +] diff --git a/public/styles.css b/public/styles.css index a2d9f2e..065e8df 100644 --- a/public/styles.css +++ b/public/styles.css @@ -382,7 +382,75 @@ h4 { font-size: 1.05rem; } /* Prose */ .prose pre { padding: 0.75rem 0.85rem; font-size: 0.85em; } .prose table { font-size: 0.85rem; display: block; overflow-x: auto; } + + /* Community section — no overrides needed */ } /* ---------- 404 ---------- */ main h1 { font-family: var(--serif); } + +/* ---------- Community / Ecosystem section ---------- */ +.community-divider { + display: flex; align-items: center; gap: 1rem; + margin: 4rem 0 0; + color: var(--muted); font-size: 0.72rem; font-family: var(--mono); + text-transform: uppercase; letter-spacing: 0.16em; +} +.community-divider::before, +.community-divider::after { + content: ''; flex: 1; border-top: 1px dashed var(--rule); +} + +.community-notice { + display: flex; gap: 0.75rem; align-items: flex-start; + margin: 0 0 1.5rem; padding: 0.9rem 1.1rem; + border-left: 3px solid var(--rule-strong); + background: var(--bg-sunk); border-radius: 0 6px 6px 0; +} +.community-notice-icon { + font-size: 1rem; line-height: 1.55; flex-shrink: 0; color: var(--fg-secondary); +} +.community-notice p { + margin: 0; font-size: 0.95rem; color: var(--fg-secondary); +} + +.community-badge { + display: inline-block; margin-left: 0.5rem; + padding: 0.1em 0.45em; + background: var(--bg-sunk); border: 1px solid var(--rule); border-radius: 9999px; + font-size: 0.65rem; font-family: var(--mono); + text-transform: uppercase; letter-spacing: 0.08em; + color: var(--muted); vertical-align: middle; +} + +.skill-maintainer { + color: var(--muted); font-size: 0.82rem; font-style: italic; margin: 0.2rem 0 0; +} + +.community-skill-row .skill-title a { + color: var(--fg-secondary); +} +.community-skill-row .skill-title a:hover { color: var(--accent); } + +.community-skill-row > div { min-width: 0; } + +.community-install-btn { + display: inline-flex; align-items: center; gap: 0.45rem; + background: none; border: none; cursor: pointer; padding: 0; + margin-top: 0.55rem; color: var(--muted); font-family: inherit; + font-size: inherit; text-align: left; width: 100%; +} +.community-install-btn:hover svg { color: var(--accent); } + +.community-install-code { + font-family: var(--mono); font-size: 0.82rem; + background: var(--code-bg); color: var(--code-fg); + padding: 0.2em 0.55em; border-radius: 4px; + border: 1px solid var(--rule); + white-space: nowrap; overflow-x: auto; display: block; + max-width: 100%; +} + +.community-install-btn .icon-check { display: none; color: var(--accent); } +.community-install-btn.copied .icon-copy { display: none; } +.community-install-btn.copied .icon-check { display: inline; } diff --git a/src/pages/index.astro b/src/pages/index.astro index ca57f90..756f4da 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -2,6 +2,7 @@ import BaseLayout from '../layouts/BaseLayout.astro'; import { SITE, absUrl } from '../lib/site'; import { getAllSkills, getSkillsByCategory, skillUrl, skillMarkdownUrl } from '../lib/skills'; +import communitySkills from '../../community/index.json'; const all = await getAllSkills(); const grouped = await getSkillsByCategory(); @@ -96,6 +97,49 @@ const collectionLd = { ))} + + {communitySkills.length > 0 && ( + + +
+
+

Ecosystem Skills

+ {communitySkills.length} skill{communitySkills.length === 1 ? '' : 's'} +
+
+ +

Not maintained, reviewed, or verified by DFINITY Foundation. Use at your own risk.

+
+ +
+ )} + +