Thanks for your interest in contributing to the Arcjet plugin for AI coding agents.
This plugin follows the Open Plugins Specification v1.0.0 and is also compatible with Claude Code and Cursor. To support all three, the manifest and MCP config are duplicated into each tool's expected location. Key structural requirements:
- Manifest at
.plugin/plugin.json(Open Plugins),.claude-plugin/plugin.json(Claude Code), and.cursor-plugin/plugin.json(Cursor) — all three must stay in sync and includename,version,description,author,license, andlogo - Rules in
rules/as.mdcfiles with YAML frontmatter (description,globs,alwaysApply) - Skills in
skills/<name>/SKILL.mdwith YAML frontmatter (name,description) - Agents in
agents/as.mdfiles with YAML frontmatter (name,description) - MCP servers in
.mcp.json(Open Plugins / Claude Code) andmcp.json(Cursor) at the repo root — both must stay in sync - Assets in
assets/(logo, etc.)
.plugin/plugin.json # Plugin manifest (Open Plugins)
.claude-plugin/plugin.json # Plugin manifest (Claude Code)
.cursor-plugin/plugin.json # Plugin manifest (Cursor)
rules/*.mdc # Auto-activated coding guidance
skills/*/SKILL.md # Task-oriented workflows
agents/*.md # Agent definitions
.mcp.json # MCP server configuration (Open Plugins / Claude Code)
mcp.json # MCP server configuration (Cursor)
scripts/ # Tooling (validation, etc.)
assets/ # Static assets
When updating any manifest or MCP config, update all copies so the tools stay in sync.
Open this repo in a devcontainer (VS Code or GitHub Codespaces) — it installs all tooling automatically. Alternatively, install dprint manually.
All JSON, Markdown, and .mdc files are formatted with dprint:
dprint fmt # Format all files
dprint check # Check without modifying (used in CI)Configuration is in dprint.json.
Run the structural validation script before submitting changes:
bash scripts/validate.shThis checks:
- JSON files are valid
plugin.jsonhas all required fields and valid semver- Skills have
SKILL.mdwithnameanddescriptionfrontmatter - Rules have
.mdcfiles withdescriptionandglobsfrontmatter - Agents have
.mdfiles withnameanddescriptionfrontmatter .mcp.jsondefines at least one server with aurlorcommand
-
Create
rules/<name>.mdcwith frontmatter:--- description: What this rule provides alwaysApply: false globs: - "**/<pattern>" ---
-
Write concise, opinionated guidance in the body. Include a
Ref:link to relevant docs. -
Run
bash scripts/validate.shanddprint check.
-
Create
skills/<name>/SKILL.mdwith frontmatter:--- name: skill-name license: Apache-2.0 description: What this skill does and when to use it metadata: pathPatterns: - "relevant/**/globs" importPatterns: - "relevant-package" promptSignals: phrases: - "trigger phrase" ---
-
Write step-by-step instructions in the body. Skills should be self-contained — the agent follows them without prior context.
-
Run
bash scripts/validate.shanddprint check.
-
Create
agents/<name>.mdwith frontmatter:--- name: agent-name description: What this agent does ---
-
Define the agent's role, capabilities, workflow, and output format in the body.
-
Run
bash scripts/validate.shanddprint check.
Pull requests run two checks (see .github/workflows/lint.yml):
- dprint format check — ensures all files are formatted
- Plugin structure validation — runs
scripts/validate.sh
Both must pass before merging.
- Keep rule and skill content concise and opinionated — agents work better with clear directives than hedged suggestions
- Always include
Ref: https://docs.arcjet.com/llms.txtin rules so agents can fetch full docs when needed - Test skills by running them in an AI coding agent against a real project e.g.
claude --plugin-dir ./arcjet-plugin - Start new protection rules in
DRY_RUNmode guidance — never suggestLIVEas a default
When creating or improving skills, follow the guidance at agentskills.io:
- Best practices — scoping, context efficiency, gotchas sections, code templates, and calibrating control
- Optimizing descriptions — writing descriptions that trigger reliably on relevant prompts
- Evaluating skills — test cases, grading, and iterating on output quality
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.