Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计提醒

release-notes发行说明

Agent Skill

release-notes 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

808

周安装

34

GitHub Stars

7,521

下载量

283
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:release-notes(发行说明)
来源仓库:https://github.com/anyproto/anytype-ts
仓库路径:skills/release-notes
安装命令:
npx skills add https://github.com/anyproto/anytype-ts --skill release-notes
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/anyproto/anytype-ts --skill release-notes

简介

release-notes 用于生成和更新软件发行说明文档。

  • 支持从 git 分支变更或 Linear issue 提取内容构建发布日志。
  • 输出格式遵循 src/ts/docs/help/whatsNew.ts 的结构规范。
  • 需确认文件写入权限,避免破坏现有高亮样式和区块定义。
  • 建议在合并 PR 前运行,确保只包含已生效的功能变更记录。

SKILL.md

Release Notes Skill

Write and update release notes in src/ts/docs/help/whatsNew.ts. This skill can generate release note content from conversation context, git branch changes, or Linear issues.

Document Structure

The file src/ts/docs/help/whatsNew.ts exports a function that returns an array of block elements. Each release is a "page" with this structure:

// Helper definitions at top of file (lines 1-24)
const hl = (t: string) => `<span class="highlight">${t}</span>`;
const text = (t: string) => block(I.TextStyle.Paragraph, t);
const h1 = (t: string) => block(I.TextStyle.Header1, t);
const h2 = (t: string) => block(I.TextStyle.Header2, t);
const bullet = (t: string) => block(I.TextStyle.Bulleted, t);
const img = (src: string) => text(`<img src="..." />`);
const link = (url: string, t: string) => `<a href="${url}">${t}</a>`;
const div = () => ({ type: I.BlockType.Div, style: I.DivStyle.Dot });

// Release pages start after helpers (~line 25)
return [
    { type: I.BlockType.IconPage, icon: '...' },

    title(`Catchy Release Title`),           // PAGE START
    h4(`<span>Release 0.XX.0</span>`),
    text(''),
    text('Intro paragraph...'),
    text(''),

    // Big Feature Sections (h2)
    h2(`Feature Name`),
    text(`Feature description...`),
    img(`XX/1.png`),
    text(``),

    // Quality of Life Improvements
    h2(`Quality of Life Improvements`),
    text(``),
    text(`<b>Improvement Name</b>`),
    text(`Description...`),
    text(``),

    // Bug Fixes
    h2(`Bug Fixes`),
    text(``),
    text(`<b>Category Name</b>`),
    bullet(`Fix description. Thanks to @${link('url', 'user')}!`),
    text(``),

    div(),                                   // PAGE END
    // --------------------------------------------//

    // Next release page...
];

Multi-Part Releases

A release may be split across multiple Linear root issues (parts), e.g.:

  • JS-8571 "Release 18 | 0.54.0 | Desktop | Part 1" — contains Features, Design, Tech
  • JS-8672 "Release 18 | 0.54.0 | Desktop | Part 2" — contains Bugs, Quality

Commands that accept issue IDs (all, from-parent, docx) support multiple IDs. When multiple roots are provided, fetch each one and merge their children by type (features, QoL, bugs). Each part's items keep their relative Linear ordering; Part 1 items come before Part 2.

Exclusion Rules

When processing issues from Linear (via from-parent, all, docx), skip any issue that matches:

  1. Analytics-only — labels contain only 📈 analytics (no bug/quality/feature labels)
  2. Internal — labels contain only 🖌️ design or ⚙️ tech (no user-facing labels)
  3. Alpha-version references — the issue title or description contains a version string with an -alpha suffix (e.g., 0.53.28-alpha, 0.50.29-alpha). These issues were reported against pre-release builds and were already fixed before the public release; including them would confuse users who never saw the bug. Detection: match the regex \d+\.\d+\.\d+-alpha in title or description fields.

Commands

Parse the user's command to determine the action:

/release-notes feature "Title" [context]

Add a big feature (h2 section) to the current release.

Insertion point: Before h2(\Quality of Life Improvements)

Format:

h2(`Feature Title`),
text(`Description paragraph 1.`),
text(`Description paragraph 2 if needed.`),
text(``),

/release-notes qol "Title" [context]

Add a Quality of Life improvement.

Insertion point: After h2(\Quality of Life Improvements), beforeh2(Bug Fixes)

Format:

text(`<b>Improvement Title</b>`),
text(`Description. Can mention shortcuts like ${hl('Cmd+V')}.`),
text(``),

Ordering: When adding multiple QoL items, sort them by impact — largest first, smallest last:

  1. Major new capabilities — items that could almost be standalone features (e.g., Toggle Headings, Pinned Tabs, Spell Checking in Chat)
  2. New settings and preferences — user-facing options that change workflows (e.g., File Block Default Style, Click to Edit Title toggle)
  3. Meaningful workflow improvements — noticeably better experiences (e.g., full-text search in Collections, Jump to Message in Chat)
  4. Small but welcome polish — minor UX wins (e.g., Fullscreen preview click-to-close, URL properties openable in header)
  5. Micro-fixes that feel like QoL — tiny quality bumps (e.g., input field clearing, option sorting, clipboard edge cases)

Community-credited items can appear at any tier based on their impact — don't group them separately.

/release-notes fix "Category" [context]

Add a bug fix under the specified category.

Insertion point: Under h2(\Bug Fixes), find or create the category

Format:

text(`<b>Category Name</b>`),  // Only if category doesn't exist
bullet(`Fix description. Thanks to @${link('https://community.anytype.io/t/XXXXX', 'username')}!`),

Existing categories:

  • Chat & Messaging
  • Editor & Blocks
  • UI & Rendering
  • Objects & Views
  • Queries & Views
  • Widget Sidebar
  • Navigation & Window Management
  • Keyboard & Shortcuts
  • Modal Window Mode
  • Miscellaneous

/release-notes from-parent JS-XXXX

Batch create entries from a Linear parent issue and its sub-issues.

  1. Fetch parent issue and all sub-issues from Linear API
  2. For each sub-issue, determine type from labels:

- bug label → fix - feature label → feature - improvement label → qol

  1. Create appropriate entries for each
  2. If parent is a big feature, use its title for h2 section

/release-notes new "0.XX.0" "Title"

Create a new release page at the top of the file.

Insert after: The IconPage block and before the first title() call

Format:

title(`Catchy Title`),
h4(`<span>Release 0.XX.0</span>`),
text(''),
text('Intro paragraph describing the release highlights.'),
text(''),

h2(`Quality of Life Improvements`),
text(``),

h2(`Bug Fixes`),
text(``),

div(),
// --------------------------------------------//

/release-notes all JS-XXXX [JS-YYYY...]

Generate a complete release notes page from one or more root Linear issues (typically sprint/milestone issues). When a release is split across multiple parts, pass all root issue IDs — their children are merged by type.

How it works:

  1. Fetch the root issue and all its direct children from Linear API:
curl -s -X POST "https://api.linear.app/graphql" \
  --header "Content-Type: application/json" \
  --header "Authorization: $(printenv LINEAR_API_KEY)" \
  --data '{"query":"query{issue(id:\"JS-XXXX\"){title description labels{nodes{name}}children(first:250){nodes{identifier title description state{name}labels{nodes{name}}children(first:250){nodes{identifier title description state{name}labels{nodes{name}}}}}}}}"}' | jq .
  1. Classify each child by its labels:
Child labelsClassificationAction
📁 folder + 🐛 bugBug folderProcess like from-parent: fetch grandchildren, categorize into bug fix categories, write bullet entries
📁 folder + 👌 qualityQoL folderProcess like from-parent: fetch grandchildren, write QoL entries. Items with 💫 feature label become h2 features instead
💫 feature (no folder)Standalone featureWrite as h2 feature section
📈 analytics onlyAnalytics (internal)Skip entirely — not user-facing
  1. Create the release page structure (if not already present):

- new page with version and title - All h2 feature sections - All QoL entries under h2('Quality of Life Improvements') - All bug fixes under h2('Bug Fixes') organized by category - Intro paragraph via intro

  1. For grandchildren (sub-issues of folder issues), apply the same label-based rules:

- 🐛 bug → bug fix bullet - 👌 quality → QoL entry - 💫 feature → h2 feature or QoL depending on scope - 📈 analytics only → skip - No relevant label → infer from parent folder type - 👨‍💻 feedback → community-reported, extract username and link from description

  1. Order of operations:

1. Create new release page (if needed) 2. Insert features (h2 sections) 3. Insert QoL improvements 4. Insert bug fixes by category 5. Write intro paragraph

Community credits: When a sub-issue has 👨‍💻 feedback label, look for community links in the description (https://community.anytype.io/t/XXXXX) and extract the reporter's name. Add Thanks to @${link('url', 'name')}! to the entry.

Example:

User: /release-notes all JS-8500

Root issue "Sprint 18" has children:
  JS-8574 "Bugs | 18"         [📁 folder, 🐛 bug]     → process 81 bug sub-issues
  JS-8573 "Quality | 18"      [📁 folder, 👌 quality]  → process 25 QoL sub-issues
  JS-292  "[epic] Tabs"        [💫 feature]             → h2 feature
  JS-4551 "[epic] Filters"    [💫 feature]             → h2 feature
  JS-8725 "Chat Search"       [💫 feature]             → h2 feature
  JS-8703 "Transfer Ownership" [💫 feature]            → h2 feature

Result: Complete release page with features, QoL, bug fixes, and intro.

/release-notes docx JS-XXXX [JS-YYYY...]

Export the current release notes as a .docx file with hyperlinks to Linear issues. Items follow Linear's ordering (the order children appear under their parent issue), not the category-based grouping from whatsNew.ts.

Accepts one or more root issue IDs. When a release is split across multiple Linear issues ("parts"), pass all of them — their children are merged by type (features, QoL, bugs) and each part's items keep their relative order within the merged section.

How it works:

  1. Fetch each root issue and its full children tree from Linear (using first:250):
curl -s -X POST "https://api.linear.app/graphql" \
  --header "Content-Type: application/json" \
  --header "Authorization: $(printenv LINEAR_API_KEY)" \
  --data '{"query":"query{issue(id:\"JS-XXXX\"){title description labels{nodes{name}}children(first:250){nodes{identifier title description state{name}labels{nodes{name}}children(first:250){nodes{identifier title description state{name}labels{nodes{name}}}}}}}}"}' | jq .
  1. Collect and classify children from all root issues using these rules:
Child labelsClassificationAction
💫 feature (with or without 📁 folder)FeaturesIf folder: use grandchildren as individual features. If standalone: single feature entry
📁 folder + 👌 qualityQoL folderGrandchildren → QoL items. Items with 💫 feature label become features instead
🐛 bug (with or without 📁 folder)Bug folderGrandchildren → Bug Fixes
📈 analytics onlyAnalyticsSkip
🖌️ design / ⚙️ tech onlyInternalSkip — not user-facing

When merging across parts, append Part 2's items after Part 1's items within each section (preserving each part's internal ordering).

  1. Read the current release page from whatsNew.ts to get the user-facing note text for each entry.
  2. Match each Linear issue to its whatsNew.ts entry. Matching strategy:

- For features: match by h2 title keywords (e.g., JS-292 "Tabs" → h2(\Tabs)) - For QoL items: match by bold title keywords (e.g., "Toggle Headings" → text(\Toggle Headings)) and collect the description paragraph(s) that follow - For bug fixes: match by community link URL (community.anytype.io/t/XXXXX), by keywords from the issue title, or by position within the same category - If no match is found, use the Linear issue title as fallback text, formatted as **Title** – <Linear title>.

  1. Build a JSON data file with this structure, preserving Linear's child ordering within each section:
{
    "version": "0.54.0",
    "title": "Focus & Flow",
    "sections": [
        {
            "heading": "Features",
            "items": [
                {"id": "JS-292", "text": "Note text from whatsNew.ts (cleaned of HTML)."},
                {"id": "JS-4551", "text": "..."}
            ]
        },
        {
            "heading": "Quality of Life Improvements",
            "items": [
                {"id": "JS-XXXX", "text": "**Toggle Headings** – H1, H2, H3 can now be collapsible toggles..."}
            ]
        },
        {
            "heading": "Bug Fixes",
            "items": [
                {"id": "JS-8845", "text": "Action icons now look consistent across light and dark modes."}
            ]
        }
    ]
}
  1. Text cleanup rules when extracting from whatsNew.ts:

- Strip HTML tags: <span class="highlight">X</span>X, <b>X</b>**X**, <i>X</i>X - Strip <a href="...">text</a>text - Resolve template expressions: ${hl('Cmd+F')}Cmd+F, ${link('url', 'name')}name - For QoL items, combine the bold title and description paragraph(s) into one text string: **Title** – Description text. - For features, combine all text paragraphs into one string

  1. Write the JSON to a temp file, then run the generator script:
python3 .claude/skills/release-notes/generate_docx.py /tmp/release_data.json <output_path>

Output location: Save the.docx in the project root as release-<version>.docx (e.g., release-0.54.0.docx).

Item ordering: Within each section, items MUST appear in the same order as they are listed under their parent issue in Linear. This is the order returned by the Linear API's children field. Do NOT reorder by category, alphabet, or any other criterion. When multiple parts are merged, Part 1 items come first, then Part 2, etc.

Example (multi-part):

User: /release-notes docx JS-8571 JS-8672

1. Fetch JS-8571 (Part 1) children:
   - JS-8575 [💫 + 📁] → Features folder → 4 feature grandchildren
   - JS-8630 [🖌️ + 📁] → Design folder → skip (internal)
   - JS-8594 [⚙️ + 📁] → Tech folder → skip (internal)

2. Fetch JS-8672 (Part 2) children:
   - JS-8573 [👌 + 📁] → QoL folder → 33 grandchildren → QoL items
   - JS-8574 [🐛]       → Bug folder → 82 grandchildren → Bug Fixes

3. Merge: Features from Part 1, QoL from Part 2, Bugs from Part 2
4. Read whatsNew.ts, match each issue to its note text
5. Write JSON with items in Linear order
6. Run generate_docx.py → release-0.54.0.docx
7. Report: "Generated release-0.54.0.docx with 4 features, 33 QoL items, 82 bug fixes."

/release-notes intro

Write or update the intro paragraph for the current release.

How it works:

  1. Read the current release page in whatsNew.ts
  2. Identify all h2 feature sections
  3. Write 2–3 sentences that highlight the essence of the main features
  4. Replace the empty intro text('') lines between h4(...) and the first h2(...)

Insertion point: The text('') lines between the h4(<span>Release...</span>) and the first content section

Format:

text('Intro sentence one. Intro sentence two.'),
text('Intro sentence three if needed.'),

Style:

  • 2–3 sentences, concise and enthusiastic but not over the top
  • Mention the biggest features by name
  • Focus on what users can now do, not implementation details
  • Match the tone of previous release intros in the file

/release-notes show

Display the current release notes (first page in the file).

Context Resolution

When user provides a context hint instead of explicit text:

today or session

  1. Analyze the current conversation history
  2. Identify what features/changes were discussed or implemented
  3. Extract key benefits for users
  4. Write description in release notes style

branch

  1. Run git log main..HEAD --oneline to see commits
  2. Run git diff main --stat to see changed files
  3. Analyze branch name for context (e.g., feature/JS-8826-advanced-filters)
  4. Generate description based on the changes

JS-XXXX (Linear issue)

  1. Fetch issue from Linear API using:
curl -s -X POST "https://api.linear.app/graphql" \
  --header "Content-Type: application/json" \
  --header "Authorization: $(printenv LINEAR_API_KEY)" \
  --data '{"query":"query{issue(id:\"JS-XXXX\"){title description state{name}priority labels{nodes{name}}}}"}' | jq .
  1. Extract title and description
  2. Use labels to determine category if not specified
  3. Format for release notes

Explicit text

Use the provided text directly, but ensure it follows the style guidelines.

Writing Style Guidelines

Tone

  • Concise but informative
  • Explain WHAT changed AND WHY it matters to users
  • Active voice: "You can now..." not "It is now possible to..."
  • Focus on user benefits, not implementation details

Feature Titles

Action-oriented, clear names:

  • "Direct Channels"
  • "Advanced Filters"
  • "Manual Sorting in Queries"
  • "Updated Navigation"

Descriptions

  • Start with the user benefit or problem solved
  • Mention keyboard shortcuts using ${hl('Cmd+V')} syntax
  • Keep paragraphs focused on single ideas
  • Use <b>bold</b> for emphasis within text

Community Credits

When fixing user-reported issues:

bullet(`Fix description. Thanks to @${link('https://community.anytype.io/t/12345', 'username')}!`)

Punctuation

  • Use n-dash (–) not m-dash (—) for parenthetical asides and ranges

What to Avoid

  • Technical jargon (API, refactor, component names)
  • Implementation details (file names, function names)
  • Passive voice
  • Vague descriptions ("improved performance")

Workflow

  1. Parse command - Determine action type and arguments
  2. Resolve context - Generate content from conversation/branch/Linear/explicit
  3. Read whatsNew.ts - Find the current release and insertion point
  4. Format entry - Apply correct TypeScript syntax and style
  5. Insert entry - Edit the file at the correct location
  6. Confirm - Show the user what was added

Examples

Adding a feature from session context

User: /release-notes feature "Advanced Filters" today

Action:
1. Review conversation - user worked on advanced filters with AND/OR logic
2. Find insertion point before h2(`Quality of Life Improvements`)
3. Insert:
   h2(`Advanced Filters`),
   text(`Need more control over what shows in your Views? You can now create Advanced Filters that combine multiple conditions using AND or OR logic. Group related rules together to build precise queries – like finding all tasks that are either high priority or due this week.`),
   text(``),

Adding a QoL improvement

User: /release-notes qol "Filter Bar Redesign" branch

Action:
1. Analyze git changes on current branch
2. Find insertion point after h2(`Quality of Life Improvements`)
3. Insert:
   text(`<b>Filter Bar Redesign</b>`),
   text(`Filters and Sorts in Queries and Collections got a fresh look. Active filters now appear in a dedicated bar above your View, showing the property name, condition, and value at a glance.`),
   text(``),

Adding a bug fix

User: /release-notes fix "Objects & Views" "Filter items now show correct active state"

Action:
1. Find h2(`Bug Fixes`)
2. Find text(`<b>Objects & Views</b>`) category (or create if missing)
3. Insert bullet after category header:
   bullet(`Filter items now show correct active state.`),

Writing the release intro

User: /release-notes intro

Action:
1. Read whatsNew.ts — find h2 feature sections: "Tabs", "Advanced Filters", "Chat Search", "Transfer Channel Ownership"
2. Write 2–3 sentences covering the highlights
3. Replace empty text('') lines after h4(`<span>Release 0.54.0</span>`):
   text('This release brings Tabs to Anytype — open multiple Objects side by side and pin the ones you use most. Advanced Filters let you combine conditions with AND/OR logic, Chat Search helps you find any message instantly, and Channel Owners can now transfer ownership to another member.'),

Generating all release notes from a root issue

User: /release-notes all JS-8500

Action:
1. Fetch root issue JS-8500 — "Sprint 18" with 6 children
2. Classify children:
   - JS-8574 [📁 + 🐛] → bug folder, fetch 81 grandchildren → bug fixes
   - JS-8573 [📁 + 👌] → QoL folder, fetch 28 grandchildren → QoL entries + features
   - JS-292  [💫]       → standalone feature "Tabs"
   - JS-4551 [💫]       → standalone feature "Advanced Filters"
   - JS-8725 [💫]       → standalone feature "Chat Search"
   - JS-8703 [💫]       → standalone feature "Transfer Ownership"
3. Create new release page with `new "0.54.0" "Focus & Flow"`
4. Insert 4 feature h2 sections
5. Insert 25 QoL entries
6. Insert 80 bug fixes across categories
7. Write intro paragraph

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

33.22%
按下载量换算94

Claude

31.54%
按下载量换算89

Cursor

16.86%
按下载量换算48

Gemini CLI

8.44%
按下载量换算24

安全审计

Gen Agent Trust Hub

通过

Socket

可疑

Snyk

可疑

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills