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

extension-creator扩展创建者

Agent Skill

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

总安装

461

周安装

19

GitHub Stars

1,231

下载量

150
CodexClaudeCursorGemini CLI

安装说明

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

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

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

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

命令行安装

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

skills.shnpx skills
npx skills add https://github.com/hotovo/aider-desk --skill extension-creator

简介

extension-creator 用于创建 AiderDesk 扩展的事件处理器与命令工具。

  • 支持实现 Extension 接口、设置元数据与生成文档自动化。
  • 需优先确定安装目标(本地目录或远程仓库)再执行创建工作流。
  • 禁止用于非扩展相关的通用代码修改或测试操作。
  • 适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

SKILL.md

Extension Creator

Create AiderDesk extensions that extend functionality through events, commands, tools, agents, and modes.

When to Use

Use this skill when:

  • Building a new AiderDesk extension
  • Creating extension commands, tools, or event handlers
  • Implementing the Extension interface
  • Setting up extension metadata and documentation

Do not use when:

  • Simply activating an existing extension
  • Making general code changes unrelated to extensions
  • Running tests or builds

Rules

Rule: Choose installation target first

When: Starting extension creation

Then: Ask the user where to install the extension

If: Working inside the AiderDesk project (the current project is the aider-desk repository)

Then: Offer three options:

  1. Current Project — Install to .aider-desk/extensions/ in the current project (project-scoped)
  2. Global — Install to ~/.aider-desk/extensions/ (available in all projects)
  3. In-Repo — Create inside packages/extensions/extensions/ (ships with AiderDesk app)

If: Working outside the AiderDesk project

Then: Offer two options:

  1. Current Project — Install to .aider-desk/extensions/ in the current project (project-scoped)
  2. Global — Install to ~/.aider-desk/extensions/ (available in all projects)

Must: Wait for user's choice before proceeding. The chosen target determines the entire workflow.

Reference: references/install-targets.md for full details on each target.

Rule: Follow the correct flow for the chosen target

When: User has chosen an installation target

If: Target is Current Project or Global

Then: Follow the Project / Global Flow:

  1. Determine extension type (single-file or folder)
  2. Create extension file(s) in the target directory (.aider-desk/extensions/ or ~/.aider-desk/extensions/)
  3. Implement Extension interface methods
  4. Export metadata and default class
  5. Verify the extension loads (auto-discovered, no registry needed)

If: Target is In-Repo

Then: Follow the In-Repo Flow:

  1. Determine extension type (single-file or folder)
  2. Create extension file(s) in packages/extensions/extensions/
  3. Implement Extension interface methods
  4. Export metadata and default class
  5. Register in packages/extensions/extensions.json
  6. Document in docs-site/docs/extensions/examples.md
  7. Install npm dependencies if folder extension
  8. Verify with type checking

Rule: Determine extension type

When: Creating extension files (after target is chosen)

Then: Check if extension needs npm dependencies or multiple files

If: Extension needs dependencies or multiple files

Then: Create folder extension

If: Extension is simple with no dependencies

Then: Create single-file extension

Rule: Implement Extension interface

When: Creating extension file

Then: Implement required methods from Extension interface

Must: Define static metadata property on the class with name, version, description, author, capabilities

Must: Export class as default (e.g., export default class MyExtension implements Extension)

Never: Use @/ imports in extension files

Rule: Add UI components when needed

When: Extension needs to display UI elements in task page placements

Then: Implement getUIComponents() method

Must: Return array of UIComponentDefinition objects with id, placement, jsx

Must: Define components as JSX strings or load from.jsx files

If: Component needs data, set loadData: true and implement getUIExtensionData()

If: Component triggers actions, implement executeUIExtensionAction()

Rule: Add config component for extension settings

When: Extension needs user-configurable settings (shown in gear icon dialog)

Then: Implement three methods: getConfigComponent(), getConfigData(), saveConfigData()

Must: Return JSX string from getConfigComponent() — use external.jsx file for components > 20 lines

Must: Load/merge defaults in getConfigData(), persist merged data in saveConfigData()

Must: Store config file in extension directory via join(__dirname, 'config.json')

Must: Use ui.* components (ui.Input, ui.Checkbox, etc.) instead of raw HTML elements

Should: Avoid inner state (useState/useEffect) for simple form fields — read directly from config prop, call updateConfig on change. Only use local state for derived values or transient UI state.

Never: Use 'extension-settings' placement — it was removed; use the dedicated config API instead

Rule: Update registry and docs (In-Repo only)

When: Target is In-Repo and extension file is created

Then: Add entry to packages/extensions/extensions.json

Must: Include id, name, description, file or folder path, type, capabilities

Must: Set hasDependencies: true for folder extensions

Then: Add entry to docs-site/docs/extensions/examples.md table

Must: Include extension name, description, capabilities, and type

When: Target is Project or Global

Then: Do NOT modify extensions.json or examples.md — these are only for built-in extensions

Rule: Use proper TypeScript config for folders

When: Creating folder extension

Then: Include tsconfig.json with module: ES2020+

Must: Include package.json with name, version, main, dependencies

Rule: Store config in extension directory

When: Extension needs persistent config

Then: Store config files in extension directory

Never: Store config outside extension directory

Process Overview

For Project / Global targets:

  1. Ask user: Current Project or Global?
  2. Determine extension type (single-file or folder)
  3. Create extension file or directory structure in target dir
  4. Implement Extension interface methods
  5. Export metadata and default class
  6. Verify extension loads (auto-discovered)

Between steps 3 and 5:

  • If extension needs config storage, create config.ts (or use inline getConfigData/saveConfigData)
  • If extension has a settings UI (config component), create ConfigComponent.jsx and implement the three config methods
  • If extension needs logging, create logger.ts
  • If extension needs constants, create constants.ts
  • If extension has placement-based UI components, create.jsx files for components (recommended for components > 20 lines)

For In-Repo target:

  1. Confirm user wants In-Repo (only available in aider-desk project)
  2. Determine extension type (single-file or folder)
  3. Create extension file or directory structure in packages/extensions/extensions/
  4. Implement Extension interface methods
  5. Export metadata and default class
  6. Register in packages/extensions/extensions.json
  7. Document in docs-site/docs/extensions/examples.md
  8. Run npm install in packages/extensions/ (folder extensions)
  9. Verify with type checking

Between steps 3 and 5:

  • Same optional files as Project/Global flow above

Preconditions

Before using this skill, verify:

  • Installation target has been chosen by the user
  • Extension purpose and required capabilities are clear
  • Extension type (single-file or folder) is determined
  • Extension interface and types are understood

If any precondition fails:

Postconditions

After completing this skill, verify:

  • Extension implements Extension interface correctly
  • Static metadata property on the class includes all required fields (name, version)
  • Default export is the extension class
  • No @/ imports used
  • If In-Repo: extensions.json updated correctly
  • If In-Repo: docs-site/docs/extensions/examples.md updated
  • If In-Repo: Type checking passes
  • Extension loads without errors
  • Extension appears in extensions list
  • Extension capabilities work as expected

Success metrics:

  • Extension loads without errors
  • Extension appears in extensions list
  • Extension capabilities work as expected

Common Situations

Situation: Extension needs to handle events

Pattern:

  • When: Extension needs to modify agent behavior
  • Then: Implement event handler methods (onAgentStarted, onToolCalled, etc.)
  • Return: Partial event object to modify behavior

Situation: Extension needs to register commands

Pattern:

  • When: Extension provides slash commands
  • Then: Implement getCommands() method
  • Return: Array of CommandDefinition objects

Situation: Extension needs to add UI components

Pattern:

  • When: Extension needs to display information in UI
  • Then: Implement getUIComponents() method
  • Return: Array of UIComponentDefinition objects
  • Use: JSX strings or external.jsx files
  • Load data: Implement getUIExtensionData() if component needs data
  • Handle actions: Implement executeUIExtensionAction() for user interactions

Situation: Extension needs to log messages

Pattern:

  • If: Debug/internal logging (developer diagnostics, not shown to users)
  • Then: Use context.log(message, type) — logs to backend console only
  • If: User-visible output (showing results, status, timing info in the chat)
  • Then: Use context.getTaskContext()?.addLogMessage(level, message) — displays in task's chat UI
  • When ambiguous: If the user says "log", "show", "display", or "report" something, default to addLogMessage (user-visible). Use context.log only for internal diagnostics.
  • Note: context.log is always available; getTaskContext() returns null outside a task, so always use optional chaining (?.)

Situation: Extension needs to store or retrieve memories

Pattern:

  • When: Extension wants to persist knowledge across tasks (user preferences, code patterns, architectural decisions)
  • Then: Use context.getMemoryContext() to access the Memory API
  • Check: Always call isMemoryEnabled() before using memory operations
  • Store: memory.storeMemory(projectId, taskId, type, content) — returns the created memory ID
  • Retrieve: memory.retrieveMemories(projectId, query, limit?) — returns semantically similar memories
  • Types: Use MemoryEntryType enum ('task', 'user-preference', 'code-pattern')
  • Note: Works outside of project/task scope — pass empty strings for projectId/taskId if not applicable
  • Example: ` async onAgentFinished(event: AgentFinishedEvent, context: ExtensionContext) {const memory = context.getMemoryContext(); if (!memory.isMemoryEnabled()) return; const projectId = context.getProjectDir(); const taskId = context.getTaskContext()?.data.id?? ''; await memory.storeMemory(projectId, taskId, 'code-pattern', 'Always use clsx for conditional classes'); const memories = await memory.retrieveMemories(projectId, 'React class naming'); context.log(Found ${memories.length} relevant memories, 'info');} `

Situation: Extension needs config storage

Pattern:

  • Check: Extension needs persistent settings
  • If yes: Create config.ts with loadConfig and saveConfig functions
  • Store: Config files in extension directory

Situation: Extension needs a settings UI (config component)

Pattern:

  • When: Extension has user-configurable options that should appear in the Settings dialog
  • Then: Implement getConfigComponent(), getConfigData(), saveConfigData() methods
  • JSX: Return a .jsx file content via readFileSync(join(__dirname, './ConfigComponent.jsx'), 'utf-8')
  • Props: Component receives {config, updateConfig, ui, icons, models, providers,...}
  • Flow: Dialog opens → loads data via getConfigData → renders JSX with props → user edits → Save calls saveConfigData
  • Reference: config-components.md for full guide and examples

References

Target Selection

Flows

Technical Reference (all targets)

Assets

适合场景

01

用户想查找某类 Agent Skill 时

02

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

03

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

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

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

能力 4

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

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

平台分布

Codex

35.93%
按下载量换算54

Claude

30.87%
按下载量换算46

Cursor

18.14%
按下载量换算27

Gemini CLI

9.52%
按下载量换算14

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

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

安装前确认

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

来源信息

继续浏览同类 Skills