diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md
new file mode 100644
index 00000000..1d227c85
--- /dev/null
+++ b/.claude/skills/release/SKILL.md
@@ -0,0 +1,27 @@
+---
+name: release
+description: Create a GitHub release for cloudflare_temp_email project. Use when the user asks to create a release, publish a version, tag a release, or make a new release. Reads CHANGELOG.md for release content, collects merged PRs via `gh` CLI, and creates a properly formatted GitHub release.
+---
+
+# Release Workflow
+
+## Steps
+
+1. **Read version**: Get current version from `worker/package.json` (`"version"` field) and the latest release tag via `gh release list --limit 1`.
+2. **Read CHANGELOG**: Read `CHANGELOG.md` for the current version section (e.g. `## v1.4.0(main)`). Verify content matches `CHANGELOG_EN.md`. If entries are missing from either file, notify the user.
+3. **Collect PRs**: Get the last release tag timestamp, then filter merged PRs by time:
+ ```bash
+ TAG="$(gh release list --limit 1 --json tagName --jq '.[0].tagName')"
+ SINCE="$(git show -s --format=%cI "$TAG")"
+ gh pr list --state merged --search "is:pr is:merged merged:>$SINCE base:main" --json number,title,author --limit 200
+ ```
+ Sort by PR number ascending.
+4. **Compose release body**: Follow the template in [references/release-template.md](references/release-template.md). Key rules:
+ - Copy changelog sections verbatim (Features, Bug Fixes, Testing, Improvements). Omit empty sections.
+ - Wrap PRs list in `PRs
... `.
+ - Always include the cache-clearing discussion link.
+ - End with `**Full Changelog**` comparison link.
+5. **Create release**:
+ - Write body to a temp file (e.g. `/tmp/release-notes.md`)
+ - Run: `gh release create vX.Y.Z --title "vX.Y.Z" --notes-file /tmp/release-notes.md --target main`
+6. **Verify**: Confirm the release URL and ask the user to review.
diff --git a/.claude/skills/release/references/release-template.md b/.claude/skills/release/references/release-template.md
new file mode 100644
index 00000000..57f1b535
--- /dev/null
+++ b/.claude/skills/release/references/release-template.md
@@ -0,0 +1,42 @@
+# Release Notes Template
+
+Release notes body 使用以下格式,内容从 CHANGELOG.md 的对应版本段落提取:
+
+```markdown
+## What's Changed
+
+### Features
+
+- feat: |模块| 描述
+
+### Bug Fixes
+
+- fix: |模块| 描述
+
+### Testing
+
+- test: |模块| 描述
+
+### Improvements
+
+- style/refactor/perf/docs: |模块| 描述
+
+### [更新或者部署网页不生效请如图勾选清理缓存](https://github.com/dreamhunter2333/cloudflare_temp_email/discussions/487)
+
+
+PRs
+
+* PR title by @author in https://github.com/dreamhunter2333/cloudflare_temp_email/pull/NUMBER
+
+
+
+**Full Changelog**: https://github.com/dreamhunter2333/cloudflare_temp_email/compare/vOLD...vNEW
+```
+
+## Notes
+
+- Sections without entries should be omitted
+- PRs section uses `` to collapse by default
+- PRs are sorted by PR number ascending
+- The cache clearing discussion link is always included
+- Release title and tag use format `vX.Y.Z`