feat: add pr rule & skill
This commit is contained in:
62
.claude/skills/pr-review/SKILL.md
Normal file
62
.claude/skills/pr-review/SKILL.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: pr-review
|
||||
description: >
|
||||
Review pull requests for the MiniMax Skills repository. Use when reviewing PRs,
|
||||
validating new skill submissions, or checking existing skills for compliance.
|
||||
Run the validation script first for hard checks, then apply quality guidelines
|
||||
for content review. Triggers: PR review, pull request, validate skill, check skill.
|
||||
license: MIT
|
||||
metadata:
|
||||
version: "1.0"
|
||||
category: tooling
|
||||
---
|
||||
|
||||
# PR Review Skill
|
||||
|
||||
Review pull requests against repository standards. Two-phase process: automated validation, then manual content review.
|
||||
|
||||
## Phase 1: Automated Validation (Hard Rules)
|
||||
|
||||
Run the validation script to check structural requirements:
|
||||
|
||||
```bash
|
||||
python .claude/skills/pr-review/scripts/validate_skills.py
|
||||
```
|
||||
|
||||
The script checks:
|
||||
- `SKILL.md` exists in every skill directory
|
||||
- YAML frontmatter is parseable
|
||||
- Required fields present: `name`, `description`
|
||||
- `name` matches directory name
|
||||
- No hardcoded secrets detected
|
||||
|
||||
All ERROR-level checks must pass. WARNING-level items (missing `license`, `metadata`) should be flagged but are not blockers.
|
||||
|
||||
See [references/structure-rules.md](references/structure-rules.md) for the complete hard rules specification.
|
||||
|
||||
## Phase 2: Content Review (Soft Guidelines)
|
||||
|
||||
After automated checks pass, review the PR against quality guidelines:
|
||||
|
||||
1. **Skill scope** — Does it overlap with existing skills? Is the boundary clear?
|
||||
2. **Description quality** — Does the `description` include clear trigger conditions?
|
||||
3. **File size** — Are reference docs reasonably sized for context window consumption?
|
||||
4. **API key handling** — If external APIs are used, are credentials read from environment variables?
|
||||
5. **Script quality** — Do scripts have shebang, requirements.txt, and error handling?
|
||||
6. **README sync** — Are `README.md` and `README_zh.md` updated for new skills?
|
||||
|
||||
See [references/quality-guidelines.md](references/quality-guidelines.md) for soft guidelines details.
|
||||
|
||||
## Review Checklist Summary
|
||||
|
||||
### Must Pass (Blockers)
|
||||
- [ ] `validate_skills.py` exits with code 0
|
||||
- [ ] PR title follows conventional commit format
|
||||
- [ ] One PR, one purpose
|
||||
|
||||
### Should Pass (Flagged in Review)
|
||||
- [ ] No functional overlap with existing skills
|
||||
- [ ] Description includes trigger conditions
|
||||
- [ ] Files are reasonably sized
|
||||
- [ ] API keys via environment variables
|
||||
- [ ] README tables updated for new skills (Source column set to `Community`)
|
||||
54
.claude/skills/pr-review/references/quality-guidelines.md
Normal file
54
.claude/skills/pr-review/references/quality-guidelines.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Quality Guidelines (Soft Review)
|
||||
|
||||
These guidelines are not enforced by automated tooling. Reviewers should check these during manual PR review and flag violations as suggestions.
|
||||
|
||||
## 1. Skill Scope — Avoid Overlap
|
||||
|
||||
Before approving a new skill, check existing skills for functional overlap.
|
||||
|
||||
- If the new skill's capability is a subset of an existing skill, suggest extending the existing one instead
|
||||
- If there is partial overlap, the PR description must clearly explain the boundary
|
||||
- Example: a voice synthesis skill should clarify how it differs from `frontend-dev`'s TTS capabilities
|
||||
|
||||
## 2. Description Quality
|
||||
|
||||
The `description` field in SKILL.md is what the agent uses to decide whether to activate the skill. A good description must include:
|
||||
|
||||
- What the skill does
|
||||
- When to use it (trigger conditions)
|
||||
- Keywords or phrases that should activate it
|
||||
|
||||
Bad: `"A skill for making PDFs"`
|
||||
Good: `"Generate, fill, and reformat PDF documents. Use when the user asks to create, modify, or design any PDF file. Triggers: PDF, .pdf, document generation."`
|
||||
|
||||
## 3. File Size Awareness
|
||||
|
||||
Skills are loaded into the agent's context window. Every token counts.
|
||||
|
||||
- Individual `.md` files should stay focused and concise
|
||||
- If a reference document exceeds ~500 lines, consider splitting it into parts
|
||||
- Do not embed large data blobs (base64 images, full API responses) in Markdown
|
||||
- Prefer linking to external resources over inlining lengthy content
|
||||
|
||||
## 4. Credential Handling
|
||||
|
||||
The validation script only blocks high-confidence secret patterns (OpenAI keys, AWS keys, JWT tokens). Reviewers should additionally check for:
|
||||
|
||||
- API keys or passwords assigned directly in code (e.g., `api_key = "abc123..."`)
|
||||
- Credentials passed as plain string arguments instead of environment variable reads
|
||||
- Example keys that look realistic enough to be mistaken for real ones
|
||||
- Scripts that lack a clear error message when a required env var is missing
|
||||
|
||||
If a skill involves external APIs, verify that SKILL.md documents the required environment variables.
|
||||
|
||||
## 5. Script Quality
|
||||
|
||||
If the skill includes helper scripts in `scripts/`:
|
||||
|
||||
- Scripts should have a shebang line (`#!/usr/bin/env python3`)
|
||||
- A `requirements.txt` should be present listing all dependencies if external libraries are needed.
|
||||
- Errors should produce clear messages, not raw tracebacks
|
||||
|
||||
## 6. README Sync
|
||||
|
||||
When a new skill is added, both `README.md` and `README_zh.md` should be updated with the new skill in the table. Community-submitted skills should set the Source column to `Community`.
|
||||
53
.claude/skills/pr-review/references/structure-rules.md
Normal file
53
.claude/skills/pr-review/references/structure-rules.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Structure Rules (Hard Validation)
|
||||
|
||||
These rules are enforced by `scripts/validate_skills.py`. PRs that violate ERROR-level rules will not be merged.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
Every skill must follow this layout:
|
||||
|
||||
```
|
||||
skills/<skill-name>/
|
||||
├── SKILL.md # Required
|
||||
├── references/ # Optional
|
||||
│ └── *.md
|
||||
└── scripts/ # Optional
|
||||
├── *.py
|
||||
└── requirements.txt # Required if scripts/ exists
|
||||
```
|
||||
|
||||
- Directory name must be lowercase `kebab-case` (e.g., `gif-sticker-maker`)
|
||||
- `SKILL.md` is the only required file
|
||||
|
||||
## SKILL.md Frontmatter
|
||||
|
||||
The file must begin with a valid YAML frontmatter block enclosed by `---` markers.
|
||||
|
||||
### Required Fields (ERROR if missing)
|
||||
|
||||
| Field | Rule |
|
||||
|-------|------|
|
||||
| `name` | Must exist and exactly match the directory name |
|
||||
| `description` | Must exist and be non-empty |
|
||||
|
||||
### Recommended Fields (WARNING if missing)
|
||||
|
||||
| Field | Rule |
|
||||
|-------|------|
|
||||
| `license` | Should be `MIT` or a license declaration |
|
||||
| `metadata` | Should include `version`, `category`, and optionally `sources` |
|
||||
|
||||
## Secret Scanning
|
||||
|
||||
No file in the skill directory may contain hardcoded secrets. The following high-confidence patterns are scanned:
|
||||
|
||||
- OpenAI-style API keys: `sk-` followed by 20+ alphanumeric characters
|
||||
- AWS Access Key IDs: `AKIA` followed by 16 uppercase alphanumeric characters
|
||||
- Hardcoded Bearer tokens: `Bearer` followed by 50+ characters (typical JWT length)
|
||||
|
||||
Other forms of hardcoded credentials (API key assignments, passwords, etc.) are not automatically blocked but should be flagged during manual review.
|
||||
|
||||
## Validation Severity Levels
|
||||
|
||||
- **ERROR** — PR must not be merged. Must be fixed before approval.
|
||||
- **WARN** — Reviewer should flag. Not a merge blocker but should be addressed.
|
||||
214
.claude/skills/pr-review/scripts/validate_skills.py
Normal file
214
.claude/skills/pr-review/scripts/validate_skills.py
Normal file
@@ -0,0 +1,214 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Validate skill directory structure and SKILL.md frontmatter.
|
||||
|
||||
Zero external dependencies — uses only Python standard library.
|
||||
Exit code 0: all checks passed (warnings are OK).
|
||||
Exit code 1: at least one ERROR found.
|
||||
|
||||
Usage:
|
||||
python validate_skills.py # scan default path (skills/)
|
||||
python validate_skills.py --path some/dir # scan specific directory
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Minimal frontmatter parser
|
||||
# ---------------------------------------------------------------------------
|
||||
def extract_frontmatter(text):
|
||||
"""Extract YAML frontmatter string between --- markers. Returns None if not found."""
|
||||
stripped = text.lstrip("\ufeff")
|
||||
if not stripped.startswith("---"):
|
||||
return None
|
||||
end = stripped.find("---", 3)
|
||||
if end == -1:
|
||||
return None
|
||||
return stripped[3:end]
|
||||
|
||||
|
||||
def parse_frontmatter_fields(fm_text):
|
||||
"""Parse top-level scalar fields from frontmatter text.
|
||||
|
||||
Returns dict of {field_name: value_string}. Nested keys under a mapping
|
||||
are ignored — we only need top-level presence checks.
|
||||
"""
|
||||
fields = {}
|
||||
lines = fm_text.splitlines()
|
||||
i = 0
|
||||
while i < len(lines):
|
||||
line = lines[i]
|
||||
if not line.strip() or line.strip().startswith("#"):
|
||||
i += 1
|
||||
continue
|
||||
m = re.match(r"^([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(.*)", line)
|
||||
if m:
|
||||
key = m.group(1)
|
||||
rest = m.group(2).strip()
|
||||
if rest in ("|", ">", "|+", "|-", ">+", ">-"):
|
||||
block_lines = []
|
||||
i += 1
|
||||
while i < len(lines) and (lines[i].startswith(" ") or lines[i].startswith("\t") or lines[i].strip() == ""):
|
||||
block_lines.append(lines[i])
|
||||
i += 1
|
||||
fields[key] = "\n".join(block_lines).strip()
|
||||
continue
|
||||
elif rest == "":
|
||||
block_lines = []
|
||||
i += 1
|
||||
while i < len(lines) and (lines[i].startswith(" ") or lines[i].startswith("\t")):
|
||||
block_lines.append(lines[i])
|
||||
i += 1
|
||||
fields[key] = "\n".join(block_lines).strip() if block_lines else ""
|
||||
continue
|
||||
else:
|
||||
fields[key] = rest.strip("\"'")
|
||||
i += 1
|
||||
return fields
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Secret scanning
|
||||
# ---------------------------------------------------------------------------
|
||||
SECRET_PATTERNS = [
|
||||
(r"sk-[a-zA-Z0-9]{20,}", "OpenAI-style API key"),
|
||||
(r"AKIA[0-9A-Z]{16}", "AWS access key"),
|
||||
(r"Bearer\s+[a-zA-Z0-9_\-\.]{50,}", "Hardcoded bearer token"),
|
||||
]
|
||||
|
||||
SCAN_EXTENSIONS = {".md", ".py", ".sh", ".js", ".ts", ".json", ".yaml", ".yml", ".txt", ".toml", ".cfg", ".ini"}
|
||||
|
||||
def scan_secrets(filepath):
|
||||
"""Scan a file for hardcoded secrets. Returns list of (line_no, pattern_desc, matched_text)."""
|
||||
try:
|
||||
with open(filepath, "r", encoding="utf-8", errors="ignore") as f:
|
||||
content = f.read()
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
findings = []
|
||||
for line_no, line in enumerate(content.splitlines(), 1):
|
||||
for pattern, desc in SECRET_PATTERNS:
|
||||
for match in re.finditer(pattern, line):
|
||||
findings.append((line_no, desc, match.group(0)[:60]))
|
||||
return findings
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Skill discovery and validation
|
||||
# ---------------------------------------------------------------------------
|
||||
def find_skill_dirs(base_path):
|
||||
"""Find directories that contain a SKILL.md."""
|
||||
skill_dirs = []
|
||||
for root, dirs, files in os.walk(base_path):
|
||||
dirs[:] = [d for d in dirs if not d.startswith(".")]
|
||||
if "SKILL.md" in files:
|
||||
skill_dirs.append(root)
|
||||
return sorted(skill_dirs)
|
||||
|
||||
|
||||
def validate_skill(skill_dir):
|
||||
"""Validate a single skill directory. Returns (errors, warnings) lists."""
|
||||
errors = []
|
||||
warnings = []
|
||||
dir_name = os.path.basename(skill_dir)
|
||||
skill_md = os.path.join(skill_dir, "SKILL.md")
|
||||
|
||||
if not os.path.isfile(skill_md):
|
||||
errors.append("SKILL.md not found")
|
||||
return errors, warnings
|
||||
|
||||
with open(skill_md, "r", encoding="utf-8", errors="ignore") as f:
|
||||
content = f.read()
|
||||
|
||||
fm_text = extract_frontmatter(content)
|
||||
if fm_text is None:
|
||||
errors.append("SKILL.md has no valid YAML frontmatter (missing --- markers)")
|
||||
return errors, warnings
|
||||
|
||||
fields = parse_frontmatter_fields(fm_text)
|
||||
|
||||
name = fields.get("name", "").strip()
|
||||
if not name:
|
||||
errors.append("Missing required field: name")
|
||||
elif name != dir_name:
|
||||
errors.append(f"name '{name}' does not match directory name '{dir_name}'")
|
||||
|
||||
desc = fields.get("description", "").strip()
|
||||
if not desc:
|
||||
errors.append("Missing required field: description")
|
||||
|
||||
if "license" not in fields or not fields["license"].strip():
|
||||
warnings.append("Missing recommended field: license")
|
||||
|
||||
if "metadata" not in fields or not fields["metadata"].strip():
|
||||
warnings.append("Missing recommended field: metadata")
|
||||
|
||||
for root, dirs, files in os.walk(skill_dir):
|
||||
dirs[:] = [d for d in dirs if not d.startswith(".")]
|
||||
for fname in files:
|
||||
_, ext = os.path.splitext(fname)
|
||||
if ext not in SCAN_EXTENSIONS:
|
||||
continue
|
||||
fpath = os.path.join(root, fname)
|
||||
for line_no, sdesc, matched in scan_secrets(fpath):
|
||||
rel = os.path.relpath(fpath, skill_dir)
|
||||
errors.append(f"Potential secret in {rel}:{line_no} ({sdesc}): {matched}...")
|
||||
|
||||
return errors, warnings
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Validate MiniMax Skills structure")
|
||||
parser.add_argument("--path", default="skills", help="Directory to scan (default: skills/)")
|
||||
args = parser.parse_args()
|
||||
|
||||
scan_path = os.path.abspath(args.path)
|
||||
|
||||
skill_dirs = find_skill_dirs(scan_path)
|
||||
if not skill_dirs:
|
||||
print("No skill directories found.")
|
||||
sys.exit(0)
|
||||
|
||||
print(f"\nValidating {len(skill_dirs)} skill(s)...\n")
|
||||
|
||||
total_errors = 0
|
||||
total_warnings = 0
|
||||
|
||||
for sd in skill_dirs:
|
||||
rel = os.path.relpath(sd)
|
||||
errors, warnings = validate_skill(sd)
|
||||
|
||||
if errors:
|
||||
status = "FAIL"
|
||||
elif warnings:
|
||||
status = "WARN"
|
||||
else:
|
||||
status = "PASS"
|
||||
|
||||
print(f" [{status}] {rel}")
|
||||
for msg in errors:
|
||||
print(f" ERROR {msg}")
|
||||
for msg in warnings:
|
||||
print(f" WARN {msg}")
|
||||
|
||||
total_errors += len(errors)
|
||||
total_warnings += len(warnings)
|
||||
|
||||
print()
|
||||
if total_errors:
|
||||
print(f" {total_errors} error(s), {total_warnings} warning(s)")
|
||||
print(" Validation FAILED.\n")
|
||||
sys.exit(1)
|
||||
elif total_warnings:
|
||||
print(f" 0 errors, {total_warnings} warning(s)")
|
||||
print(" Validation PASSED.\n")
|
||||
else:
|
||||
print(" All checks passed.\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
148
CONTRIBUTING.md
Normal file
148
CONTRIBUTING.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Contributing to MiniMax Skills
|
||||
|
||||
Thank you for your interest in contributing! This document covers PR requirements, skill structure specifications, and development guidelines.
|
||||
|
||||
## Pull Request Requirements
|
||||
|
||||
### Title Format
|
||||
|
||||
Use [Conventional Commits](https://www.conventionalcommits.org/) style:
|
||||
|
||||
```
|
||||
feat(<skill-name>): add new skill for X
|
||||
fix(<skill-name>): fix YAML frontmatter parsing error
|
||||
docs: update README skill table
|
||||
chore: add CI workflow
|
||||
```
|
||||
|
||||
Common prefixes: `feat` (new skill or feature), `fix` (bug fix), `docs` (documentation only), `refactor` (restructure without behavior change), `chore` (tooling, CI, config).
|
||||
|
||||
### Scope
|
||||
|
||||
**One PR, one purpose.** Each PR should do exactly one of:
|
||||
|
||||
- Add a new skill
|
||||
- Fix a bug in an existing skill
|
||||
- Improve an existing skill
|
||||
|
||||
Do not bundle unrelated changes together.
|
||||
|
||||
### PR Description
|
||||
|
||||
Every PR must include:
|
||||
|
||||
1. **What** — what you added or changed
|
||||
2. **Why** — the motivation or use case
|
||||
|
||||
## Skill Structure
|
||||
|
||||
### Directory Layout
|
||||
|
||||
```
|
||||
skills/<skill-name>/
|
||||
├── SKILL.md # Required — entry point with YAML frontmatter
|
||||
├── references/ # Optional — detailed reference docs
|
||||
│ └── *.md
|
||||
└── scripts/ # Optional — helper scripts
|
||||
├── *.py
|
||||
└── requirements.txt # Required if scripts/ exists
|
||||
```
|
||||
|
||||
- The directory name is the skill identifier. Use lowercase `kebab-case` (e.g., `gif-sticker-maker`).
|
||||
- `SKILL.md` is the only required file. All other files and directories are optional.
|
||||
|
||||
### SKILL.md Frontmatter
|
||||
|
||||
```yaml
|
||||
---
|
||||
name: my-skill # Required — must match directory name
|
||||
description: > # Required — what this skill does and when to trigger it
|
||||
One-paragraph description. Include trigger conditions so the agent
|
||||
knows when to activate this skill (e.g., "Use when the user asks to
|
||||
create, edit, or format Excel files").
|
||||
license: MIT # Recommended — defaults to MIT if omitted
|
||||
metadata: # Recommended
|
||||
version: "1.0"
|
||||
category: productivity # e.g., frontend, mobile, productivity, creative
|
||||
sources:
|
||||
- Relevant documentation or standards
|
||||
---
|
||||
```
|
||||
|
||||
**Required fields:** `name`, `description`
|
||||
|
||||
- `name` must exactly match the directory name
|
||||
- `description` must clearly state trigger conditions — this is what the agent uses to decide whether to load your skill
|
||||
|
||||
**Recommended fields:** `license`, `metadata` (version, category, sources)
|
||||
|
||||
### No Hardcoded Secrets
|
||||
|
||||
**Never hardcode API keys, tokens, or credentials in any file.**
|
||||
|
||||
If your skill involves calling an external API, instruct the agent to read credentials from environment variables. Follow the pattern established by existing skills:
|
||||
|
||||
```python
|
||||
API_KEY = os.getenv("MINIMAX_API_KEY")
|
||||
if not API_KEY:
|
||||
raise SystemExit("ERROR: MINIMAX_API_KEY is not set.\n export MINIMAX_API_KEY='your-key'")
|
||||
```
|
||||
|
||||
Your `SKILL.md` should document the required environment variables as a prerequisite. See `frontend-dev/references/env-setup.md` for a good example.
|
||||
|
||||
### README Sync
|
||||
|
||||
When adding a new skill, update both `README.md` and `README_zh.md` to include your skill in the skill table. Community-submitted skills should set the Source column to `Community`.
|
||||
|
||||
## Guidelines
|
||||
|
||||
The following are not hard blockers, but PRs that follow these guidelines will be reviewed and merged faster.
|
||||
|
||||
### 1. Skill Scope — Avoid Overlap
|
||||
|
||||
Before creating a new skill, check existing skills for functional overlap. If your feature could be an extension of an existing skill, prefer extending over creating a new one.
|
||||
|
||||
In your PR description, briefly explain how your skill differs from related existing skills. For example, if you are adding a voice synthesis skill, clarify how it relates to the TTS capabilities already in `frontend-dev`.
|
||||
|
||||
### 2. File Size Awareness
|
||||
|
||||
Skills are loaded into the agent's context window. Every token counts.
|
||||
|
||||
- Keep individual `.md` files focused and concise
|
||||
- If a reference document grows very large, split it into logical parts (see `minimax-docx/references/openxml_encyclopedia_part{1,2,3}.md` for an example)
|
||||
- Avoid embedding large data blobs (base64 images, full API response dumps) directly in Markdown files
|
||||
- Prefer linking to external resources over inlining lengthy content
|
||||
|
||||
### 3. Script Standards
|
||||
|
||||
If your skill includes helper scripts (typically in a `scripts/` directory):
|
||||
|
||||
- Include a shebang line (e.g., `#!/usr/bin/env python3`)
|
||||
- Provide a `requirements.txt` listing all dependencies
|
||||
- Handle errors gracefully — fail with a clear message rather than a raw traceback
|
||||
- Document script usage in `SKILL.md` or a reference file
|
||||
|
||||
### 4. Language and Encoding
|
||||
|
||||
- Skill names and file names: ASCII only, `kebab-case`
|
||||
- Markdown content may be in English, Chinese, or bilingual — match the target audience of your skill
|
||||
- All files must be UTF-8 encoded
|
||||
|
||||
## Review Process
|
||||
|
||||
You can run the validation script locally to check part of the requirements before submitting:
|
||||
|
||||
```bash
|
||||
python .claude/skills/pr-review/scripts/validate_skills.py
|
||||
```
|
||||
|
||||
You can also use the [pr-review skill](./.claude/skills/pr-review/SKILL.md) to let your AI coding agent assist with the review.
|
||||
|
||||
1. Submit your PR following the requirements above
|
||||
2. At least one maintainer will review
|
||||
3. Address review feedback
|
||||
4. Once approved, a maintainer will merge
|
||||
|
||||
## Questions?
|
||||
|
||||
Open an issue if you have questions about contributing. We're happy to help.
|
||||
37
README.md
37
README.md
@@ -8,18 +8,18 @@ Development skills for AI coding agents. Plug into your favorite AI coding tool
|
||||
|
||||
## Skills
|
||||
|
||||
| Skill | Description |
|
||||
|---------------------------------------|-------------|
|
||||
| `frontend-dev` | Full-stack frontend development combining premium UI design, cinematic animations (Framer Motion, GSAP), AI-generated media assets via MiniMax API (image, video, audio, music, TTS), persuasive copywriting (AIDA framework), and generative art (p5.js, Three.js, Canvas). Tech stack: React / Next.js, Tailwind CSS. |
|
||||
| `fullstack-dev` | Full-stack backend architecture and frontend-backend integration. REST API design, auth flows (JWT, session, OAuth), real-time features (SSE, WebSocket), database integration (SQL / NoSQL), production hardening, and release checklist. Guided workflow: requirements → architecture → implementation. |
|
||||
| `android-native-dev` | Android native application development with Material Design 3. Kotlin / Jetpack Compose, adaptive layouts, Gradle configuration, accessibility (WCAG), build troubleshooting, performance optimization, and motion system. |
|
||||
| `ios-application-dev` | iOS application development guide covering UIKit, SnapKit, and SwiftUI. Touch targets, safe areas, navigation patterns, Dynamic Type, Dark Mode, accessibility, collection views, and Apple HIG compliance. |
|
||||
| `shader-dev` | Comprehensive GLSL shader techniques for creating stunning visual effects — ray marching, SDF modeling, fluid simulation, particle systems, procedural generation, lighting, post-processing, and more. ShaderToy-compatible. |
|
||||
| `gif-sticker-maker` | Convert photos (people, pets, objects, logos) into 4 animated GIF stickers with captions. Funko Pop / Pop Mart style, powered by MiniMax Image & Video Generation API. |
|
||||
| `minimax-pdf` | Generate, fill, and reformat PDF documents with a token-based design system. CREATE polished PDFs from scratch (15 cover styles), FILL existing form fields, or REFORMAT documents into a new design. Print-ready output with typography and color derived from document type. |
|
||||
| `pptx-generator` | Generate, edit, and read PowerPoint presentations. Create from scratch with PptxGenJS (cover, TOC, content, section divider, summary slides), edit existing PPTX via XML workflows, or extract text with markitdown. |
|
||||
| `minimax-xlsx` | Open, create, read, analyze, edit, or validate Excel/spreadsheet files (.xlsx, .xlsm, .csv, .tsv). Covers creating new xlsx from scratch via XML templates, reading and analyzing with pandas, editing existing files with zero format loss, formula recalculation, validation, and professional financial formatting. |
|
||||
| `minimax-docx` | Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET). Three pipelines: create new documents from scratch, fill/edit content in existing documents, or apply template formatting with XSD validation gate-check. |
|
||||
| Skill | Description | Source |
|
||||
|---------------------------------------|-------------|--------|
|
||||
| `frontend-dev` | Full-stack frontend development combining premium UI design, cinematic animations (Framer Motion, GSAP), AI-generated media assets via MiniMax API (image, video, audio, music, TTS), persuasive copywriting (AIDA framework), and generative art (p5.js, Three.js, Canvas). Tech stack: React / Next.js, Tailwind CSS. | Official |
|
||||
| `fullstack-dev` | Full-stack backend architecture and frontend-backend integration. REST API design, auth flows (JWT, session, OAuth), real-time features (SSE, WebSocket), database integration (SQL / NoSQL), production hardening, and release checklist. Guided workflow: requirements → architecture → implementation. | Official |
|
||||
| `android-native-dev` | Android native application development with Material Design 3. Kotlin / Jetpack Compose, adaptive layouts, Gradle configuration, accessibility (WCAG), build troubleshooting, performance optimization, and motion system. | Official |
|
||||
| `ios-application-dev` | iOS application development guide covering UIKit, SnapKit, and SwiftUI. Touch targets, safe areas, navigation patterns, Dynamic Type, Dark Mode, accessibility, collection views, and Apple HIG compliance. | Official |
|
||||
| `shader-dev` | Comprehensive GLSL shader techniques for creating stunning visual effects — ray marching, SDF modeling, fluid simulation, particle systems, procedural generation, lighting, post-processing, and more. ShaderToy-compatible. | Official |
|
||||
| `gif-sticker-maker` | Convert photos (people, pets, objects, logos) into 4 animated GIF stickers with captions. Funko Pop / Pop Mart style, powered by MiniMax Image & Video Generation API. | Official |
|
||||
| `minimax-pdf` | Generate, fill, and reformat PDF documents with a token-based design system. CREATE polished PDFs from scratch (15 cover styles), FILL existing form fields, or REFORMAT documents into a new design. Print-ready output with typography and color derived from document type. | Official |
|
||||
| `pptx-generator` | Generate, edit, and read PowerPoint presentations. Create from scratch with PptxGenJS (cover, TOC, content, section divider, summary slides), edit existing PPTX via XML workflows, or extract text with markitdown. | Official |
|
||||
| `minimax-xlsx` | Open, create, read, analyze, edit, or validate Excel/spreadsheet files (.xlsx, .xlsm, .csv, .tsv). Covers creating new xlsx from scratch via XML templates, reading and analyzing with pandas, editing existing files with zero format loss, formula recalculation, validation, and professional financial formatting. | Official |
|
||||
| `minimax-docx` | Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET). Three pipelines: create new documents from scratch, fill/edit content in existing documents, or apply template formatting with XSD validation gate-check. | Official |
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -60,6 +60,19 @@ ln -s ~/.minimax-skills/skills/* ~/.config/opencode/skills/
|
||||
|
||||
Restart OpenCode to discover the skills. See [`.opencode/INSTALL.md`](.opencode/INSTALL.md) for details.
|
||||
|
||||
## Contributing
|
||||
|
||||
We welcome contributions! Before submitting a PR, please read:
|
||||
|
||||
- [CONTRIBUTING.md](./CONTRIBUTING.md) — PR format, skill structure requirements, and development guidelines
|
||||
- [PR Review Rules](./.claude/skills/pr-review/SKILL.md) — automated validation checks and quality review criteria
|
||||
|
||||
You can run the validation script locally before submitting:
|
||||
|
||||
```bash
|
||||
python .claude/skills/pr-review/scripts/validate_skills.py
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](./LICENSE)
|
||||
|
||||
37
README_zh.md
37
README_zh.md
@@ -8,18 +8,18 @@
|
||||
|
||||
## 技能列表
|
||||
|
||||
| 技能 | 简介 |
|
||||
|---------------------------------------|------|
|
||||
| `frontend-dev` | 全栈前端开发,融合高级 UI 设计、电影级动画(Framer Motion、GSAP)、通过 MiniMax API 生成媒体资源(图片、视频、音频、音乐、TTS)、基于 AIDA 框架的说服力文案、生成艺术(p5.js、Three.js、Canvas)。技术栈:React / Next.js、Tailwind CSS。 |
|
||||
| `fullstack-dev` | 全栈后端架构与前后端集成。REST API 设计、认证流程(JWT、Session、OAuth)、实时功能(SSE、WebSocket)、数据库集成(SQL / NoSQL)、生产环境加固与发布清单。引导式工作流:需求收集 → 架构决策 → 实现。 |
|
||||
| `android-native-dev` | 基于 Material Design 3 的 Android 原生应用开发。Kotlin / Jetpack Compose、自适应布局、Gradle 配置、无障碍(WCAG)、构建问题排查、性能优化与动效系统。 |
|
||||
| `ios-application-dev` | iOS 应用开发指南,涵盖 UIKit、SnapKit 和 SwiftUI。触控目标、安全区域、导航模式、Dynamic Type、深色模式、无障碍、集合视图,符合 Apple HIG 规范。 |
|
||||
| `shader-dev` | 全面的 GLSL 着色器技术,用于创建惊艳的视觉效果 — 光线行进、SDF 建模、流体模拟、粒子系统、程序化生成、光照、后处理等。兼容 ShaderToy。 |
|
||||
| `gif-sticker-maker` | 将照片(人物、宠物、物品、Logo)转换为 4 张带字幕的动画 GIF 贴纸。Funko Pop / Pop Mart 盲盒风格,基于 MiniMax 图片与视频生成 API。 |
|
||||
| `minimax-pdf` | 基于 token 化设计系统生成、填写和重排 PDF 文档。支持三种模式:CREATE(从零生成,15 种封面风格)、FILL(填写现有表单字段)、REFORMAT(将已有文档重排为新设计)。排版与配色由文档类型自动推导,输出即可打印。 |
|
||||
| `pptx-generator` | 生成、编辑和读取 PowerPoint 演示文稿。支持用 PptxGenJS 从零创建(封面、目录、内容、分节页、总结页),通过 XML 工作流编辑现有 PPTX,或用 markitdown 提取文本。 |
|
||||
| `minimax-xlsx` | 打开、创建、读取、分析、编辑或验证 Excel/电子表格文件(.xlsx、.xlsm、.csv、.tsv)。支持通过 XML 模板从零创建 xlsx、使用 pandas 读取分析、零格式损失编辑现有文件、公式重算与验证、专业财务格式化。 |
|
||||
| `minimax-docx` | 基于 OpenXML SDK(.NET)的专业 DOCX 文档创建、编辑与排版。三条流水线:从零创建新文档、填写/编辑现有文档内容、应用模板格式并通过 XSD 验证门控检查。 |
|
||||
| 技能 | 简介 | 来源 |
|
||||
|---------------------------------------|------|------|
|
||||
| `frontend-dev` | 全栈前端开发,融合高级 UI 设计、电影级动画(Framer Motion、GSAP)、通过 MiniMax API 生成媒体资源(图片、视频、音频、音乐、TTS)、基于 AIDA 框架的说服力文案、生成艺术(p5.js、Three.js、Canvas)。技术栈:React / Next.js、Tailwind CSS。 | Official |
|
||||
| `fullstack-dev` | 全栈后端架构与前后端集成。REST API 设计、认证流程(JWT、Session、OAuth)、实时功能(SSE、WebSocket)、数据库集成(SQL / NoSQL)、生产环境加固与发布清单。引导式工作流:需求收集 → 架构决策 → 实现。 | Official |
|
||||
| `android-native-dev` | 基于 Material Design 3 的 Android 原生应用开发。Kotlin / Jetpack Compose、自适应布局、Gradle 配置、无障碍(WCAG)、构建问题排查、性能优化与动效系统。 | Official |
|
||||
| `ios-application-dev` | iOS 应用开发指南,涵盖 UIKit、SnapKit 和 SwiftUI。触控目标、安全区域、导航模式、Dynamic Type、深色模式、无障碍、集合视图,符合 Apple HIG 规范。 | Official |
|
||||
| `shader-dev` | 全面的 GLSL 着色器技术,用于创建惊艳的视觉效果 — 光线行进、SDF 建模、流体模拟、粒子系统、程序化生成、光照、后处理等。兼容 ShaderToy。 | Official |
|
||||
| `gif-sticker-maker` | 将照片(人物、宠物、物品、Logo)转换为 4 张带字幕的动画 GIF 贴纸。Funko Pop / Pop Mart 盲盒风格,基于 MiniMax 图片与视频生成 API。 | Official |
|
||||
| `minimax-pdf` | 基于 token 化设计系统生成、填写和重排 PDF 文档。支持三种模式:CREATE(从零生成,15 种封面风格)、FILL(填写现有表单字段)、REFORMAT(将已有文档重排为新设计)。排版与配色由文档类型自动推导,输出即可打印。 | Official |
|
||||
| `pptx-generator` | 生成、编辑和读取 PowerPoint 演示文稿。支持用 PptxGenJS 从零创建(封面、目录、内容、分节页、总结页),通过 XML 工作流编辑现有 PPTX,或用 markitdown 提取文本。 | Official |
|
||||
| `minimax-xlsx` | 打开、创建、读取、分析、编辑或验证 Excel/电子表格文件(.xlsx、.xlsm、.csv、.tsv)。支持通过 XML 模板从零创建 xlsx、使用 pandas 读取分析、零格式损失编辑现有文件、公式重算与验证、专业财务格式化。 | Official |
|
||||
| `minimax-docx` | 基于 OpenXML SDK(.NET)的专业 DOCX 文档创建、编辑与排版。三条流水线:从零创建新文档、填写/编辑现有文档内容、应用模板格式并通过 XSD 验证门控检查。 | Official |
|
||||
|
||||
## 安装
|
||||
|
||||
@@ -60,6 +60,19 @@ ln -s ~/.minimax-skills/skills/* ~/.config/opencode/skills/
|
||||
|
||||
重启 OpenCode 以发现技能。详见 [`.opencode/INSTALL.md`](.opencode/INSTALL.md)。
|
||||
|
||||
## 贡献
|
||||
|
||||
欢迎贡献!提交 PR 前请阅读:
|
||||
|
||||
- [CONTRIBUTING.md](./CONTRIBUTING.md) — PR 格式、Skill 结构要求与开发指南
|
||||
- [PR Review 规则](./.claude/skills/pr-review/SKILL.md) — 自动化校验检查与质量审核标准
|
||||
|
||||
提交前可在本地运行校验脚本:
|
||||
|
||||
```bash
|
||||
python .claude/skills/pr-review/scripts/validate_skills.py
|
||||
```
|
||||
|
||||
## 许可证
|
||||
|
||||
[MIT](./LICENSE)
|
||||
|
||||
Reference in New Issue
Block a user