/install astrbot-plugin-dev-skill
AstrBot Plugin Development
Use this skill to write AstrBot plugins in a reviewer-first way: align with astr-plugin-reviewer hard checks, then follow the current AstrBot repository APIs and docs.
Start Here
Before writing code, always read these two references first:
- references/reviewer-checklist.md: hard constraints from
astr-plugin-reviewerand plugin-market submission checks. - references/project-structure.md: required files, metadata rules, local dev flow, and publishing expectations.
Then load only the references you need:
- references/core-api.md: imports, decorators, handler signatures, hook constraints, platform compatibility.
- references/advanced-features.md: config schema, session control, LLM tools, direct LLM calls, agents, and T2I.
- references/message-components.md: message-chain composition, passive replies, and proactive messages.
- references/patterns.md: reviewer-friendly implementation patterns, persistence, async networking, and platform access.
Default Workflow
- Create or verify
main.pyandmetadata.yamlfirst. - Treat
metadata.yamlas the source of truth for plugin identity. Preferdescplusrepo, and never keep bothdescanddescription. - In
main.py, define a class that inheritsStar. Prefer AstrBot's auto-discovery; do not introduce the deprecated@registerdecorator unless you are maintaining old code. - Import
filterexactly withfrom astrbot.api.event import filterto avoid reviewer failures and naming confusion. - Import the logger exactly with
from astrbot.api import logger. - Keep network I/O async. Prefer
httpxoraiohttp; do not userequests, blocking sleeps, or other blocking network calls. - If the plugin needs persistent files, prefer
StarTools.get_data_dir(). It returns aPath. - If you implement LLM hooks, LLM tools, direct LLM calls, or agents, follow the exact signatures and restrictions in references/advanced-features.md.
- Before finishing, run a self-check against references/reviewer-checklist.md. If the user wants marketplace publishing, also ensure the publish JSON matches
metadata.yamlexactly.
Minimal Template
from pathlib import Path
from astrbot.api import logger
from astrbot.api.event import AstrMessageEvent, filter
from astrbot.api.star import Context, Star, StarTools
class MyPlugin(Star):
def __init__(self, context: Context):
super().__init__(context)
self.data_dir: Path = StarTools.get_data_dir()
@filter.command("helloworld")
async def helloworld(self, event: AstrMessageEvent):
"""回复一个简单问候。"""
logger.info(f"helloworld triggered by {event.get_sender_id()}")
yield event.plain_result(f"Hello, {event.get_sender_name()}!")
async def terminate(self):
"""Called when the plugin is unloaded or disabled."""
Note: The @register decorator is deprecated in newer versions of AstrBot. Please use metadata.yaml to define plugin metadata. AstrBot automatically detects the plugin class inheriting from Star.
Core Workflows
1. Project Setup and Metadata
A complete plugin requires metadata.yaml for identification, requirements.txt for dependencies, and optionally logo.png, _conf_schema.json, and a README.md.
- Plugin names should start with
astrbot_plugin_, be lowercase, have no spaces, and be short. - See references/project-structure.md for mandatory files, dev environment setup, and publishing.
2. Registering Commands and Filters
Commands are registered using @filter.command(name). AstrBot auto-parses command parameters by type hints. You can also use command groups, command aliases, and filter by event type, platform, or user permission.
- See references/core-api.md for full list of filters, hooks, the platform compatibility matrix, and event propagation control.
3. Handling Messages and Responses
AstrBot uses a message-chain system. You can respond with plain text, images, or a mix of components. Proactive messages are supported via unified_msg_origin and MessageChain.
- See references/message-components.md for how to build and send messages.
4. Advanced Integrations
- Configuration: Use
_conf_schema.jsonfor user settings. - LLM Tools: Register tools via
@filter.llm_toolorFunctionTool. - LLM Direct Calls: Use
self.context.llm_generate()to call LLMs directly. - Agent / Multi-Agent: Use
self.context.tool_loop_agent()for tool-loop agents. - Stateful Interaction: Use
session_waiterfor multi-step prompts with custom session filters. - T2I: Render text or HTML/Jinja2 templates to images.
- Conversation & Persona Managers: Access LLM conversation history and persona settings when needed.
See references/advanced-features.md for examples.
Elegant Design Patterns
Follow these patterns for robust, user-friendly plugins:
- Use unified logging via
from astrbot.api import logger. - Handle errors gracefully to avoid bot crashes.
- Use KV storage or the plugin data directory for persistence.
- Ensure all I/O operations are non-blocking.
- Access platform instances, loaded plugins, and protocol-level APIs only when necessary.
See references/patterns.md for detailed code patterns.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install astrbot-plugin-dev-skill - 安装完成后,直接呼叫该 Skill 的名称或使用
/astrbot-plugin-dev-skill触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
AstrBot plugin dev skill 是什么?
Guide for developing AstrBot plugins that match the AstrBot main repo, pass astr-plugin-reviewer checks, and cover commands, filters, hooks, LLM integrations... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 93 次。
如何安装 AstrBot plugin dev skill?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install astrbot-plugin-dev-skill」即可一键安装,无需额外配置。
AstrBot plugin dev skill 是免费的吗?
是的,AstrBot plugin dev skill 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
AstrBot plugin dev skill 支持哪些平台?
AstrBot plugin dev skill 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 AstrBot plugin dev skill?
由 若月千鸮(@camera-2018)开发并维护,当前版本 v1.0.0。