Rulebook

Every skill on SEO.party is built for OpenSEO and gets its data from the OpenSEO MCP tools. Before a skill is listed, and again for each new commit, we run the automated checks on this page. Each check below says what it looks for, how serious a finding is, and how to fix it. When you submit, the results link each finding to its rule here.

The checks read every text file in the skill folder: SKILL.md, scripts, references, and templates. For a skill at the root of its repository, that is the whole repository.

Severities#

SeverityWhat it means
BlockThe skill is not listed until you fix it.
HoldThe skill can be listed as Community, but a person reads the flagged part before it can be Verified.
WarningThe skill can be listed. Verified reviewers will ask about it.
NoteInformation for you and the reviewer. Nothing to fix.

Files written for people browsing the repository rather than for the agent (README, CHANGELOG, CONTRIBUTING, SECURITY, SUPPORT, LICENSE, and anything under docs/, wiki/, or .github/) get a hold instead of a block. An install line in a README is not an instruction to the agent, but someone should still read it.

Passing the checks lists a skill as Community. Verified and Official skills have also been reviewed by a person.

Submitting#

  • Who can submit. Anyone signed in. Paste a link to any public repository or a folder inside it. Skills are always credited to the repository's GitHub owner and listed under their GitHub name.
  • What gets listed. Every folder with a SKILL.md is a skill, and it must use OpenSEO (see openseo.uses-openseo). We read the default branch at its latest commit, run every check on this page, and list the skills you pick in the Community tier right away. Skills with a block are not listed until it is fixed. Holds and warnings show in your submission results but do not stop a listing.
  • Daily limit. Each account can submit skills from up to 10 repositories in 24 hours. Submitting more skills from a repository you already submitted from that day does not count again. One submission can include up to 100 skills.
  • Names. Names that contain openseo, official, or verified, or imitate an SEO tool or brand, are held (see naming.reserved). Names we have reserved, and look-alikes of them (swapped characters or one typo), cannot be submitted at all.
  • Already listed. A skill we already list from the same folder cannot be submitted again. A new commit to it is picked up by the daily re-index.
  • Verified review. You can ask for one when you submit, if the skill has an open source license. A person reviews the exact commit you submitted against the depth review rubric: what the skill does, whether it declares its inputs and output, stays narrow, says when to stop and ask, notes its costs, and makes a real data call for any live data it claims. We aim to finish within five working days. Until then the skill stays in the Community tier, and you get an email with the result.
  • Updates. We pick up new commits on the default branch within a day. Community skills move to a new commit once it passes the checks; Verified skills keep serving the reviewed commit until the new one is reviewed.

Format#

Skills follow the Agent Skills specification. These checks read the YAML frontmatter at the top of SKILL.md.

format.frontmatter#

  • Checks: SKILL.md starts with a --- line, the frontmatter is closed with ---, it is valid YAML without duplicate keys, and it is a set of key: value pairs.
  • Severity: Block.
  • Fix: Start the file with ---, then name: and description:, then ---. Quote values that contain a colon followed by a space, such as description: "Use when: ...".

format.name#

  • Checks: name is present and 1-64 characters, uses only lowercase letters a-z, digits, and hyphens, and does not start or end with a hyphen or contain --.
  • Severity: Block.
  • Fix: Use a short, lowercase, hyphenated name, like keyword-gap.

format.name-matches-folder#

  • Checks: name matches the folder that holds SKILL.md. Skills at the repository root are exempt.
  • Severity: Warning. Installers name the folder after the skill, so it still works, but the spec asks for a match.
  • Fix: Rename the folder or the skill so they agree.

format.description#

  • Checks: description is present, is text, and is 1-1024 characters.
  • Severity: Block.
  • Fix: Say what the skill does and when to use it, in under 1024 characters.

format.fields#

  • Checks: The optional fields have the right shape: license is text, compatibility is 1-500 characters of text, metadata is a map of keys to text values, and allowed-tools is a space-separated string.
  • Severity: Block, except two warnings: allowed-tools written as a YAML list (Claude Code accepts it; the spec asks for a string) and lists or maps nested inside metadata.
  • Fix: Write compatibility as one sentence, such as compatibility: Requires Node.js and network access. Write allowed-tools: Read Grep Bash(curl:*). Keep metadata values as quoted strings.

format.unknown-fields#

  • Checks: Frontmatter keys outside the spec, such as argument-hint or user-invocable.
  • Severity: Note. Some agents read these keys and the rest ignore them.
  • Fix: Nothing required.

Quality#

quality.description-trigger#

  • Checks: The description helps an agent decide when to load the skill. It is at least 40 characters and either says when to use the skill ("Use when the user asks for ...") or has a clause that opens with a verb ("Audits ...", "Finds ..."). Descriptions written mostly in a script other than Latin are not checked.
  • Severity: Warning.
  • Fix: Start with what the skill does and add when to use it: "Finds pages losing clicks in Search Console. Use when the user asks why traffic dropped."

quality.body-length#

  • Checks: The instructions after the frontmatter are at least 200 characters and no more than 60 KB.
  • Severity: Hold when under 200 characters (a reviewer checks the skill does more than its description). Warning when over 60 KB.
  • Fix: Write out the steps, inputs, and output format. For long skills, move reference material into files the skill links to; agents load all of SKILL.md at once.

License#

license.open-source#

  • Checks: The repository has an open source license that GitHub can identify, permissive or copyleft (MIT, Apache-2.0, BSD, ISC, MPL-2.0, GPL, LGPL, AGPL, EPL-2.0, EUPL-1.2, Unlicense, CC0-1.0, CC-BY-4.0, CC-BY-SA-4.0, and similar), or the skill folder has its own license file and its license field names one of these.
  • Severity: Note. An open source license is required for Verified, not for the Community tier.
  • Fix: Add a LICENSE file with an open source license at the repository root.

OpenSEO#

openseo.uses-openseo#

  • Checks: The skill mentions OpenSEO somewhere in its text files: by name ("OpenSEO", "open-seo"), or through the OpenSEO MCP tools it calls, such as mcp__openseo__research_keywords.
  • Severity: Block. Skills on SEO.party are built for OpenSEO.
  • Fix: Reference the OpenSEO MCP tools your skill uses, and say what each step gets from them.

Safety#

safety.destructive-shell#

  • Checks: Commands that destroy data or open the machine up: rm -rf on /, ~, $HOME, .., or any absolute path outside temp folders; mkfs; dd writing to a disk device; git push --force (--force-with-lease is fine); chmod 777; DROP TABLE, DROP DATABASE, DROP SCHEMA; piping a download into a shell (curl ... | sh, wget ... | bash, bash <(curl ...), iwr ... | iex); fork bombs.
  • Severity: Block (hold in README-style docs).
  • Fix: Remove the command, or scope deletes to files the skill creates inside the project. Replace curl | sh installers with a pinned package or a downloaded script the user can read first.

safety.credential-exfiltration#

  • Checks: Reading SSH keys, cloud credentials (~/.aws, ~/.config/gh, ~/.netrc, ~/.docker/config.json, ~/.kube/config), keychains, .env files, or the whole environment, and then uploading, posting, or base64-encoding them. Examples: curl -d @.env, cat ~/.ssh/id_rsa | curl ..., env | curl ..., JSON.stringify(process.env) in a file that makes network calls.
  • Severity: Block (hold in README-style docs).
  • Fix: Read only the specific API key the skill needs, such as os.environ["DATAFORSEO_LOGIN"], and send it only to that service's API.

safety.prompt-injection#

  • Checks: Phrases that turn the agent against its user or its instructions: "ignore all previous instructions", "you are now ... unrestricted / in developer mode", "do not tell the user about this", "hide this from the user".
  • Severity: Hold.
  • Fix: Remove the phrase. If it is guidance about tone or scope, say what to do instead ("Explain the cost before running a large grid").

safety.hidden-text#

  • Checks: Text a person reading the skill would not see but the agent would: zero-width and bidirectional control characters, Unicode tag characters, HTML comments with instructions in Markdown files, and encoded blobs longer than 400 characters (inline image data URIs are fine).
  • Severity: Hold.
  • Fix: Delete invisible characters, move instructions out of comments into the visible text, and keep data in clearly named files.

safety.remote-instructions#

  • Checks: The skill downloads a Markdown, text, or prompt file from a URL that is not pinned to a commit and tells the agent to follow it. What the agent does could then change after review.
  • Severity: Hold.
  • Fix: Put the instructions in the skill folder, or pin the URL to a 40-character commit sha.

safety.unpinned-launcher#

  • Checks: Commands that run whatever version is current: npx, bunx, pnpm dlx, uvx, or pipx run with a package that has no version (or @latest), pip install without ==version, and downloads from a /latest/ URL.
  • Severity: Warning.
  • Fix: Pin it: npx lighthouse@12.1.0, pip install requests==2.32.3, or a release URL with a version number.

Files#

files.binary#

  • Checks: Binary files other than images, fonts, audio, video, PDFs, and Office documents: executables, archives, compiled code, macro-enabled documents.
  • Severity: Block.
  • Fix: Remove the file. Ship source code the agent runs instead of a compiled binary.

files.media#

  • Checks: Images, fonts, audio, video, PDFs, and Office documents in the skill folder.
  • Severity: Note. They are allowed as assets.
  • Fix: Nothing required.

files.file-size#

  • Checks: Any file over 200 KB. Larger files are not shown on the skill page or scanned by the text checks.
  • Severity: Warning.
  • Fix: Split or trim the file.

files.snapshot-size#

  • Checks: The skill folder totals more than 2 MB, or holds more than 200 files (only the first 200 are indexed and checked).
  • Severity: Hold.
  • Fix: Keep the folder to what the agent needs. For a skill at the root of a large repository, move it into its own folder, such as skills/<name>/.

Content#

content.ranking-guarantees#

  • Checks: Claims of guaranteed rankings or traffic ("we guarantee first-page rankings", "rank #1 on Google"). Advice like "no one can guarantee rankings" is fine.
  • Severity: Warning. Skills that make these claims are rejected for Verified.
  • Fix: Describe what the skill checks or produces instead of promising results.

content.affiliate#

  • Checks: Affiliate and referral links or codes: tracking parameters such as ?ref=, ?aff=, or ?via= (GitHub ?ref= is a git ref and is ignored), amzn.to and Amazon tag= links, affiliate network links, and "use my link / code".
  • Severity: Warning. Skills built to push affiliate links are rejected for Verified.
  • Fix: Link to tools directly, without tracking parameters or codes.

Naming#

naming.reserved#

  • Checks: Skill names that contain openseo, official, or verified, or that imitate an SEO tool or brand with swapped or misspelled letters (ahrefz, semru5h, g00gle). Using a tool's correct name, as in seo-ahrefs, is fine. OpenSEO's own skills are exempt.
  • Severity: Hold.
  • Fix: Rename the skill. Badges come from review, not from the name.

Listing#

listing.duplicate#

  • Checks: Another listing already has a version with exactly the same files (the same content hash over every file's path and sha256).
  • Severity: Note. Copies and forks can be listed; reviewers use this to set lineage and to spot near-duplicate spam.
  • Fix: If the skill is a fork, say what it changes, or link the original. Otherwise nothing.