Install
openclaw skills install interactive-skills-platform-mvp设计并落地 Skills Web 平台 MVP,让非技术用户无需 CLI 即可使用 SKILL.md 能力。 用于“skills 平台”“skill 网页化”“interactive skills platform”“上传 SKILL.md 生成 UI” “对话式执行 skill”等需求,输出可执行的架构方案、API 设计、分阶段清单、验收与风险计划。
openclaw skills install interactive-skills-platform-mvp当用户出现以下诉求时启用本 skill:
在一次会话内,默认交付以下内容(可按用户要求裁剪):
Status: Draft Created: 2026-03-06 Repo: skills-ai-page (Monorepo)
Skills 创作者创作了有用的 skills(Claude Code/OpenClaw),但这些 skills 只能在命令行工具中运行,只有技术用户能用。创作者希望让更多非技术用户也能使用自己的 skills,从而扩大 skills 的影响力和价值。
WHO: Skills 创作者
SITUATION:
PROBLEM: Skills 的传播和使用受限于技术门槛 - 潜在用户装不好 Claude Code/OpenClaw,创作者的作品无法触达非技术用户
IMPACT:
目前没有 .features/ 目录,这是新项目。
Functional Job:
Social Job:
Emotional Job:
创建一个 Web 平台,用户上传 Claude Code 标准的 SKILL.md 文件,平台使用 Claude API 分析 skill 并生成交互界面,通过 Claude Agent SDK 执行 skills。
核心特性:
Monorepo 结构:
skills-ai-page/
├── frontend/ # React + TypeScript
│ ├── src/
│ │ ├── components/
│ │ │ ├── Chat/ # 对话界面
│ │ │ ├── SkillUpload/ # 上传 skills
│ │ │ ├── DynamicUI/ # 动态 UI 组件
│ │ │ │ ├── ProgressBar.tsx
│ │ │ │ ├── LinkOutput.tsx
│ │ │ │ └── TextOutput.tsx
│ │ │ └── SkillList/ # Skills 列表
│ │ ├── pages/
│ │ ├── hooks/
│ │ └── store/ # Zustand 状态管理
│ └── package.json
├── backend/ # Python + FastAPI
│ ├── app/
│ │ ├── api/
│ │ │ ├── skills.py # Skills CRUD
│ │ │ ├── chat.py # 对话接口
│ │ │ └── execute.py # 执行 skills
│ │ ├── services/
│ │ │ ├── skill_analyzer.py # Claude 分析 SKILL.md
│ │ │ ├── agent_executor.py # Claude Agent SDK 执行
│ │ │ └── ui_generator.py # 生成 UI 配置
│ │ └── storage/
│ │ └── file_storage.py # 文件系统存储
│ ├── skills/ # Skills 存储目录
│ │ ├── felo-search/
│ │ │ ├── SKILL.md
│ │ │ └── metadata.json
│ │ └── felo-slides/
│ │ ├── SKILL.md
│ │ └── metadata.json
│ └── requirements.txt
└── README.md
用户上传 SKILL.md:
skills/{skill-name}/SKILL.mdmetadata.json(创建时间、skill 名称等)文件存储结构:
skills/
├── felo-search/
│ ├── SKILL.md
│ └── metadata.json
└── felo-slides/
├── SKILL.md
└── metadata.json
metadata.json 格式:
{
"name": "felo-search",
"description": "Real-time web search",
"created_at": "2026-03-06T10:00:00Z",
"author": "anonymous",
"ui_config": {
"type": "chat",
"supports_progress": false,
"output_types": ["text", "markdown"]
}
}
调用 Claude API 分析:
Prompt 示例:
分析以下 SKILL.md,提取:
1. Skill 的功能描述(一句话)
2. 需要的输入参数(JSON 格式)
3. 需要的 UI 类型(chat/progress/link)
4. 预期输出类型(text/file/url)
SKILL.md:
{skill_content}
返回 JSON 格式。
返回示例:
{
"description": "Real-time web search with AI-generated answers",
"parameters": [
{
"name": "query",
"type": "string",
"description": "Search query",
"required": true
}
],
"ui_type": "chat",
"supports_progress": false,
"output_types": ["text", "markdown"]
}
用户点击"使用这个 skill":
对话流程示例(felo-search):
AI: 这个 skill 可以帮你进行实时网络搜索,你想搜索什么?
User: 东京今天天气
AI: 好的,正在搜索"东京今天天气"...
[调用 skill 执行]
AI: [展示搜索结果]
对话流程示例(felo-slides):
AI: 这个 skill 可以帮你生成 PPT,你想生成什么主题的 PPT?
User: React 入门教程,5 页
AI: 好的,正在生成"React 入门教程"PPT,大约需要 5-10 分钟...
[显示进度条]
AI: PPT 生成完成
根据 skill 的 ui_config 渲染不同的 UI:
A) 基础对话(默认):
B) 进度展示:
C) 链接输出:
前端组件:
function DynamicUI({ uiConfig, data }) {
if (uiConfig.supports_progress && data.status === "running") {
return <ProgressBar progress={data.progress} />;
}
if (uiConfig.output_types.includes("url")) {
return <LinkOutput url={data.url} />;
}
return <TextOutput content={data.content} />;
}
后端使用 Claude Agent SDK 执行:
from claude_agent_sdk import Agent
async def execute_skill(skill_name: str, parameters: dict):
# 读取 SKILL.md
skill_path = f"skills/{skill_name}/SKILL.md"
with open(skill_path, "r", encoding="utf-8") as f:
skill_content = f.read()
# 创建 Agent
agent = Agent(skill_content=skill_content)
# 执行
result = await agent.execute(parameters)
return result
执行流程:
| UI 类型 | 用途 | 示例 Skill |
|---|---|---|
| 对话式交互 | 文本输入/输出 | felo-search |
| 进度展示 | 长时间任务状态 | felo-slides |
| 链接输出 | URL 结果 | felo-slides |
不支持(后面迭代):
为什么选择对话式交互 + 动态 UI?
为什么选择 Python + FastAPI?
为什么选择文件存储而不是数据库?
为什么选择 Monorepo?