Payload Skills

Two Payload CMS skills: collections, hooks and access control, plus moving content from WordPress, Strapi and Contentful.

  • 172 ★ on the repository
  • Last commit
Skill

Minimal access

Why this level

  • Only instructions and references, with no code or network calls of their own.
All reasons and checks

payloadcms/skills

Install

In your terminal, with SkillFoxx CLI

npx skillfoxx add skills/payload-skills

Detects the agents on your machine, shows the access level and pins the version.

Other ways to install

Access and checks

How we review

Minimal accessThe tool runs nothing and makes no network calls.

  • Only instructions and references, with no code or network calls of their own.

This is third-party code. Review the repository files before installing.

What it does

The repository ships two skills for Payload projects. The `payload` skill is a development reference: collections with auth, uploads and drafts, every field type, `beforeChange` and `afterChange` hooks, access control up to roles and multi-tenancy, queries through the Local API, REST and GraphQL, MongoDB, Postgres and SQLite adapters, the jobs queue, custom endpoints and localization. It triggers when an agent sees `payload.config.ts` or debugs validation, relationship and transaction errors. The `cms-migration` skill runs a conversation about the move: the agent analyses an export from another CMS in JSON or CSV, identifies field types and relations, builds Payload collection configs step by step and only then imports the data. It includes field-mapping tables for WordPress, Contentful and Strapi and a list of common pitfalls such as select versus relationship.

Who it is for. Developers on Payload CMS and teams moving to it from WordPress, Contentful, Strapi, Sanity or Webflow.

Good fit when

  • Validation fails in a Payload project or a related document is not found, and the agent needs field behaviour rules.
  • A list is shown to each user according to their role, and the rule is described in access control.
  • An `afterChange` hook calls itself in a loop, and a `req.context` check guards against it.
  • A WordPress site is moving to Payload and the collection structure is designed from the content export.
  • A Payload plugin is being written and its package assembled from scratch.

Not a fit when

  • The project is not on Payload: both skills are entirely about its configuration and API.
  • The collection structure is ready and you only need to load data: the design dialogue will just slow you down.
  • You want the skill that ships inside the `payload` package and matches your installed version: it has its own card.

Example request

Here is a WordPress posts export in JSON: propose Payload collections, discuss relations with me and import the data only after that.

Limitations

The skills live apart from the `payload` package, so their reference can drift from the version you installed. The repository has no license file: MIT is stated only in the README text. The `cms-migration` skill starts with a dialogue about collection structure, so there is no one-command move. A migration needs a JSON or CSV export, and there are no direct connections to WordPress, Contentful or Strapi. The latest commit in the repository is from August 2026.

How to disable. Delete the `payload` and `cms-migration` folders from the agent's skills directory (for example `.claude/skills/`) or run `npx skills remove` for this set.

FAQ

How do I install the Payload skills in Claude Code?

Run `npx skills add payloadcms/skills`. It places both folders in the agent's skills directory, and the `payload` skill then triggers on a project with `payload.config.ts`.

How do these differ from the skill inside the payload package?

That skill ships with the `payload` package and matches your installed version. This is a separate repository installed through `npx skills`, and it adds `cms-migration`, which the package lacks.

What does cms-migration do?

It runs a dialogue about moving content: it analyses the export, outlines Payload collections and agrees relations. Data import comes after the structure is approved.

Which CMSs does the migration cover?

The description names WordPress, Contentful, Strapi, Sanity and Webflow. Field-mapping tables exist for WordPress, Contentful and Strapi, and for the rest the agent relies on the general Payload field-type reference.

What does the payload skill cover?

Collections, fields, hooks, access control, queries through the Local API, REST and GraphQL, database adapters, the jobs queue, endpoints, localization and plugin development. Details sit in `reference/` files loaded on demand.

Discussion

No questions or reviews yet.

Skills

The official Payload CMS skill shipped inside the package: collections, fields, hooks, access control, queries and database adapters

SkillMinimal access45.8KRepository stars
Official

The Elysia v2 skill teaches an agent to build, debug and migrate Elysia backends: validation, plugins, typed clients, deploy

SkillMinimal access71Repository stars

Sixteen Spring Boot skills: the agent explores the application first, then edits JPA, DTOs, REST, Security, Kafka and tests.

SkillExtended access138Repository stars

Five Vercel skills for the Workflow SDK: setup, writing durable workflows and moving between versions.

SkillExtended access2.5KRepository stars

Hundreds of per-provider skills teach an agent to receive webhooks, verify signatures and handle events, with code examples.

SkillMinimal access101Repository stars

README in short

The README introduces both skills briefly, giving each a description, usage situations and a topic list. Installation is one command, and details of `payload` live in a separate README inside the skill folder.

README badge

Original SKILL.md

---
name: payload
description: Use when working with Payload projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.
---

# Payload Application Development

Payload is a Next.js native CMS with TypeScript-first architecture, providing admin panel, database management, REST/GraphQL APIs, authentication, and file storage.

## Quick Reference

| Task                     | Solution                                                                   | Details                                                                                                                          |
| ------------------------ | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Auto-generate slugs      | `slugField()`                                                              | [FIELDS.md#slug-field-helper](reference/FIELDS.md#slug-field-helper)                                                             |
| Restrict content by user | Access control with query                                                  | [ACCESS-CONTROL.md#row-level-security-with-complex-queries](reference/ACCESS-CONTROL.md#row-level-security-with-complex-queries) |
| Local API user ops       | `user` + `overrideAccess: false`                                           | [QUERIES.md#access-control-in-local-api](reference/QUERIES.md#access-control-in-local-api)                                       |
| Draft/publish workflow   | `versions: { drafts: true }`                                               | [COLLECTIONS.md#versioning--drafts](reference/COLLECTIONS.md#versioning--drafts)                                                 |
| Computed fields          | `virtual: true` with **field-level** `hooks.afterRead` returning the value | [FIELDS.md#virtual-fields](reference/FIELDS.md#virtual-fields)                                                                   |
| Conditional fields       | `admin.condition`                                                          | [FIELDS.md#conditional-fields](reference/FIELDS.md#conditional-fields)                                                           |
| Custom field validation  | `validate` function                                                        | [FIELDS.md#validation](reference/FIELDS.md#validation)                                                                           |
| Filter relationship list | `filterOptions` on field                                                   | [FIELDS.md#relationship](reference/FIELDS.md#relationship)                                                                       |
| Select specific fields   | `select` parameter                                                         | [QUERIES.md#field-selection](reference/QUERIES.md#field-selection)                                                               |
| Auto-set author/dates    | beforeChange hook                                                          | [HOOKS.md#collection-hooks](reference/HOOKS.md#collection-hooks)                                                                 |
| Prevent hook loops       | `req.context` check                                                        | [HOOKS.md#context](reference/HOOKS.md#context)                                                                                   |
| Cascading deletes        | beforeDelete hook                                                          | [HOOKS.md#collection-hooks](reference/HOOKS.md#collection-hooks)                                                                 |
| Geospatial queries       | `point` field with `near`/`within`                                         | [FIELDS.md#point-geolocation](reference/FIELDS.md#point-geolocation)                                                             |
| Reverse relationships    | `join` field type                                                          | [FIELDS.md#join-fields](reference/FIELDS.md#join-fields)                                                                         |
| Next.js revalidation     | Context control in afterChange                                             | [HOOKS.md#nextjs-revalidation-with-context-control](reference/HOOKS.md#nextjs-revalidation-with-context-control)                 |
| Query by relationship    | Nested property syntax                                                     | [QUERIES.md#nested-properties](reference/QUERIES.md#nested-properties)                                                           |
| Complex queries          | AND/OR logic                                                               | [QUERIES.md#andor-logic](reference/QUERIES.md#andor-logic)                                                                       |
| Transactions             | Pass `req` to operations                                                   | [ADAPTERS.md#threading-req-through-operations](reference/ADAPTERS.md#threading-req-through-operations)                           |
| Background jobs          | Jobs queue with tasks                                                      | [ADVANCED.md#jobs-queue](reference/ADVANCED.md#jobs-queue)                                                                       |
| Custom API routes        | Collection custom endpoints                                                | [ADVANCED.md#custom-endpoints](reference/ADVANCED.md#custom-endpoints)                                                           |
| Cloud storage            | Storage adapter plugins                                                    | [ADAPTERS.md#storage-adapters](reference/ADAPTERS.md#storage-adapters)                                                           |
| Multi-language           | `localization` config + `localized: true`                                  | [ADVANCED.md#localization](reference/ADVANCED.md#localization)                                                                   |
| Create plugin            | `(options) => (config) => Config`                                          | [PLUGIN-DEVELOPMENT.md#plugin-architecture](reference/PLUGIN-DEVELOPMENT.md#plugin-architecture)                                 |
| Plugin package setup     | Package structure with SWC                                                 | [PLUGIN-DEVELOPMENT.md#plugin-package-structure](reference/PLUGIN-DEVELOPMENT.md#plugin-package-structure)                       |
| Add fields to collection | Map collections, spread fields                                             | [PLUGIN-DEVELOPMENT.md#adding-fields-to-collections](reference/PLUGIN-DEVELOPMENT.md#adding-fields-to-collections)               |
| Plugin hooks             | Preserve existing hooks in array                                           | [PLUGIN-DEVELOPMENT.md#adding-hooks](reference/PLUGIN-DEVELOPMENT.md#adding-hooks)                                               |
| Check field type         | Type guard functions                                                       | [FIELD-TYPE-GUARDS.md](reference/FIELD-TYPE-GUARDS.md)                                                                           |

## Quick Start

```bash
npx create-payload-app@latest my-app
cd my-app
pnpm dev
```

### Minimal Config

Report a problem