Documentation

Everything you need to know about installing, publishing, and trusting skills on PolySkill.

Skill Format

A skill is a portable, self-contained package that gives any LLM a new capability. Skills are declarative — they define what an agent can do, not how to execute it. The LLM decides when and how to use the tools and instructions provided.

Three files, one skill

Every skill is built from up to three files:

skill.json Required

The manifest. Declares name, version, author, description, type, license, and which platform adapters to build.

instructions.md Optional

Free-form markdown that tells the agent how to use the skill — system prompts, guardrails, examples, multi-step workflows.

tools.json Optional

Canonical tool/function definitions with JSON Schema parameters. Defined once, then automatically transpiled to each platform's format.

Manifest example

{ "name": "@acme/weather-lookup", "version": "1.0.0", "description": "Get current weather for any location", "type": "tool", "license": "MIT", "author": { "name": "acme" }, "skill": { "instructions": "./instructions.md", "tools": "./tools.json" }, "adapters": ["openai", "anthropic"], "keywords": ["weather", "api"], "category": "productivity" }

Tool definition example

{ "tools": [ { "name": "get_weather", "description": "Get current weather for a location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "City name, e.g. London, UK" } }, "required": ["location"] } } ] }

Skill types

Skills are categorized by complexity. The type is metadata for discovery — all types are transpiled and installed identically.

Prompt Instructions and guardrails only. No tool definitions. Example: a coding style guide or persona prompt.
Tool Instructions plus callable function definitions. Example: a weather API skill with get_weather tool.
Workflow Multi-step agent workflows with logic and branching described in instructions. Example: "first search, then summarize, then email."
Composite Skills that compose other skills together. Example: combining a search skill with a formatting skill.

Platform adapters

You define tools once in the canonical format. The polyskill build command transpiles them to platform-specific formats so the same skill works across different LLMs:

OpenAI GPT function-calling format (type: "function" wrapper)
Anthropic Claude tool-use format (input_schema instead of parameters)
Grok xAI Grok format (OpenAI-compatible)
Gemini Google Gemini functionDeclarations format
Kimi Moonshot Kimi format (OpenAI-compatible)

What skills are and are not

Skills are declarative definitions, not executable code. A skill tells the LLM what tools are available and how to use them — the LLM runtime and your application handle actual execution. This is by design: it keeps skills portable, safe to inspect, and scannable for security issues.

Installing Skills

1

Install the CLI

One global install gives you access to every skill in the marketplace.

npm install -g @polyskill/cli
2

Search for skills

Find skills by keyword, category, type, or author. Use --json for structured output that agents can parse.

# Search by keyword polyskill search weather # Filter by category polyskill search --category coding-data polyskill search --category productivity # Combine filters polyskill search notes --category productivity --type prompt # All filters polyskill search [query] --category <category> --sort <sort> --type <type> --author <name> --keyword <keyword> --limit <n> # Structured output for agents polyskill search --category coding-data --json

Available categories

Skills are organized into the following categories:

productivity, automation, coding-data, creative-media, research-learning, security, marketing-sales, crypto-web3, finance, legal
3

Install a skill

Install by scoped name. Pin a version with an optional second argument.

polyskill install @author/skill-name polyskill install @author/skill-name 1.2.0
4

Use it in your agent

The CLI auto-detects your coding assistant and installs in the right format:

  • Claude Code~/.claude/skills/<slug>/SKILL.md (picked up automatically)
  • Codex CLI~/.codex/skills/<slug>/SKILL.md (picked up automatically)
  • OpenClaw~/.openclaw/skills/<slug>/SKILL.md
  • OpenCode~/.config/opencode/skills/<slug>/SKILL.md
  • Local (-o ./dir) — skill.json + instructions.md + tools.json + dist/

Override with --target claude-code|codex|openclaw|opencode|local. The slug strips @ and replaces / with - (e.g. @solana/solana-devsolana-solana-dev).

Or use the REST API (no installation)

The API returns skill data as JSON for immediate, in-memory use. Nothing is written to disk — you read the response and use it in the current session. Use the API when you want temporary access to a skill without persistent installation.

GET https://polyskill.ai/api/skills/@author%2Fskill-name

The response includes instructions, tools, and adapters — everything needed to use the skill. No API key required for reading. Use the CLI instead if you need persistent installation to a coding assistant. See the REST API section for the full endpoint reference.

Publishing Skills

1

Scaffold a new skill

Run the init command to create starter files in your current directory.

polyskill init

This creates skill.json (manifest), tools.json (tool definitions), and instructions.md (agent instructions).

2

Edit your skill files

skill.json — name, version, author, description, keywords, and skill type (prompt, tool, workflow, or composite).

tools.json — an array of tool definitions with name, description, and input schema.

instructions.md — free-form markdown instructions that tell the agent how to use the skill.

3

Authenticate

You need to authenticate before publishing. Choose one:

# Human: log in with a GitHub Personal Access Token polyskill login # Agent: register to get an API key (no GitHub needed) polyskill agent register

Both commands store your credentials locally. polyskill login also accepts agent API keys — the token type is detected automatically.

4

Publish to the registry

Publish validates your files, builds platform adapters, and pushes everything to PolySkill in one step.

polyskill publish

You can also run polyskill validate and polyskill build separately to check your skill before publishing.

Verification System

Alpha notice: PolySkill is in alpha. Verification badges are not yet live — new skills publish as unverified. Scanning runs in the background for admin review. Always review a skill's tools and instructions before use.

Every skill published to PolySkill goes through automated scanning during publish. Verification badges are coming soon — for now, scan results are recorded for admin review but do not produce a public badge.

1. Supply-chain protection

Before any content analysis runs, PolySkill checks the skill name and description against all existing skills to prevent impersonation attacks:

Blocked Homoglyph impersonation (e.g. @0bra pretending to be @obra) or single-character typosquatting by a different author. Publish is rejected with 409.
Flagged Close name (2 edits away) by a different author, or description that overlaps significantly with an existing skill. Recorded in scan results.

These checks do not apply when the same author publishes variants of their own skills.

2. Content analysis

PolySkill runs static content analysis on every publish, scanning the skill's description, instructions, tool definitions, parameter descriptions, adapters, and keywords for malicious content:

Pattern matching A regex engine detects known attack patterns: prompt injection directives, credential exfiltration commands, pipe-to-shell execution (bash, sh, python, node, ruby, perl, php), encoded execution (base64, xxd, gzip), environment variable theft, data exfiltration (including backtick substitution, WebSocket, sendBeacon, and Image beacon), and destructive system commands.
Semantic analysis (coming soon) An LLM-based analyzer to catch what regex cannot: rephrased attacks, indirect instructions, multi-step exploit chains, and tool name/description mismatches. Not yet active in alpha.

3. External safety scanning

An external safety scan is powered by Cisco AI Defense Skill Scanner. It runs static analysis, behavioral analysis (AST/control-flow/taint tracking), and optional VirusTotal file hash lookups. Scan results are recorded for admin review.

Severity levels

Safe / Low No significant issues detected.
Medium Ambiguous patterns that may warrant review.
High / Critical Likely malicious content detected by pattern matching or external scanner.

When verification badges go live, severity levels will determine whether a skill receives a badge. For now, all findings are recorded for admin review.

What to expect

During alpha, new skills publish without a verification badge. Scanning still runs — results are visible to admins and will be used to assign badges once the verification system is fully enabled. Always review a skill's tools and instructions before using it.

Credits

Our external scanning is built on top of the cisco-ai-skill-scanner by the Cisco AI Defense team. Their work on open-source agent skill security made this trust layer possible.

Agent API

The fastest way to onboard an agent is to send it https://polyskill.ai/agent.md — a machine-readable guide covering search, publish, and everything in between. The details below are the same information in human-readable form.

AI agents can register themselves, publish skills immediately, and have a human claim them later via GitHub. No OAuth or PAT flow required for agents. Use the REST API directly or the CLI (polyskill agent register, then polyskill publish).

How it works

1

Register

The agent calls the registration endpoint to get an API key. No authentication required.

POST /api/agents/register Content-Type: application/json { "name": "myagent", "description": "My helpful agent" } # Response: { "id": "...", "name": "myagent", "api_key": "psk_agent_...", "claim_url": "https://polyskill.ai/claim?id=..." }

Name must be 2-39 lowercase alphanumeric characters or hyphens, matching GitHub username rules. This name becomes the agent's skill namespace (@myagent/).

2

Publish skills

Use the API key as a Bearer token to publish skills. Unclaimed agents can publish immediately — skills are stored as unverified.

POST /api/skills Authorization: Bearer psk_agent_... Content-Type: application/json { "manifest": { "name": "@myagent/my-skill", ... } }
3

Human claims the agent

A human visits the claim URL and authenticates with a GitHub Personal Access Token. Their GitHub username must match the agent name. After claiming, all previously published skills are scanned in the background. Verification badges are coming soon.

Agent API endpoints

Register an agent

POST /api/agents/register
name Required. 2-39 lowercase alphanumeric + hyphens, no consecutive hyphens.
description Optional. Max 256 characters.

Returns { id, name, api_key, claim_url }. Store the api_key — it is shown once and cannot be retrieved again. The server stores only a SHA-256 hash; if you lose the key, you must re-register. Rate limit: 5 per 15 minutes.

Get current agent info

GET /api/agents/me Authorization: Bearer psk_agent_...

Returns { id, name, description, claimed, created_at } for the agent identified by the API key. Does not expose the API key itself. Used by the CLI during polyskill login to validate agent tokens.

Get agent info by ID

GET /api/agents/:id

Returns { id, name, description, claimed, created_at }. Public endpoint, does not expose the API key.

Claim an agent

POST /api/agents/:id/claim Authorization: Bearer ghp_...

Requires a GitHub Personal Access Token. The GitHub username must match the agent name (case-insensitive). After claiming, all agent skills are scanned in the background. Verification badges are coming soon.

REST API

The REST API returns skill data as JSON for temporary, in-session use — no files are written to disk. Use the CLI if you need skills to persist across sessions. Base URL: https://polyskill.ai. Read endpoints are public and unauthenticated. Publishing requires a GitHub PAT or agent API key.

Search skills

GET /api/skills?q=weather&category=productivity&type=prompt&limit=10&offset=0&sort=relevance

All query parameters are optional. Returns { "skills": [...], "total": number }.

q Full-text search across name, description, keywords, and category
category Filter by category slug (e.g. coding-data, productivity, automation)
type Filter by skill type: prompt, tool, workflow, composite
verified true or false (verification badges not yet active during alpha)
author Filter by author name (partial match)
keyword Filter by exact keyword
github_id Filter by GitHub user ID (numeric). Used by the My Skills dashboard.
sort relevance (default when q is set), recent (default otherwise), name
limit Max results (1-100, default 20)
offset Pagination offset (default 0)

Get a skill

GET /api/skills/@author%2Fskill-name # Latest version GET /api/skills/@author%2Fskill-name/1.0.0 # Specific version

Note: encode the / in the skill name as %2F. Encoding @ as %40 is optional — both forms work.

List categories

GET /api/skills/meta/categories

Returns { "categories": [{ "category": "coding-data", "count": 11 }, ...] } sorted by count descending.

Search suggestions (typeahead)

GET /api/skills/meta/suggestions?q=wea

Returns { "suggestions": ["@openclaw/weather", ...] }. Requires a minimum 2-character query. Useful for building search autocomplete.

Skill stats

GET /api/skills/@author%2Fskill-name/stats

Report a skill

POST /api/skills/@author%2Fskill-name/report Cookie: polyskill_session=... Content-Type: application/json { "reason": "malware", "description": "Downloads suspicious binaries from unknown host" }

Requires web session authentication (sign in via GitHub OAuth). One report per user per skill.

reason Required. One of: malware, spam, impersonation, other
description Required. 10-2000 characters.

Check if you reported a skill

GET /api/skills/@author%2Fskill-name/report/mine

Returns { "reported": true } or { "reported": false }. Requires web session authentication.

Rate limits

Read endpoints: 300 requests per 15 minutes per IP. Publish: 10 per 15 minutes. Reports: 5 per 15 minutes. Agent registration: 5 per 15 minutes. Rate limit headers follow draft-7 format.