feat: 迁移统一目录元数据契约 (#102)

## 中文

- 为 System Agent、34 个 Builtin Skill、28 个 Pointer/Collection 条目增加 catalog
sidecar
- 覆盖 147 个 collection child,并固定可证明的来源;无法证明的内容保持 listing-only/unknown
- 增加 strict Schema、validator、collection check 与 CI 完整性门禁

## English

- Add catalog metadata sidecars for the System Agent, 34 built-in
Skills, and 28 pointer/collection entries
- Cover 147 collection children while keeping unverifiable facts
listing-only or unknown
- Add strict schemas, validators, deterministic collection checks, and
CI completeness gates

## 验证 / Verification

- Catalog validator 17/17
- Collection generator 4/4
- 63 sidecars, 147 children, zero errors
This commit is contained in:
2026-08-31 04:10:49 -04:00
committed by GitHub
parent 40944ca1d3
commit a205ef20f0
80 changed files with 10734 additions and 21 deletions

View File

@@ -12,7 +12,7 @@ permissions:
jobs:
validate:
runs-on: ubuntu-latest
timeout-minutes: 5
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
@@ -48,7 +48,7 @@ jobs:
;;
esac
changed=$(git diff --name-only "$range" || true)
if echo "$changed" | grep -qE '^(skills/|agents/|manifest\.json$|categories\.json$|scripts/i18n/)'; then
if echo "$changed" | grep -qE '^(skills/|agents/|schemas/|manifest\.json$|categories\.json$|scripts/i18n/|scripts/catalog/|scripts/gen-collection-children\.py$)'; then
echo "relevant=true" >> "$GITHUB_OUTPUT"
else
echo "relevant=false" >> "$GITHUB_OUTPUT"
@@ -62,6 +62,16 @@ jobs:
if: steps.changes.outputs.relevant == 'true'
run: uv run --quiet scripts/i18n/test_validate_i18n.py
- name: Run catalog validator unit tests
if: steps.changes.outputs.relevant == 'true'
run: |
uv run --quiet scripts/catalog/test_validate_catalog_metadata.py
uv run --quiet scripts/catalog/test_collection_generator.py
- name: Validate catalog metadata
if: steps.changes.outputs.relevant == 'true'
run: uv run --quiet scripts/catalog/validate_catalog_metadata.py --require-complete
- name: Validate i18n
if: steps.changes.outputs.relevant == 'true'
run: uv run --quiet scripts/i18n/validate-i18n.py
@@ -70,6 +80,10 @@ jobs:
if: steps.changes.outputs.relevant == 'true'
run: uv run --quiet scripts/i18n/translate.py --check
- name: Check generated collection children
if: steps.changes.outputs.relevant == 'true'
run: uv run --quiet scripts/gen-collection-children.py --check
- name: Skip notice
if: steps.changes.outputs.relevant != 'true'
run: echo "No i18n-relevant changes; validation skipped."

View File

@@ -23,9 +23,9 @@ DesireCore 官方市场仓库,存放官方维护的 Agent/Skill 定义,以
The market currently contains:
- `1` Agent: `desirecore`
- `33` local built-in skills with `SKILL.md`
- `34` local built-in skills with `SKILL.md`
- `28` external skill entries with `entry.json`
- `61` publishable skills in total (`SKILL.md` + `entry.json`)
- `62` publishable skills in total (`SKILL.md` + `entry.json`)
## Skill Sources
@@ -128,6 +128,40 @@ External entries point to upstream packages or repositories. They are counted in
}
```
### Catalog metadata sidecar (`catalog-metadata.v1.json`)
The versioned catalog metadata contract is stored at one fixed path next to each
legacy item:
```text
agents/<id>/catalog-metadata.v1.json
skills/<id>/catalog-metadata.v1.json
```
Legacy `agent.json`, `SKILL.md`, and `entry.json` files remain the compatibility
surface for older clients. New clients merge the sidecar through a deterministic
adapter. Any field repeated in both files must have the same value; the validator
rejects drift rather than choosing one copy silently.
The sidecar records source-owned presentation, release, timestamp, content
provenance, governance, compatibility, and type-specific facts. It deliberately
cannot declare `catalogSourceId`, catalog commit/path/trust, effective official
status, installation state, device state, health, URLs discovered at runtime, or
`syncedAt`. DesireCore injects trusted catalog provenance and runtime facts.
Time facts are explicit `known`/`unknown` values. A known day uses
`YYYY-MM-DD` with `precision: "day"`; a known second uses an RFC 3339 UTC value
ending in `Z` with `precision: "second"`. Never use the current date, clone time,
or synchronization time to fill an unknown catalog or release timestamp.
Collection children stay in their parent's sidecar. Each child declares the
canonical `skill + parentId + id` identity and its own release fact; a collection
parent may have an unknown version, and a child version must not be inferred from
the parent.
The strict source schema is
[`schemas/catalog-metadata.v1.schema.json`](schemas/catalog-metadata.v1.schema.json).
## Categories
Valid category slugs are declared in `categories.json`:
@@ -145,14 +179,29 @@ Run these checks before submitting changes:
# Full market + i18n validation
uv run scripts/i18n/validate-i18n.py
# Catalog sidecar validator unit tests and standalone validation
uv run scripts/catalog/test_validate_catalog_metadata.py
uv run scripts/catalog/test_collection_generator.py
uv run scripts/catalog/validate_catalog_metadata.py
# Translation freshness check
uv run scripts/i18n/translate.py --check
# Verify pinned collection children without changing entry.json (network required;
# mutable collections are reported and skipped because their output is not reproducible)
uv run scripts/gen-collection-children.py --check
# Optional network check for entry.json source URLs
uv run scripts/i18n/validate-i18n.py --online
```
The validator checks market stats, category references, `builtin-skills.json`, `entry.json` structure, i18n completeness, and translation freshness. Human-locked translations (`translated_by: human`) must keep `source_hash` aligned after manual review.
The validators check market stats, category references, `builtin-skills.json`,
`entry.json` structure, sidecar schema and legacy consistency, immutable source
evidence, collection identity, i18n completeness, and translation freshness.
Human-locked translations (`translated_by: human`) must keep `source_hash`
aligned after manual review. During a data migration,
`scripts/catalog/validate_catalog_metadata.py --require-complete` additionally
requires one sidecar for every top-level Agent and Skill.
Detailed i18n guidance is in [docs/I18N.md](docs/I18N.md).

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "agent",
"id": "desirecore"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "DesireCore",
"summary": "系统中枢调度器负责任务分发、Agent 编排与全局状态监控",
"description": "DesireCore 是系统核心智能体,作为用户与所有 Agent 之间的桥梁。负责任务分发、Agent 编排与全局状态监控。遵循「先澄清、再承诺、再执行、再复盘」的工作流,追求协调而非控制,确保每个 Agent 在最擅长的领域发挥作用。\n\n核心能力\n- 智能任务分发与 Agent 能力匹配\n- 多 Agent 编排与协调\n- 全局状态监控与健康巡检\n- 自主学习与进化(经用户确认)\n\n内置技能\n- 创建智能体、更新智能体、删除智能体、发现智能体\n- 自我进化Self-Evolve\n- 任务管理Task Management"
},
"en-US": {
"name": "DesireCore",
"summary": "System central orchestrator: task dispatch, agent orchestration, and global state monitoring.",
"description": "DesireCore is the system's core agent, acting as the bridge between the user and every other Agent. It is responsible for task dispatch, agent orchestration, and global state monitoring. It follows the workflow \"clarify → commit → execute → retrospect\", aiming for coordination rather than control so each Agent can shine in its area of expertise.\n\nCore capabilities:\n- Intelligent task dispatch and Agent capability matching\n- Multi-Agent orchestration and coordination\n- Global state monitoring and health checks\n- Autonomous learning and evolution (with user confirmation)\n\nBuilt-in skills:\n- Create / Update / Delete / Discover Agents\n- Self-Evolve\n- Task Management"
}
},
"category": "management",
"tags": [
"system",
"scheduling",
"orchestration",
"official",
"core"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-14T17:10:12Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "agent",
"installPolicy": "system",
"updatePolicy": "repository",
"persona": {
"role": "System central orchestrator",
"traits": [
"task dispatch",
"Agent orchestration",
"global state monitoring",
"coordination over control"
]
}
}
}

View File

@@ -0,0 +1,585 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://desirecore.com/schemas/market/catalog-metadata.v1.schema.json",
"title": "DesireCore Market catalog metadata sidecar v1",
"description": "Strict source-owned metadata stored next to one legacy Market Agent or Skill. The trusted catalog source ID, catalog commit, catalog path and catalog trust are injected by DesireCore and are intentionally prohibited here.",
"type": "object",
"required": [
"schemaVersion",
"identity",
"presentation",
"release",
"timestamps",
"provenance",
"governance",
"compatibility",
"spec"
],
"properties": {
"$schema": {
"type": "string",
"const": "../../schemas/catalog-metadata.v1.schema.json",
"description": "Relative schema reference from agents/<id>/ or skills/<id>/."
},
"schemaVersion": {
"type": "integer",
"const": 1,
"description": "Sidecar contract version. This is not the legacy Market manifest version."
},
"identity": {
"$ref": "#/$defs/identity"
},
"presentation": {
"$ref": "#/$defs/presentation"
},
"release": {
"$ref": "#/$defs/release"
},
"timestamps": {
"$ref": "#/$defs/timestamps"
},
"provenance": {
"$ref": "#/$defs/provenance"
},
"governance": {
"$ref": "#/$defs/governance"
},
"compatibility": {
"$ref": "#/$defs/compatibility"
},
"spec": {
"oneOf": [
{ "$ref": "#/$defs/agentSpec" },
{ "$ref": "#/$defs/skillSpec" }
]
}
},
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"identity": {
"properties": { "kind": { "const": "agent" } },
"required": ["kind"]
}
}
},
"then": {
"properties": {
"spec": { "$ref": "#/$defs/agentSpec" }
}
}
},
{
"if": {
"properties": {
"identity": {
"properties": { "kind": { "const": "skill" } },
"required": ["kind"]
}
}
},
"then": {
"properties": {
"spec": { "$ref": "#/$defs/skillSpec" }
}
}
},
{
"if": {
"properties": {
"spec": {
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "const": "system" }
},
"required": ["kind", "installPolicy"]
}
},
"required": ["spec"]
},
"then": {
"properties": {
"spec": {
"properties": { "updatePolicy": { "const": "repository" } },
"required": ["updatePolicy"]
},
"governance": {
"properties": { "availability": { "const": "listing-only" } },
"required": ["availability"]
},
"release": {
"properties": { "state": { "const": "unknown" } },
"required": ["state"]
}
}
}
},
{
"if": {
"properties": {
"spec": {
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "const": "market" }
},
"required": ["kind", "installPolicy"]
}
},
"required": ["spec"]
},
"then": {
"properties": {
"spec": {
"properties": { "updatePolicy": { "const": "market" } },
"required": ["updatePolicy"]
}
}
}
}
],
"$defs": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"pattern": "^(?!-)(?!.*--)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
},
"safeRelativePath": {
"type": "string",
"minLength": 1,
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
},
"identity": {
"type": "object",
"description": "Source-local identity. catalogSourceId is injected by the trusted synchronizer and must not appear in the sidecar.",
"required": ["kind", "id"],
"properties": {
"kind": {
"type": "string",
"enum": ["agent", "skill"]
},
"id": {
"$ref": "#/$defs/slug"
},
"parentId": {
"$ref": "#/$defs/slug"
}
},
"additionalProperties": false
},
"localizedPresentation": {
"type": "object",
"required": ["name", "summary"],
"properties": {
"name": { "type": "string", "minLength": 1, "maxLength": 200 },
"summary": { "type": "string", "minLength": 1, "maxLength": 1024 },
"description": { "type": "string", "minLength": 1 }
},
"additionalProperties": false
},
"presentation": {
"type": "object",
"required": ["defaultLocale", "i18n", "tags"],
"properties": {
"defaultLocale": {
"type": "string",
"pattern": "^[a-z]{2,3}(?:-[A-Z]{2})?$"
},
"i18n": {
"type": "object",
"minProperties": 1,
"patternProperties": {
"^[a-z]{2,3}(?:-[A-Z]{2})?$": {
"$ref": "#/$defs/localizedPresentation"
}
},
"additionalProperties": false
},
"icon": {
"type": "object",
"required": ["kind", "value"],
"properties": {
"kind": { "enum": ["emoji", "letter", "asset", "url"] },
"value": { "type": "string", "minLength": 1, "maxLength": 2048 }
},
"additionalProperties": false
},
"category": { "$ref": "#/$defs/slug" },
"tags": {
"type": "array",
"items": { "type": "string", "minLength": 1, "maxLength": 120 },
"uniqueItems": true
}
},
"additionalProperties": false
},
"unknownRelease": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownRelease": {
"type": "object",
"required": ["state", "version", "versionScheme"],
"properties": {
"state": { "const": "known" },
"version": { "type": "string", "minLength": 1, "maxLength": 160 },
"versionScheme": {
"type": "string",
"enum": ["semver", "calver", "opaque"]
},
"changelog": {
"type": "array",
"maxItems": 100,
"items": { "type": "string", "minLength": 1, "maxLength": 2000 }
}
},
"additionalProperties": false,
"allOf": [
{
"if": { "properties": { "versionScheme": { "const": "semver" } } },
"then": {
"properties": {
"version": {
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
}
}
}
},
{
"if": { "properties": { "versionScheme": { "const": "calver" } } },
"then": {
"properties": {
"version": { "pattern": "^\\d{4}(?:[.-]\\d{1,2}){1,2}(?:[.-][0-9A-Za-z]+)*$" }
}
}
}
]
},
"release": {
"description": "A collection parent may explicitly use unknown; versions are never synthesized from children.",
"oneOf": [
{ "$ref": "#/$defs/unknownRelease" },
{ "$ref": "#/$defs/knownRelease" }
]
},
"unknownTimestamp": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownDayTimestamp": {
"type": "object",
"required": ["state", "value", "precision"],
"properties": {
"state": { "const": "known" },
"value": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"precision": { "const": "day" }
},
"additionalProperties": false
},
"knownSecondTimestamp": {
"type": "object",
"required": ["state", "value", "precision"],
"properties": {
"state": { "const": "known" },
"value": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
},
"precision": { "const": "second" }
},
"additionalProperties": false
},
"timestamp": {
"oneOf": [
{ "$ref": "#/$defs/unknownTimestamp" },
{ "$ref": "#/$defs/knownDayTimestamp" },
{ "$ref": "#/$defs/knownSecondTimestamp" }
]
},
"timestamps": {
"type": "object",
"description": "Catalog modification, content publication, governance review and upstream observation are separate facts. syncedAt is runtime-only and prohibited.",
"required": [
"catalogUpdatedAt",
"releasePublishedAt",
"reviewedAt",
"upstreamObservedAt"
],
"properties": {
"catalogUpdatedAt": { "$ref": "#/$defs/timestamp" },
"releasePublishedAt": { "$ref": "#/$defs/timestamp" },
"reviewedAt": { "$ref": "#/$defs/timestamp" },
"upstreamObservedAt": { "$ref": "#/$defs/timestamp" }
},
"additionalProperties": false
},
"contentProvenance": {
"type": "object",
"required": ["kind", "url"],
"properties": {
"kind": {
"type": "string",
"enum": ["git", "web", "zip", "release", "package", "container"]
},
"url": { "type": "string", "format": "uri", "pattern": "^https://" },
"path": { "$ref": "#/$defs/safeRelativePath" },
"ref": { "type": "string", "minLength": 1, "maxLength": 256 },
"sha256": { "type": "string", "pattern": "^[a-fA-F0-9]{64}$" }
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"description": "Only content provenance is source-owned. Catalog provenance and trust are injected by the synchronizer.",
"properties": {
"content": { "$ref": "#/$defs/contentProvenance" }
},
"additionalProperties": false
},
"maintainer": {
"type": "object",
"required": ["name"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"url": { "type": "string", "format": "uri" },
"verified": { "type": "boolean" }
},
"additionalProperties": false
},
"unknownLicense": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownLicense": {
"type": "object",
"required": ["state", "value"],
"properties": {
"state": { "const": "known" },
"value": { "type": "string", "minLength": 1 },
"evidencePath": { "$ref": "#/$defs/safeRelativePath" }
},
"additionalProperties": false
},
"license": {
"oneOf": [
{ "$ref": "#/$defs/unknownLicense" },
{ "$ref": "#/$defs/knownLicense" }
]
},
"branding": {
"type": "object",
"required": ["relationship", "nameUsage", "logoStatus"],
"properties": {
"relationship": { "enum": ["official", "partner", "independent-listing"] },
"nameUsage": { "enum": ["owned", "licensed", "nominative"] },
"logoStatus": {
"enum": ["not-used", "license-covered", "trademark-policy-allowed", "permission-obtained"]
}
},
"additionalProperties": false
},
"compliance": {
"type": "object",
"required": ["licenseEvidencePath", "reviewedRef", "reviewedAt", "reviewedBy", "upstreamEndorsed"],
"properties": {
"licenseEvidencePath": { "$ref": "#/$defs/safeRelativePath" },
"noticePath": { "$ref": "#/$defs/safeRelativePath" },
"reviewedRef": { "type": "string", "minLength": 1 },
"reviewedAt": {
"type": "string",
"oneOf": [
{ "format": "date", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
{
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
}
]
},
"reviewedBy": { "type": "string", "minLength": 1 },
"upstreamEndorsed": { "type": "boolean" }
},
"additionalProperties": false
},
"governance": {
"type": "object",
"required": ["availability", "license", "redistribution"],
"properties": {
"stewardship": {
"enum": ["official", "partner", "community", "pointer"]
},
"availability": {
"enum": ["listing-only", "installable"]
},
"license": { "$ref": "#/$defs/license" },
"redistribution": {
"enum": ["allowed", "source-pointer-only", "verify-package-terms"]
},
"branding": { "$ref": "#/$defs/branding" },
"compliance": { "$ref": "#/$defs/compliance" },
"listingMaintainer": { "$ref": "#/$defs/maintainer" },
"upstreamMaintainer": { "$ref": "#/$defs/maintainer" }
},
"additionalProperties": false
},
"platforms": {
"oneOf": [
{
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
{
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "all" } },
"additionalProperties": false
},
{
"type": "object",
"required": ["state", "values"],
"properties": {
"state": { "const": "known" },
"values": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": { "enum": ["macos", "windows", "linux", "web", "ios", "android"] }
}
},
"additionalProperties": false
}
]
},
"requirement": {
"type": "object",
"required": ["kind", "value"],
"properties": {
"kind": { "enum": ["runtime", "hardware", "permission", "connection"] },
"value": { "type": "string", "minLength": 1, "maxLength": 500 }
},
"additionalProperties": false
},
"compatibility": {
"type": "object",
"required": ["platforms"],
"properties": {
"platforms": { "$ref": "#/$defs/platforms" },
"requiredClientVersion": {
"type": "string",
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
},
"compatibleAgents": {
"type": "array",
"items": { "$ref": "#/$defs/slug" },
"uniqueItems": true
},
"requirements": {
"type": "array",
"items": { "$ref": "#/$defs/requirement" },
"uniqueItems": true
}
},
"additionalProperties": false
},
"agentSpec": {
"type": "object",
"required": ["kind"],
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "enum": ["market", "system"] },
"updatePolicy": { "enum": ["market", "repository"] },
"persona": {
"type": "object",
"required": ["role", "traits"],
"properties": {
"role": { "type": "string", "minLength": 1 },
"traits": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
}
},
"additionalProperties": false
}
},
"dependencies": {
"installPolicy": ["updatePolicy"],
"updatePolicy": ["installPolicy"]
},
"additionalProperties": false
},
"collectionChild": {
"type": "object",
"required": ["identity", "path", "presentation", "release"],
"properties": {
"identity": {
"type": "object",
"required": ["kind", "id", "parentId"],
"properties": {
"kind": { "const": "skill" },
"id": { "$ref": "#/$defs/slug" },
"parentId": { "$ref": "#/$defs/slug" }
},
"additionalProperties": false
},
"path": { "$ref": "#/$defs/safeRelativePath" },
"presentation": { "$ref": "#/$defs/presentation" },
"release": { "$ref": "#/$defs/release" }
},
"additionalProperties": false
},
"collection": {
"type": "object",
"required": ["role", "childCount", "children"],
"properties": {
"role": { "const": "parent" },
"childCount": { "type": "integer", "minimum": 1 },
"children": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/$defs/collectionChild" }
}
},
"additionalProperties": false
},
"skillSpec": {
"type": "object",
"required": ["kind"],
"properties": {
"kind": { "const": "skill" },
"riskLevel": { "enum": ["low", "medium", "high", "critical"] },
"skillType": { "enum": ["procedural", "declarative", "hybrid"] },
"requires": {
"type": "object",
"required": ["tools", "connections"],
"properties": {
"tools": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
},
"connections": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
}
},
"additionalProperties": false
},
"collection": { "$ref": "#/$defs/collection" }
},
"additionalProperties": false
}
}
}

View File

@@ -0,0 +1,96 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = ["pyyaml>=6.0"]
# ///
"""Unit tests for collection generation check mode."""
from __future__ import annotations
import importlib.util
import json
import sys
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
GENERATOR_PATH = Path(__file__).parents[1] / "gen-collection-children.py"
SPEC = importlib.util.spec_from_file_location("market_collection_generator", GENERATOR_PATH)
assert SPEC is not None and SPEC.loader is not None
GENERATOR = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = GENERATOR
SPEC.loader.exec_module(GENERATOR)
class CollectionGeneratorCheckTests(unittest.TestCase):
def setUp(self) -> None:
self.tempdir = tempfile.TemporaryDirectory()
self.skills_dir = Path(self.tempdir.name) / "skills"
self.entry_path = self.skills_dir / "example-collection" / "entry.json"
self.entry_path.parent.mkdir(parents=True)
self.children = [{"id": "child-one", "path": "skills/child-one"}]
self.write_entry(self.children)
def tearDown(self) -> None:
self.tempdir.cleanup()
def write_entry(self, children: list[dict[str, str]]) -> None:
self.entry_path.write_text(
json.dumps(
{
"id": "example-collection",
"source": {
"kind": "git",
"repoUrl": "https://example.com/example.git",
"repoBranch": "main",
"ref": "a" * 40,
},
"children": children,
},
indent=2,
)
+ "\n",
encoding="utf-8",
)
def run_check(self, discovered: list[dict[str, str]]) -> bool:
before = self.entry_path.read_bytes()
with (
patch.object(GENERATOR, "SKILLS_DIR", self.skills_dir),
patch.object(GENERATOR, "clone_pinned"),
patch.object(GENERATOR, "discover_children", return_value=discovered),
):
result = GENERATOR.process("example-collection", check=True)
self.assertEqual(before, self.entry_path.read_bytes(), "--check must never write entry.json")
return result
def test_check_accepts_current_children_without_writing(self) -> None:
self.assertTrue(self.run_check(self.children))
def test_check_rejects_stale_children_without_writing(self) -> None:
self.assertFalse(self.run_check([{"id": "child-two", "path": "skills/child-two"}]))
def test_check_rejects_collection_source_path(self) -> None:
entry = json.loads(self.entry_path.read_text(encoding="utf-8"))
entry["source"]["path"] = "skills"
self.entry_path.write_text(json.dumps(entry, indent=2) + "\n", encoding="utf-8")
self.assertFalse(self.run_check(self.children))
def test_check_skips_unpinned_collection_without_network_or_writes(self) -> None:
entry = json.loads(self.entry_path.read_text(encoding="utf-8"))
del entry["source"]["ref"]
self.entry_path.write_text(json.dumps(entry, indent=2) + "\n", encoding="utf-8")
before = self.entry_path.read_bytes()
with (
patch.object(GENERATOR, "SKILLS_DIR", self.skills_dir),
patch.object(GENERATOR, "clone_pinned") as clone,
):
self.assertTrue(GENERATOR.process("example-collection", check=True))
clone.assert_not_called()
self.assertEqual(before, self.entry_path.read_bytes())
if __name__ == "__main__":
unittest.main()

View File

@@ -0,0 +1,440 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = ["jsonschema>=4.23,<5", "pyyaml>=6.0"]
# ///
"""Unit tests for the Market catalog metadata sidecar validator."""
from __future__ import annotations
import copy
import importlib.util
import json
import shutil
import sys
import tempfile
import unittest
from pathlib import Path
VALIDATOR_PATH = Path(__file__).with_name("validate_catalog_metadata.py")
SPEC = importlib.util.spec_from_file_location("market_catalog_metadata_validator", VALIDATOR_PATH)
assert SPEC is not None and SPEC.loader is not None
VALIDATOR = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = VALIDATOR
SPEC.loader.exec_module(VALIDATOR)
SOURCE_SCHEMA = VALIDATOR_PATH.parents[2] / "schemas" / "catalog-metadata.v1.schema.json"
def unknown() -> dict[str, str]:
return {"state": "unknown"}
def valid_entry() -> dict[str, object]:
return {
"id": "example-skill",
"name": "Example Skill",
"category": "development",
"tags": ["example"],
"i18n": {
"zh-CN": {"name": "示例技能", "shortDesc": "中文简介"},
"en-US": {"name": "Example Skill", "shortDesc": "English summary"},
},
"maintainer": {"name": "Example Maintainer", "verified": False},
"stewardship": "community",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://example.com/example-skill.git",
"repoBranch": "main",
"ref": "a" * 40,
},
}
def valid_sidecar() -> dict[str, object]:
return {
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {"kind": "skill", "id": "example-skill"},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {"name": "示例技能", "summary": "中文简介"},
"en-US": {"name": "Example Skill", "summary": "English summary"},
},
"category": "development",
"tags": ["example"],
},
"release": unknown(),
"timestamps": {
"catalogUpdatedAt": unknown(),
"releasePublishedAt": unknown(),
"reviewedAt": unknown(),
"upstreamObservedAt": unknown(),
},
"provenance": {
"content": {
"kind": "git",
"url": "https://example.com/example-skill.git",
"ref": "a" * 40,
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {"state": "known", "value": "MIT"},
"redistribution": "allowed",
"upstreamMaintainer": {"name": "Example Maintainer", "verified": False},
},
"compatibility": {"platforms": unknown()},
"spec": {"kind": "skill", "riskLevel": "low"},
}
class CatalogMetadataValidatorTests(unittest.TestCase):
def setUp(self) -> None:
self.tempdir = tempfile.TemporaryDirectory()
self.root = Path(self.tempdir.name)
(self.root / "schemas").mkdir()
shutil.copyfile(SOURCE_SCHEMA, self.root / "schemas" / SOURCE_SCHEMA.name)
(self.root / "agents").mkdir()
(self.root / "skills" / "example-skill").mkdir(parents=True)
self.write_json(
self.root / "manifest.json",
{
"supportedLocales": ["zh-CN", "en-US"],
"stats": {"totalAgents": 0, "totalSkills": 1},
},
)
self.entry_path = self.root / "skills" / "example-skill" / "entry.json"
self.sidecar_path = self.root / "skills" / "example-skill" / VALIDATOR.SIDECAR_NAME
self.write_json(self.entry_path, valid_entry())
self.write_json(self.sidecar_path, valid_sidecar())
def tearDown(self) -> None:
self.tempdir.cleanup()
@staticmethod
def write_json(path: Path, value: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
def validate(self, *, require_complete: bool = False):
return VALIDATOR.validate_repository(self.root, require_complete=require_complete)
def rewrite_sidecar(self, mutate) -> None:
payload = valid_sidecar()
mutate(payload)
self.write_json(self.sidecar_path, payload)
def write_agent_case(self, install_policy: str | None, update_policy: str | None, availability: str) -> None:
agent_dir = self.root / "agents" / "system-agent"
agent_dir.mkdir()
self.write_json(
agent_dir / "agent.json",
{
"id": "system-agent",
"category": "development",
"i18n": {
"default_locale": "en-US",
"source_locale": "zh-CN",
"locales": ["zh-CN", "en-US"],
"zh-CN": {"name": "系统智能体", "shortDesc": "系统智能体简介"},
"en-US": {"name": "System Agent", "shortDesc": "System agent summary"},
},
},
)
sidecar = valid_sidecar()
sidecar["identity"] = {"kind": "agent", "id": "system-agent"}
sidecar["presentation"] = {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {"name": "系统智能体", "summary": "系统智能体简介"},
"en-US": {"name": "System Agent", "summary": "System agent summary"},
},
"category": "development",
"tags": [],
}
sidecar["provenance"] = {}
sidecar["governance"] = {
"availability": availability,
"license": unknown(),
"redistribution": "verify-package-terms",
}
spec = {"kind": "agent"}
if install_policy is not None:
spec["installPolicy"] = install_policy
if update_policy is not None:
spec["updatePolicy"] = update_policy
sidecar["spec"] = spec
self.write_json(agent_dir / VALIDATOR.SIDECAR_NAME, sidecar)
manifest = json.loads((self.root / "manifest.json").read_text(encoding="utf-8"))
manifest["stats"]["totalAgents"] = 1
self.write_json(self.root / "manifest.json", manifest)
def test_accepts_valid_listing_only_pointer(self) -> None:
report = self.validate(require_complete=True)
self.assertFalse(report.has_errors, report.issues)
self.assertEqual(1, report.stats["sidecars"])
self.assertEqual(1, report.stats["publishableSkills"])
def test_accepts_system_repository_listing_only_agent_policy(self) -> None:
self.write_agent_case("system", "repository", "listing-only")
report = self.validate()
self.assertFalse(report.has_errors, report.issues)
def test_rejects_system_agent_content_release(self) -> None:
self.write_agent_case("system", "repository", "listing-only")
sidecar_path = self.root / "agents" / "system-agent" / VALIDATOR.SIDECAR_NAME
payload = json.loads(sidecar_path.read_text(encoding="utf-8"))
payload["release"] = {"state": "known", "version": "1.2.0", "versionScheme": "semver"}
self.write_json(sidecar_path, payload)
issues = self.validate().issues
self.assertTrue(any(issue.rule in {"catalog-schema", "agent-policy"} for issue in issues))
def test_rejects_system_agent_content_release_timestamp(self) -> None:
self.write_agent_case("system", "repository", "listing-only")
sidecar_path = self.root / "agents" / "system-agent" / VALIDATOR.SIDECAR_NAME
payload = json.loads(sidecar_path.read_text(encoding="utf-8"))
payload["timestamps"]["releasePublishedAt"] = {
"state": "known",
"value": "2026-08-13",
"precision": "day",
}
self.write_json(sidecar_path, payload)
issues = self.validate().issues
self.assertTrue(any(issue.rule == "agent-policy" for issue in issues))
def test_accepts_market_market_listing_only_agent_policy(self) -> None:
self.write_agent_case("market", "market", "listing-only")
report = self.validate()
self.assertFalse(report.has_errors, report.issues)
def test_rejects_invalid_agent_policy_combinations(self) -> None:
cases = [
("system", "market", "listing-only"),
("system", "repository", "installable"),
("market", "repository", "listing-only"),
("system", None, "listing-only"),
(None, "repository", "listing-only"),
]
for index, (install_policy, update_policy, availability) in enumerate(cases):
with self.subTest(
installPolicy=install_policy,
updatePolicy=update_policy,
availability=availability,
):
if index:
shutil.rmtree(self.root / "agents" / "system-agent")
self.write_agent_case(install_policy, update_policy, availability)
self.assertTrue(any(issue.rule == "catalog-schema" for issue in self.validate().issues))
def test_market_agent_installable_still_requires_governance_evidence(self) -> None:
self.write_agent_case("market", "market", "installable")
issues = self.validate().issues
evidence = [issue for issue in issues if issue.rule == "installable-evidence"]
self.assertGreaterEqual(len(evidence), 4)
def test_rejects_provider_identity_catalog_trust_and_runtime_fields(self) -> None:
def mutate(payload):
payload["identity"]["catalogSourceId"] = "market:official"
payload["provenance"]["catalog"] = {"trust": "official"}
payload["installStatus"] = "installed"
self.rewrite_sidecar(mutate)
issues = self.validate().issues
schema_messages = [issue.message for issue in issues if issue.rule == "catalog-schema"]
self.assertTrue(any("Additional properties" in message for message in schema_messages))
def test_rejects_wrong_time_precision_and_non_utc_second(self) -> None:
def mutate(payload):
payload["timestamps"]["catalogUpdatedAt"] = {
"state": "known",
"value": "2026-08-30T12:00:00+08:00",
"precision": "day",
}
self.rewrite_sidecar(mutate)
self.assertTrue(any(issue.rule == "catalog-schema" for issue in self.validate().issues))
def test_rejects_legacy_duplicate_mismatch(self) -> None:
self.rewrite_sidecar(lambda payload: payload["presentation"].update(category="research"))
issues = self.validate().issues
self.assertTrue(any(issue.rule == "legacy-consistency" for issue in issues))
def test_keeps_unverified_legacy_license_unknown_with_warning(self) -> None:
def mutate(payload):
payload["governance"]["license"] = unknown()
self.rewrite_sidecar(mutate)
report = self.validate()
self.assertFalse(report.has_errors, report.issues)
self.assertTrue(any(issue.rule == "legacy-license-unverified" for issue in report.issues))
def test_rejects_installable_without_review_or_immutable_source(self) -> None:
def mutate(payload):
payload["governance"] = {
"availability": "installable",
"license": unknown(),
"redistribution": "verify-package-terms",
}
payload["provenance"]["content"]["ref"] = "main"
self.rewrite_sidecar(mutate)
issues = self.validate().issues
evidence = [issue.message for issue in issues if issue.rule == "installable-evidence"]
self.assertTrue(any("immutable" in message for message in evidence))
self.assertTrue(any("known license" in message for message in evidence))
self.assertTrue(any("known reviewedAt" in message for message in evidence))
self.assertTrue(any("compliance" in message for message in evidence))
def test_allows_builtin_installation_with_stable_incomplete_governance_warnings(self) -> None:
self.entry_path.unlink()
skill_path = self.entry_path.with_name("SKILL.md")
skill_path.write_text(
"""---
name: example-skill
description: Example builtin skill.
type: procedural
risk_level: low
tags: [example]
metadata:
author: example
i18n:
default_locale: en-US
source_locale: zh-CN
locales: [zh-CN, en-US]
zh-CN:
name: 示例技能
short_desc: 中文简介
en-US:
name: Example Skill
short_desc: English summary
market:
category: development
---
Body.
""",
encoding="utf-8",
)
def mutate(payload):
payload["provenance"] = {}
payload["governance"] = {
"stewardship": "community",
"availability": "installable",
"license": unknown(),
"redistribution": "verify-package-terms",
"listingMaintainer": {"name": "Candidate", "verified": False},
}
payload["spec"] = {"kind": "skill", "riskLevel": "low", "skillType": "procedural"}
self.rewrite_sidecar(mutate)
report = self.validate()
self.assertFalse(report.has_errors, report.issues)
warning_rules = {issue.rule for issue in report.issues if issue.severity == "warning"}
self.assertTrue(
{
"missing-license-evidence",
"missing-review-evidence",
"missing-maintainer-evidence",
"missing-content-evidence",
}.issubset(warning_rules)
)
def test_validates_collection_identity_and_does_not_invent_child_version(self) -> None:
entry = valid_entry()
entry["children"] = [
{
"id": "child-one",
"path": "skills/child-one",
"i18n": {
"zh-CN": {"shortDesc": "Same child summary"},
"en-US": {"shortDesc": "Same child summary"},
},
}
]
self.write_json(self.entry_path, entry)
def mutate(payload):
child_presentation = copy.deepcopy(payload["presentation"])
child_presentation["tags"] = []
child_presentation["i18n"] = {
"zh-CN": {"name": "child-one", "summary": "Same child summary"},
"en-US": {"name": "child-one", "summary": "Same child summary"},
}
payload["spec"]["collection"] = {
"role": "parent",
"childCount": 1,
"children": [
{
"identity": {
"kind": "skill",
"id": "child-one",
"parentId": "example-skill",
},
"path": "skills/child-one",
"presentation": child_presentation,
"release": unknown(),
}
]
}
self.rewrite_sidecar(mutate)
report = self.validate()
self.assertFalse(report.has_errors)
self.assertTrue(any(issue.rule == "i18n-freshness" for issue in report.issues))
def invent_version(payload):
mutate(payload)
payload["spec"]["collection"]["children"][0]["release"] = {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver",
}
self.rewrite_sidecar(invent_version)
self.assertTrue(any(issue.rule == "collection-version" for issue in self.validate().issues))
def test_marks_identical_locale_payloads_for_review_without_failing(self) -> None:
def mutate(payload):
payload["presentation"]["i18n"] = {
"zh-CN": {"name": "Same", "summary": "Same summary"},
"en-US": {"name": "Same", "summary": "Same summary"},
}
entry = valid_entry()
entry["i18n"] = {
"zh-CN": {"name": "Same", "shortDesc": "Same summary"},
"en-US": {"name": "Same", "shortDesc": "Same summary"},
}
self.write_json(self.entry_path, entry)
self.rewrite_sidecar(mutate)
report = self.validate()
self.assertFalse(report.has_errors, report.issues)
self.assertTrue(any(issue.rule == "i18n-freshness" for issue in report.issues))
def test_rejects_sidecar_outside_fixed_path(self) -> None:
rogue = self.root / "metadata" / VALIDATOR.SIDECAR_NAME
self.write_json(rogue, valid_sidecar())
issues = self.validate().issues
self.assertTrue(any(issue.path.startswith("metadata/") and issue.rule == "fixed-sidecar-path" for issue in issues))
def test_reports_manifest_stats_and_optional_complete_coverage(self) -> None:
manifest = {
"supportedLocales": ["zh-CN", "en-US"],
"stats": {"totalAgents": 1, "totalSkills": 99},
}
self.write_json(self.root / "manifest.json", manifest)
issues = self.validate().issues
self.assertEqual(2, sum(issue.rule == "market-stats" for issue in issues))
self.sidecar_path.unlink()
issues = self.validate(require_complete=True).issues
self.assertTrue(any(issue.rule == "sidecar-coverage" for issue in issues))
if __name__ == "__main__":
unittest.main()

View File

@@ -0,0 +1,787 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = ["jsonschema>=4.23,<5", "pyyaml>=6.0"]
# ///
"""Validate Market ``catalog-metadata.v1.json`` sidecars.
The sidecar is deliberately discovered at one fixed path next to a legacy
``agent.json``, ``SKILL.md`` or ``entry.json``. It supplements the legacy
file; it never selects an arbitrary metadata path and never declares the
trusted catalog provider identity.
"""
from __future__ import annotations
import argparse
import json
import re
import sys
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Iterable
import yaml
from jsonschema import Draft7Validator, FormatChecker
REPO_ROOT = Path(__file__).resolve().parents[2]
SCHEMA_PATH = REPO_ROOT / "schemas" / "catalog-metadata.v1.schema.json"
SIDECAR_NAME = "catalog-metadata.v1.json"
EXPECTED_SCHEMA_REF = "../../schemas/catalog-metadata.v1.schema.json"
FRONTMATTER_RE = re.compile(r"^---\s*\n(.*?)\n---\s*\n", re.DOTALL)
FULL_GIT_REF_RE = re.compile(r"^[a-fA-F0-9]{40}(?:[a-fA-F0-9]{24})?$")
CONTAINER_DIGEST_RE = re.compile(r"^sha256:[a-fA-F0-9]{64}$")
@dataclass(frozen=True)
class Issue:
path: str
rule: str
message: str
severity: str = "error"
def to_dict(self) -> dict[str, str]:
return {
"path": self.path,
"rule": self.rule,
"message": self.message,
"severity": self.severity,
}
@dataclass
class Report:
issues: list[Issue] = field(default_factory=list)
stats: dict[str, int] = field(default_factory=dict)
def add(self, path: str, rule: str, message: str, severity: str = "error") -> None:
self.issues.append(Issue(path, rule, message, severity))
@property
def has_errors(self) -> bool:
return any(issue.severity == "error" for issue in self.issues)
@dataclass(frozen=True)
class LegacyItem:
kind: str
item_id: str
source_type: str
data: dict[str, Any]
i18n: dict[str, dict[str, Any]]
default_locale: str | None
version: str | None
category: str | None
tags: list[str] | None
def _rel(path: Path, root: Path) -> str:
try:
return path.relative_to(root).as_posix()
except ValueError:
return path.as_posix()
def _read_json(path: Path, report: Report, root: Path, rule: str) -> dict[str, Any] | None:
try:
value = json.loads(path.read_text(encoding="utf-8"))
except (OSError, json.JSONDecodeError) as exc:
report.add(_rel(path, root), rule, f"cannot read JSON object: {exc}")
return None
if not isinstance(value, dict):
report.add(_rel(path, root), rule, "JSON root must be an object")
return None
return value
def _read_skill_frontmatter(path: Path, report: Report, root: Path) -> dict[str, Any] | None:
try:
text = path.read_text(encoding="utf-8")
except OSError as exc:
report.add(_rel(path, root), "legacy-read", f"cannot read SKILL.md: {exc}")
return None
match = FRONTMATTER_RE.match(text)
if not match:
report.add(_rel(path, root), "legacy-read", "SKILL.md has no YAML frontmatter")
return None
try:
value = yaml.safe_load(match.group(1)) or {}
except yaml.YAMLError as exc:
report.add(_rel(path, root), "legacy-read", f"cannot parse YAML frontmatter: {exc}")
return None
if not isinstance(value, dict):
report.add(_rel(path, root), "legacy-read", "SKILL.md frontmatter must be a mapping")
return None
return value
def _legacy_i18n(raw: Any, *, short_key: str) -> tuple[dict[str, dict[str, Any]], str | None]:
if not isinstance(raw, dict):
return {}, None
default_locale = raw.get("defaultLocale") or raw.get("default_locale")
locales_value = raw.get("locales")
if isinstance(locales_value, dict):
candidates = locales_value.items()
else:
candidates = (
(key, value)
for key, value in raw.items()
if re.fullmatch(r"[a-z]{2,3}(?:-[A-Z]{2})?", str(key))
)
locales: dict[str, dict[str, Any]] = {}
for locale, payload in candidates:
if not isinstance(payload, dict):
continue
normalized: dict[str, Any] = {}
if isinstance(payload.get("name"), str):
normalized["name"] = payload["name"]
summary = payload.get(short_key)
if isinstance(summary, str):
normalized["summary"] = summary
description = payload.get("description") or payload.get("fullDesc")
if isinstance(description, str):
normalized["description"] = description
locales[str(locale)] = normalized
return locales, default_locale if isinstance(default_locale, str) else None
def load_legacy(sidecar: Path, report: Report, root: Path) -> LegacyItem | None:
parent = sidecar.parent
root_kind = parent.parent.name
if root_kind == "agents":
legacy_path = parent / "agent.json"
data = _read_json(legacy_path, report, root, "legacy-read")
if data is None:
return None
i18n, default_locale = _legacy_i18n(data.get("i18n"), short_key="shortDesc")
return LegacyItem(
kind="agent",
item_id=parent.name,
source_type="agent",
data=data,
i18n=i18n,
default_locale=default_locale,
version=str(data["version"]) if data.get("version") is not None else None,
category=data.get("category") if isinstance(data.get("category"), str) else None,
tags=data.get("tags") if isinstance(data.get("tags"), list) else None,
)
if root_kind != "skills":
report.add(
_rel(sidecar, root),
"fixed-sidecar-path",
f"{SIDECAR_NAME} is only allowed at agents/<id>/ or skills/<id>/",
)
return None
pointer_path = parent / "entry.json"
builtin_path = parent / "SKILL.md"
if pointer_path.is_file() == builtin_path.is_file():
report.add(
_rel(sidecar, root),
"fixed-sidecar-path",
"skill sidecar must be next to exactly one legacy entry.json or SKILL.md",
)
return None
if pointer_path.is_file():
data = _read_json(pointer_path, report, root, "legacy-read")
if data is None:
return None
i18n, default_locale = _legacy_i18n(data.get("i18n"), short_key="shortDesc")
return LegacyItem(
kind="skill",
item_id=parent.name,
source_type="pointer",
data=data,
i18n=i18n,
default_locale=default_locale,
version=str(data["version"]) if data.get("version") is not None else None,
category=data.get("category") if isinstance(data.get("category"), str) else None,
tags=data.get("tags") if isinstance(data.get("tags"), list) else None,
)
data = _read_skill_frontmatter(builtin_path, report, root)
if data is None:
return None
metadata = data.get("metadata") if isinstance(data.get("metadata"), dict) else {}
i18n_raw = metadata.get("i18n") if isinstance(metadata, dict) else None
i18n, default_locale = _legacy_i18n(i18n_raw, short_key="short_desc")
market = data.get("market") if isinstance(data.get("market"), dict) else {}
tags = data.get("tags") if isinstance(data.get("tags"), list) else None
return LegacyItem(
kind="skill",
item_id=parent.name,
source_type="builtin",
data=data,
i18n=i18n,
default_locale=default_locale,
version=str(data["version"]) if data.get("version") is not None else None,
category=(market.get("category") if isinstance(market.get("category"), str) else None),
tags=tags,
)
def _json_path(error: Any) -> str:
parts = [str(part) for part in error.absolute_path]
return ".".join(parts) if parts else "$"
def _compare(report: Report, path: str, field: str, sidecar: Any, legacy: Any) -> None:
if legacy is not None and sidecar != legacy:
report.add(path, "legacy-consistency", f"{field} differs from the legacy value")
def _known_timestamp_value(value: Any) -> str | None:
if isinstance(value, dict) and value.get("state") == "known" and isinstance(value.get("value"), str):
return value["value"]
return None
def _content_is_immutable(content: Any) -> bool:
if not isinstance(content, dict):
return False
kind = content.get("kind")
ref = content.get("ref")
digest = content.get("sha256")
if kind == "git":
return isinstance(ref, str) and FULL_GIT_REF_RE.fullmatch(ref) is not None
if kind == "container":
return isinstance(ref, str) and CONTAINER_DIGEST_RE.fullmatch(ref) is not None
if kind in {"web", "zip", "release", "package"}:
return isinstance(digest, str) and re.fullmatch(r"[a-fA-F0-9]{64}", digest) is not None
return False
def _validate_i18n(
report: Report,
rel: str,
sidecar: dict[str, Any],
legacy: LegacyItem,
supported_locales: set[str],
) -> None:
presentation = sidecar.get("presentation")
if not isinstance(presentation, dict):
return
default_locale = presentation.get("defaultLocale")
i18n = presentation.get("i18n")
if not isinstance(i18n, dict):
return
if default_locale not in i18n:
report.add(rel, "i18n", "presentation.defaultLocale must exist in presentation.i18n")
missing = sorted(supported_locales - set(i18n))
if missing:
report.add(rel, "i18n", f"presentation.i18n is missing Market locales {missing}")
if legacy.default_locale is not None:
_compare(report, rel, "presentation.defaultLocale", default_locale, legacy.default_locale)
for locale, legacy_payload in legacy.i18n.items():
payload = i18n.get(locale)
if not isinstance(payload, dict):
report.add(rel, "legacy-consistency", f"presentation.i18n.{locale} is missing")
continue
for key in ("name", "summary", "description"):
if key in legacy_payload:
_compare(
report,
rel,
f"presentation.i18n.{locale}.{key}",
payload.get(key),
legacy_payload[key],
)
payloads = [
(locale, value.get("name"), value.get("summary"))
for locale, value in sorted(i18n.items())
if isinstance(value, dict)
]
if len(payloads) > 1 and len({(name, summary) for _, name, summary in payloads}) == 1:
report.add(
rel,
"i18n-freshness",
"all locale name/summary payloads are identical; translation requires explicit review",
severity="warning",
)
def _validate_content_consistency(
report: Report,
rel: str,
sidecar: dict[str, Any],
legacy: LegacyItem,
) -> None:
if legacy.source_type != "pointer":
return
provenance = sidecar.get("provenance")
content = provenance.get("content") if isinstance(provenance, dict) else None
source = legacy.data.get("source")
if not isinstance(content, dict) or not isinstance(source, dict):
return
mapping = {
"kind": "kind",
"url": "repoUrl",
"path": "path",
"ref": "ref",
"sha256": "sha256",
}
for sidecar_key, legacy_key in mapping.items():
legacy_value = source.get(legacy_key)
if legacy_value is not None:
_compare(
report,
rel,
f"provenance.content.{sidecar_key}",
content.get(sidecar_key),
legacy_value,
)
def _validate_governance_consistency(
report: Report,
rel: str,
sidecar: dict[str, Any],
legacy: LegacyItem,
) -> None:
governance = sidecar.get("governance")
if not isinstance(governance, dict):
return
legacy_governance = legacy.data
if legacy.source_type == "builtin":
market = legacy.data.get("market")
legacy_governance = market if isinstance(market, dict) else {}
for field in ("stewardship", "redistribution"):
if legacy_governance.get(field) is not None and governance.get(field) is not None:
_compare(report, rel, f"governance.{field}", governance.get(field), legacy_governance[field])
license_value = legacy.data.get("license")
license_fact = governance.get("license")
if license_value is not None and isinstance(license_fact, dict):
if license_fact.get("state") != "known":
report.add(
rel,
"legacy-license-unverified",
"legacy license text has no sidecar evidence and remains unknown",
severity="warning",
)
else:
_compare(report, rel, "governance.license.value", license_fact.get("value"), license_value)
legacy_maintainer = legacy_governance.get("maintainer")
maintainer_field = "upstreamMaintainer" if legacy.source_type == "pointer" else "listingMaintainer"
sidecar_maintainer = governance.get(maintainer_field)
if isinstance(legacy_maintainer, dict) and isinstance(sidecar_maintainer, dict):
for field in ("name", "url", "verified"):
if legacy_maintainer.get(field) is not None:
_compare(
report,
rel,
f"governance.{maintainer_field}.{field}",
sidecar_maintainer.get(field),
legacy_maintainer[field],
)
def _validate_collection(
report: Report,
rel: str,
sidecar: dict[str, Any],
legacy: LegacyItem,
supported_locales: set[str],
) -> None:
legacy_children = legacy.data.get("children")
spec = sidecar.get("spec")
collection = spec.get("collection") if isinstance(spec, dict) else None
sidecar_children = collection.get("children") if isinstance(collection, dict) else None
if isinstance(legacy_children, list) != isinstance(sidecar_children, list):
report.add(rel, "collection-identity", "sidecar collection presence must match legacy children")
return
if not isinstance(legacy_children, list) or not isinstance(sidecar_children, list):
return
_compare(report, rel, "spec.collection.role", collection.get("role"), "parent")
_compare(report, rel, "spec.collection.childCount", collection.get("childCount"), len(legacy_children))
identities = [child.get("identity") for child in sidecar_children if isinstance(child, dict)]
ids = [identity.get("id") for identity in identities if isinstance(identity, dict)]
paths = [child.get("path") for child in sidecar_children if isinstance(child, dict)]
if len(ids) != len(set(ids)):
report.add(rel, "collection-identity", "collection child IDs must be unique")
if len(paths) != len(set(paths)):
report.add(rel, "collection-identity", "collection child paths must be unique")
if len(sidecar_children) != len(legacy_children):
report.add(
rel,
"collection-identity",
f"sidecar declares {len(sidecar_children)} children but legacy declares {len(legacy_children)}",
)
return
identical_locale_children: list[str] = []
for index, (child, legacy_child) in enumerate(zip(sidecar_children, legacy_children)):
if not isinstance(child, dict) or not isinstance(legacy_child, dict):
continue
identity = child.get("identity")
if not isinstance(identity, dict):
continue
_compare(
report,
rel,
f"spec.collection.children[{index}].identity.id",
identity.get("id"),
legacy_child.get("id"),
)
_compare(
report,
rel,
f"spec.collection.children[{index}].identity.parentId",
identity.get("parentId"),
legacy.item_id,
)
_compare(
report,
rel,
f"spec.collection.children[{index}].path",
child.get("path"),
legacy_child.get("path"),
)
presentation = child.get("presentation")
child_i18n = presentation.get("i18n") if isinstance(presentation, dict) else None
if isinstance(child_i18n, dict):
missing_locales = sorted(supported_locales - set(child_i18n))
if missing_locales:
report.add(
rel,
"i18n",
f"collection child {identity.get('id')!r} is missing Market locales {missing_locales}",
)
locale_payloads = [
(payload.get("name"), payload.get("summary"))
for payload in child_i18n.values()
if isinstance(payload, dict)
]
if len(locale_payloads) > 1 and len(set(locale_payloads)) == 1:
identical_locale_children.append(str(identity.get("id")))
legacy_child_i18n = legacy_child.get("i18n")
if isinstance(legacy_child_i18n, dict):
for locale, legacy_payload in legacy_child_i18n.items():
payload = child_i18n.get(locale)
if not isinstance(payload, dict) or not isinstance(legacy_payload, dict):
report.add(
rel,
"legacy-consistency",
f"collection child {identity.get('id')!r} is missing legacy locale {locale!r}",
)
continue
if legacy_payload.get("shortDesc") is not None:
_compare(
report,
rel,
f"spec.collection.children[{index}].presentation.i18n.{locale}.summary",
payload.get("summary"),
legacy_payload.get("shortDesc"),
)
if legacy_child.get("name") is not None:
_compare(
report,
rel,
f"spec.collection.children[{index}].presentation.i18n.{locale}.name",
payload.get("name"),
legacy_child.get("name"),
)
legacy_version = legacy_child.get("version")
release = child.get("release")
if legacy_version is not None and isinstance(release, dict):
if release.get("state") != "known":
report.add(
rel,
"legacy-consistency",
f"spec.collection.children[{index}].release must preserve legacy version",
)
else:
_compare(
report,
rel,
f"spec.collection.children[{index}].release.version",
release.get("version"),
str(legacy_version),
)
if legacy_version is None and isinstance(release, dict) and release.get("state") == "known":
report.add(
rel,
"collection-version",
f"child {identity.get('id')!r} has no legacy/upstream version; sidecar must not synthesize one",
)
if identical_locale_children:
preview = ", ".join(identical_locale_children[:5])
suffix = "" if len(identical_locale_children) <= 5 else ", …"
report.add(
rel,
"i18n-freshness",
f"{len(identical_locale_children)} collection child locale payload(s) are identical "
f"({preview}{suffix}); translation requires explicit review",
severity="warning",
)
def validate_sidecar(
sidecar_path: Path,
validator: Draft7Validator,
report: Report,
root: Path,
supported_locales: set[str],
) -> None:
rel = _rel(sidecar_path, root)
sidecar = _read_json(sidecar_path, report, root, "catalog-schema")
if sidecar is None:
return
for error in sorted(validator.iter_errors(sidecar), key=lambda item: list(item.absolute_path)):
report.add(rel, "catalog-schema", f"{_json_path(error)}: {error.message}")
if any(issue.path == rel and issue.rule == "catalog-schema" for issue in report.issues):
return
legacy = load_legacy(sidecar_path, report, root)
if legacy is None:
return
identity = sidecar["identity"]
_compare(report, rel, "identity.kind", identity.get("kind"), legacy.kind)
_compare(report, rel, "identity.id", identity.get("id"), legacy.item_id)
if identity.get("parentId") is not None:
report.add(rel, "collection-identity", "top-level Market sidecar identity must not declare parentId")
if sidecar.get("$schema") not in (None, EXPECTED_SCHEMA_REF):
report.add(rel, "fixed-sidecar-path", f"$schema must be {EXPECTED_SCHEMA_REF!r}")
presentation = sidecar.get("presentation", {})
_compare(report, rel, "presentation.category", presentation.get("category"), legacy.category)
if legacy.tags is not None:
_compare(report, rel, "presentation.tags", presentation.get("tags"), legacy.tags)
_validate_i18n(report, rel, sidecar, legacy, supported_locales)
release = sidecar.get("release")
spec = sidecar.get("spec")
system_agent = (
legacy.kind == "agent"
and isinstance(spec, dict)
and spec.get("installPolicy") == "system"
and spec.get("updatePolicy") == "repository"
)
if system_agent:
if isinstance(release, dict) and release.get("state") != "unknown":
report.add(rel, "agent-policy", "system Agent metadata revision must not be exposed as a content release")
release_published_at = sidecar.get("timestamps", {}).get("releasePublishedAt")
if isinstance(release_published_at, dict) and release_published_at.get("state") != "unknown":
report.add(
rel,
"agent-policy",
"system Agent metadata revision must not be exposed as a content release timestamp",
)
elif legacy.version is not None and isinstance(release, dict):
if release.get("state") != "known":
report.add(rel, "legacy-consistency", "release must preserve the legacy version")
else:
_compare(report, rel, "release.version", release.get("version"), legacy.version)
_validate_content_consistency(report, rel, sidecar, legacy)
_validate_governance_consistency(report, rel, sidecar, legacy)
_validate_collection(report, rel, sidecar, legacy, supported_locales)
governance = sidecar.get("governance")
provenance = sidecar.get("provenance")
timestamps = sidecar.get("timestamps")
if isinstance(governance, dict) and governance.get("availability") == "installable":
content = provenance.get("content") if isinstance(provenance, dict) else None
license_fact = governance.get("license")
reviewed_at = timestamps.get("reviewedAt") if isinstance(timestamps, dict) else None
compliance = governance.get("compliance")
maintainer = governance.get("listingMaintainer")
# Builtin Skills are already delivered by the trusted Market bootstrap.
# Missing governance evidence must remain visible, but it must not silently
# disable their existing installation path. A Market-installed Agent still
# uses the strict evidence gate below; a system Agent is schema-locked to
# listing-only and therefore never enters this installable branch.
if legacy.source_type == "builtin":
if not isinstance(license_fact, dict) or license_fact.get("state") != "known" or not license_fact.get("evidencePath"):
report.add(
rel,
"missing-license-evidence",
"installable builtin content has no verified per-item license evidence",
severity="warning",
)
if _known_timestamp_value(reviewed_at) is None or not isinstance(compliance, dict):
report.add(
rel,
"missing-review-evidence",
"installable builtin content has no ref-bound governance review",
severity="warning",
)
if not isinstance(maintainer, dict) or maintainer.get("verified") is not True:
report.add(
rel,
"missing-maintainer-evidence",
"installable builtin content has no verified listing maintainer",
severity="warning",
)
if governance.get("stewardship") != "official" and not isinstance(content, dict):
report.add(
rel,
"missing-content-evidence",
"vendored builtin content has no explicit upstream content provenance",
severity="warning",
)
return
if not _content_is_immutable(content):
report.add(rel, "installable-evidence", "installable content must have an immutable ref or SHA-256 digest")
if not isinstance(license_fact, dict) or license_fact.get("state") != "known":
report.add(rel, "installable-evidence", "installable content must have a known license")
if _known_timestamp_value(reviewed_at) is None:
report.add(rel, "installable-evidence", "installable content must have a known reviewedAt timestamp")
if not isinstance(compliance, dict):
report.add(rel, "installable-evidence", "installable content must include compliance evidence")
else:
content_ref = None
if isinstance(content, dict):
content_ref = content.get("ref") or content.get("sha256")
if content_ref is not None and compliance.get("reviewedRef") != content_ref:
report.add(rel, "installable-evidence", "compliance.reviewedRef must match the immutable content ref/digest")
if compliance.get("reviewedAt") != _known_timestamp_value(reviewed_at):
report.add(rel, "installable-evidence", "compliance.reviewedAt must equal timestamps.reviewedAt")
def _discover_sidecars(root: Path) -> list[Path]:
return sorted(path for path in root.rglob(SIDECAR_NAME) if ".git" not in path.parts)
def _load_supported_locales(root: Path, report: Report) -> set[str]:
manifest = _read_json(root / "manifest.json", report, root, "market-stats")
if manifest is None:
return set()
locales = manifest.get("supportedLocales")
if not isinstance(locales, list) or not all(isinstance(locale, str) for locale in locales):
report.add("manifest.json", "market-stats", "supportedLocales must be a list of strings")
return set()
return set(locales)
def _validate_stats(root: Path, report: Report, sidecars: Iterable[Path]) -> None:
agent_count = sum(1 for _ in (root / "agents").glob("*/agent.json")) + sum(
1 for _ in (root / "agents").glob("*/entry.json")
)
builtin_count = sum(1 for _ in (root / "skills").glob("*/SKILL.md"))
pointer_count = sum(1 for _ in (root / "skills").glob("*/entry.json"))
collection_count = 0
child_count = 0
for entry_path in (root / "skills").glob("*/entry.json"):
try:
entry = json.loads(entry_path.read_text(encoding="utf-8"))
except (OSError, json.JSONDecodeError):
continue
children = entry.get("children") if isinstance(entry, dict) else None
if isinstance(children, list):
collection_count += 1
child_count += len(children)
sidecar_list = list(sidecars)
report.stats = {
"agents": agent_count,
"builtinSkills": builtin_count,
"pointerSkills": pointer_count,
"publishableSkills": builtin_count + pointer_count,
"collections": collection_count,
"collectionChildren": child_count,
"sidecars": len(sidecar_list),
}
manifest = _read_json(root / "manifest.json", report, root, "market-stats")
stats = manifest.get("stats") if isinstance(manifest, dict) else None
if not isinstance(stats, dict):
report.add("manifest.json", "market-stats", "stats must be an object")
return
if stats.get("totalAgents") != agent_count:
report.add("manifest.json", "market-stats", f"stats.totalAgents must be {agent_count}")
if stats.get("totalSkills") != builtin_count + pointer_count:
report.add("manifest.json", "market-stats", f"stats.totalSkills must be {builtin_count + pointer_count}")
def validate_repository(root: Path = REPO_ROOT, *, require_complete: bool = False) -> Report:
root = root.resolve()
report = Report()
schema_path = root / "schemas" / "catalog-metadata.v1.schema.json"
schema = _read_json(schema_path, report, root, "catalog-schema")
if schema is None:
return report
try:
Draft7Validator.check_schema(schema)
except Exception as exc: # jsonschema raises several SchemaError subclasses
report.add(_rel(schema_path, root), "catalog-schema", f"invalid JSON Schema: {exc}")
return report
validator = Draft7Validator(schema, format_checker=FormatChecker())
sidecars = _discover_sidecars(root)
supported_locales = _load_supported_locales(root, report)
for sidecar in sidecars:
if sidecar.parent.parent not in {root / "agents", root / "skills"}:
report.add(
_rel(sidecar, root),
"fixed-sidecar-path",
f"{SIDECAR_NAME} is only allowed at agents/<id>/ or skills/<id>/",
)
continue
validate_sidecar(sidecar, validator, report, root, supported_locales)
_validate_stats(root, report, sidecars)
if require_complete:
expected = report.stats.get("agents", 0) + report.stats.get("publishableSkills", 0)
actual = report.stats.get("sidecars", 0)
if actual != expected:
report.add(
".",
"sidecar-coverage",
f"complete migration requires {expected} sidecars, found {actual}",
)
return report
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--json", action="store_true", help="emit stable machine-readable JSON")
parser.add_argument(
"--require-complete",
action="store_true",
help="require one sidecar for every publishable top-level Agent and Skill",
)
args = parser.parse_args(argv)
report = validate_repository(require_complete=args.require_complete)
if args.json:
json.dump(
{"stats": report.stats, "issues": [issue.to_dict() for issue in report.issues]},
sys.stdout,
indent=2,
ensure_ascii=False,
sort_keys=True,
)
sys.stdout.write("\n")
else:
for issue in report.issues:
marker = "ERROR" if issue.severity == "error" else "WARN "
print(f"[{marker}] {issue.path} :: {issue.rule} :: {issue.message}")
summary = ", ".join(f"{key}={value}" for key, value in report.stats.items())
if report.issues:
errors = sum(issue.severity == "error" for issue in report.issues)
warnings = sum(issue.severity == "warning" for issue in report.issues)
print(f"\n{errors} error(s), {warnings} warning(s). {summary}")
else:
print(f"OK: catalog metadata valid. {summary}")
return 1 if report.has_errors else 0
if __name__ == "__main__":
try:
sys.exit(main())
except KeyboardInterrupt:
sys.exit(130)

View File

@@ -19,10 +19,12 @@ For each requested entry this script:
Usage:
python3 scripts/gen-collection-children.py # all entries that already declare children
python3 scripts/gen-collection-children.py larksuite-cli # specific ids
python3 scripts/gen-collection-children.py --check # verify without writing
"""
from __future__ import annotations
import argparse
import json
import re
import subprocess
@@ -161,7 +163,7 @@ def discover_children(repo_dir: Path) -> list[dict]:
return children
def process(entry_id: str) -> bool:
def process(entry_id: str, *, check: bool = False) -> bool:
entry_path = SKILLS_DIR / entry_id / "entry.json"
if not entry_path.exists():
print(f"{entry_id}: no entry.json")
@@ -172,6 +174,15 @@ def process(entry_id: str) -> bool:
if source.get("kind") != "git":
print(f"{entry_id}: only git sources can be collections (kind={source.get('kind')})")
return False
if check and source.get("path") is not None:
print(f"{entry_id}: stale — collection source.path must be omitted")
return False
if check and not source.get("ref"):
print(
f"{entry_id}: SKIP — source.ref is not pinned; "
"a mutable source cannot have a deterministic generated-output check"
)
return True
print(f"{entry_id}: cloning {source['repoUrl']}")
with tempfile.TemporaryDirectory(prefix=f"collection-{entry_id}-") as tmp:
@@ -187,6 +198,16 @@ def process(entry_id: str) -> bool:
print(f"{entry_id}: no sub-skills found — not a collection?")
return False
if check:
if entry.get("children") != children:
print(
f"{entry_id}: stale — declared children differ from the "
f"{len(children)} children discovered at the pinned source"
)
return False
print(f"{entry_id}: OK ({len(children)} children)")
return True
entry.pop("children", None)
entry["children"] = children
# source.path is mutually exclusive with children (the client rejects both).
@@ -196,8 +217,17 @@ def process(entry_id: str) -> bool:
return True
def main() -> int:
ids = sys.argv[1:]
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"--check",
action="store_true",
help="compare generated children with entry.json without writing files",
)
parser.add_argument("ids", nargs="*", help="collection entry IDs (default: every declared collection)")
args = parser.parse_args(argv)
ids = args.ids
if not ids:
ids = sorted(
p.parent.name
@@ -208,7 +238,7 @@ def main() -> int:
print("no collection entries found; pass ids explicitly")
return 1
failed = [entry_id for entry_id in ids if not process(entry_id)]
failed = [entry_id for entry_id in ids if not process(entry_id, check=args.check)]
if failed:
print(f"\nfailed: {', '.join(failed)}")
return 1
@@ -216,4 +246,4 @@ def main() -> int:
if __name__ == "__main__":
sys.exit(main())
sys.exit(main(sys.argv[1:]))

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = ["pyyaml>=6.0"]
# dependencies = ["jsonschema>=4.23,<5", "pyyaml>=6.0"]
# ///
"""Unit tests for market validation policies."""

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = ["pyyaml>=6.0"]
# dependencies = ["jsonschema>=4.23,<5", "pyyaml>=6.0"]
# ///
"""Validate DesireCore market i18n state.
@@ -19,6 +19,7 @@ Checks:
10. Skill, Agent, and entry.json category references exist in categories.json.
11. entry.json pointers have the required marketplace fields, valid inline SVG icons, and safe source URLs.
12. Market Skills set `disable-model-invocation` to true or omit it; false is prohibited.
13. Every catalog-metadata.v1.json sidecar passes the strict schema and legacy consistency checks.
Exit codes:
0 = pass
@@ -45,6 +46,12 @@ from typing import Any, Iterable
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
CATALOG_SCRIPT_DIR = Path(__file__).resolve().parents[1] / "catalog"
if str(CATALOG_SCRIPT_DIR) not in sys.path:
sys.path.insert(0, str(CATALOG_SCRIPT_DIR))
from validate_catalog_metadata import validate_repository as validate_catalog_metadata_repository
try:
import yaml
except ImportError:
@@ -586,6 +593,15 @@ def main(argv: list[str]) -> int:
declared_locales, category_ids, manifest = validate_market_root(report)
validate_market_catalog(report, manifest, category_ids, online=args.online)
catalog_report = validate_catalog_metadata_repository(REPO_ROOT)
for issue in catalog_report.issues:
report.add(Issue(
issue.path,
issue.rule,
issue.message,
severity=issue.severity,
))
if args.paths:
targets = [Path(p).resolve() for p in args.paths]
else:

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "agent-reach"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Agent Reach",
"summary": "Web research and social search across Xiaohongshu, X/Twitter, Bilibili, Reddit, YouTube and more"
},
"zh-CN": {
"name": "Agent Reach",
"summary": "全网调研与社媒搜索覆盖小红书、X/Twitter、B 站、Reddit、YouTube 等平台的内容检索与信息聚合"
}
},
"category": "research",
"tags": [
"research",
"web-search",
"social-media",
"twitter",
"reddit",
"youtube",
"bilibili",
"xiaohongshu"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-19T06:37:19Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-09T13:37:59Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/Panniantong/agent-reach.git",
"path": "agent_reach/skill",
"ref": "e825f6740d24c6c315c3b0dc41907e6c87ff39a5"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Panniantong",
"url": "https://github.com/Panniantong/agent-reach",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "ai-news-radar"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "AI News Radar",
"summary": "24/7 AI news radar that curates multiple sources into storylines and delivers daily headlines with three flavors of commentary"
},
"zh-CN": {
"name": "AI 资讯雷达",
"summary": "24 小时 AI 资讯雷达:从多信源筛选要闻、合并成故事线,并用三种口味锐评每日头条"
}
},
"category": "productivity",
"tags": [
"ai-news",
"rss",
"learnprompt"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/LearnPrompt/ai-news-radar.git",
"path": "skills/ai-news-radar",
"ref": "f23ce289695aaf8808f4c19b0b815b51b20730a9"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "LearnPrompt",
"url": "https://github.com/LearnPrompt/ai-news-radar",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -31,6 +31,7 @@
"kind": "git",
"repoUrl": "https://github.com/LearnPrompt/ai-news-radar.git",
"repoBranch": "master",
"path": "skills/ai-news-radar"
"path": "skills/ai-news-radar",
"ref": "f23ce289695aaf8808f4c19b0b815b51b20730a9"
}
}

View File

@@ -0,0 +1,76 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "amap-jsapi-skill"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "AMap JSAPI Skill",
"summary": "AMap JSAPI v2.0 (WebGL) development skill covering map lifecycle, security config, 3D views, overlays and LBS services"
},
"zh-CN": {
"name": "高德地图 JSAPI 技能",
"summary": "高德地图 JSAPI v2.0WebGL开发技能涵盖地图生命周期、安全配置、3D 视图、覆盖物绘制与 LBS 服务集成"
}
},
"category": "development",
"tags": [
"lbs-amap"
]
},
"release": {
"state": "known",
"version": "1.1.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "web",
"url": "https://clawhub.ai/api/v1/skills/amap-jsapi-skill/file?path=SKILL.md&ownerHandle=lbs-amap",
"sha256": "cf2f06cc5abf5e41a626f823c50575ab52c81aecbceca5abd4e69d56ca5c5d75"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "lbs-amap",
"url": "https://clawhub.ai/lbs-amap/skills/amap-jsapi-skill",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -27,6 +27,7 @@
"redistribution": "allowed",
"source": {
"kind": "web",
"repoUrl": "https://clawhub.ai/api/v1/skills/amap-jsapi-skill/file?path=SKILL.md&ownerHandle=lbs-amap"
"repoUrl": "https://clawhub.ai/api/v1/skills/amap-jsapi-skill/file?path=SKILL.md&ownerHandle=lbs-amap",
"sha256": "cf2f06cc5abf5e41a626f823c50575ab52c81aecbceca5abd4e69d56ca5c5d75"
}
}

View File

@@ -0,0 +1,651 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "baoyu-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Baoyu Skills",
"summary": "Baoyu's 20+ content-creation skills — cover images, illustrations, WeChat publishing, translation and slide decks, for Claude Code and Codex"
},
"zh-CN": {
"name": "宝玉 Skills",
"summary": "宝玉分享的 AI Agent 技能集20+ 技能覆盖封面图、插图、公众号发布、翻译、幻灯片等,适配 Claude Code、Codex 等"
}
},
"category": "creative",
"tags": [
"baoyu",
"content-creation",
"wechat",
"illustration",
"productivity"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-07T15:54:03Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/JimLiu/baoyu-skills.git",
"ref": "6b7a2e417500561a5ecdd0b168332f4142584617"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Baoyu (JimLiu)",
"url": "https://github.com/JimLiu/baoyu-skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 21,
"children": [
{
"identity": {
"kind": "skill",
"id": "baoyu-article-illustrator",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-article-illustrator",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-article-illustrator",
"summary": "Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette three-dimension approach."
},
"zh-CN": {
"name": "baoyu-article-illustrator",
"summary": "Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette three-dimension approach."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.4",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-comic",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-comic",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-comic",
"summary": "Knowledge comic creator supporting multiple art styles and tones."
},
"zh-CN": {
"name": "baoyu-comic",
"summary": "Knowledge comic creator supporting multiple art styles and tones."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.4",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-compress-image",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-compress-image",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-compress-image",
"summary": "Compresses images to WebP (default) or PNG with automatic tool selection."
},
"zh-CN": {
"name": "baoyu-compress-image",
"summary": "Compresses images to WebP (default) or PNG with automatic tool selection."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.56.1",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-cover-image",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-cover-image",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-cover-image",
"summary": "Generates article cover images with 5 dimensions (type, palette, rendering, text, mood) combining 11 color palettes and 7 rendering styles."
},
"zh-CN": {
"name": "baoyu-cover-image",
"summary": "Generates article cover images with 5 dimensions (type, palette, rendering, text, mood) combining 11 color palettes and 7 rendering styles."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.5",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-danger-gemini-web",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-danger-gemini-web",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-danger-gemini-web",
"summary": "Generates images and text via reverse-engineered Gemini Web API."
},
"zh-CN": {
"name": "baoyu-danger-gemini-web",
"summary": "Generates images and text via reverse-engineered Gemini Web API."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.56.2",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-danger-x-to-markdown",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-danger-x-to-markdown",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-danger-x-to-markdown",
"summary": "Converts X (Twitter) tweets and articles to markdown with YAML front matter."
},
"zh-CN": {
"name": "baoyu-danger-x-to-markdown",
"summary": "Converts X (Twitter) tweets and articles to markdown with YAML front matter."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.3",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-diagram",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-diagram",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-diagram",
"summary": "Create professional, dark-themed SVG diagrams of any type — architecture diagrams, flowcharts, sequence diagrams, structural diagrams, mind maps, timelines, ill…"
},
"zh-CN": {
"name": "baoyu-diagram",
"summary": "Create professional, dark-themed SVG diagrams of any type — architecture diagrams, flowcharts, sequence diagrams, structural diagrams, mind maps, timelines, ill…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.3",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-electron-extract",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-electron-extract",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-electron-extract",
"summary": "Extracts resources and JavaScript from any installed Electron app (`.asar` bundle), restoring original sources from `.js.map` files when available or formatting…"
},
"zh-CN": {
"name": "baoyu-electron-extract",
"summary": "Extracts resources and JavaScript from any installed Electron app (`.asar` bundle), restoring original sources from `.js.map` files when available or formatting…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.119.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-format-markdown",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-format-markdown",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-format-markdown",
"summary": "Formats plain text or markdown files with frontmatter, titles, summaries, headings, bold, lists, and code blocks."
},
"zh-CN": {
"name": "baoyu-format-markdown",
"summary": "Formats plain text or markdown files with frontmatter, titles, summaries, headings, bold, lists, and code blocks."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.57.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-image-gen",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-image-gen",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-image-gen",
"summary": "AI image generation with OpenAI GPT Image 2, Azure OpenAI, Google, OpenRouter, DashScope, Z.AI GLM-Image, MiniMax, Jimeng, Seedream, Replicate and Agnes APIs."
},
"zh-CN": {
"name": "baoyu-image-gen",
"summary": "AI image generation with OpenAI GPT Image 2, Azure OpenAI, Google, OpenRouter, DashScope, Z.AI GLM-Image, MiniMax, Jimeng, Seedream, Replicate and Agnes APIs."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "2.1.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-infographic",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-infographic",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-infographic",
"summary": "Generate professional infographics with 21 layout types and 22 visual styles."
},
"zh-CN": {
"name": "baoyu-infographic",
"summary": "Generate professional infographics with 21 layout types and 22 visual styles."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.4",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-markdown-to-html",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-markdown-to-html",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-markdown-to-html",
"summary": "Converts Markdown to styled HTML with WeChat-compatible themes."
},
"zh-CN": {
"name": "baoyu-markdown-to-html",
"summary": "Converts Markdown to styled HTML with WeChat-compatible themes."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.3",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-post-to-wechat",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-post-to-wechat",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-post-to-wechat",
"summary": "Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP."
},
"zh-CN": {
"name": "baoyu-post-to-wechat",
"summary": "Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.118.2",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-post-to-weibo",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-post-to-weibo",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-post-to-weibo",
"summary": "Posts content to Weibo (微博)."
},
"zh-CN": {
"name": "baoyu-post-to-weibo",
"summary": "Posts content to Weibo (微博)."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.3",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-post-to-x",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-post-to-x",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-post-to-x",
"summary": "Posts content and articles to X (Twitter)."
},
"zh-CN": {
"name": "baoyu-post-to-x",
"summary": "Posts content and articles to X (Twitter)."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.58.1",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-slide-deck",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-slide-deck",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-slide-deck",
"summary": "Generates professional slide deck images from content."
},
"zh-CN": {
"name": "baoyu-slide-deck",
"summary": "Generates professional slide deck images from content."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.4",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-translate",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-translate",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-translate",
"summary": "This skill should be used when the user asks to \"translate\", \"翻译\", \"精翻\", \"translate article\", \"translate to Chinese\", \"translate to English\", \"改成中文\", \"改成英文\", \"c…"
},
"zh-CN": {
"name": "baoyu-translate",
"summary": "This skill should be used when the user asks to \"translate\", \"翻译\", \"精翻\", \"translate article\", \"translate to Chinese\", \"translate to English\", \"改成中文\", \"改成英文\", \"c…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.117.3",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-url-to-markdown",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-url-to-markdown",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-url-to-markdown",
"summary": "Fetch any URL and convert to markdown using baoyu-fetch CLI (Chrome CDP with site-specific adapters)."
},
"zh-CN": {
"name": "baoyu-url-to-markdown",
"summary": "Fetch any URL and convert to markdown using baoyu-fetch CLI (Chrome CDP with site-specific adapters)."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.61.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-wechat-summary",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-wechat-summary",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-wechat-summary",
"summary": "Summarizes WeChat group chat highlights into a structured digest using the local wx-cli binary (https://github.com/jackwener/wx-cli)."
},
"zh-CN": {
"name": "baoyu-wechat-summary",
"summary": "Summarizes WeChat group chat highlights into a structured digest using the local wx-cli binary (https://github.com/jackwener/wx-cli)."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.119.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-xhs-images",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-xhs-images",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-xhs-images",
"summary": "Generates infographic image card series with 12 visual styles, 8 layouts, and 3 color palettes."
},
"zh-CN": {
"name": "baoyu-xhs-images",
"summary": "Generates infographic image card series with 12 visual styles, 8 layouts, and 3 color palettes."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "2.0.1",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "baoyu-youtube-transcript",
"parentId": "baoyu-skills"
},
"path": "skills/baoyu-youtube-transcript",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "baoyu-youtube-transcript",
"summary": "Downloads YouTube video transcripts/subtitles and cover images by URL or video ID."
},
"zh-CN": {
"name": "baoyu-youtube-transcript",
"summary": "Downloads YouTube video transcripts/subtitles and cover images by URL or video ID."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.1.0",
"versionScheme": "semver"
}
}
]
}
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "clone-agent"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "克隆智能体",
"summary": "完整复制现有智能体为独立本地副本,可选继承用户私有数据",
"description": "完整克隆现有智能体为独立本地副本并安全处理私有记忆、偏好、关系与团队分发影响。Use when 用户要求复制、克隆或基于现有 Agent 创建独立变体。"
},
"en-US": {
"name": "Clone Agent",
"summary": "Clone an existing Agent into an independent local copy with optional private user data",
"description": "Clone an existing Agent into an independent local copy while safely handling private memory, preferences, relationships, and team distribution impact. Use when the user asks to copy, clone, or create an independent variant from an existing Agent."
}
},
"category": "productivity",
"tags": [
"agent",
"clone",
"meta"
]
},
"release": {
"state": "known",
"version": "1.0.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T09:25:42Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.115"
},
"spec": {
"kind": "skill",
"riskLevel": "medium"
}
}

View File

@@ -0,0 +1,76 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "code-intelligence"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "代码智能",
"summary": "基于 Language Server 的定义、引用、符号与调用关系导航",
"description": "使用已安装的 Language Server 执行语义代码导航,包括定义、引用、实现、悬停类型、符号大纲和调用层级。此类请求必须先加载本技能解锁隐藏的 `Lsp` 工具,禁止未尝试 `Lsp` 就用文本检索作答。"
},
"en-US": {
"name": "Code Intelligence",
"summary": "Language Server powered definitions, references, symbols, and call navigation",
"description": "Use an installed Language Server for semantic code navigation, including definitions, references, implementations, hover types, symbols, and call hierarchies. Load this skill first to unlock the hidden `Lsp` tool for such requests; never answer them from text search alone without trying `Lsp`."
}
},
"category": "development",
"tags": [
"development",
"lsp",
"code-navigation",
"symbols",
"references"
]
},
"release": {
"state": "known",
"version": "1.1.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-22T12:03:56Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.94"
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,75 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "configuring-compute"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "配置算力",
"summary": "帮用户配置模型供应商与 API Key密钥只写不读",
"description": "通过受治理工具配置 DesireCore 算力:查看和启停 provider、同步模型、只写 API Key ManageCompute 尚未覆盖的字段使用专用 DesireCore GUI 工具。禁止从 Bash 或 HttpRequest 调用仅供可信渲染器使用的 /api/compute 管理端点。"
},
"en-US": {
"name": "Configure Compute",
"summary": "Configure model providers and API keys for the user (keys are write-only)",
"description": "Configure DesireCore compute through governed tools: inspect and enable providers, sync models, and write API keys without reading them back. Use the dedicated DesireCore GUI tool for fields not covered by ManageCompute; never call renderer-only /api/compute management endpoints from Bash or HttpRequest."
}
},
"category": "productivity",
"tags": [
"compute",
"provider",
"configuration",
"meta"
]
},
"release": {
"state": "known",
"version": "1.1.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-29T18:26:24Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "known",
"value": "2026-08-30",
"precision": "day"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "medium"
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "create-agent"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "创建智能体",
"summary": "通过自然语言对话收集需求,一键创建专业化数字智能体",
"description": "通过多轮对话收集需求,调用 ManageAgent 内置工具创建新的 AgentFS v2 智能体,支持自定义 persona 和 principles。Use when 用户要求创建新智能体、培养某领域助手、或快速基于模板生成可治理 Agent。"
},
"en-US": {
"name": "Create Agent",
"summary": "Collect requirements through natural-language conversation and create a specialized digital Agent in one step",
"description": "Collect requirements through multi-turn conversation and call the ManageAgent builtin tool to create a new AgentFS v2 Agent, with customizable persona and principles. Use when the user asks to create a new Agent, raise a domain assistant, or quickly produce a governable Agent from a template."
}
},
"category": "productivity",
"tags": [
"agent",
"creation",
"meta"
]
},
"release": {
"state": "known",
"version": "2.6.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T09:25:42Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.108"
},
"spec": {
"kind": "skill",
"riskLevel": "low"
}
}

View File

@@ -0,0 +1,81 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "dashscope-image-gen"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "AI 文生图",
"summary": "AI 文本生成图片技能(支持 GPT Image / 通义万相)",
"description": "当用户希望生成图片时使用此技能。支持多种模型gpt-image-2默认通过 DesireCore Cloud、wan2.7-image-pro / wan2.7-image用户自行配置阿里云 DashScope 时可用)。通过 OpenAI 兼容的 /images/generations API 同步生成图片。 用户提到 生成图片、画图、文生图、创建图片、AI 绘画、生成插图、画一张、帮我画、设计图片。"
},
"en-US": {
"name": "AI Image Generation",
"summary": "AI text-to-image generation (GPT Image / Wan models)",
"description": "Use this skill when the user wants to generate images. Supports multiple models: gpt-image-2 (default via DesireCore Cloud), wan2.7-image-pro / wan2.7-image (when user has DashScope configured). Uses the OpenAI-compatible /images/generations API. Trigger keywords: generate image, draw, text-to-image, create image, AI painting, illustration, design picture."
}
},
"category": "media",
"tags": [
"media",
"image",
"generation",
"dashscope",
"alibaba"
]
},
"release": {
"state": "known",
"version": "1.4.2",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Bash"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "delete-agent"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "删除智能体",
"summary": "安全删除智能体及其关联数据,支持多重确认与可选历史清理",
"description": "安全删除指定的智能体及其关联数据。删除前会验证智能体状态支持可选地删除所有会话历史。Use when 用户需要删除不再使用的智能体。"
},
"en-US": {
"name": "Delete Agent",
"summary": "Safely delete an Agent and its associated data, with multi-step confirmation and optional history cleanup",
"description": "Safely delete a specified Agent and its associated data. Verifies the Agent's state before deletion and optionally removes all session history. Use when the user needs to delete an Agent that is no longer in use."
}
},
"category": "productivity",
"tags": [
"agent",
"deletion",
"meta"
]
},
"release": {
"state": "known",
"version": "2.6.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T08:13:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.90"
},
"spec": {
"kind": "skill",
"riskLevel": "high"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "dev-environment-setup"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "开发环境综合配置",
"summary": "开发环境综合入口(容器 / WSL / 办公依赖 / 系统工具)",
"description": "Use this skill as a router/index when the user faces a development environment question that spans multiple domains: containers (Docker/Podman), WSL2 on Windows, office-skill dependencies (DOCX/PDF/XLSX/ PPTX), or system tools (LibreOffice/Poppler/Pandoc/Tesseract). For pure Python issues use python-runtime skill; for pure Node.js issues use nodejs-runtime skill. Triggers include: \"setup environment\", \"PATH\", \"WSL\", \"WSL2\", \"docker not found\", \"podman\", \"container\", \"office dependency\", \"LibreOffice\", \"poppler\", \"pandoc\", \"tesseract\", or any cross-cutting environment question. 使用场景:用户提到 环境配置、PATH、 容器、Docker、Podman、WSL、WSL2、办公依赖、系统工具或不确定属于 Python / Node.js 时的入口指引。"
},
"en-US": {
"name": "Dev Environment Setup",
"summary": "Unified dev environment entry (container / WSL / office deps / system tools)",
"description": "Use this skill as a router/index when the user faces a development environment question that spans multiple domains: containers (Docker/Podman), WSL2 on Windows, office-skill dependencies (DOCX/PDF/XLSX/ PPTX), or system tools (LibreOffice/Poppler/Pandoc/Tesseract). For pure Python issues use python-runtime skill; for pure Node.js issues use nodejs-runtime skill. Triggers include: \"setup environment\", \"PATH\", \"WSL\", \"WSL2\", \"docker not found\", \"podman\", \"container\", \"office dependency\", \"LibreOffice\", \"poppler\", \"pandoc\", \"tesseract\", or any cross-cutting environment question. Use when the user mentions environment setup, PATH, containers, Docker, Podman, WSL, WSL2, office dependencies, system tools, or needs an entry-point guide when uncertain whether the issue belongs to Python or Node.js."
}
},
"category": "productivity",
"tags": [
"environment",
"docker",
"container",
"wsl",
"office",
"system-tools",
"router"
]
},
"release": {
"state": "known",
"version": "2.0.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-06-09T03:27:13Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "dingtalk-api"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "DingTalk API Skill",
"summary": "Call DingTalk Open Platform APIs: user/department lookup, bot messaging in chats and groups, and HR records"
},
"zh-CN": {
"name": "钉钉 API 技能",
"summary": "调用钉钉开放平台 API用户与部门查询、机器人单聊/群聊消息发送、群机器人列表、离职记录查询等"
}
},
"category": "communication",
"tags": [
"ogenes"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/ogenes/dingtalk-api.git",
"ref": "83465bf60b522ad19f7822d167489c3c4f79b302"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "ogenes",
"url": "https://clawhub.ai/ogenes/skills/dingtalk-api",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "discover-agent"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "发现智能体",
"summary": "根据需求描述智能推荐最匹配的智能体,引导快速选择",
"description": "根据用户需求推荐最匹配的智能体展示候选列表并引导选择。Use when 用户描述需求但不确定该找哪个智能体帮忙,或想浏览可用的智能体。"
},
"en-US": {
"name": "Discover Agent",
"summary": "Intelligently recommend the best-matching Agent based on the users need description, and guide quick selection",
"description": "Recommend the best-matching Agent based on the users needs, show a candidate list, and guide selection. Use when the user describes a need but is unsure which Agent to ask for help, or wants to browse available Agents."
}
},
"category": "productivity",
"tags": [
"agent",
"discovery",
"recommendation"
]
},
"release": {
"state": "known",
"version": "2.7.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T08:13:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.90"
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "docx"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "Word 文档处理",
"summary": "创建、编辑和处理 Word 文档(.docx",
"description": "Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of \"Word doc\", \"word document\", \".docx\", or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a \"report\", \"memo\", \"letter\", \"template\", or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation. Use when 用户提到 Word文档、docx、创建文档、编辑文档、报告、 备忘录、公文、合同、信函模板。"
},
"en-US": {
"name": "Word Document Processing",
"summary": "Create, edit, and process Word documents (.docx)",
"description": "Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of \"Word doc\", \"word document\", \".docx\", or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a \"report\", \"memo\", \"letter\", \"template\", or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation. Use when the user mentions Word documents, docx, creating documents, editing documents, reports, memos, official documents, contracts, or letter templates."
}
},
"category": "productivity",
"tags": [
"docx",
"word",
"document",
"office"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-06-04T03:14:36Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
},
"upstreamMaintainer": {
"name": "anthropic",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,75 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "flyai-skill"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "FlyAI",
"summary": "Search and book flights, hotels, attractions and travel deals in natural language via Fliggy MCP"
},
"zh-CN": {
"name": "FlyAI",
"summary": "通过自然语言搜索并预订机票、酒店、门票等出行服务,基于飞猪 MCP 实时查询与预订"
}
},
"category": "productivity",
"tags": [
"alibaba-flyai"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-18T16:45:05Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-18T16:45:05Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/alibaba-flyai/flyai-skill.git",
"path": "skills/flyai",
"ref": "54277b27b68e53741954c08541faedba1d45cc7b"
}
},
"governance": {
"stewardship": "partner",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "alibaba-flyai",
"url": "https://github.com/alibaba-flyai/flyai-skill",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "follow-builders"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Follow Builders",
"summary": "Tracks top AI builders across podcasts, X/Twitter and company blogs, delivering curated daily or weekly digests"
},
"zh-CN": {
"name": "Follow Builders",
"summary": "追踪 AI 领域真正在造东西的开发者、研究者与创始人把播客、X/Twitter 与官方博客的动态汇成每日/每周摘要推送"
}
},
"category": "productivity",
"tags": [
"zarazhangrui"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/zarazhangrui/follow-builders.git",
"ref": "239227ddea46dfb9db6ed23e5864a5fabb9cee83"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "zarazhangrui",
"url": "https://github.com/zarazhangrui/follow-builders",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -28,6 +28,7 @@
"source": {
"kind": "git",
"repoUrl": "https://github.com/zarazhangrui/follow-builders.git",
"repoBranch": "main"
"repoBranch": "main",
"ref": "239227ddea46dfb9db6ed23e5864a5fabb9cee83"
}
}

View File

@@ -0,0 +1,80 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "frontend-design"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "前端设计",
"summary": "创建有品味、避免 AI 烂大街审美的前端界面与组件",
"description": "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 (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics. Use when 用户提到 前端设计、网页设计、UI 设计、 界面设计、组件、海报、Landing Page、落地页、React 组件、Vue 组件、 CSS 样式、美化界面、设计一个、做一个网页、官网、仪表盘、Dashboard。"
},
"en-US": {
"name": "Frontend Design",
"summary": "Create tasteful frontend interfaces and components that avoid generic AI aesthetics",
"description": "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 (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics. Use when the user mentions frontend design, web design, UI design, interface design, components, posters, landing pages, React components, Vue components, CSS styling, polishing the UI, designing something, building a webpage, official site, or dashboard."
}
},
"category": "design",
"tags": [
"frontend",
"design",
"ui",
"css",
"react",
"html"
]
},
"release": {
"state": "known",
"version": "1.0.2",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-05-04T16:26:33Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
},
"upstreamMaintainer": {
"name": "anthropic",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,89 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "guizang-ppt"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "归藏网页 PPT",
"summary": "生成单文件 HTML 横向翻页网页 PPT电子杂志风 / 瑞士国际主义风两套视觉)",
"description": "生成横向翻页的单文件 HTML 网页 PPT提供“电子杂志 × 电子墨水”与“瑞士国际主义”两套视觉系统,含 WebGL 背景、章节封面、数据大字报、图片网格等模板。适合线下分享、演讲、产品发布、年度总结等场景。"
},
"en-US": {
"name": "Guizang Web PPT",
"summary": "Single-file HTML horizontal-swipe slide decks (magazine / Swiss styles)",
"description": "Generate single-file HTML horizontal-swipe presentation decks in two visual systems — editorial “magazine × e-ink” and “Swiss International” — with WebGL backgrounds, chapter covers, data headlines and image grids. Ideal for talks, sharing sessions, product launches and year-in-review decks. The skill body itself is bilingual (zh-CN/en mixed) and the en-US locale intentionally falls back to the shared body, so it is locked as human-maintained."
}
},
"category": "creative",
"tags": [
"ppt",
"presentation",
"html",
"deck",
"swiss-style"
]
},
"release": {
"state": "known",
"version": "1.0.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-05-31T14:31:12Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/op7418/guizang-ppt-skill.git",
"ref": "014c572454065e905477a7432ae331dfc0fe6070"
}
},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "known",
"value": "AGPL-3.0",
"evidencePath": "LICENSE"
},
"redistribution": "allowed",
"listingMaintainer": {
"name": "DesireCore Official (vendored)",
"verified": true
},
"upstreamMaintainer": {
"name": "歸藏 (op7418)",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "humanizer-zh"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Humanizer (Chinese)",
"summary": "Chinese localization of Humanizer that removes AI writing patterns following Chinese prose conventions, with core rules, a quick checklist and quality scoring for Claude Code and Codex"
},
"zh-CN": {
"name": "Humanizer 中文版",
"summary": "Humanizer 的汉化版本,按中文写作习惯去除 AI 生成痕迹,附核心规则、快速检查清单与质量评分,适配 Claude Code、Codex 等"
}
},
"category": "creative",
"tags": [
"writing",
"editing",
"ai-detection",
"humanize",
"chinese"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/op7418/Humanizer-zh.git",
"ref": "91f3d394db8419c20d67ebe22a96cf8fee0a404b"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "歸藏 (op7418)",
"url": "https://github.com/op7418/Humanizer-zh",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "humanizer"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Humanizer",
"summary": "Strips signs of AI-generated writing using Wikipedia's \"Signs of AI writing\" guide, fixing inflated symbolism, promotional tone, em dash overuse, rule of three and negative parallelisms; plain Markdown, runs in any harness"
},
"zh-CN": {
"name": "Humanizer",
"summary": "基于维基百科「AI 写作特征」指南去除文本中的 AI 痕迹,识别并修复夸大象征、宣传腔、破折号滥用、三段式、否定式排比等模式,纯 Markdown 可跨 agent 运行"
}
},
"category": "creative",
"tags": [
"writing",
"editing",
"ai-detection",
"humanize",
"prose"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/blader/humanizer.git",
"ref": "523374dee72d67c7b2b5f858ea0094ffda49c3ac"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "blader",
"url": "https://github.com/blader/humanizer",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "ian-xiaohei-illustrations"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Ian Xiaohei Illustrations",
"summary": "Generate Ian \"Xiaohei\" style illustrations for Chinese articles, turning ideas and processes into clean, whimsical 16:9 hand-drawn visuals"
},
"zh-CN": {
"name": "Ian 小黑怪诞正文配图",
"summary": "生成 Ian「小黑」风格的中文正文配图把文章观点、流程与隐喻转成清爽怪诞的 16:9 手绘解释图"
}
},
"category": "media",
"tags": [
"illustration",
"image-generation",
"xiaohei",
"design"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-19T06:37:19Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-09T13:37:59Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/helloianneo/ian-xiaohei-illustrations.git",
"path": "ian-xiaohei-illustrations",
"ref": "91b560849e8f883922cc2fa8a358a668caa94105"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "helloianneo",
"url": "https://github.com/helloianneo/ian-xiaohei-illustrations",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,80 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "image-to-image"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "图生图",
"summary": "基于参考图片的 AI 图像编辑与变换技能",
"description": "当用户希望基于已有图片进行编辑、变换或修改时使用此技能。支持通过 gpt-image-2 模型进行图生图,使用 OpenAI 兼容的 images/generations API。用户提到 图生图、修改图片、编辑图片、图片变换、改图、换背景、换风格、图片编辑、以图生图、参考图、基于这张图、把这张图改成、在这张图上。"
},
"en-US": {
"name": "Image-to-Image",
"summary": "AI image editing and transformation based on reference images",
"description": "Use this skill when the user wants to edit, transform, or modify an existing image using AI. Supports image-to-image via gpt-image-2 model through the OpenAI-compatible images/generations API. Trigger keywords: image edit, img2img, modify image, transform image, change background, change style, based on this image, edit this image."
}
},
"category": "media",
"tags": [
"media",
"image",
"editing",
"img2img"
]
},
"release": {
"state": "known",
"version": "1.0.2",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Bash"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,80 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "impeccable"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Impeccable",
"summary": "A design language that makes AI better at frontend: UX review, visual hierarchy, accessibility, typography, color, motion and reusable design systems"
},
"zh-CN": {
"name": "Impeccable",
"summary": "让 AI 更懂设计的前端设计语言:覆盖 UX 审查、视觉层级、可访问性、排版、配色、动效与可复用设计系统,把界面打磨到生产级"
}
},
"category": "design",
"tags": [
"design",
"frontend",
"ui",
"pbakaus"
]
},
"release": {
"state": "known",
"version": "3.9.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-19T11:19:33Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/pbakaus/impeccable.git",
"path": "plugin/skills/impeccable",
"ref": "e4ab5e24bdf5321b72163d2fbcbe6fa985c848ba"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Paul Bakaus",
"url": "https://github.com/pbakaus/impeccable",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "karpathy-guidelines"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Karpathy Guidelines",
"summary": "Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations"
},
"zh-CN": {
"name": "Karpathy 编码准则",
"summary": "降低 LLM 常见编码错误的行为准则,源自 Andrej Karpathy 对 LLM 编码陷阱的观察"
}
},
"category": "development",
"tags": [
"guidelines",
"best-practices",
"coding",
"karpathy"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/multica-ai/andrej-karpathy-skills.git",
"path": "skills/karpathy-guidelines",
"ref": "2c606141936f1eeef17fa3043a72095b4765b9c2"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "forrestchang",
"url": "https://github.com/multica-ai/andrej-karpathy-skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -33,6 +33,7 @@
"kind": "git",
"repoUrl": "https://github.com/multica-ai/andrej-karpathy-skills.git",
"repoBranch": "main",
"path": "skills/karpathy-guidelines"
"path": "skills/karpathy-guidelines",
"ref": "2c606141936f1eeef17fa3043a72095b4765b9c2"
}
}

View File

@@ -0,0 +1,208 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "khazix-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Khazix Skills",
"summary": "Khazix's open-source collection of daily-use AI skills following the AgentSkills standard, working with Claude Code, Codex and OpenCode"
},
"zh-CN": {
"name": "卡兹克 Skills",
"summary": "卡兹克日常在用的开源 AI Skill 合集,遵循 AgentSkills 标准,适配 Claude Code、Codex、OpenCode 等"
}
},
"category": "productivity",
"tags": [
"khazix",
"ai-news",
"writing",
"analysis"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-09T13:37:59Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/KKKKhazix/khazix-skills.git",
"ref": "d4e43c91f16dcd859748c1d71ec7d8aa1ebb4694"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "KKKKhazix",
"url": "https://github.com/KKKKhazix/khazix-skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 5,
"children": [
{
"identity": {
"kind": "skill",
"id": "aihot",
"parentId": "khazix-skills"
},
"path": "aihot",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "aihot",
"summary": "AI HOT (aihot.virxact.com) 中文 AI 资讯查询 Skill。当用户想知道\"今天 AI 圈有什么\"、\"AI 日报\"、\"AI HOT\"、\"AI 资讯\"、\"AI 热点\"、\"最近 AI\"、\"OpenAI/Anthropic/Google 最近发布了什么\"、\"AI hot today\"、\"AI new…"
},
"zh-CN": {
"name": "aihot",
"summary": "AI HOT (aihot.virxact.com) 中文 AI 资讯查询 Skill。当用户想知道\"今天 AI 圈有什么\"、\"AI 日报\"、\"AI HOT\"、\"AI 资讯\"、\"AI 热点\"、\"最近 AI\"、\"OpenAI/Anthropic/Google 最近发布了什么\"、\"AI hot today\"、\"AI new…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "hv-analysis",
"parentId": "khazix-skills"
},
"path": "hv-analysis",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "hv-analysis",
"summary": "横纵分析法Horizontal-Vertical Analysis深度研究Skill。由数字生命卡兹克提出融合了索绪尔的历时-共时分析、社会科学的纵向-横截面研究设计、商学院案例研究法与竞争战略分析的核心思想。"
},
"zh-CN": {
"name": "hv-analysis",
"summary": "横纵分析法Horizontal-Vertical Analysis深度研究Skill。由数字生命卡兹克提出融合了索绪尔的历时-共时分析、社会科学的纵向-横截面研究设计、商学院案例研究法与竞争战略分析的核心思想。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "khazix-writer",
"parentId": "khazix-skills"
},
"path": "khazix-writer",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "khazix-writer",
"summary": "数字生命卡兹克Khazix的公众号长文写作skill。当用户需要撰写公众号文章、写稿子、续写文章、根据素材产出长文时使用。触发词包括但不限于写文章、写稿子、帮我写、续写、扩写、公众号文章、长文、出稿、按我的风格写。即使用户只是说\"帮我把这个写成文章\"或\"用我的风格写一下\",只要上下文涉及内容创作和公众号输出,都应…"
},
"zh-CN": {
"name": "khazix-writer",
"summary": "数字生命卡兹克Khazix的公众号长文写作skill。当用户需要撰写公众号文章、写稿子、续写文章、根据素材产出长文时使用。触发词包括但不限于写文章、写稿子、帮我写、续写、扩写、公众号文章、长文、出稿、按我的风格写。即使用户只是说\"帮我把这个写成文章\"或\"用我的风格写一下\",只要上下文涉及内容创作和公众号输出,都应…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "neat-freak",
"parentId": "khazix-skills"
},
"path": "neat-freak",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "neat-freak",
"summary": "End-of-session knowledge cleanup with OCD-level rigor — reconciles project docs (CLAUDE.md, README.md, docs/) and agent memory against the code, and audits whet…"
},
"zh-CN": {
"name": "neat-freak",
"summary": "End-of-session knowledge cleanup with OCD-level rigor — reconciles project docs (CLAUDE.md, README.md, docs/) and agent memory against the code, and audits whet…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "storage-analyzer",
"parentId": "khazix-skills"
},
"path": "storage-analyzer",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "storage-analyzer",
"summary": "macOS / Windows 只读存储分析助手(自动识别系统)。扫描整机磁盘占用,找出 占空间大户,把每一项分成 🟢可自动清理 / 🟡需人工判断 / 🔴谨慎清理 三级并给出 可执行处置方案,生成排版精美、可折叠、命令可一键复制的交互式 HTML 报告,并可 起本地服务在网页上一键删除(移废纸篓/直接删)。扫描全程只读…"
},
"zh-CN": {
"name": "storage-analyzer",
"summary": "macOS / Windows 只读存储分析助手(自动识别系统)。扫描整机磁盘占用,找出 占空间大户,把每一项分成 🟢可自动清理 / 🟡需人工判断 / 🔴谨慎清理 三级并给出 可执行处置方案,生成排版精美、可折叠、命令可一键复制的交互式 HTML 报告,并可 起本地服务在网页上一键删除(移废纸篓/直接删)。扫描全程只读…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
}
]
}
}
}

View File

@@ -0,0 +1,809 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "larksuite-cli"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Lark Suite CLI",
"summary": "Official Lark/Feishu CLI for humans and AI agents, spanning Messenger, Docs, Base, Calendar and 18 domains with 200+ commands"
},
"zh-CN": {
"name": "飞书 CLI",
"summary": "飞书/Lark 官方命令行工具,面向人与 AI Agent覆盖消息、文档、多维表格、日历、邮件等 18 个业务域、200+ 命令"
}
},
"category": "communication",
"tags": [
"larksuite"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/larksuite/cli.git",
"ref": "4c31323de1ca878b2070c05f7c3cb66c0de4c767"
}
},
"governance": {
"stewardship": "partner",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "larksuite",
"url": "https://github.com/larksuite/cli",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 27,
"children": [
{
"identity": {
"kind": "skill",
"id": "lark-approval",
"parentId": "larksuite-cli"
},
"path": "skills/lark-approval",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-approval",
"summary": "飞书审批:查询和处理审批待办/已办/实例,搜索可发起审批定义、查看定义详情并发起原生审批实例。当用户要处理审批任务、查看审批实例、搜索或发起审批时使用。审批待办不是飞书任务;非审批类待办走 lark-task。不负责创建审批定义三方审批定义不走原生提单。"
},
"zh-CN": {
"name": "lark-approval",
"summary": "飞书审批:查询和处理审批待办/已办/实例,搜索可发起审批定义、查看定义详情并发起原生审批实例。当用户要处理审批任务、查看审批实例、搜索或发起审批时使用。审批待办不是飞书任务;非审批类待办走 lark-task。不负责创建审批定义三方审批定义不走原生提单。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.2.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-apps",
"parentId": "larksuite-cli"
},
"path": "skills/lark-apps",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-apps",
"summary": "妙搭Spark/Miaoda应用开发与托管应用创建、HTML静态站点发布、本地全栈开发、云端生成迭代。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或提到妙搭/Spark/Miaoda…"
},
"zh-CN": {
"name": "lark-apps",
"summary": "妙搭Spark/Miaoda应用开发与托管应用创建、HTML静态站点发布、本地全栈开发、云端生成迭代。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或提到妙搭/Spark/Miaoda…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-attendance",
"parentId": "larksuite-cli"
},
"path": "skills/lark-attendance",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-attendance",
"summary": "飞书考勤打卡:查询自己的考勤打卡记录"
},
"zh-CN": {
"name": "lark-attendance",
"summary": "飞书考勤打卡:查询自己的考勤打卡记录"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-base",
"parentId": "larksuite-cli"
},
"path": "skills/lark-base",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-base",
"summary": "飞书多维表格Base操作建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、workflow、角色权限遇到 Base/多维表格/bitable 或 /base/ 链接时使用。文件导入转 lark-drive认证/授权转 lark-shared。"
},
"zh-CN": {
"name": "lark-base",
"summary": "飞书多维表格Base操作建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、workflow、角色权限遇到 Base/多维表格/bitable 或 /base/ 链接时使用。文件导入转 lark-drive认证/授权转 lark-shared。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.2.2",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-calendar",
"parentId": "larksuite-cli"
},
"path": "skills/lark-calendar",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-calendar",
"summary": "飞书日历:管理日历日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。当用户需要查看日程安排、创建/修改会议、查询/预定会议室时使用。不负责:查询过去的视频会议记录(走 lark-vc、待办任务走 lark-task。"
},
"zh-CN": {
"name": "lark-calendar",
"summary": "飞书日历:管理日历日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。当用户需要查看日程安排、创建/修改会议、查询/预定会议室时使用。不负责:查询过去的视频会议记录(走 lark-vc、待办任务走 lark-task。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-contact",
"parentId": "larksuite-cli"
},
"path": "skills/lark-contact",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-contact",
"summary": "飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名。当用户提到某人姓名要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAP…"
},
"zh-CN": {
"name": "lark-contact",
"summary": "飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名。当用户提到某人姓名要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAP…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-doc",
"parentId": "larksuite-cli"
},
"path": "skills/lark-doc",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-doc",
"summary": "飞书云文档Docx / Wiki 文档):读取和编辑飞书文档内容。当用户给出文档 URL 或 token或需要查看、创建、编辑文档、插入或下载文档图片附件时使用。文档中嵌入的电子表格、多维表格、画板先用本 skill 提取 token 再切到对应 skill。当用户给出 doubao.com 的 /docx/ 或…"
},
"zh-CN": {
"name": "lark-doc",
"summary": "飞书云文档Docx / Wiki 文档):读取和编辑飞书文档内容。当用户给出文档 URL 或 token或需要查看、创建、编辑文档、插入或下载文档图片附件时使用。文档中嵌入的电子表格、多维表格、画板先用本 skill 提取 token 再切到对应 skill。当用户给出 doubao.com 的 /docx/ 或…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "2.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-drive",
"parentId": "larksuite-cli"
},
"path": "skills/lark-drive",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-drive",
"summary": "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/shee…"
},
"zh-CN": {
"name": "lark-drive",
"summary": "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/shee…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-event",
"parentId": "larksuite-cli"
},
"path": "skills/lark-event",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-event",
"summary": "Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/c…"
},
"zh-CN": {
"name": "lark-event",
"summary": "Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/c…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-im",
"parentId": "larksuite-cli"
},
"path": "skills/lark-im",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-im",
"summary": "飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件(支持大文件分片下载)、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片Interactive Card、监听卡片按钮回调card.action.trigger。当用户需要发消息、查看或搜索聊天记录、下载…"
},
"zh-CN": {
"name": "lark-im",
"summary": "飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件(支持大文件分片下载)、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片Interactive Card、监听卡片按钮回调card.action.trigger。当用户需要发消息、查看或搜索聊天记录、下载…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-mail",
"parentId": "larksuite-cli"
},
"path": "skills/lark-mail",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-mail",
"summary": "飞书邮箱Use when user mentions 起草邮件、写邮件、草稿、发送/回复/转发邮件、查阅邮件、看邮件、搜索邮件、邮件文件夹、邮件标签、邮件联系人、监听新邮件、邮件收信规则等use for mail/email intent only."
},
"zh-CN": {
"name": "lark-mail",
"summary": "飞书邮箱Use when user mentions 起草邮件、写邮件、草稿、发送/回复/转发邮件、查阅邮件、看邮件、搜索邮件、邮件文件夹、邮件标签、邮件联系人、监听新邮件、邮件收信规则等use for mail/email intent only."
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-markdown",
"parentId": "larksuite-cli"
},
"path": "skills/lark-markdown",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-markdown",
"summary": "飞书 Markdown查看、创建、上传、编辑和比较 Markdown 文件。当用户需要创建或编辑 Markdown 文件、读取、修改、局部 patch 或比较差异时使用。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。"
},
"zh-CN": {
"name": "lark-markdown",
"summary": "飞书 Markdown查看、创建、上传、编辑和比较 Markdown 文件。当用户需要创建或编辑 Markdown 文件、读取、修改、局部 patch 或比较差异时使用。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.2.1",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-minutes",
"parentId": "larksuite-cli"
},
"path": "skills/lark-minutes",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-minutes",
"summary": "飞书妙记:搜索妙记、查看妙记基础信息、下载/上传音视频、读取或编辑妙记的产物内容、改标题、替换说话人/关键词。当给出minute_token、本地音视频文件要查/改/转妙记产物时使用;本地音视频转纪要/逐字稿优先走本 skill不要用 ffmpeg/whisper 本地转写。不负责:获取会议关联妙记,或仅按自然语言…"
},
"zh-CN": {
"name": "lark-minutes",
"summary": "飞书妙记:搜索妙记、查看妙记基础信息、下载/上传音视频、读取或编辑妙记的产物内容、改标题、替换说话人/关键词。当给出minute_token、本地音视频文件要查/改/转妙记产物时使用;本地音视频转纪要/逐字稿优先走本 skill不要用 ffmpeg/whisper 本地转写。不负责:获取会议关联妙记,或仅按自然语言…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-note",
"parentId": "larksuite-cli"
},
"path": "skills/lark-note",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-note",
"summary": "飞书会议纪要Note直查已知 note_id 时查询纪要详情、展示类型、关联文档 token并读取 unified 原始逐字记录。当用户已持有 note_id或从文档显式 vc-node-id 获得 note_id 时使用。不负责会议/日程/妙记定位、文档标题搜索或 Docx 正文读取。"
},
"zh-CN": {
"name": "lark-note",
"summary": "飞书会议纪要Note直查已知 note_id 时查询纪要详情、展示类型、关联文档 token并读取 unified 原始逐字记录。当用户已持有 note_id或从文档显式 vc-node-id 获得 note_id 时使用。不负责会议/日程/妙记定位、文档标题搜索或 Docx 正文读取。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-okr",
"parentId": "larksuite-cli"
},
"path": "skills/lark-okr",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-okr",
"summary": "飞书 OKR管理目标与关键结果。查看和编辑 OKR 周期、目标、关键结果、对齐关系、量化指标和进展记录。当用户需要查看或创建 OKR、管理目标和关键结果、查看对齐关系时使用。不负责待办任务管理lark-task、日程/会议安排lark-calendar、绩效评估"
},
"zh-CN": {
"name": "lark-okr",
"summary": "飞书 OKR管理目标与关键结果。查看和编辑 OKR 周期、目标、关键结果、对齐关系、量化指标和进展记录。当用户需要查看或创建 OKR、管理目标和关键结果、查看对齐关系时使用。不负责待办任务管理lark-task、日程/会议安排lark-calendar、绩效评估"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-openapi-explorer",
"parentId": "larksuite-cli"
},
"path": "skills/lark-openapi-explorer",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-openapi-explorer",
"summary": "飞书/Lark 原生 OpenAPI 探索:从官方文档库中挖掘未经 CLI 封装的原生 OpenAPI 接口。当用户的需求无法被现有 lark-* skill 或 lark-cli 已注册命令满足,需要查找并调用原生飞书 OpenAPI 时使用。"
},
"zh-CN": {
"name": "lark-openapi-explorer",
"summary": "飞书/Lark 原生 OpenAPI 探索:从官方文档库中挖掘未经 CLI 封装的原生 OpenAPI 接口。当用户的需求无法被现有 lark-* skill 或 lark-cli 已注册命令满足,需要查找并调用原生飞书 OpenAPI 时使用。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-shared",
"parentId": "larksuite-cli"
},
"path": "skills/lark-shared",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-shared",
"summary": "Use when first setting up lark-cli, running auth login, switching user/bot identity (--as), handling permission denied or scope errors, needing to update lark-c…"
},
"zh-CN": {
"name": "lark-shared",
"summary": "Use when first setting up lark-cli, running auth login, switching user/bot identity (--as), handling permission denied or scope errors, needing to update lark-c…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-sheets",
"parentId": "larksuite-cli"
},
"path": "skills/lark-sheets",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-sheets",
"summary": "飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作原子批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总…"
},
"zh-CN": {
"name": "lark-sheets",
"summary": "飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作原子批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "3.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-skill-maker",
"parentId": "larksuite-cli"
},
"path": "skills/lark-skill-maker",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-skill-maker",
"summary": "创建 lark-cli 的自定义 Skill。当用户需要把飞书 API 操作封装成可复用的 Skill包装原子 API 或编排多步流程)时使用。"
},
"zh-CN": {
"name": "lark-skill-maker",
"summary": "创建 lark-cli 的自定义 Skill。当用户需要把飞书 API 操作封装成可复用的 Skill包装原子 API 或编排多步流程)时使用。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-slides",
"parentId": "larksuite-cli"
},
"path": "skills/lark-slides",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-slides",
"summary": "飞书幻灯片:创建和编辑幻灯片。创建演示文稿、读取幻灯片内容、管理幻灯片页面(创建、删除、读取、局部替换)。当用户需要创建或编辑幻灯片、读取或修改单个页面时使用。当用户给出 doubao.com 的 /slides/ URL/token 时,也应直接使用本 skill不要因为域名不是飞书而回退到 WebFetch路由…"
},
"zh-CN": {
"name": "lark-slides",
"summary": "飞书幻灯片:创建和编辑幻灯片。创建演示文稿、读取幻灯片内容、管理幻灯片页面(创建、删除、读取、局部替换)。当用户需要创建或编辑幻灯片、读取或修改单个页面时使用。当用户给出 doubao.com 的 /slides/ URL/token 时,也应直接使用本 skill不要因为域名不是飞书而回退到 WebFetch路由…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-task",
"parentId": "larksuite-cli"
},
"path": "skills/lark-task",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-task",
"summary": "飞书任务:管理任务、清单和任务智能体。创建待办任务、查看和更新任务状态、拆分子任务、组织任务清单、分配协作成员、上传任务附件、注册或注销任务智能体、更新任务智能体的主页数据、写入智能体任务记录。当用户需要创建待办事项、查看任务列表、跟踪任务进度、管理项目清单或给他人分配任务、为任务上传附件文件、注册注销任务智能体、更新…"
},
"zh-CN": {
"name": "lark-task",
"summary": "飞书任务:管理任务、清单和任务智能体。创建待办任务、查看和更新任务状态、拆分子任务、组织任务清单、分配协作成员、上传任务附件、注册或注销任务智能体、更新任务智能体的主页数据、写入智能体任务记录。当用户需要创建待办事项、查看任务列表、跟踪任务进度、管理项目清单或给他人分配任务、为任务上传附件文件、注册注销任务智能体、更新…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-vc",
"parentId": "larksuite-cli"
},
"path": "skills/lark-vc",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-vc",
"summary": "飞书视频会议:搜索历史会议记录、查询会议纪要(总结/待办/章节/逐字稿)、查询参会人快照。当用户查询已结束的会议、获取会议产物(纪要/妙记)、查看参会人时使用;查询未来日程走 lark-calendar。不负责Agent 真实入会/离会、会中实时事件(走 lark-vc-agent。"
},
"zh-CN": {
"name": "lark-vc",
"summary": "飞书视频会议:搜索历史会议记录、查询会议纪要(总结/待办/章节/逐字稿)、查询参会人快照。当用户查询已结束的会议、获取会议产物(纪要/妙记)、查看参会人时使用;查询未来日程走 lark-calendar。不负责Agent 真实入会/离会、会中实时事件(走 lark-vc-agent。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-vc-agent",
"parentId": "larksuite-cli"
},
"path": "skills/lark-vc-agent",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-vc-agent",
"summary": "飞书视频会议会中能力:用于让应用机器人真实加入或离开正在进行的会议,并读取当前身份可见的会中事件,如参会人加入/离开、发言、聊天、屏幕共享。适用于用户询问正在开的会议发生了什么、谁在发言、是否共享内容,或需要发现当前可读的进行中会议 ID。不负责已结束会议搜索、参会人快照、纪要、逐字稿或录制查询这些使用 lark-v…"
},
"zh-CN": {
"name": "lark-vc-agent",
"summary": "飞书视频会议会中能力:用于让应用机器人真实加入或离开正在进行的会议,并读取当前身份可见的会中事件,如参会人加入/离开、发言、聊天、屏幕共享。适用于用户询问正在开的会议发生了什么、谁在发言、是否共享内容,或需要发现当前可读的进行中会议 ID。不负责已结束会议搜索、参会人快照、纪要、逐字稿或录制查询这些使用 lark-v…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-whiteboard",
"parentId": "larksuite-cli"
},
"path": "skills/lark-whiteboard",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-whiteboard",
"summary": "飞书画板:查询和编辑飞书云文档中的画板。支持导出画板为预览图片、导出原始节点结构、使用多种格式更新画板内容。"
},
"zh-CN": {
"name": "lark-whiteboard",
"summary": "飞书画板:查询和编辑飞书云文档中的画板。支持导出画板为预览图片、导出原始节点结构、使用多种格式更新画板内容。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-wiki",
"parentId": "larksuite-cli"
},
"path": "skills/lark-wiki",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-wiki",
"summary": "飞书知识库:管理知识空间、空间成员和文档节点。创建和查询知识空间、查看和管理空间成员、管理节点层级结构、在知识库中组织文档和快捷方式。当用户需要在知识库中查找或创建文档、浏览知识空间结构、查看或管理空间成员、移动或复制节点时使用。当用户给出 doubao.com 的 /wiki/ URL/token 时,也应直接使用本…"
},
"zh-CN": {
"name": "lark-wiki",
"summary": "飞书知识库:管理知识空间、空间成员和文档节点。创建和查询知识空间、查看和管理空间成员、管理节点层级结构、在知识库中组织文档和快捷方式。当用户需要在知识库中查找或创建文档、浏览知识空间结构、查看或管理空间成员、移动或复制节点时使用。当用户给出 doubao.com 的 /wiki/ URL/token 时,也应直接使用本…"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.1",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-workflow-meeting-summary",
"parentId": "larksuite-cli"
},
"path": "skills/lark-workflow-meeting-summary",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-workflow-meeting-summary",
"summary": "会议纪要整理工作流:汇总指定时间范围内的会议纪要并生成结构化报告。当用户需要整理会议纪要、生成会议周报、回顾一段时间内的会议内容时使用。"
},
"zh-CN": {
"name": "lark-workflow-meeting-summary",
"summary": "会议纪要整理工作流:汇总指定时间范围内的会议纪要并生成结构化报告。当用户需要整理会议纪要、生成会议周报、回顾一段时间内的会议内容时使用。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
},
{
"identity": {
"kind": "skill",
"id": "lark-workflow-standup-report",
"parentId": "larksuite-cli"
},
"path": "skills/lark-workflow-standup-report",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "lark-workflow-standup-report",
"summary": "日程待办摘要:编排 calendar +agenda 和 task +get-my-tasks生成指定日期的日程与未完成任务摘要。适用于了解今天/明天/本周的安排。"
},
"zh-CN": {
"name": "lark-workflow-standup-report",
"summary": "日程待办摘要:编排 calendar +agenda 和 task +get-my-tasks生成指定日期的日程与未完成任务摘要。适用于了解今天/明天/本周的安排。"
}
},
"tags": []
},
"release": {
"state": "known",
"version": "1.0.0",
"versionScheme": "semver"
}
}
]
}
}
}

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "last30days"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Last 30 Days",
"summary": "Research what people actually say about any topic in the last 30 days across Reddit, X, YouTube, HN and more"
},
"zh-CN": {
"name": "近 30 天研究",
"summary": "调研任意话题近 30 天的真实讨论,聚合 Reddit、X、YouTube、HN、Polymarket、GitHub 等来源的热帖与观点"
}
},
"category": "research",
"tags": [
"research",
"trends",
"reddit",
"youtube",
"hacker-news",
"web"
]
},
"release": {
"state": "known",
"version": "3.21.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/mvanhorn/last30days-skill.git",
"path": "skills/last30days",
"ref": "a218edadbc3361672f5e5e2cd72a8212b0b3fbb8"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Matt Van Horn",
"url": "https://github.com/mvanhorn/last30days-skill",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -35,6 +35,7 @@
"kind": "git",
"repoUrl": "https://github.com/mvanhorn/last30days-skill.git",
"repoBranch": "main",
"path": "skills/last30days"
"path": "skills/last30days",
"ref": "a218edadbc3361672f5e5e2cd72a8212b0b3fbb8"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "luckin-my-coffee"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Luckin My Coffee",
"summary": "Luckin Coffee ordering assistant to browse the menu, place and manage Luckin orders in natural language"
},
"zh-CN": {
"name": "瑞幸下单助手",
"summary": "瑞幸咖啡下单助手:用自然语言查询菜单、选品下单与管理瑞幸咖啡订单"
}
},
"category": "business",
"tags": [
"luckin"
]
},
"release": {
"state": "known",
"version": "0.8.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "zip",
"url": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@0.8.4/dist/my-coffee-skill.zip",
"path": "my-coffee",
"sha256": "5b079e6c52bc7db188e0a3b8af0b631e63accfa84bbb200e723c24b6da32ff3f"
}
},
"governance": {
"stewardship": "pointer",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"upstreamMaintainer": {
"name": "luckin",
"url": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@latest/dist/my-coffee-skill.zip",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -27,7 +27,8 @@
"redistribution": "verify-package-terms",
"source": {
"kind": "zip",
"repoUrl": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@latest/dist/my-coffee-skill.zip",
"path": "my-coffee"
"repoUrl": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@0.8.4/dist/my-coffee-skill.zip",
"path": "my-coffee",
"sha256": "5b079e6c52bc7db188e0a3b8af0b631e63accfa84bbb200e723c24b6da32ff3f"
}
}

View File

@@ -0,0 +1,76 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "mail-operations"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "邮箱操作",
"summary": "邮件收发、搜索、标签管理、自动规则与智能体邮件处理",
"description": "Use this skill whenever the user wants to interact with email. This includes reading inbox, sending emails, replying, searching messages, managing labels and categories, downloading attachments, setting up auto-reply rules, or triggering agents to handle incoming emails. Supports Gmail, Outlook, and IMAP/SMTP (QQ Mail, 163, Yahoo, etc.) through DesireCore's local REST API. Use when 用户提到 邮件、邮箱、收件箱、发邮件、回复邮件、查邮件、Gmail、 Outlook、QQ邮箱、163邮箱、附件、标签、草稿、自动回复、邮件规则、 转发、抄送、未读邮件、收信、发信、邮件同步、邮件搜索。"
},
"en-US": {
"name": "Email Operations",
"summary": "Email send/receive, search, label management, auto-rules, and Agent-driven email handling",
"description": "Use this skill whenever the user wants to interact with email. This includes reading inbox, sending emails, replying, searching messages, managing labels and categories, downloading attachments, setting up auto-reply rules, or triggering agents to handle incoming emails. Supports Gmail, Outlook, and IMAP/SMTP (QQ Mail, 163, Yahoo, etc.) through DesireCore's local REST API. Use when the user mentions email, mailbox, inbox, sending email, replying, checking email, Gmail, Outlook, QQ Mail, 163 Mail, attachments, labels, drafts, auto-reply, email rules, forwarding, CC, unread email, receiving, sending, email sync, or email search."
}
},
"category": "productivity",
"tags": [
"mail",
"email",
"gmail",
"outlook",
"imap",
"smtp"
]
},
"release": {
"state": "known",
"version": "1.0.5",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "medium",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "manage-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "管理技能",
"summary": "导入、编写、安装与管理 Agent 技能的完整工具箱",
"description": "管理 Agent 的技能生命周期:通过 HTTP API 导入、安装、更新、删除技能, 或通过 AgentFS 文件系统直接编写符合规范的 SKILL.md。Use when 用户要求 安装技能、从 URL/Git 导入技能、编写新技能、或管理已有技能。"
},
"en-US": {
"name": "Manage Skills",
"summary": "Complete toolbox for importing, authoring, installing, and managing Agent Skills",
"description": "Manage the Skill lifecycle of an Agent: import, install, update, and delete Skills via HTTP API, or directly author standards-compliant SKILL.md files via the AgentFS filesystem. Use when the user requests to install Skills, import Skills from URL/Git, author new Skills, or manage existing Skills."
}
},
"category": "productivity",
"tags": [
"skill",
"import",
"management",
"meta",
"agentfs"
]
},
"release": {
"state": "known",
"version": "1.0.6",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "manage-teams"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "团队管理",
"summary": "创建团队、管理成员、组织多 Agent 协作",
"description": "创建和管理 Agent 团队,组织多 Agent 协作。Use when 需要多个 Agent 持续协作、建立组织架构,或发布、安装和同步团队仓库时。"
},
"en-US": {
"name": "Team Management",
"summary": "Create teams, manage members, and organize multi-Agent collaboration",
"description": "Create and govern Agent teams. Use when multiple Agents need sustained collaboration, an organizational hierarchy, or a team repository must be published, installed, or synchronized."
}
},
"category": "productivity",
"tags": [
"group",
"collaboration",
"organization"
]
},
"release": {
"state": "known",
"version": "1.3.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T10:32:03Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.108"
},
"spec": {
"kind": "skill",
"riskLevel": "medium",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "markdown"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "Markdown 文档处理",
"summary": "创建、编辑 Markdown 文档(.md默认文本文档格式",
"description": "当用户要求创建、撰写、整理任何书面产物且未指定特定格式时,使用此技能。 确保使用 Write 工具写入文件、告知绝对路径、并通过 SendUserMessage 发送附件。"
},
"en-US": {
"name": "Markdown Document Processing",
"summary": "Create and edit Markdown documents (.md), the default text format",
"description": "Use when the user requests any written deliverable without specifying a particular format. Ensures files are written via Write tool, absolute path is reported, and attachment is sent via SendUserMessage."
}
},
"category": "productivity",
"tags": [
"markdown",
"md",
"document",
"text"
]
},
"release": {
"state": "known",
"version": "1.0.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,954 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "mattpocock-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Matt Pocock Skills",
"summary": "Matt Pocock's collection of small, composable engineering skills for real application development across any model"
},
"zh-CN": {
"name": "Matt Pocock Skills",
"summary": "Matt Pocock 的真实工程 AI Skill 合集,小巧、易改、可组合,适配任意模型做实际开发而非 vibe coding"
}
},
"category": "development",
"tags": [
"engineering",
"tdd",
"mattpocock"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/mattpocock/skills.git"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Matt Pocock",
"url": "https://github.com/mattpocock/skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 35,
"children": [
{
"identity": {
"kind": "skill",
"id": "ask-matt",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/ask-matt",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "ask-matt",
"summary": "Ask which skill or flow fits your situation."
},
"zh-CN": {
"name": "ask-matt",
"summary": "Ask which skill or flow fits your situation."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "code-review",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/code-review",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "code-review",
"summary": "Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding stand…"
},
"zh-CN": {
"name": "code-review",
"summary": "Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding stand…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "codebase-design",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/codebase-design",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "codebase-design",
"summary": "Shared vocabulary for designing deep modules."
},
"zh-CN": {
"name": "codebase-design",
"summary": "Shared vocabulary for designing deep modules."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "diagnosing-bugs",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/diagnosing-bugs",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "diagnosing-bugs",
"summary": "Diagnosis loop for hard bugs and performance regressions."
},
"zh-CN": {
"name": "diagnosing-bugs",
"summary": "Diagnosis loop for hard bugs and performance regressions."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "domain-modeling",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/domain-modeling",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "domain-modeling",
"summary": "Build and sharpen a project's domain model."
},
"zh-CN": {
"name": "domain-modeling",
"summary": "Build and sharpen a project's domain model."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "grill-with-docs",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/grill-with-docs",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "grill-with-docs",
"summary": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go."
},
"zh-CN": {
"name": "grill-with-docs",
"summary": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "implement",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/implement",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "implement",
"summary": "Implement a piece of work based on a spec or set of tickets."
},
"zh-CN": {
"name": "implement",
"summary": "Implement a piece of work based on a spec or set of tickets."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "improve-codebase-architecture",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/improve-codebase-architecture",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "improve-codebase-architecture",
"summary": "Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick."
},
"zh-CN": {
"name": "improve-codebase-architecture",
"summary": "Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "prototype",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/prototype",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "prototype",
"summary": "Build a throwaway prototype to answer a design question."
},
"zh-CN": {
"name": "prototype",
"summary": "Build a throwaway prototype to answer a design question."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "research",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/research",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "research",
"summary": "Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo."
},
"zh-CN": {
"name": "research",
"summary": "Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "resolving-merge-conflicts",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/resolving-merge-conflicts",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "resolving-merge-conflicts",
"summary": "Use when you need to resolve an in-progress git merge/rebase conflict."
},
"zh-CN": {
"name": "resolving-merge-conflicts",
"summary": "Use when you need to resolve an in-progress git merge/rebase conflict."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "setup-matt-pocock-skills",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/setup-matt-pocock-skills",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "setup-matt-pocock-skills",
"summary": "Configure this repo for the engineering skills — set up its issue tracker, triage label vocabulary, and domain doc layout."
},
"zh-CN": {
"name": "setup-matt-pocock-skills",
"summary": "Configure this repo for the engineering skills — set up its issue tracker, triage label vocabulary, and domain doc layout."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "tdd",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/tdd",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "tdd",
"summary": "Test-driven development."
},
"zh-CN": {
"name": "tdd",
"summary": "Test-driven development."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "to-spec",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/to-spec",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "to-spec",
"summary": "Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed."
},
"zh-CN": {
"name": "to-spec",
"summary": "Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "to-tickets",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/to-tickets",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "to-tickets",
"summary": "Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker — ed…"
},
"zh-CN": {
"name": "to-tickets",
"summary": "Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker — ed…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "triage",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/triage",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "triage",
"summary": "Move issues and external PRs through a state machine of triage roles — categorise, verify, grill if needed, and write agent-ready briefs."
},
"zh-CN": {
"name": "triage",
"summary": "Move issues and external PRs through a state machine of triage roles — categorise, verify, grill if needed, and write agent-ready briefs."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wayfinder",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/wayfinder",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wayfinder",
"summary": "Plan a huge chunk of work — more than one agent session can hold — as a shared map of decision tickets on your issue tracker, and resolve them one at a time unt…"
},
"zh-CN": {
"name": "wayfinder",
"summary": "Plan a huge chunk of work — more than one agent session can hold — as a shared map of decision tickets on your issue tracker, and resolve them one at a time unt…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wizard",
"parentId": "mattpocock-skills"
},
"path": "skills/engineering/wizard",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wizard",
"summary": "Generate an interactive bash wizard that walks a human through steps only they can perform."
},
"zh-CN": {
"name": "wizard",
"summary": "Generate an interactive bash wizard that walks a human through steps only they can perform."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "claude-handoff",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/claude-handoff",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "claude-handoff",
"summary": "Hand the current conversation off to a fresh background agent that picks up the work immediately."
},
"zh-CN": {
"name": "claude-handoff",
"summary": "Hand the current conversation off to a fresh background agent that picks up the work immediately."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "loop-me",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/loop-me",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "loop-me",
"summary": "Grill me about specs for the workflows I want to build, within this workspace."
},
"zh-CN": {
"name": "loop-me",
"summary": "Grill me about specs for the workflows I want to build, within this workspace."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "setup-ts-deep-modules",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/setup-ts-deep-modules",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "setup-ts-deep-modules",
"summary": "Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point fi…"
},
"zh-CN": {
"name": "setup-ts-deep-modules",
"summary": "Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point fi…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "writing-beats",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/writing-beats",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "writing-beats",
"summary": "Writing, exploit — assemble raw material into a journey of beats, grounding each term before a beat leans on it."
},
"zh-CN": {
"name": "writing-beats",
"summary": "Writing, exploit — assemble raw material into a journey of beats, grounding each term before a beat leans on it."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "writing-fragments",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/writing-fragments",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "writing-fragments",
"summary": "Writing, explore — mine raw fragments, no structure yet."
},
"zh-CN": {
"name": "writing-fragments",
"summary": "Writing, explore — mine raw fragments, no structure yet."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "writing-shape",
"parentId": "mattpocock-skills"
},
"path": "skills/in-progress/writing-shape",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "writing-shape",
"summary": "Writing, exploit — shape raw material into an article, paragraph by paragraph."
},
"zh-CN": {
"name": "writing-shape",
"summary": "Writing, exploit — shape raw material into an article, paragraph by paragraph."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "git-guardrails-claude-code",
"parentId": "mattpocock-skills"
},
"path": "skills/misc/git-guardrails-claude-code",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "git-guardrails-claude-code",
"summary": "Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute."
},
"zh-CN": {
"name": "git-guardrails-claude-code",
"summary": "Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "migrate-to-shoehorn",
"parentId": "mattpocock-skills"
},
"path": "skills/misc/migrate-to-shoehorn",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "migrate-to-shoehorn",
"summary": "Migrate test files from `as` type assertions to @total-typescript/shoehorn."
},
"zh-CN": {
"name": "migrate-to-shoehorn",
"summary": "Migrate test files from `as` type assertions to @total-typescript/shoehorn."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "scaffold-exercises",
"parentId": "mattpocock-skills"
},
"path": "skills/misc/scaffold-exercises",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "scaffold-exercises",
"summary": "Create exercise directory structures with sections, problems, solutions, and explainers that pass linting."
},
"zh-CN": {
"name": "scaffold-exercises",
"summary": "Create exercise directory structures with sections, problems, solutions, and explainers that pass linting."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "setup-pre-commit",
"parentId": "mattpocock-skills"
},
"path": "skills/misc/setup-pre-commit",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "setup-pre-commit",
"summary": "Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo."
},
"zh-CN": {
"name": "setup-pre-commit",
"summary": "Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "grill-me",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/grill-me",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "grill-me",
"summary": "A relentless interview to sharpen a plan or design."
},
"zh-CN": {
"name": "grill-me",
"summary": "A relentless interview to sharpen a plan or design."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "grilling",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/grilling",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "grilling",
"summary": "Grill the user relentlessly about a plan, decision, or idea."
},
"zh-CN": {
"name": "grilling",
"summary": "Grill the user relentlessly about a plan, decision, or idea."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "handoff",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/handoff",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "handoff",
"summary": "Compact the current conversation into a handoff document for another agent to pick up."
},
"zh-CN": {
"name": "handoff",
"summary": "Compact the current conversation into a handoff document for another agent to pick up."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "teach",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/teach",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "teach",
"summary": "Teach the user a new skill or concept, within this workspace."
},
"zh-CN": {
"name": "teach",
"summary": "Teach the user a new skill or concept, within this workspace."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "to-questionnaire",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/to-questionnaire",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "to-questionnaire",
"summary": "Turn a decision you can't fully answer into a questionnaire for someone else to fill in."
},
"zh-CN": {
"name": "to-questionnaire",
"summary": "Turn a decision you can't fully answer into a questionnaire for someone else to fill in."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wait-what",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/wait-what",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wait-what",
"summary": "Stop."
},
"zh-CN": {
"name": "wait-what",
"summary": "Stop."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "writing-for-agents",
"parentId": "mattpocock-skills"
},
"path": "skills/productivity/writing-for-agents",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "writing-for-agents",
"summary": "Writing documents for agents."
},
"zh-CN": {
"name": "writing-for-agents",
"summary": "Writing documents for agents."
}
},
"tags": []
},
"release": {
"state": "unknown"
}
}
]
}
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "minimax-image-gen"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "MiniMax Image Generation",
"summary": "MiniMax Image Generation"
},
"zh-CN": {
"name": "MiniMax 图像生成",
"summary": "MiniMax 图像生成"
}
},
"category": "media",
"tags": [
"minimax",
"media"
]
},
"release": {
"state": "known",
"version": "1.3.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-16T11:59:41Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/desirecore/skills-minimax.git",
"path": "minimax-image-gen",
"ref": "6e39eee2ad39632a21f43ed997983e70594b2b8a"
}
},
"governance": {
"stewardship": "official",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "DesireCore",
"url": "https://github.com/desirecore",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,81 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "minimax-music-gen"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "MiniMax 音乐生成",
"summary": "基于 MiniMax Music 2.6 的文本生成音乐技能",
"description": "Use this skill when the user wants to generate music using MiniMax's Music Generation API. Supports text-to-music with lyrics, instrumental generation, and music cover. Use when 用户提到 生成音乐、文生音乐、 AI 作曲、创作歌曲、写一首歌、音乐生成、AI 音乐、MiniMax 音乐、 作词作曲、纯音乐、伴奏、翻唱、cover。"
},
"en-US": {
"name": "MiniMax Music Generation",
"summary": "Text-to-music skill powered by MiniMax Music 2.6",
"description": "Use this skill when the user wants to generate music using MiniMax's Music Generation API. Supports text-to-music with lyrics, instrumental generation, and music cover. Use when the user mentions generating music, text-to-music, AI composing, creating songs, writing a song, music generation, AI music, MiniMax music, songwriting, instrumental music, accompaniment, cover, or remake."
}
},
"category": "media",
"tags": [
"media",
"audio",
"music",
"generation",
"minimax"
]
},
"release": {
"state": "known",
"version": "1.1.5",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Bash"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "minimax-tts"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "MiniMax Text-to-Speech",
"summary": "MiniMax Text-to-Speech"
},
"zh-CN": {
"name": "MiniMax 语音合成",
"summary": "MiniMax 语音合成"
}
},
"category": "media",
"tags": [
"minimax",
"media"
]
},
"release": {
"state": "known",
"version": "1.2.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-16T11:59:41Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/desirecore/skills-minimax.git",
"path": "minimax-tts",
"ref": "6e39eee2ad39632a21f43ed997983e70594b2b8a"
}
},
"governance": {
"stewardship": "official",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "DesireCore",
"url": "https://github.com/desirecore",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,81 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "minimax-video-gen"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "MiniMax 文生视频",
"summary": "基于 MiniMax Hailuo 的文本/图片生成视频技能",
"description": "Use this skill when the user wants to generate videos using MiniMax's Hailuo model. Supports text-to-video, image-to-video, and subject reference. The API is asynchronous — submit a task, poll for status, then download. Use when 用户提到 生成视频、文生视频、AI 视频、创建视频、视频生成、 动画生成、MiniMax 视频、海螺、Hailuo、图片变视频、图生视频。"
},
"en-US": {
"name": "MiniMax Video Generation",
"summary": "Text/image-to-video skill powered by MiniMax Hailuo",
"description": "Use this skill when the user wants to generate videos using MiniMax's Hailuo model. Supports text-to-video, image-to-video, and subject reference. The API is asynchronous — submit a task, poll for status, then download. Use when the user mentions generating videos, text-to-video, AI video, creating videos, video generation, animation generation, MiniMax video, Hailuo, image-to-video."
}
},
"category": "media",
"tags": [
"media",
"video",
"generation",
"minimax",
"hailuo"
]
},
"release": {
"state": "known",
"version": "1.3.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Bash"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "mt-paotui-for-client"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Meituan Paotui Client",
"summary": "Meituan Paotui ordering assistant for pickup-delivery, errands and shopping, with address search and two-step cost confirmation"
},
"zh-CN": {
"name": "美团跑腿下单助手",
"summary": "美团跑腿下单助手:帮取送、帮忙(取号/搬装)、帮买全流程下单,含地址搜索与两步费用确认"
}
},
"category": "business",
"tags": [
"meituan"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-19T06:37:19Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/meituan/MT-Paotui-For-Client.git",
"ref": "dc5cc223a010c2fe4377088affc2fbe4c6c6473d"
}
},
"governance": {
"stewardship": "pointer",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "source-pointer-only",
"upstreamMaintainer": {
"name": "meituan",
"url": "https://github.com/meituan/MT-Paotui-For-Client",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,155 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "netease-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "NetEase Skills",
"summary": "NetEase Cloud Music agent skills built on ncm-cli, for music search, playback and account setup"
},
"zh-CN": {
"name": "网易云音乐 Skills",
"summary": "基于 ncm-cli 的网易云音乐 AI Agent 技能包,支持音乐搜索、播放与账号配置等操作"
}
},
"category": "productivity",
"tags": [
"NetEase"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/NetEase/skills.git",
"ref": "58ff0771d6977feb847d6bfe322280eec4bec004"
}
},
"governance": {
"stewardship": "pointer",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "source-pointer-only",
"upstreamMaintainer": {
"name": "NetEase",
"url": "https://github.com/NetEase/skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 3,
"children": [
{
"identity": {
"kind": "skill",
"id": "ncm-cli-setup",
"parentId": "netease-skills"
},
"path": "ncm-cli-setup",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "ncm-cli-setup",
"summary": "安装和配置 ncm-cli网易云音乐 CLI 工具)。当用户需要安装 ncm-cli、配置 API Key、安装 mpv 播放器,或排查安装问题时,使用此 skill。"
},
"zh-CN": {
"name": "ncm-cli-setup",
"summary": "安装和配置 ncm-cli网易云音乐 CLI 工具)。当用户需要安装 ncm-cli、配置 API Key、安装 mpv 播放器,或排查安装问题时,使用此 skill。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "netease-music-assistant",
"parentId": "netease-skills"
},
"path": "netease-music-assistant",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "netease-music-assistant",
"summary": "网易云音乐智能助手,以模型判断为核心,通过 ncm-cli 执行操作。"
},
"zh-CN": {
"name": "netease-music-assistant",
"summary": "网易云音乐智能助手,以模型判断为核心,通过 ncm-cli 执行操作。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "netease-music-cli",
"parentId": "netease-skills"
},
"path": "netease-music-cli",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "netease-music-cli",
"summary": "使用 ncm-cli 操作网易云音乐。当用户想播放歌曲、搜索歌曲、控制播放(暂停、下一首、上一首、调音量)、管理播放队列、查看播放状态、播放歌单时,使用此 skill。"
},
"zh-CN": {
"name": "netease-music-cli",
"summary": "使用 ncm-cli 操作网易云音乐。当用户想播放歌曲、搜索歌曲、控制播放(暂停、下一首、上一首、调音量)、管理播放队列、查看播放状态、播放歌单时,使用此 skill。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
}
]
}
}
}

View File

@@ -28,7 +28,8 @@
"source": {
"kind": "git",
"repoUrl": "https://github.com/NetEase/skills.git",
"repoBranch": "master"
"repoBranch": "master",
"ref": "58ff0771d6977feb847d6bfe322280eec4bec004"
},
"children": [
{

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "nodejs-runtime"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "Node.js 运行时管理",
"summary": "Node.js / npm / pnpm / yarn 安装与多版本DesireCore Volta 优先)",
"description": "Use this skill when the user needs to install, upgrade, or troubleshoot Node.js, npm, pnpm, yarn, and JavaScript/TypeScript runtime environments. Covers four-tier fallback strategy: (1) DesireCore HTTP API for in-app installation, (2) DesireCore built-in Volta CLI for Node.js + package manager version management, (3) system package managers (brew/apt/dnf/winget/NodeSource), (4) community nvm/fnm as last resort. Also covers global package management, npm registry/proxy configuration, EACCES permission errors, and PATH troubleshooting. Triggers include: \"install node\", \"node not found\", \"npm not found\", \"npm EACCES\", \"pnpm\", \"yarn\", \"volta\", \"nvm\", \"fnm\", \"nodejs version\", \"package-lock\", or any Node.js / npm runtime error. 使用场景:用户需要 安装 Node.js、安装 npm、 pnpm、yarn、配置全局包、解决 EACCES、PATH 问题、镜像/代理配置。"
},
"en-US": {
"name": "Node.js Runtime Management",
"summary": "Node.js / npm / pnpm / yarn install and multi-version (DesireCore Volta first)",
"description": "Use this skill when the user needs to install, upgrade, or troubleshoot Node.js, npm, pnpm, yarn, and JavaScript/TypeScript runtime environments. Covers four-tier fallback strategy: (1) DesireCore HTTP API for in-app installation, (2) DesireCore built-in Volta CLI for Node.js + package manager version management, (3) system package managers (brew/apt/dnf/winget/NodeSource), (4) community nvm/fnm as last resort. Also covers global package management, npm registry/proxy configuration, EACCES permission errors, and PATH troubleshooting. Triggers include: \"install node\", \"node not found\", \"npm not found\", \"npm EACCES\", \"pnpm\", \"yarn\", \"volta\", \"nvm\", \"fnm\", \"nodejs version\", \"package-lock\", or any Node.js / npm runtime error. Use cases: the user needs to install Node.js, install npm, pnpm, yarn, configure global packages, resolve EACCES, PATH issues, registry mirror / proxy configuration."
}
},
"category": "development",
"tags": [
"nodejs",
"npm",
"pnpm",
"yarn",
"volta",
"nvm",
"fnm",
"environment"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "nuwa-skill"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Nuwa Skill",
"summary": "Give it a name and it researches, distills and validates automatically, turning anyone's mental models, decision heuristics and voice into a runnable persona skill for Claude Code, Codex and Cursor"
},
"zh-CN": {
"name": "女娲.skill",
"summary": "输入一个名字即自动完成调研、提炼、验证,把任何人的心智模型、决策启发式与表达 DNA 蒸馏成可运行的人物 Skill适配 Claude Code、Codex、Cursor 等"
}
},
"category": "productivity",
"tags": [
"nuwa",
"skill-creator",
"thinking",
"research",
"distillation"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-09T10:14:38Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/alchaincyf/nuwa-skill.git",
"ref": "27642f5bfed2dc1bbf8ee59a2c1ee602a626bbd7"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "花生 (alchaincyf)",
"url": "https://github.com/alchaincyf/nuwa-skill",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "pdf"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "PDF 文档处理",
"summary": "读取、创建、合并、拆分和填写 PDF 文档",
"description": "Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill. Use when 用户提到 PDF、读取PDF、合并PDF、拆分PDF、填写表单、加水印、提取文字、 扫描识别。"
},
"en-US": {
"name": "PDF Document Processing",
"summary": "Read, create, merge, split, and fill PDF documents",
"description": "Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill. Use when the user mentions PDF, reading PDFs, merging PDFs, splitting PDFs, filling forms, adding watermarks, extracting text, or OCR."
}
},
"category": "productivity",
"tags": [
"pdf",
"document",
"form",
"ocr"
]
},
"release": {
"state": "known",
"version": "1.0.2",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-05-04T16:26:33Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
},
"upstreamMaintainer": {
"name": "anthropic",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,79 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "pptx"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "演示文稿处理",
"summary": "创建、编辑和处理 PowerPoint 演示文稿(.pptx",
"description": "Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill. Use when 用户提到 PPT、演示文稿、幻灯片、演讲稿、汇报材料、 pptx、创建演示、编辑幻灯片。"
},
"en-US": {
"name": "Presentation Processing",
"summary": "Create, edit, and process PowerPoint presentations (.pptx)",
"description": "Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill. Use when the user mentions PPT, presentation, slides, speaker notes, briefing materials, pptx, creating presentations, or editing slides."
}
},
"category": "productivity",
"tags": [
"pptx",
"powerpoint",
"slides",
"presentation",
"office"
]
},
"release": {
"state": "known",
"version": "1.0.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
},
"upstreamMaintainer": {
"name": "anthropic",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,89 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "presentation-forge"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "Presentation Forge",
"summary": "中文 toB 商业汇报 PPT 工作流:整页生图、图片页重建为可编辑 PPTX/SVG、原生模板填充适配 Codex/Claude Code",
"description": "面向中文 toB 商业汇报的 PPT 工作流,支持整页生图、把截图或图片型幻灯片重建为可编辑 PPTX/SVG或用原生 PPTX 模板直接填充新内容。制作售前方案、项目汇报、产品介绍、行业分析、培训材料,或图片页转可编辑 PowerPoint 时使用。"
},
"en-US": {
"name": "Presentation Forge",
"summary": "Chinese toB business-presentation workflow — image decks, rebuild slides into editable PPTX/SVG, native template filling",
"description": "Chinese toB business-presentation workflow: full-page image decks, rebuilding image/screenshot slides into editable PPTX/SVG, and native PPTX template filling. Use for pre-sales decks, project reports, product intros, industry analysis, training material, or image-to-editable PowerPoint. The skill body is authored in Chinese, so the en-US locale intentionally falls back to the shared body and is locked as human-maintained."
}
},
"category": "creative",
"tags": [
"ppt",
"pptx",
"svg",
"presentation",
"slides"
]
},
"release": {
"state": "known",
"version": "0.1.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-23T15:31:26Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-10T13:30:00Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/mashagua/presentation-forge.git",
"ref": "3c8e6ffa5fa97d0c14c6af8fec4beb440802b9a0"
}
},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "known",
"value": "MIT",
"evidencePath": "LICENSE"
},
"redistribution": "allowed",
"listingMaintainer": {
"name": "Ronnie2025",
"verified": false
},
"upstreamMaintainer": {
"name": "Ronnie2025",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,79 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "python-runtime"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "Python 运行时管理",
"summary": "Python 安装、多版本与虚拟环境DesireCore Hatch 优先)",
"description": "Use this skill when the user needs to install, upgrade, or troubleshoot Python and pip environments. Covers four-tier fallback strategy: (1) DesireCore HTTP API for in-app installation, (2) DesireCore built-in Hatch CLI for Python version management, (3) system package managers (brew/apt/dnf/winget), (4) community pyenv as last resort. Also covers virtual environments (venv/pipx/conda), PEP 668 externally-managed errors, and import / PATH troubleshooting. Triggers include: \"install python\", \"pip not found\", \"python not found\", \"PEP 668\", \"externally-managed\", \"venv\", \"virtualenv\", \"pipx\", \"conda\", \"miniconda\", \"pyenv\", \"hatch\", \"python version\", \"pip command not found\", or any Python-related runtime error. 使用场景:用户需要 安装 Python、安装 pip、配置虚拟环境、管理多版本、 解决 PEP 668、import 失败、PATH 问题、SSL 证书错误等。"
},
"en-US": {
"name": "Python Runtime Management",
"summary": "Python install, multi-version, and virtual envs (DesireCore Hatch first)",
"description": "Use this skill when the user needs to install, upgrade, or troubleshoot Python and pip environments. Covers four-tier fallback strategy: (1) DesireCore HTTP API for in-app installation, (2) DesireCore built-in Hatch CLI for Python version management, (3) system package managers (brew/apt/dnf/winget), (4) community pyenv as last resort. Also covers virtual environments (venv/pipx/conda), PEP 668 externally-managed errors, and import / PATH troubleshooting. Triggers include: \"install python\", \"pip not found\", \"python not found\", \"PEP 668\", \"externally-managed\", \"venv\", \"virtualenv\", \"pipx\", \"conda\", \"miniconda\", \"pyenv\", \"hatch\", \"python version\", \"pip command not found\", or any Python-related runtime error. Use when the user needs to install Python, install pip, configure virtual environments, manage multiple versions, resolve PEP 668, import failures, PATH issues, SSL certificate errors, etc."
}
},
"category": "development",
"tags": [
"python",
"pip",
"hatch",
"pyenv",
"venv",
"virtualenv",
"pipx",
"conda",
"environment"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "registering-services"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "注册服务",
"summary": "把外部 HTTP/MCP 服务登记到全局应用与服务目录",
"description": "把外部 HTTP/MCP 服务登记到全局应用与服务目录,让其他 Agent 与人类用户都能发现并调用。 Use when 用户提到要新增服务、注册 API 或把你掌握的后端发布到团队目录。"
},
"en-US": {
"name": "Register Services",
"summary": "Register external HTTP/MCP services into the global catalog",
"description": "Register an external HTTP/MCP service to the global Application & Service Catalog so that other Agents (and the human user) can discover and call it. Use when the user mentions adding a new service, registering an API, or publishing a backend you control to the team's catalog."
}
},
"category": "productivity",
"tags": [
"service",
"registration",
"catalog",
"meta"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-29T09:48:28Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "medium"
}
}

View File

@@ -0,0 +1,75 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "s3-storage-operations"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "对象存储操作",
"summary": "通过 DesireCore HTTP API 操作 S3 兼容对象存储,支持上传、下载、列举、删除与分享链接",
"description": "操作 S3 兼容对象存储(上传、下载、列举、删除),通过 DesireCore HTTP API 调用。Use when 用户要求上传/下载/分享文件、需要生成下载链接、或工作流产出文件需要持久化存储与分发。"
},
"en-US": {
"name": "Object Storage Operations",
"summary": "Operate S3-compatible object storage via DesireCore HTTP API — upload, download, list, delete, and share links",
"description": "Operate S3-compatible object storage (upload, download, list, delete) via the DesireCore HTTP API. Use when the user requests file upload/download/sharing, needs a download link, or when workflow outputs need persistent storage and distribution."
}
},
"category": "data",
"tags": [
"storage",
"s3",
"upload",
"download",
"sharing"
]
},
"release": {
"state": "known",
"version": "2.0.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "medium",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "skill-creator"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "技能创建器",
"summary": "引导创建符合规范的 SKILL.md 技能包,支持完整元数据与分层内容",
"description": "引导用户创建和编辑符合规范的 SKILL.md 技能包。支持 DesireCore 完整格式 frontmatter 元数据 + L0/L1/L2 分层内容 + 脚本/参考/资产)和 Claude Code 基础格式。Use when 用户要求创建新技能、更新已有技能、或将经验封装为可复用 的技能包。"
},
"en-US": {
"name": "Skill Creator",
"summary": "Guides creation of standards-compliant SKILL.md packages with complete metadata and layered content",
"description": "Guides users to create and edit standards-compliant SKILL.md skill packages. Supports the DesireCore full format (frontmatter metadata + L0/L1/L2 layered content + scripts/references/assets) and the Claude Code basic format. Use when the user requests to create a new Skill, update an existing Skill, or package experience into a reusable Skill bundle."
}
},
"category": "productivity",
"tags": [
"skill",
"creation",
"meta",
"template",
"authoring"
]
},
"release": {
"state": "known",
"version": "1.0.5",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "taste-skill"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Taste Skill",
"summary": "Anti-slop frontend framework for AI agents to build premium, tasteful UIs instead of generic output"
},
"zh-CN": {
"name": "Taste Skill",
"summary": "面向 AI Agent 的“抗平庸”前端框架,帮智能体产出有品味的高级感前端而非千篇一律的模板"
}
},
"category": "creative",
"tags": [
"taste",
"design",
"creative"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-30T18:00:09Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/Leonxlnx/taste-skill.git",
"path": "skills/taste-skill",
"ref": "ccbc15639c97057cbfcf32ecebc38ef716e4bb37"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "Leonxlnx",
"url": "https://github.com/Leonxlnx/taste-skill",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -31,6 +31,7 @@
"kind": "git",
"repoUrl": "https://github.com/Leonxlnx/taste-skill.git",
"repoBranch": "main",
"path": "skills/taste-skill"
"path": "skills/taste-skill",
"ref": "ccbc15639c97057cbfcf32ecebc38ef716e4bb37"
}
}

View File

@@ -0,0 +1,75 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "tech-diagram"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "技术架构图生成",
"summary": "用 Mermaid 画品牌一致的架构图/流程图/时序图,对话内即时渲染",
"description": "当用户希望把描述转成技术图时使用此技能——架构图、流程图、时序图、状态机、ER 图、类图或思维导图。生成带语义形状/箭头词汇表的 Mermaid对话内即时渲染为 SVG并提供 6 套可选视觉风格brand-light/brand-dark/terminal/blueprint/cream/mono。用于结构、流程或关系类图而非写实摄影/插画类图片(后者请用文生图技能)。用户提到 画架构图、架构图、流程图、时序图、序列图、状态图、状态机、ER图、类图、思维导图、出图、画图、可视化、画一张图、画个图、图表风格、暗色风格图、蓝图风格图、奶油风格图。"
},
"en-US": {
"name": "Tech Diagram Generator",
"summary": "Draw brand-consistent architecture/flow/sequence diagrams with Mermaid, rendered inline in chat",
"description": "Use this skill when the user wants to turn a description into a technical diagram — architecture diagrams, flowcharts, sequence diagrams, state machines, ER diagrams, class diagrams, or mind maps. Generates Mermaid with a semantic shape/arrow vocabulary that the DesireCore chat renders inline as SVG, with 6 selectable visual styles (brand-light/brand-dark/terminal/blueprint/cream/mono). Use this for diagrams of structure, flow, or relationships — not for photographic or illustrative images."
}
},
"category": "development",
"tags": [
"diagram",
"mermaid",
"architecture",
"flowchart",
"visualization"
]
},
"release": {
"state": "known",
"version": "1.1.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "update-agent"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "更新智能体",
"summary": "安全更新智能体配置、人格、规则与技能,支持 diff 预览与版本回滚",
"description": "安全更新现有智能体的配置、人格、原则、技能与记忆,输出可审阅 diff 并在确认后应用与提交。Use when 用户要求修改 Agent 行为、安装/卸载技能、调整配置、回滚变更或修订规则。"
},
"en-US": {
"name": "Update Agent",
"summary": "Safely update Agent config, persona, principles, and skills, with diff preview and version rollback",
"description": "Safely update an existing Agent's config, persona, principles, skills, and memory, producing reviewable diffs that are applied and committed only after confirmation. Use when the user asks to modify Agent behavior, install/uninstall skills, adjust config, roll back changes, or revise rules."
}
},
"category": "productivity",
"tags": [
"agent",
"update",
"meta"
]
},
"release": {
"state": "known",
"version": "3.2.1",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-25T09:25:42Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.108"
},
"spec": {
"kind": "skill",
"riskLevel": "low"
}
}

View File

@@ -0,0 +1,74 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "using-services"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "使用服务",
"summary": "发现并调用全局目录中已注册的服务",
"description": "发现并调用全局应用与服务目录中已经注册过的 HTTP/MCP 服务。Use when 用户让 Agent 调用某个 API、查找已有服务或访问通过 registering-services 注册的后端。"
},
"en-US": {
"name": "Using Services",
"summary": "Discover and invoke registered services from the catalog",
"description": "Discover and invoke HTTP/MCP services already registered in the global catalog. Use when the user asks the Agent to call an API, search for an existing service, or query a backend that was registered via the registering-services skill."
}
},
"category": "productivity",
"tags": [
"service",
"catalog",
"http",
"mcp",
"meta"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-29T09:48:28Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low"
}
}

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "watch"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Watch Video",
"summary": "Analyze video speech and scene changes together"
},
"zh-CN": {
"name": "视频观看与场景分析",
"summary": "结合字幕、Whisper 与场景变化帧分析视频中的语音和画面"
}
},
"category": "media",
"tags": [
"video",
"transcription",
"scene-analysis",
"ffmpeg",
"yt-dlp",
"whisper"
]
},
"release": {
"state": "known",
"version": "1.1.0",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-07T15:54:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-08-07T15:54:22Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/desirecore-agent/watch-video-skill.git",
"path": "skills/watch",
"ref": "0fd13b73b7b37318cada0562ba2263d648c8505f"
}
},
"governance": {
"stewardship": "official",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "DesireCore Agent",
"url": "https://github.com/desirecore-agent",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "watchless"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "Watchless",
"summary": "Turns a video into a complete keyframe-led visual document with faithful transcript-based notes, exported as HTML, PDF or a shareable ZIP"
},
"zh-CN": {
"name": "Watchless",
"summary": "把视频转成以关键帧截图为主线的完整视觉文档:转写为事实来源、截图保留画面证据,输出 HTML/PDF/ZIP读者无需再看原视频"
}
},
"category": "media",
"tags": [
"video",
"transcript",
"notes",
"chenzixin1"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-19T11:19:33Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-07-19T11:19:33Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/chenzixin1/watchless.git",
"ref": "a09c0edc6c3121c05e9824ef556256441d291d4f"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "chenzixin1",
"url": "https://github.com/chenzixin1/watchless",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "web-access"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "联网访问",
"summary": "联网搜索、网页抓取、内置受管浏览器登录态访问与取文、研究调研工作流",
"description": "联网访问工具包——搜索公开页面、Jina 优化抓取、内置受管浏览器完成登录态访问与取文,以及用户点名时接管他自己的 Chrome/Edge/Chromium。"
},
"en-US": {
"name": "Web Access",
"summary": "Web search, page fetching, logged-in access via the governed built-in browser, research workflows",
"description": "A web-access toolkit — search public pages, fetch heavy pages via Jina Reader, reach and read logged-in sites through the governed built-in browser, and drive the user's named Chrome/Edge/Chromium over CDP on request."
}
},
"category": "research",
"tags": [
"web",
"search",
"fetch",
"research",
"browsing",
"browser",
"cdp"
]
},
"release": {
"state": "known",
"version": "3.4.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-30T03:00:58Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.128"
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,77 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "wechatpay-skills"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "WeChat Pay Skills",
"summary": "Official WeChat Pay integration skills: product selection, sample code, integration quality review and troubleshooting"
},
"zh-CN": {
"name": "微信支付 Skills",
"summary": "微信支付官方接入技能包:产品选型、官方示例代码、接入质量评估与答疑排障"
}
},
"category": "business",
"tags": [
"wechatpay-apiv3"
]
},
"release": {
"state": "known",
"version": "1.0",
"versionScheme": "opaque"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/wechatpay-apiv3/wechatpay-skills.git",
"path": "wechatpay-payment-integration",
"ref": "8573bdc38b86fa67a42acfc422d6b4dbca4ada21"
}
},
"governance": {
"stewardship": "partner",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "wechatpay-apiv3",
"url": "https://github.com/wechatpay-apiv3/wechatpay-skills",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill"
}
}

View File

@@ -0,0 +1,255 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "wecom-cli"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "WeCom CLI",
"summary": "Official WeCom (Enterprise WeChat) CLI for humans and AI agents to operate docs, smart sheets and messaging in the terminal"
},
"zh-CN": {
"name": "企业微信 CLI",
"summary": "企业微信官方命令行工具,让人与 AI Agent 在终端操作企业微信文档、智能表格、消息等核心业务"
}
},
"category": "communication",
"tags": [
"WecomTeam"
]
},
"release": {
"state": "unknown"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-09T08:25:20Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "known",
"value": "2026-06-28T13:06:20Z",
"precision": "second"
}
},
"provenance": {
"content": {
"kind": "git",
"url": "https://github.com/WecomTeam/wecom-cli.git",
"ref": "72e14f7695f34d28f1ff23ea504ddd2210a87c13"
}
},
"governance": {
"stewardship": "community",
"availability": "listing-only",
"license": {
"state": "unknown"
},
"redistribution": "allowed",
"upstreamMaintainer": {
"name": "WecomTeam",
"url": "https://github.com/WecomTeam/wecom-cli",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"collection": {
"role": "parent",
"childCount": 7,
"children": [
{
"identity": {
"kind": "skill",
"id": "wecomcli-contact",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-contact",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-contact",
"summary": "通讯录成员查询技能,获取当前用户可见范围内的通讯录成员,支持按姓名/别名本地筛选匹配。返回 userid、姓名和别名。⚠ 仅返回当前用户有权限查看的成员,非全量成员。"
},
"zh-CN": {
"name": "wecomcli-contact",
"summary": "通讯录成员查询技能,获取当前用户可见范围内的通讯录成员,支持按姓名/别名本地筛选匹配。返回 userid、姓名和别名。⚠ 仅返回当前用户有权限查看的成员,非全量成员。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-doc",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-doc",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-doc",
"summary": "企业微信文档、表格(在线表格)、智能表格和智能文档(原名智能主页)管理技能。提供文档的创建、读取、编辑能力,表格和智能表格的内容读取,智能表格的创建,以及智能文档的创建和内容导出。适用场景:(1) 以 Markdown 格式获取文档/表格/智能表格完整内容 (2) 新建文档或智能表格 (3) 用 Markdown 格式…"
},
"zh-CN": {
"name": "wecomcli-doc",
"summary": "企业微信文档、表格(在线表格)、智能表格和智能文档(原名智能主页)管理技能。提供文档的创建、读取、编辑能力,表格和智能表格的内容读取,智能表格的创建,以及智能文档的创建和内容导出。适用场景:(1) 以 Markdown 格式获取文档/表格/智能表格完整内容 (2) 新建文档或智能表格 (3) 用 Markdown 格式…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-meeting",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-meeting",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-meeting",
"summary": "企业微信会议技能,支持创建预约会议、查询会议列表、获取会议详情、取消会议、更新会议成员。当用户需要\"创建会议\"、\"预约会议\"、\"约会议\"、\"安排会议\"、\"查看会议\"、\"查询会议列表\"、\"会议详情\"、\"什么时候开会\"、\"有哪些会议\"、\"查找会议\"、\"取消会议\"、\"删除会议\"、\"修改会议成员\"、\"添加会议参与人\"、\"移除会…"
},
"zh-CN": {
"name": "wecomcli-meeting",
"summary": "企业微信会议技能,支持创建预约会议、查询会议列表、获取会议详情、取消会议、更新会议成员。当用户需要\"创建会议\"、\"预约会议\"、\"约会议\"、\"安排会议\"、\"查看会议\"、\"查询会议列表\"、\"会议详情\"、\"什么时候开会\"、\"有哪些会议\"、\"查找会议\"、\"取消会议\"、\"删除会议\"、\"修改会议成员\"、\"添加会议参与人\"、\"移除会…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-msg",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-msg",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-msg",
"summary": "企业微信消息技能。提供会话列表查询、消息记录拉取(支持文本/图片/文件/语音/视频)、多媒体文件获取和文本消息发送能力。当用户需要\"查看消息\"、\"看聊天记录\"、\"发消息给某人\"、\"最近有什么消息\"、\"给群里发消息\"、\"看看发了什么图片/文件\"时触发。"
},
"zh-CN": {
"name": "wecomcli-msg",
"summary": "企业微信消息技能。提供会话列表查询、消息记录拉取(支持文本/图片/文件/语音/视频)、多媒体文件获取和文本消息发送能力。当用户需要\"查看消息\"、\"看聊天记录\"、\"发消息给某人\"、\"最近有什么消息\"、\"给群里发消息\"、\"看看发了什么图片/文件\"时触发。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-schedule",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-schedule",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-schedule",
"summary": "企业微信日程管理技能。适用于用户对企业微信日程的各类管理需求。当用户需要:(1) 查询指定时间范围内的日程列表或获取日程详细信息(标题、时间、地点、参与者等),(2) 创建新日程并设置提醒、参与人等,(3) 修改已有日程的标题、时间、地点等信息或取消日程,(4) 添加或移除日程参与人,(5) 查询多个成员的闲忙状态并分…"
},
"zh-CN": {
"name": "wecomcli-schedule",
"summary": "企业微信日程管理技能。适用于用户对企业微信日程的各类管理需求。当用户需要:(1) 查询指定时间范围内的日程列表或获取日程详细信息(标题、时间、地点、参与者等),(2) 创建新日程并设置提醒、参与人等,(3) 修改已有日程的标题、时间、地点等信息或取消日程,(4) 添加或移除日程参与人,(5) 查询多个成员的闲忙状态并分…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-smartsheet",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-smartsheet",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-smartsheet",
"summary": "企业微信智能表格管理技能。提供智能表格的结构管理(子表、字段)和数据管理(记录增删改查)。适用场景:(1) 管理智能表格子表和字段/列 (2) 查询、添加、更新、删除智能表格记录。支持通过 docid 或文档 URL 定位文档。"
},
"zh-CN": {
"name": "wecomcli-smartsheet",
"summary": "企业微信智能表格管理技能。提供智能表格的结构管理(子表、字段)和数据管理(记录增删改查)。适用场景:(1) 管理智能表格子表和字段/列 (2) 查询、添加、更新、删除智能表格记录。支持通过 docid 或文档 URL 定位文档。"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
},
{
"identity": {
"kind": "skill",
"id": "wecomcli-todo",
"parentId": "wecom-cli"
},
"path": "skills/wecomcli-todo",
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"en-US": {
"name": "wecomcli-todo",
"summary": "企业微信待办事项管理技能,支持查询待办列表、获取待办详情、创建待办、更新待办、删除待办及变更用户处理进度状态。在用户说\"看看我的待办列表\"、\"我有哪些待办\"、\"帮我创建一个待办\"、\"把这个任务分派给张三\"、\"标记待办完成\"、\"删掉那个待办\"、\"帮我建个提醒\"、\"更新一下待办内容\"、\"把提醒时间改到下周\"、\"接受这个待办…"
},
"zh-CN": {
"name": "wecomcli-todo",
"summary": "企业微信待办事项管理技能,支持查询待办列表、获取待办详情、创建待办、更新待办、删除待办及变更用户处理进度状态。在用户说\"看看我的待办列表\"、\"我有哪些待办\"、\"帮我创建一个待办\"、\"把这个任务分派给张三\"、\"标记待办完成\"、\"删掉那个待办\"、\"帮我建个提醒\"、\"更新一下待办内容\"、\"把提醒时间改到下周\"、\"接受这个待办…"
}
},
"tags": []
},
"release": {
"state": "unknown"
}
}
]
}
}
}

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "workflow"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "工作流编排",
"summary": "引导设计、编辑、测试和执行多节点自动化工作流",
"description": "引导 Agent 设计、编辑、测试和执行 Workflow 工作流。Use when 用户要求创建工作流、编排多步骤自动化流程、设计审批流水线、 或将重复性多节点任务编排成可复用的 DSL。"
},
"en-US": {
"name": "Workflow Orchestration",
"summary": "Guide the design, editing, testing, and execution of multi-node automated workflows",
"description": "Guides the Agent to design, edit, test, and execute Workflow workflows. Use when the user asks to create a workflow, orchestrate multi-step automation, design an approval pipeline, or turn repetitive multi-node tasks into a reusable DSL."
}
},
"category": "productivity",
"tags": [
"workflow",
"orchestration",
"automation",
"dsl"
]
},
"release": {
"state": "known",
"version": "1.0.7",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Write",
"Edit",
"Read"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,79 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "workforce-optimization"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "人效与资源优化",
"summary": "用决策工作区共管人效建模、受保护求解与独立验收MindOpt 需外部授权部署",
"description": "当用户自然提出服务范围、分层资源分配、绩效目标、集中任务调度、人员配置、排班或通用 LP/MILP 需求时,通过 DecisionWorkspace 的人机确认、精确版本制品、入口 Agent 绑定、同伴审阅、执行门禁、独立验收和真人批准形成可恢复治理链。选择 MindOpt 引擎时,实际求解仍依赖使用方另行取得适用许可证、部署并接入 MindOpt客户端和本技能不包含求解器软件、许可证、算力托管或相关费用。"
},
"en-US": {
"name": "Workforce and Resource Optimization",
"summary": "Co-manage workforce models, guarded solving, and independent validation; MindOpt is externally licensed",
"description": "When users naturally request service coverage, hierarchical resource allocation, performance targets, centralized task scheduling, staffing, shift planning, or general LP/MILP, use DecisionWorkspace human confirmation, exact-version artifacts, entry Agent binding, peer review, execution guards, independent validation, and human approval to create a recoverable governance chain. When MindOpt is selected, actual solving still requires the user to obtain an applicable license, deploy MindOpt, and configure its connector; the client and this Skill do not include the solver, license, hosted compute, or related fees."
}
},
"category": "business",
"tags": [
"workforce-optimization",
"operations-research",
"mindopt",
"multi-agent"
]
},
"release": {
"state": "known",
"version": "2.3.4",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-08-29T14:48:56Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "人效与资源优化项目组",
"verified": true
},
"upstreamMaintainer": {
"name": "workforce-optimization-team",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
},
"requiredClientVersion": "10.0.127"
},
"spec": {
"kind": "skill",
"riskLevel": "medium",
"skillType": "procedural"
}
}

View File

@@ -0,0 +1,82 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "xiaomi-tts"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "小米 MiMo 语音合成",
"summary": "基于小米 MiMo 的文本转语音技能",
"description": "当用户希望使用小米 MiMo 的 TTS 模型mimo-v2.5-tts将文本转为语音时使用此技能。基于 OpenAI 兼容的 chat/completions API响应中携带音频。支持多种预置音色和自定义音色设计。用户提到 语音合成、文字转语音、TTS、朗读、读出来、生成语音、生成音频、文本转音频、配音、念出来、小米语音、MiMo 语音、小米 TTS。"
},
"en-US": {
"name": "Xiaomi MiMo TTS",
"summary": "Text-to-speech synthesis using Xiaomi MiMo models",
"description": "Use this skill when the user wants to convert text to speech using Xiaomi MiMo's TTS models (mimo-v2.5-tts). Built on the OpenAI-compatible chat/completions API with audio response, supporting multiple preset voices and custom voice design. Trigger keywords: text-to-speech, TTS, read aloud, narrate, generate audio, voice synthesis, MiMo voice, Xiaomi TTS."
}
},
"category": "media",
"tags": [
"media",
"audio",
"tts",
"speech",
"xiaomi",
"mimo"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-14T03:55:22Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "official",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural",
"requires": {
"tools": [
"Bash"
],
"connections": []
}
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "../../schemas/catalog-metadata.v1.schema.json",
"schemaVersion": 1,
"identity": {
"kind": "skill",
"id": "xlsx"
},
"presentation": {
"defaultLocale": "en-US",
"i18n": {
"zh-CN": {
"name": "电子表格处理",
"summary": "创建、编辑和处理 Excel 电子表格(.xlsx",
"description": "Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved. Use when 用户提到 Excel、 电子表格、xlsx、表格处理、公式计算、数据清洗、图表、CSV导入导出。"
},
"en-US": {
"name": "Spreadsheet Processing",
"summary": "Create, edit, and process Excel spreadsheets (.xlsx)",
"description": "Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved. Use when the user mentions Excel, spreadsheets, xlsx, table processing, formula computation, data cleaning, charts, or CSV import/export."
}
},
"category": "productivity",
"tags": [
"xlsx",
"excel",
"spreadsheet",
"office"
]
},
"release": {
"state": "known",
"version": "1.0.3",
"versionScheme": "semver"
},
"timestamps": {
"catalogUpdatedAt": {
"state": "known",
"value": "2026-07-07T13:14:31Z",
"precision": "second"
},
"releasePublishedAt": {
"state": "unknown"
},
"reviewedAt": {
"state": "unknown"
},
"upstreamObservedAt": {
"state": "unknown"
}
},
"provenance": {},
"governance": {
"stewardship": "community",
"availability": "installable",
"license": {
"state": "unknown"
},
"redistribution": "verify-package-terms",
"listingMaintainer": {
"name": "DesireCore Official",
"verified": true
},
"upstreamMaintainer": {
"name": "anthropic",
"verified": false
}
},
"compatibility": {
"platforms": {
"state": "unknown"
}
},
"spec": {
"kind": "skill",
"riskLevel": "low",
"skillType": "procedural"
}
}